summaryrefslogtreecommitdiffstats
path: root/zpu/hdl/zpu3
diff options
context:
space:
mode:
Diffstat (limited to 'zpu/hdl/zpu3')
-rw-r--r--zpu/hdl/zpu3/src/.cvsignore1
-rw-r--r--zpu/hdl/zpu3/src/build.xml114
-rw-r--r--zpu/hdl/zpu3/src/clocks.vhd246
-rw-r--r--zpu/hdl/zpu3/src/ddr_bridge.vhd203
-rw-r--r--zpu/hdl/zpu3/src/dmips_ram.vhd3824
-rw-r--r--zpu/hdl/zpu3/src/dualport_ram.vhd4996
-rw-r--r--zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd5012
-rw-r--r--zpu/hdl/zpu3/src/helloworld_ram.vhd3345
-rw-r--r--zpu/hdl/zpu3/src/ic300.bitgen27
-rw-r--r--zpu/hdl/zpu3/src/ic300.lso1
-rw-r--r--zpu/hdl/zpu3/src/ic300.ucf146
-rw-r--r--zpu/hdl/zpu3/src/ic300.vhd144
-rw-r--r--zpu/hdl/zpu3/src/ic300_config.vhd20
-rw-r--r--zpu/hdl/zpu3/src/ic300pkg.vhd88
-rw-r--r--zpu/hdl/zpu3/src/io.vhd95
-rw-r--r--zpu/hdl/zpu3/src/log.txt156
-rw-r--r--zpu/hdl/zpu3/src/niltrace.vhd26
-rw-r--r--zpu/hdl/zpu3/src/sim_fpga_top.vhd127
-rw-r--r--zpu/hdl/zpu3/src/status.txt67
-rw-r--r--zpu/hdl/zpu3/src/testlut.vhd106
-rw-r--r--zpu/hdl/zpu3/src/timer.vhd157
-rw-r--r--zpu/hdl/zpu3/src/trace.vhd80
-rw-r--r--zpu/hdl/zpu3/src/txt_util.vhd586
-rw-r--r--zpu/hdl/zpu3/src/xilinx_dualport.vhd1482
-rw-r--r--zpu/hdl/zpu3/src/xmake.filelist5
-rw-r--r--zpu/hdl/zpu3/src/xmake.xst53
-rw-r--r--zpu/hdl/zpu3/src/zpu_config.vhd25
-rw-r--r--zpu/hdl/zpu3/src/zpu_pipelined.vhd852
-rw-r--r--zpu/hdl/zpu3/src/zpu_top.vhd421
-rw-r--r--zpu/hdl/zpu3/src/zpu_top_medium.vhd768
-rw-r--r--zpu/hdl/zpu3/src/zpuio.vhd180
-rw-r--r--zpu/hdl/zpu3/src/zpupkg.vhd130
32 files changed, 23483 insertions, 0 deletions
diff --git a/zpu/hdl/zpu3/src/.cvsignore b/zpu/hdl/zpu3/src/.cvsignore
new file mode 100644
index 0000000..760be11
--- /dev/null
+++ b/zpu/hdl/zpu3/src/.cvsignore
@@ -0,0 +1 @@
+xilinx_device_details.xml
diff --git a/zpu/hdl/zpu3/src/build.xml b/zpu/hdl/zpu3/src/build.xml
new file mode 100644
index 0000000..e1b268a
--- /dev/null
+++ b/zpu/hdl/zpu3/src/build.xml
@@ -0,0 +1,114 @@
+<!--
+
+FIX!!! start /b /wait /belownormal does not propagate return code..
+-->
+<project name="ZPU3" default="all" basedir=".">
+ <property name="chipname" value="ic300"/>
+ <property name="packagetype" value="xc3s400-ft256-4"/>
+
+
+ <description>eCosBoard firmware build file</description>
+
+ <target name="setuplibs">
+ <!-- N/A yet
+ <copy todir="../src">
+ <fileset dir="..\fpgalib\" includes="foo_top.ngc" />
+ </copy>
+ -->
+ </target>
+
+ <target name="setup">
+ <mkdir dir="..\reports"/>
+ <mkdir dir="..\syn"/>
+ <mkdir dir="..\ngo"/>
+ <mkdir dir="..\output"/>
+ <mkdir dir="..\tmp"/>
+ <mkdir dir="..\xst"/>
+ </target>
+
+ <target name="clean">
+ <delete dir="..\reports"/>
+ <delete dir="..\syn"/>
+ <delete dir="..\ngo"/>
+ <delete dir="..\output"/>
+ <delete dir="..\tmp"/>
+ <delete dir="..\xst"/>
+ </target>
+
+ <target name="synthesis" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c xst -intstyle ise -ifn xmake.xst -ofn ..\reports\1_synthesis.txt"/>
+ </exec>
+ </target>
+
+
+ <target name="translate" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c ngdbuild -intstyle ise -dd ..\ngo -uc ${chipname}.ucf -a -p ${packagetype} ..\syn\${chipname}.ngc ..\ngo\${chipname}.ngd"/>
+ </exec>
+ <move tofile="..\reports\2_translate.txt">
+ <fileset dir="..\ngo" includes="${chipname}.bld"/>
+ </move>
+ </target>
+
+ <target name="mapping" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c map -intstyle ise -p ${packagetype} -ol high -timing -detail -cm area -ignore_keep_hierarchy -pr b -k 6 -r -c 100 -tx off -o ..\ngo\${chipname}_map.ncd ..\ngo\${chipname}.ngd ..\ngo\${chipname}.pcf"/>
+ </exec>
+ <move tofile="..\reports\3_mapping.txt">
+ <fileset dir="..\ngo" includes="${chipname}_map.mrp"/>
+ </move>
+ </target>
+
+
+ <target name="placeandroute" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c par -w -intstyle ise -ol high -t 1 ..\ngo\${chipname}_map.ncd ..\ngo\${chipname}.ncd ..\ngo\${chipname}.pcf"/>
+ </exec>
+ <move tofile="..\reports\4_placeandroute.txt">
+ <fileset dir="..\ngo" includes="${chipname}.par"/>
+ </move>
+ <move tofile="..\reports\5_pads.txt">
+ <fileset dir="..\ngo" includes="${chipname}_pad.txt"/>
+ </move>
+ </target>
+
+
+ <target name="gentime" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c trce -intstyle ise -v 3 -l 3 -a -u 100 ..\ngo\${chipname}.ncd -o ..\reports\timing.twr ..\ngo\${chipname}.pcf"/>
+ </exec>
+ <delete file="..\reports\6_timing.txt"/>
+ <move tofile="..\reports\6_timing.txt">
+ <fileset dir="..\reports" includes="timing.twr"/>
+ </move>
+ </target>
+
+
+ <target name="genbit" depends="setup">
+ <exec executable="cmd" failonerror="true">
+ <arg line="/c bitgen -intstyle ise -w -f ${chipname}.bitgen ..\ngo\${chipname}.ncd"/>
+ </exec>
+ <move tofile="..\reports\7_bitgen.txt">
+ <fileset dir="..\ngo" includes="${chipname}.bgn"/>
+ </move>
+ </target>
+
+ <target name="copyfiles" depends="setup">
+ <copy todir="../output">
+ <fileset dir="..\ngo" includes="${chipname}.bin"/>
+ </copy>
+ <!--
+ <copy tofile="${workspace_loc}\firmware\board\xeddvifpgadata.rawdata">
+ <fileset dir="..\ngo" includes="${chipname}.bin"/>
+ </copy>
+ -->
+ </target>
+
+
+ <target name="all" depends="setuplibs,synthesis,translate,mapping,placeandroute,gentime,genbit,copyfiles">
+
+ </target>
+
+
+</project> \ No newline at end of file
diff --git a/zpu/hdl/zpu3/src/clocks.vhd b/zpu/hdl/zpu3/src/clocks.vhd
new file mode 100644
index 0000000..a352b3c
--- /dev/null
+++ b/zpu/hdl/zpu3/src/clocks.vhd
@@ -0,0 +1,246 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.vcomponents.all;
+
+entity clocks is
+ port ( areset : in std_logic;
+ cpu_clk_p : in std_logic;
+ sdr_clk_fb_p : in std_logic;
+ cpu_clk : out std_logic;
+ cpu_clk_2x : out std_logic;
+ cpu_clk_4x : out std_logic;
+ ddr_in_clk : out std_logic;
+ ddr_in_clk_2x : out std_logic;
+ locked : out std_logic_vector(2 downto 0));
+end clocks;
+
+architecture behave of clocks is
+
+signal low : std_logic;
+
+signal cpu_clk_in : std_logic;
+signal sdr_clk_fb_in : std_logic;
+
+signal dcm_cpu1 : std_logic;
+signal dcm_cpu2 : std_logic;
+signal dcm_cpu2_dum : std_logic;
+signal dcm_cpu4 : std_logic;
+signal dcm_ddr2 : std_logic;
+signal dcm_ddr2_2x : std_logic;
+
+signal cpu_clk_int : std_logic;
+signal cpu_clk_2x_int : std_logic;
+signal cpu_clk_2x_dum_int : std_logic;
+signal cpu_clk_4x_int : std_logic;
+signal ddr_in_clk_int : std_logic;
+signal ddr_in_clk_2x_int : std_logic;
+
+signal dcm1_locked_del : std_logic;
+signal dcm2_locked_del : std_logic;
+signal dcm2_reset : std_logic;
+signal dcm3_reset : std_logic;
+
+signal locked_int : std_logic_vector(2 downto 0);
+signal del_addr : std_logic_vector(3 downto 0);
+
+begin
+
+ low <= '0';
+ del_addr <= "1111";
+
+ cpu_clk <= cpu_clk_int;
+ cpu_clk_2x <= cpu_clk_2x_int;
+ cpu_clk_4x <= cpu_clk_4x_int;
+ ddr_in_clk <= ddr_in_clk_int;
+ ddr_in_clk_2x <= ddr_in_clk_2x_int;
+ locked <= locked_int;
+
+
+ CPU_IBUFG:
+ IBUFG port map (
+ O => cpu_clk_in,
+ I => cpu_clk_p);
+
+ SDR_FB_IBUFG:
+ IBUFG port map (
+ O => sdr_clk_fb_in,
+ I => sdr_clk_fb_p);
+
+ dcm2_rst:
+ SRL16 generic map (
+ INIT => X"0000")
+ port map (
+ Q => dcm1_locked_del,
+ A0 => del_addr(0),
+ A1 => del_addr(1),
+ A2 => del_addr(2),
+ A3 => del_addr(3),
+ CLK => cpu_clk_int,
+ D => locked_int(0));
+
+ dcm2_reset <= not(dcm1_locked_del);
+
+ dcm3_rst:
+ SRL16 generic map (
+ INIT => X"0000")
+ port map (
+ Q => dcm2_locked_del,
+ A0 => del_addr(0),
+ A1 => del_addr(1),
+ A2 => del_addr(2),
+ A3 => del_addr(3),
+ CLK => cpu_clk_int,
+ D => locked_int(1));
+
+ dcm3_reset <= not(dcm2_locked_del);
+
+ cpu1_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 15.625, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_cpu1, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_cpu2, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(0), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => cpu_clk_int, -- DCM clock feedback
+ CLKIN => cpu_clk_in, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => areset); -- DCM asynchronous reset input
+
+ cpu2_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 7.8125, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_cpu2_dum, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_cpu4, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(1), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => cpu_clk_2x_dum_int, -- DCM clock feedback
+ CLKIN => cpu_clk_2x_int, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => dcm2_reset); -- DCM asynchronous reset input
+
+ ddr_read_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 7.8125, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift of NONE, FIXED or VARIABLE
+-- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 103, -- Amount of fixed phase shift from -255 to 255
+-- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_ddr2, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_ddr2_2x, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(2), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => ddr_in_clk_int, -- DCM clock feedback
+ CLKIN => sdr_clk_fb_in, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => dcm3_reset); -- DCM asynchronous reset input
+
+ cpu1:
+ BUFG port map (
+ I => dcm_cpu1,
+ O => cpu_clk_int);
+
+ cpu2:
+ BUFG port map (
+ I => dcm_cpu2,
+ O => cpu_clk_2x_int);
+
+ cpu2_dum:
+ BUFG port map (
+ I => dcm_cpu2_dum,
+ O => cpu_clk_2x_dum_int);
+
+ cpu4:
+ BUFG port map (
+ I => dcm_cpu4,
+ O => cpu_clk_4x_int);
+
+ ddr_clk:
+ BUFG port map (
+ I => dcm_ddr2,
+ O => ddr_in_clk_int);
+
+ ddr_clk_2x:
+ BUFG port map (
+ I => dcm_ddr2_2x,
+ O => ddr_in_clk_2x_int);
+
+end behave; \ No newline at end of file
diff --git a/zpu/hdl/zpu3/src/ddr_bridge.vhd b/zpu/hdl/zpu3/src/ddr_bridge.vhd
new file mode 100644
index 0000000..7dece76
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ddr_bridge.vhd
@@ -0,0 +1,203 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.vcomponents.all;
+
+library zylin;
+use zylin.ddr.all;
+
+library work;
+use work.phi_config.all;
+
+entity ddr_bridge is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_clk_4x : in std_logic;
+ ddr_in_clk : in std_logic;
+ ddr_in_clk_2x : in std_logic;
+
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_dout : inout std_logic_vector(15 downto 0);
+
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
+end ddr_bridge;
+
+architecture behave of ddr_bridge is
+
+signal refresh_en : std_logic;
+signal ddr_command_we : std_logic;
+signal ddr_command : std_logic_vector(15 downto 0);
+
+signal ddr_req : std_logic;
+signal ddr_req_adr : std_logic_vector(23 downto 1);
+signal ddr_rd_wr_n : std_logic;
+signal ddr_req_len : std_logic;
+
+signal ddr_read_en : std_logic;
+signal ddr_write_en : std_logic;
+signal ddr_data_read : std_logic_vector(31 downto 0);
+signal ddr_data_write : std_logic_vector(35 downto 0);
+
+signal ddr_read_smp : std_logic_vector(31 downto 0);
+signal ddr_read_delay : std_logic_vector(15 downto 0);
+
+signal ddr_write_smp : std_logic_vector(15 downto 0);
+signal ddr_addr_smp : std_logic_vector(15 downto 0);
+
+signal ddr_req_type_smp : std_logic;
+signal ddr_req_on : std_logic;
+signal ddr_req_off : std_logic;
+signal ddr_req_int : std_logic;
+
+constant Sim_Delay : time := 1.0 ns;
+
+begin
+
+ ddr_req_len <= '0';
+ ddr_data_write <= "0000" & ddr_write_smp & ddr_write_smp;
+ ddr_req_adr <= "0000000" & ddr_addr_smp;
+ ddr_rd_wr_n <= ddr_req_type_smp;
+ ddr_req <= ddr_req_int;
+
+ process(cpu_clk, areset) -- CPU writeable registers
+ begin
+ if areset = '1' then
+ refresh_en <= '0';
+ ddr_command_we <= '0';
+ ddr_command <= "0000000000000000";
+ ddr_write_smp <= "0000000000000000";
+ ddr_req_type_smp <= '0';
+ ddr_req_on <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+
+ if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Ctrl_Reg_Addr then
+ refresh_en <= cpu_din(0);
+ else
+ refresh_en <= refresh_en;
+ end if;
+
+ if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Mode_Reg_Addr then
+ ddr_command <= cpu_din;
+ ddr_command_we <= '1';
+ else
+ ddr_command <= ddr_command;
+ ddr_command_we <= '0';
+ end if;
+
+ if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr then
+ ddr_write_smp <= cpu_din;
+ else
+ ddr_write_smp <= ddr_write_smp;
+ end if;
+
+ if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Addr_Reg_Addr then
+ ddr_addr_smp <= cpu_din;
+ else
+ ddr_addr_smp <= ddr_addr_smp;
+ end if;
+
+ if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Req_Reg_Addr then
+ ddr_req_type_smp <= cpu_din(0);
+ ddr_req_on <= '1';
+ else
+ ddr_req_type_smp <= ddr_req_type_smp;
+ ddr_req_on <= '0';
+ end if;
+
+ end if;
+ end process;
+
+ -- CPU readable registers
+ cpu_dout <= ddr_read_delay when (cpu_re = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr) else "ZZZZZZZZZZZZZZZZ";
+
+ -- Capture data read from DDR
+ process(cpu_clk_2x, areset)
+ begin
+ if areset = '1' then
+ ddr_read_smp <= (others => '0');
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+ if ddr_read_en = '1' then
+ ddr_read_smp <= ddr_data_read after Sim_Delay;
+ else
+ ddr_read_smp <= ddr_read_smp after Sim_Delay;
+ end if;
+ end if;
+ end process;
+
+ -- Move captured data from DDR to cpu_clk domain (for better routing timing)
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ ddr_read_delay <= "0000000000000000";
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ ddr_read_delay <= ddr_read_smp(15 downto 0);
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset)
+ begin
+ if areset = '1' then
+ ddr_req_int <= '0';
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+ if ddr_req_on = '1' then
+ ddr_req_int <= '1' after Sim_Delay;
+ elsif ddr_read_en = '1' or ddr_write_en = '1' then
+ ddr_req_int <= '0' after Sim_Delay;
+ else
+ ddr_req_int <= ddr_req_int after Sim_Delay;
+ end if;
+ end if;
+ end process;
+
+
+ ddr_interface:
+ ddr_top port map(
+ areset => areset,
+ cpu_clk => cpu_clk,
+ cpu_clk_2x => cpu_clk_2x,
+ cpu_clk_4x => cpu_clk_4x,
+ ddr_in_clk => ddr_in_clk,
+ ddr_in_clk_2x => ddr_in_clk_2x,
+ ddr_command => ddr_command,
+ ddr_command_we => ddr_command_we,
+ refresh_en => refresh_en,
+ ddr_data_read => ddr_data_read,
+ ddr_data_write => ddr_data_write,
+ ddr_req => ddr_req,
+ ddr_req_adr => ddr_req_adr,
+ ddr_rd_wr_n => ddr_rd_wr_n,
+ ddr_req_len => ddr_req_len,
+ ddr_read_en => ddr_read_en,
+ ddr_write_en => ddr_write_en,
+ sdr_clk_p => sdr_clk_p,
+ sdr_clk_n_p => sdr_clk_n_p,
+ cke_q_p => cke_q_p,
+ cs_qn_p => cs_qn_p,
+ ras_qn_p => ras_qn_p,
+ cas_qn_p => cas_qn_p,
+ we_qn_p => we_qn_p,
+ dm_q_p => dm_q_p,
+ dqs_q_p => dqs_q_p,
+ ba_q_p => ba_q_p,
+ sdr_a_p => sdr_a_p,
+ sdr_d_p => sdr_d_p);
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/dmips_ram.vhd b/zpu/hdl/zpu3/src/dmips_ram.vhd
new file mode 100644
index 0000000..f472653
--- /dev/null
+++ b/zpu/hdl/zpu3/src/dmips_ram.vhd
@@ -0,0 +1,3824 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"800b0b0b",
+1 => x"0b0b8070",
+2 => x"0b0b80e5",
+3 => x"d00c3a0b",
+4 => x"0b0bbed7",
+5 => x"04000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"0bbfa72d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"0b0b0400",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"530b0b51",
+38 => x"04000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"0b0b5104",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"530b0b51",
+55 => x"04000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"0b0b5104",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c6040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a530b0b",
+82 => x"51040000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"0607530b",
+101 => x"0b510400",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"7171530b",
+105 => x"0b510406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"0b0b5104",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"530b0b51",
+125 => x"04000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"520b0b04",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"0505530b",
+138 => x"0b510400",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07530b0b",
+147 => x"51040000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"0b0b0400",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80e5",
+162 => x"bc738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88ac0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0ba3",
+171 => x"fa2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0ba4",
+179 => x"ca2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70540b0b",
+188 => x"71067309",
+189 => x"727405ff",
+190 => x"05060751",
+191 => x"51510400",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"0570540b",
+196 => x"0b710673",
+197 => x"09727405",
+198 => x"ff050607",
+199 => x"51515104",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80e5cc0c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"0b0b0400",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"0b0b0400",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"0571530b",
+250 => x"0b510400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"84803f80",
+257 => x"cef23f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"0b0b5104",
+267 => x"7381ff06",
+268 => x"73830609",
+269 => x"81058305",
+270 => x"1010102b",
+271 => x"0772fc06",
+272 => x"0c515104",
+273 => x"3c047272",
+274 => x"80728106",
+275 => x"ff050972",
+276 => x"06057110",
+277 => x"520b0b72",
+278 => x"0a100a53",
+279 => x"0b0b72e9",
+280 => x"38515153",
+281 => x"0b0b5104",
+282 => x"70700b0b",
+283 => x"80f5c008",
+284 => x"520b0b84",
+285 => x"0b720508",
+286 => x"70810651",
+287 => x"510b0b70",
+288 => x"f2387108",
+289 => x"81ff0680",
+290 => x"0c505004",
+291 => x"70700b0b",
+292 => x"80f5c008",
+293 => x"520b0b84",
+294 => x"0b720508",
+295 => x"700a100a",
+296 => x"70810651",
+297 => x"51510b0b",
+298 => x"70ed3873",
+299 => x"720c5050",
+300 => x"0480e5cc",
+301 => x"08802ea8",
+302 => x"38838080",
+303 => x"0b0b0b80",
+304 => x"f5c00c82",
+305 => x"a0800b0b",
+306 => x"0b80f5c4",
+307 => x"0c829080",
+308 => x"0b80f5d4",
+309 => x"0c0b0b80",
+310 => x"f5c80b80",
+311 => x"f5d80c04",
+312 => x"f8808080",
+313 => x"a40b0b0b",
+314 => x"80f5c00c",
+315 => x"f8808082",
+316 => x"800b0b0b",
+317 => x"80f5c40c",
+318 => x"f8808084",
+319 => x"800b80f5",
+320 => x"d40cf880",
+321 => x"8080940b",
+322 => x"80f5d80c",
+323 => x"f8808080",
+324 => x"9c0b80f5",
+325 => x"d00cf880",
+326 => x"8080a00b",
+327 => x"80f5dc0c",
+328 => x"04f23d0d",
+329 => x"600b0b80",
+330 => x"f5c40856",
+331 => x"5d82750c",
+332 => x"8059805a",
+333 => x"800b8f3d",
+334 => x"71101017",
+335 => x"70085957",
+336 => x"5d5b8076",
+337 => x"81ff067c",
+338 => x"832b5658",
+339 => x"520b0b0b",
+340 => x"76530b0b",
+341 => x"7b5198c6",
+342 => x"3f7d7f7a",
+343 => x"72077c72",
+344 => x"07717160",
+345 => x"8105415f",
+346 => x"5d5b5957",
+347 => x"557a8724",
+348 => x"80c1380b",
+349 => x"0b80f5c4",
+350 => x"087b1010",
+351 => x"71057008",
+352 => x"58515580",
+353 => x"7681ff06",
+354 => x"7c832b56",
+355 => x"58520b0b",
+356 => x"0b76530b",
+357 => x"0b7b5198",
+358 => x"853f7d7f",
+359 => x"7a72077c",
+360 => x"72077171",
+361 => x"60810541",
+362 => x"5f5d5b59",
+363 => x"5755877b",
+364 => x"25c13876",
+365 => x"7d0c7784",
+366 => x"1e0c7c80",
+367 => x"0c903d0d",
+368 => x"04707080",
+369 => x"f5cc3351",
+370 => x"0b0b70b2",
+371 => x"3880e5d8",
+372 => x"08700852",
+373 => x"0b0b520b",
+374 => x"0b0b7080",
+375 => x"2e9a3884",
+376 => x"720580e5",
+377 => x"d80c702d",
+378 => x"80e5d808",
+379 => x"7008520b",
+380 => x"0b520b0b",
+381 => x"0b70e838",
+382 => x"810b80f5",
+383 => x"cc345050",
+384 => x"0404700b",
+385 => x"0b80f5bc",
+386 => x"08802e8e",
+387 => x"380b0b0b",
+388 => x"0b800b80",
+389 => x"2e098106",
+390 => x"83385004",
+391 => x"0b0b80f5",
+392 => x"bc510b0b",
+393 => x"0bf3d93f",
+394 => x"50040470",
+395 => x"70028f05",
+396 => x"33520b0b",
+397 => x"0b0b718a",
+398 => x"2e893871",
+399 => x"51fccd3f",
+400 => x"5050048d",
+401 => x"51fcc53f",
+402 => x"7151fcc0",
+403 => x"3f505004",
+404 => x"cd3d0db6",
+405 => x"3d707084",
+406 => x"05520b0b",
+407 => x"088cab5d",
+408 => x"56a63d5f",
+409 => x"5d807570",
+410 => x"81055733",
+411 => x"765c5559",
+412 => x"0b730b79",
+413 => x"2e80ca38",
+414 => x"8f3d5c73",
+415 => x"a52e0981",
+416 => x"0680cf38",
+417 => x"79708105",
+418 => x"5b33540b",
+419 => x"0b7380e4",
+420 => x"2e81c838",
+421 => x"7380e424",
+422 => x"80d13873",
+423 => x"80e32ea8",
+424 => x"3880520b",
+425 => x"0ba5517a",
+426 => x"2d80520b",
+427 => x"0b73517a",
+428 => x"2d821959",
+429 => x"79708105",
+430 => x"5b33540b",
+431 => x"0b73ffbb",
+432 => x"3878800c",
+433 => x"b53d0d04",
+434 => x"7c841e83",
+435 => x"72053356",
+436 => x"5e578052",
+437 => x"0b0b7351",
+438 => x"7a2d8119",
+439 => x"7a708105",
+440 => x"5c335559",
+441 => x"0b73ff93",
+442 => x"38d73973",
+443 => x"80f32e09",
+444 => x"8106ffad",
+445 => x"387c841e",
+446 => x"7108595e",
+447 => x"56807733",
+448 => x"56560b74",
+449 => x"0b762e8d",
+450 => x"38811670",
+451 => x"1870335a",
+452 => x"555677f5",
+453 => x"38ff1655",
+454 => x"807625ff",
+455 => x"97387670",
+456 => x"81055833",
+457 => x"5880520b",
+458 => x"0b77517a",
+459 => x"2d811975",
+460 => x"ff175757",
+461 => x"59807625",
+462 => x"fefa3876",
+463 => x"70810558",
+464 => x"33588052",
+465 => x"0b0b7751",
+466 => x"7a2d8119",
+467 => x"75ff1757",
+468 => x"57590b75",
+469 => x"8024c738",
+470 => x"feda397c",
+471 => x"841e7108",
+472 => x"70719f2c",
+473 => x"59530b0b",
+474 => x"595e5680",
+475 => x"7524818d",
+476 => x"38757e7d",
+477 => x"58595580",
+478 => x"57740b77",
+479 => x"2e098106",
+480 => x"bc38b07c",
+481 => x"3402b905",
+482 => x"567b0b76",
+483 => x"2e9938ff",
+484 => x"16560b0b",
+485 => x"75337870",
+486 => x"81055a34",
+487 => x"8117577b",
+488 => x"762e0981",
+489 => x"06e93880",
+490 => x"7834767e",
+491 => x"ff720557",
+492 => x"58560b0b",
+493 => x"758024fe",
+494 => x"e538fdf8",
+495 => x"398a7536",
+496 => x"0b0b80d7",
+497 => x"b005540b",
+498 => x"0b733376",
+499 => x"70810558",
+500 => x"348a7535",
+501 => x"550b0b74",
+502 => x"802effad",
+503 => x"388a7536",
+504 => x"0b0b80d7",
+505 => x"b005540b",
+506 => x"0b733376",
+507 => x"70810558",
+508 => x"348a7535",
+509 => x"550b0b74",
+510 => x"c438ff8d",
+511 => x"3974520b",
+512 => x"0b76530b",
+513 => x"0bb53dff",
+514 => x"b8055192",
+515 => x"dc3fa43d",
+516 => x"0856fedd",
+517 => x"397080c1",
+518 => x"0b81c48c",
+519 => x"34800b81",
+520 => x"c5e40c70",
+521 => x"800c5004",
+522 => x"7070800b",
+523 => x"81c48c33",
+524 => x"520b0b52",
+525 => x"0b0b0b70",
+526 => x"80c12e98",
+527 => x"387181c5",
+528 => x"e4080781",
+529 => x"c5e40c80",
+530 => x"c20b81c4",
+531 => x"90347080",
+532 => x"0c505004",
+533 => x"810b81c5",
+534 => x"e4080781",
+535 => x"c5e40c80",
+536 => x"c20b81c4",
+537 => x"90347080",
+538 => x"0c505004",
+539 => x"70707070",
+540 => x"7570088a",
+541 => x"05530b0b",
+542 => x"530b0b81",
+543 => x"c48c3351",
+544 => x"0b0b7080",
+545 => x"c12e8c38",
+546 => x"73f13870",
+547 => x"800c5050",
+548 => x"505004ff",
+549 => x"72057081",
+550 => x"c4880831",
+551 => x"740c800c",
+552 => x"50505050",
+553 => x"04fc3d0d",
+554 => x"81c49408",
+555 => x"550b0b74",
+556 => x"802e8e38",
+557 => x"76750871",
+558 => x"0c81c494",
+559 => x"0856540b",
+560 => x"0b8c1553",
+561 => x"0b0b81c4",
+562 => x"8808520b",
+563 => x"0b8a518e",
+564 => x"e93f7380",
+565 => x"0c863d0d",
+566 => x"04fb3d0d",
+567 => x"77700856",
+568 => x"56b0530b",
+569 => x"0b81c494",
+570 => x"08520b0b",
+571 => x"7451a1ff",
+572 => x"3f850b8c",
+573 => x"170c850b",
+574 => x"8c160c75",
+575 => x"08750c81",
+576 => x"c4940854",
+577 => x"0b0b7380",
+578 => x"2e8c3873",
+579 => x"08750c81",
+580 => x"c4940854",
+581 => x"0b0b8c14",
+582 => x"530b0b81",
+583 => x"c4880852",
+584 => x"0b0b8a51",
+585 => x"8e943f84",
+586 => x"1508b738",
+587 => x"860b8c16",
+588 => x"0c881552",
+589 => x"0b0b8816",
+590 => x"08518d96",
+591 => x"3f81c494",
+592 => x"08700876",
+593 => x"0c540b0b",
+594 => x"8c157054",
+595 => x"0b0b540b",
+596 => x"0b8a520b",
+597 => x"0b730851",
+598 => x"8de03f73",
+599 => x"800c873d",
+600 => x"0d047508",
+601 => x"540b0bb0",
+602 => x"530b0b73",
+603 => x"520b0b75",
+604 => x"51a0fc3f",
+605 => x"73800c87",
+606 => x"3d0d04e1",
+607 => x"3d0db051",
+608 => x"93833f80",
+609 => x"0881c484",
+610 => x"0cb05192",
+611 => x"f83f8008",
+612 => x"81c4940c",
+613 => x"81c48408",
+614 => x"80080c80",
+615 => x"0b800884",
+616 => x"050c820b",
+617 => x"80088805",
+618 => x"0ca80b80",
+619 => x"088c050c",
+620 => x"9f530b0b",
+621 => x"0b0b80d7",
+622 => x"bc520b0b",
+623 => x"80089005",
+624 => x"51a0ac3f",
+625 => x"993d5c9f",
+626 => x"530b0b0b",
+627 => x"0b80d7dc",
+628 => x"520b0b7b",
+629 => x"51a0983f",
+630 => x"8a0b8182",
+631 => x"cc0c0b0b",
+632 => x"80e28051",
+633 => x"f8ea3f0b",
+634 => x"0b80d7fc",
+635 => x"51f8e13f",
+636 => x"0b0b80e2",
+637 => x"8051f8d8",
+638 => x"3f80e5e0",
+639 => x"08802e8a",
+640 => x"a1380b0b",
+641 => x"80d8ac51",
+642 => x"f8c63f0b",
+643 => x"0b80e280",
+644 => x"51f8bd3f",
+645 => x"80e5dc08",
+646 => x"520b0b0b",
+647 => x"0b80d8d8",
+648 => x"51f8ad3f",
+649 => x"8051b488",
+650 => x"3f800880",
+651 => x"f5ec0c81",
+652 => x"0b923d5c",
+653 => x"58800b80",
+654 => x"e5dc0825",
+655 => x"8383388e",
+656 => x"3d5d80c1",
+657 => x"0b81c48c",
+658 => x"34810b81",
+659 => x"c5e40c80",
+660 => x"c20b81c4",
+661 => x"9034825e",
+662 => x"835a9f53",
+663 => x"0b0b0b0b",
+664 => x"80d98852",
+665 => x"0b0b7a51",
+666 => x"9f853f81",
+667 => x"5f807b53",
+668 => x"0b0b7c52",
+669 => x"0b0b558c",
+670 => x"f43f8008",
+671 => x"752e0981",
+672 => x"06833881",
+673 => x"550b0b74",
+674 => x"81c5e40c",
+675 => x"7d705755",
+676 => x"0b0b7483",
+677 => x"25a63874",
+678 => x"101015fd",
+679 => x"0540a13d",
+680 => x"ffbc0553",
+681 => x"0b0b8352",
+682 => x"0b0b7551",
+683 => x"8b8c3f81",
+684 => x"1e705f70",
+685 => x"5755830b",
+686 => x"7524dc38",
+687 => x"7f540b0b",
+688 => x"74530b0b",
+689 => x"80f5f052",
+690 => x"0b0b81c4",
+691 => x"9c518af6",
+692 => x"3f81c494",
+693 => x"08700857",
+694 => x"57b0530b",
+695 => x"0b76520b",
+696 => x"0b75519e",
+697 => x"8a3f850b",
+698 => x"8c180c85",
+699 => x"0b8c170c",
+700 => x"7608760c",
+701 => x"81c49408",
+702 => x"550b0b74",
+703 => x"802e8a38",
+704 => x"7408760c",
+705 => x"81c49408",
+706 => x"558c1553",
+707 => x"0b0b81c4",
+708 => x"8808520b",
+709 => x"0b8a518a",
+710 => x"a13f8416",
+711 => x"08888c38",
+712 => x"860b8c17",
+713 => x"0c881652",
+714 => x"0b0b8817",
+715 => x"085189a2",
+716 => x"3f81c494",
+717 => x"08700877",
+718 => x"0c578c16",
+719 => x"70540b0b",
+720 => x"558a520b",
+721 => x"0b740851",
+722 => x"89f03f80",
+723 => x"c10b81c4",
+724 => x"90335656",
+725 => x"0b0b7575",
+726 => x"26a83880",
+727 => x"c3520b0b",
+728 => x"75518adb",
+729 => x"3f80087f",
+730 => x"2e87ff38",
+731 => x"81167081",
+732 => x"ff0681c4",
+733 => x"9033520b",
+734 => x"0b57550b",
+735 => x"0b747627",
+736 => x"da38797e",
+737 => x"29607072",
+738 => x"35704172",
+739 => x"72317087",
+740 => x"2972315e",
+741 => x"530b0b8a",
+742 => x"0581c48c",
+743 => x"3381c488",
+744 => x"085a520b",
+745 => x"0b520b0b",
+746 => x"58550b76",
+747 => x"80c12e87",
+748 => x"f03878f6",
+749 => x"38811858",
+750 => x"80e5dc08",
+751 => x"7825fd82",
+752 => x"388051b0",
+753 => x"eb3f8008",
+754 => x"81c4800c",
+755 => x"0b0b80d9",
+756 => x"a851f4fc",
+757 => x"3f0b0b80",
+758 => x"e28051f4",
+759 => x"f33f0b0b",
+760 => x"80d9b851",
+761 => x"f4ea3f0b",
+762 => x"0b80e280",
+763 => x"51f4e13f",
+764 => x"81c48808",
+765 => x"520b0b0b",
+766 => x"0b80d9f0",
+767 => x"51f4d13f",
+768 => x"85520b0b",
+769 => x"0b0b80da",
+770 => x"8c51f4c4",
+771 => x"3f81c5e4",
+772 => x"08520b0b",
+773 => x"0b0b80da",
+774 => x"a851f4b4",
+775 => x"3f81520b",
+776 => x"0b0b0b80",
+777 => x"da8c51f4",
+778 => x"a73f81c4",
+779 => x"8c33520b",
+780 => x"0b0b0b80",
+781 => x"dac451f4",
+782 => x"973f80c1",
+783 => x"520b0b0b",
+784 => x"0b80dae0",
+785 => x"51f4893f",
+786 => x"81c49033",
+787 => x"520b0b0b",
+788 => x"0b80dafc",
+789 => x"51f3f93f",
+790 => x"80c2520b",
+791 => x"0b0b0b80",
+792 => x"dae051f3",
+793 => x"eb3f81c4",
+794 => x"bc08520b",
+795 => x"0b0b0b80",
+796 => x"db9851f3",
+797 => x"db3f8752",
+798 => x"0b0b0b0b",
+799 => x"80da8c51",
+800 => x"f3ce3f81",
+801 => x"82cc0852",
+802 => x"0b0b0b0b",
+803 => x"80dbb451",
+804 => x"f3be3f0b",
+805 => x"0b80dbd0",
+806 => x"51f3b53f",
+807 => x"0b0b80db",
+808 => x"fc51f3ac",
+809 => x"3f81c494",
+810 => x"08700853",
+811 => x"0b0b560b",
+812 => x"0b80dc88",
+813 => x"51f3993f",
+814 => x"0b0b80dc",
+815 => x"a451f390",
+816 => x"3f81c494",
+817 => x"08847105",
+818 => x"08530b0b",
+819 => x"5d0b0b80",
+820 => x"dcd851f2",
+821 => x"fb3f8052",
+822 => x"0b0b0b0b",
+823 => x"80da8c51",
+824 => x"f2ee3f81",
+825 => x"c4940888",
+826 => x"71050853",
+827 => x"0b0b580b",
+828 => x"0b80dcf4",
+829 => x"51f2d93f",
+830 => x"82520b0b",
+831 => x"0b0b80da",
+832 => x"8c51f2cc",
+833 => x"3f81c494",
+834 => x"088c7105",
+835 => x"08530b0b",
+836 => x"590b0b80",
+837 => x"dd9051f2",
+838 => x"b73f9152",
+839 => x"0b0b0b0b",
+840 => x"80da8c51",
+841 => x"f2aa3f81",
+842 => x"c4940890",
+843 => x"05520b0b",
+844 => x"0b0b80dd",
+845 => x"ac51f298",
+846 => x"3f0b0b80",
+847 => x"ddc851f2",
+848 => x"8f3f0b0b",
+849 => x"80de8051",
+850 => x"f2863f81",
+851 => x"c4840870",
+852 => x"08530b0b",
+853 => x"570b0b80",
+854 => x"dc8851f1",
+855 => x"f33f0b0b",
+856 => x"80de9451",
+857 => x"f1ea3f81",
+858 => x"c4840884",
+859 => x"71050853",
+860 => x"0b0b550b",
+861 => x"0b80dcd8",
+862 => x"51f1d53f",
+863 => x"80520b0b",
+864 => x"0b0b80da",
+865 => x"8c51f1c8",
+866 => x"3f81c484",
+867 => x"08887105",
+868 => x"08530b0b",
+869 => x"560b0b80",
+870 => x"dcf451f1",
+871 => x"b33f8152",
+872 => x"0b0b0b0b",
+873 => x"80da8c51",
+874 => x"f1a63f81",
+875 => x"c484088c",
+876 => x"71050853",
+877 => x"0b0b5d0b",
+878 => x"0b80dd90",
+879 => x"51f1913f",
+880 => x"92520b0b",
+881 => x"0b0b80da",
+882 => x"8c51f184",
+883 => x"3f81c484",
+884 => x"08900552",
+885 => x"0b0b0b0b",
+886 => x"80ddac51",
+887 => x"f0f23f0b",
+888 => x"0b80ddc8",
+889 => x"51f0e93f",
+890 => x"7d520b0b",
+891 => x"0b0b80de",
+892 => x"d451f0dc",
+893 => x"3f85520b",
+894 => x"0b0b0b80",
+895 => x"da8c51f0",
+896 => x"cf3f7952",
+897 => x"0b0b0b0b",
+898 => x"80def051",
+899 => x"f0c23f8d",
+900 => x"520b0b0b",
+901 => x"0b80da8c",
+902 => x"51f0b53f",
+903 => x"7f520b0b",
+904 => x"0b0b80df",
+905 => x"8c51f0a8",
+906 => x"3f87520b",
+907 => x"0b0b0b80",
+908 => x"da8c51f0",
+909 => x"9b3f7e52",
+910 => x"0b0b0b0b",
+911 => x"80dfa851",
+912 => x"f08e3f81",
+913 => x"520b0b0b",
+914 => x"0b80da8c",
+915 => x"51f0813f",
+916 => x"7b520b0b",
+917 => x"0b0b80df",
+918 => x"c451eff4",
+919 => x"3f0b0b80",
+920 => x"dfe051ef",
+921 => x"eb3f7a52",
+922 => x"0b0b0b0b",
+923 => x"80e09851",
+924 => x"efde3f0b",
+925 => x"0b80e0b4",
+926 => x"51efd53f",
+927 => x"0b0b80e2",
+928 => x"8051efcc",
+929 => x"3f81c480",
+930 => x"0880f5ec",
+931 => x"08317080",
+932 => x"f5e80c52",
+933 => x"0b0b0b0b",
+934 => x"80e0ec51",
+935 => x"efb23f80",
+936 => x"f5e80856",
+937 => x"810b7625",
+938 => x"819d3880",
+939 => x"e5dc0870",
+940 => x"77bd84c0",
+941 => x"293580f5",
+942 => x"e00c7671",
+943 => x"3580f5e4",
+944 => x"0c768ddd",
+945 => x"297187e8",
+946 => x"293581c4",
+947 => x"980c5b0b",
+948 => x"0b80e0fc",
+949 => x"51eef93f",
+950 => x"80f5e008",
+951 => x"520b0b0b",
+952 => x"0b80e1ac",
+953 => x"51eee93f",
+954 => x"0b0b80e1",
+955 => x"b451eee0",
+956 => x"3f80f5e4",
+957 => x"08520b0b",
+958 => x"0b0b80e1",
+959 => x"ac51eed0",
+960 => x"3f81c498",
+961 => x"08520b0b",
+962 => x"0b0b80e1",
+963 => x"e451eec0",
+964 => x"3f0b0b80",
+965 => x"e28051ee",
+966 => x"b73f800b",
+967 => x"800ca13d",
+968 => x"0d040b0b",
+969 => x"80e28451",
+970 => x"f5de3976",
+971 => x"0856b053",
+972 => x"0b0b7552",
+973 => x"0b0b7651",
+974 => x"95b53f80",
+975 => x"c10b81c4",
+976 => x"90335656",
+977 => x"f88e390b",
+978 => x"0b80e2b4",
+979 => x"51ee813f",
+980 => x"0b0b80e2",
+981 => x"ec51edf8",
+982 => x"3f0b0b80",
+983 => x"e28051ed",
+984 => x"ef3f800b",
+985 => x"800ca13d",
+986 => x"0d04a13d",
+987 => x"ffb80552",
+988 => x"0b0b8051",
+989 => x"80dc3f9f",
+990 => x"530b0b0b",
+991 => x"0b80e38c",
+992 => x"520b0b7a",
+993 => x"5194e83f",
+994 => x"777881c4",
+995 => x"880c8117",
+996 => x"7081ff06",
+997 => x"81c49033",
+998 => x"520b0b58",
+999 => x"565af7db",
+1000 => x"39ff1570",
+1001 => x"77317e0c",
+1002 => x"59800b81",
+1003 => x"19595980",
+1004 => x"e5dc0878",
+1005 => x"25f58b38",
+1006 => x"f8873970",
+1007 => x"70738232",
+1008 => x"70307072",
+1009 => x"07802580",
+1010 => x"0c520b0b",
+1011 => x"520b0b50",
+1012 => x"50047070",
+1013 => x"70747671",
+1014 => x"530b0b54",
+1015 => x"0b0b520b",
+1016 => x"0b0b0b71",
+1017 => x"822e8338",
+1018 => x"83517181",
+1019 => x"2e9a3881",
+1020 => x"72269f38",
+1021 => x"71822eb8",
+1022 => x"3871842e",
+1023 => x"a9387073",
+1024 => x"0c70800c",
+1025 => x"50505004",
+1026 => x"80e40b81",
+1027 => x"c4880825",
+1028 => x"8b388073",
+1029 => x"0c70800c",
+1030 => x"50505004",
+1031 => x"83730c70",
+1032 => x"800c5050",
+1033 => x"50048273",
+1034 => x"0c70800c",
+1035 => x"50505004",
+1036 => x"81730c70",
+1037 => x"800c5050",
+1038 => x"50047074",
+1039 => x"74148205",
+1040 => x"710c800c",
+1041 => x"5004f73d",
+1042 => x"0d7b7d7f",
+1043 => x"61857205",
+1044 => x"70822b75",
+1045 => x"71057074",
+1046 => x"71708405",
+1047 => x"530b0b0c",
+1048 => x"5a5a5d5b",
+1049 => x"760c7980",
+1050 => x"f8180c79",
+1051 => x"86720552",
+1052 => x"0b0b5758",
+1053 => x"5a5a7676",
+1054 => x"249e3876",
+1055 => x"b329822b",
+1056 => x"79710551",
+1057 => x"530b0b76",
+1058 => x"73708405",
+1059 => x"550c8114",
+1060 => x"540b0b75",
+1061 => x"7425f038",
+1062 => x"7681cc29",
+1063 => x"19fc7105",
+1064 => x"088105fc",
+1065 => x"72050c7a",
+1066 => x"1970089f",
+1067 => x"a073050c",
+1068 => x"5856850b",
+1069 => x"81c4880c",
+1070 => x"75800c8b",
+1071 => x"3d0d0470",
+1072 => x"70700293",
+1073 => x"05335180",
+1074 => x"02840597",
+1075 => x"0533540b",
+1076 => x"0b520b0b",
+1077 => x"70732e88",
+1078 => x"3871800c",
+1079 => x"50505004",
+1080 => x"7081c48c",
+1081 => x"34810b80",
+1082 => x"0c505050",
+1083 => x"04f83d0d",
+1084 => x"7a7c5956",
+1085 => x"820b8319",
+1086 => x"55550b0b",
+1087 => x"74167033",
+1088 => x"75335b51",
+1089 => x"530b0b72",
+1090 => x"792e80cf",
+1091 => x"3880c10b",
+1092 => x"81168116",
+1093 => x"56565782",
+1094 => x"7525df38",
+1095 => x"ffa91770",
+1096 => x"81ff0655",
+1097 => x"590b7382",
+1098 => x"26833887",
+1099 => x"5581530b",
+1100 => x"0b7680d2",
+1101 => x"2e9e3877",
+1102 => x"520b0b75",
+1103 => x"5193b53f",
+1104 => x"80530b0b",
+1105 => x"72800825",
+1106 => x"8b388715",
+1107 => x"81c4880c",
+1108 => x"81530b0b",
+1109 => x"72800c8a",
+1110 => x"3d0d0472",
+1111 => x"81c48c34",
+1112 => x"827525ff",
+1113 => x"9538ffb4",
+1114 => x"39f93d0d",
+1115 => x"797b7d54",
+1116 => x"0b0b5872",
+1117 => x"59773079",
+1118 => x"70307072",
+1119 => x"079f2a73",
+1120 => x"71315a52",
+1121 => x"0b0b5977",
+1122 => x"0b795673",
+1123 => x"0c530b0b",
+1124 => x"73847305",
+1125 => x"0c540b0b",
+1126 => x"800c893d",
+1127 => x"0d04f93d",
+1128 => x"0d797b7d",
+1129 => x"7f56540b",
+1130 => x"0b520b0b",
+1131 => x"540b0b72",
+1132 => x"802ea638",
+1133 => x"70577158",
+1134 => x"a0733152",
+1135 => x"0b0b800b",
+1136 => x"7225a638",
+1137 => x"7770742b",
+1138 => x"5770732a",
+1139 => x"78752b07",
+1140 => x"56510b74",
+1141 => x"76530b0b",
+1142 => x"510b0b70",
+1143 => x"740c7184",
+1144 => x"150c7380",
+1145 => x"0c893d0d",
+1146 => x"04805677",
+1147 => x"72302b55",
+1148 => x"0b0b7476",
+1149 => x"530b0b51",
+1150 => x"e039fb3d",
+1151 => x"0d777955",
+1152 => x"5580560b",
+1153 => x"0b757524",
+1154 => x"b5388074",
+1155 => x"24a53880",
+1156 => x"530b0b73",
+1157 => x"520b0b74",
+1158 => x"5180f33f",
+1159 => x"8008540b",
+1160 => x"0b75802e",
+1161 => x"87388008",
+1162 => x"30540b0b",
+1163 => x"73800c87",
+1164 => x"3d0d0473",
+1165 => x"30768132",
+1166 => x"57540b0b",
+1167 => x"d2397430",
+1168 => x"55815673",
+1169 => x"8025c838",
+1170 => x"ea39fa3d",
+1171 => x"0d787a57",
+1172 => x"5580570b",
+1173 => x"0b767524",
+1174 => x"ae38759f",
+1175 => x"2c540b0b",
+1176 => x"81530b0b",
+1177 => x"75743274",
+1178 => x"31520b0b",
+1179 => x"74519f3f",
+1180 => x"8008540b",
+1181 => x"0b76802e",
+1182 => x"87388008",
+1183 => x"30540b0b",
+1184 => x"73800c88",
+1185 => x"3d0d0474",
+1186 => x"30558157",
+1187 => x"cd39fc3d",
+1188 => x"0d767853",
+1189 => x"0b0b540b",
+1190 => x"0b81530b",
+1191 => x"0b807473",
+1192 => x"26520b0b",
+1193 => x"5572802e",
+1194 => x"9e387080",
+1195 => x"2eb73880",
+1196 => x"7224b238",
+1197 => x"71107310",
+1198 => x"75722653",
+1199 => x"0b0b540b",
+1200 => x"0b520b0b",
+1201 => x"72e43873",
+1202 => x"51788338",
+1203 => x"74510b0b",
+1204 => x"70800c86",
+1205 => x"3d0d0472",
+1206 => x"0a100a72",
+1207 => x"0a100a53",
+1208 => x"0b0b530b",
+1209 => x"0b72802e",
+1210 => x"de387174",
+1211 => x"26e93873",
+1212 => x"72317574",
+1213 => x"07740a10",
+1214 => x"0a740a10",
+1215 => x"0a555556",
+1216 => x"540b0be1",
+1217 => x"39707073",
+1218 => x"520b0b80",
+1219 => x"eea80851",
+1220 => x"953f5050",
+1221 => x"04707073",
+1222 => x"520b0b80",
+1223 => x"eea80851",
+1224 => x"92dc3f50",
+1225 => x"5004f43d",
+1226 => x"0d7e608b",
+1227 => x"710570f8",
+1228 => x"065b5555",
+1229 => x"5d729626",
+1230 => x"83389058",
+1231 => x"800b7824",
+1232 => x"74792607",
+1233 => x"5580540b",
+1234 => x"0b74742e",
+1235 => x"09810680",
+1236 => x"d5387c51",
+1237 => x"8edf3f77",
+1238 => x"83f72680",
+1239 => x"d0387783",
+1240 => x"2a701010",
+1241 => x"1080e6a0",
+1242 => x"058c7105",
+1243 => x"08585854",
+1244 => x"0b0b7577",
+1245 => x"2e828a38",
+1246 => x"841608fc",
+1247 => x"068c1708",
+1248 => x"88180871",
+1249 => x"8c72050c",
+1250 => x"8872050c",
+1251 => x"5b760584",
+1252 => x"71050881",
+1253 => x"07847205",
+1254 => x"0c530b0b",
+1255 => x"7c518e96",
+1256 => x"3f881654",
+1257 => x"0b0b7380",
+1258 => x"0c8e3d0d",
+1259 => x"0477892a",
+1260 => x"78832a58",
+1261 => x"540b0b73",
+1262 => x"802ebf38",
+1263 => x"77862ab8",
+1264 => x"05578474",
+1265 => x"27b43880",
+1266 => x"db145794",
+1267 => x"7427ab38",
+1268 => x"778c2a80",
+1269 => x"ee055780",
+1270 => x"d474279e",
+1271 => x"38778f2a",
+1272 => x"80f70557",
+1273 => x"82d47427",
+1274 => x"91387792",
+1275 => x"2a80fc05",
+1276 => x"578ad474",
+1277 => x"27843880",
+1278 => x"fe570b0b",
+1279 => x"76101010",
+1280 => x"80e6a005",
+1281 => x"8c710508",
+1282 => x"56530b0b",
+1283 => x"74732ea6",
+1284 => x"38841508",
+1285 => x"fc067079",
+1286 => x"3155560b",
+1287 => x"738f2489",
+1288 => x"d2387380",
+1289 => x"2589d438",
+1290 => x"8c150855",
+1291 => x"0b0b7473",
+1292 => x"2e098106",
+1293 => x"dc388117",
+1294 => x"5980e6b0",
+1295 => x"08560b0b",
+1296 => x"7580e6a8",
+1297 => x"2e82f938",
+1298 => x"841608fc",
+1299 => x"06707931",
+1300 => x"55550b73",
+1301 => x"8f2480c2",
+1302 => x"3880e6a8",
+1303 => x"0b80e6b4",
+1304 => x"0c80e6a8",
+1305 => x"0b80e6b0",
+1306 => x"0c807424",
+1307 => x"80e83874",
+1308 => x"16847105",
+1309 => x"08810784",
+1310 => x"72050c53",
+1311 => x"0b0bfe9c",
+1312 => x"3988168c",
+1313 => x"71050857",
+1314 => x"590b750b",
+1315 => x"792e0981",
+1316 => x"06fde538",
+1317 => x"821459ff",
+1318 => x"a0397716",
+1319 => x"78810784",
+1320 => x"180c7080",
+1321 => x"e6b40c70",
+1322 => x"80e6b00c",
+1323 => x"80e6a80b",
+1324 => x"8c72050c",
+1325 => x"8c710508",
+1326 => x"8872050c",
+1327 => x"74810784",
+1328 => x"72050c74",
+1329 => x"0574710c",
+1330 => x"5b7c518b",
+1331 => x"e93f8816",
+1332 => x"540b0bfd",
+1333 => x"d13983ff",
+1334 => x"752783c1",
+1335 => x"3874892a",
+1336 => x"75832a54",
+1337 => x"0b0b540b",
+1338 => x"0b73802e",
+1339 => x"80cb3874",
+1340 => x"862ab805",
+1341 => x"530b0b84",
+1342 => x"7427be38",
+1343 => x"80db1453",
+1344 => x"0b0b9474",
+1345 => x"27b33874",
+1346 => x"8c2a80ee",
+1347 => x"05530b0b",
+1348 => x"80d47427",
+1349 => x"a438748f",
+1350 => x"2a80f705",
+1351 => x"530b0b82",
+1352 => x"d4742795",
+1353 => x"3874922a",
+1354 => x"80fc0553",
+1355 => x"0b0b8ad4",
+1356 => x"74278638",
+1357 => x"80fe530b",
+1358 => x"0b721010",
+1359 => x"1080e6a0",
+1360 => x"05887105",
+1361 => x"0855570b",
+1362 => x"730b772e",
+1363 => x"86cd3884",
+1364 => x"1408fc06",
+1365 => x"5b740b7b",
+1366 => x"278f3888",
+1367 => x"1408540b",
+1368 => x"0b73772e",
+1369 => x"098106e7",
+1370 => x"388c1408",
+1371 => x"80e6a00b",
+1372 => x"84050871",
+1373 => x"8c190c75",
+1374 => x"88190c77",
+1375 => x"8873050c",
+1376 => x"5c57758c",
+1377 => x"150c7853",
+1378 => x"0b0b8079",
+1379 => x"2483be38",
+1380 => x"72822c81",
+1381 => x"712b5656",
+1382 => x"0b747b26",
+1383 => x"80d1387a",
+1384 => x"7506570b",
+1385 => x"0b7682bc",
+1386 => x"3878fc06",
+1387 => x"84055974",
+1388 => x"10707c06",
+1389 => x"55550b73",
+1390 => x"82aa3884",
+1391 => x"1959f039",
+1392 => x"80e6a00b",
+1393 => x"84050879",
+1394 => x"540b0b5b",
+1395 => x"788025c0",
+1396 => x"3882fa39",
+1397 => x"74097b06",
+1398 => x"7080e6a0",
+1399 => x"0b84050c",
+1400 => x"5b741055",
+1401 => x"0b0b747b",
+1402 => x"26853874",
+1403 => x"85f33880",
+1404 => x"e6a00b88",
+1405 => x"05087084",
+1406 => x"720508fc",
+1407 => x"06707b31",
+1408 => x"7b72268f",
+1409 => x"7225075d",
+1410 => x"575c5c55",
+1411 => x"78802e80",
+1412 => x"e3387915",
+1413 => x"80e69808",
+1414 => x"19907105",
+1415 => x"59540b0b",
+1416 => x"5680e694",
+1417 => x"08ff2e89",
+1418 => x"38a08f73",
+1419 => x"05e08006",
+1420 => x"570b0b76",
+1421 => x"520b0b7c",
+1422 => x"5188fc3f",
+1423 => x"8008540b",
+1424 => x"0b8008ff",
+1425 => x"2e903880",
+1426 => x"08762782",
+1427 => x"c2387480",
+1428 => x"e6a02e82",
+1429 => x"ba3880e6",
+1430 => x"a00b8805",
+1431 => x"08558415",
+1432 => x"08fc0670",
+1433 => x"79317972",
+1434 => x"268f7225",
+1435 => x"075d555a",
+1436 => x"7a849b38",
+1437 => x"77810784",
+1438 => x"160c7715",
+1439 => x"7080e6a0",
+1440 => x"0b88050c",
+1441 => x"74810784",
+1442 => x"72050c56",
+1443 => x"7c5188a6",
+1444 => x"3f881554",
+1445 => x"0b0b7380",
+1446 => x"0c8e3d0d",
+1447 => x"0474832a",
+1448 => x"70540b0b",
+1449 => x"540b0b80",
+1450 => x"742481a9",
+1451 => x"3872822c",
+1452 => x"81712b80",
+1453 => x"e6a40807",
+1454 => x"7080e6a0",
+1455 => x"0b84050c",
+1456 => x"75101010",
+1457 => x"80e6a005",
+1458 => x"88710508",
+1459 => x"718c1b0c",
+1460 => x"70881b0c",
+1461 => x"79887305",
+1462 => x"0c57555c",
+1463 => x"55758c15",
+1464 => x"0cfda339",
+1465 => x"78791010",
+1466 => x"1080e6a0",
+1467 => x"0570565b",
+1468 => x"5c8c1408",
+1469 => x"560b0b75",
+1470 => x"742ea738",
+1471 => x"841608fc",
+1472 => x"06707931",
+1473 => x"58530b0b",
+1474 => x"768f2484",
+1475 => x"98387680",
+1476 => x"2584de38",
+1477 => x"8c160856",
+1478 => x"0b0b7574",
+1479 => x"2e098106",
+1480 => x"db388814",
+1481 => x"811a7083",
+1482 => x"06555a54",
+1483 => x"0b0b72c1",
+1484 => x"387b8306",
+1485 => x"560b0b75",
+1486 => x"802efd98",
+1487 => x"38ff1cf8",
+1488 => x"1b5b5c88",
+1489 => x"1a087a2e",
+1490 => x"e838fd95",
+1491 => x"39831953",
+1492 => x"0b0bfcbc",
+1493 => x"39831470",
+1494 => x"822c8171",
+1495 => x"2b80e6a4",
+1496 => x"08077080",
+1497 => x"e6a00b84",
+1498 => x"050c7610",
+1499 => x"101080e6",
+1500 => x"a0058871",
+1501 => x"0508718c",
+1502 => x"1c0c7088",
+1503 => x"1c0c7a88",
+1504 => x"73050c58",
+1505 => x"530b0b5d",
+1506 => x"56530b0b",
+1507 => x"fecf3980",
+1508 => x"e5e40817",
+1509 => x"59800876",
+1510 => x"2e819438",
+1511 => x"80e69408",
+1512 => x"ff2e84b7",
+1513 => x"38737631",
+1514 => x"1980e5e4",
+1515 => x"0c738706",
+1516 => x"7056530b",
+1517 => x"0b72802e",
+1518 => x"88388873",
+1519 => x"31701555",
+1520 => x"5576149f",
+1521 => x"ff06a080",
+1522 => x"71311670",
+1523 => x"540b0b7e",
+1524 => x"530b0b51",
+1525 => x"530b0b85",
+1526 => x"de3f8008",
+1527 => x"568008ff",
+1528 => x"2e81a238",
+1529 => x"80e5e408",
+1530 => x"73057080",
+1531 => x"e5e40c74",
+1532 => x"7580e6a0",
+1533 => x"0b88050c",
+1534 => x"77763115",
+1535 => x"81075556",
+1536 => x"597a80e6",
+1537 => x"a02e83e0",
+1538 => x"38798f26",
+1539 => x"838d3881",
+1540 => x"0b84150c",
+1541 => x"841508fc",
+1542 => x"06707931",
+1543 => x"7972268f",
+1544 => x"7225075d",
+1545 => x"555a7a80",
+1546 => x"2efcc938",
+1547 => x"80e03980",
+1548 => x"089fff06",
+1549 => x"550b0b74",
+1550 => x"fee23878",
+1551 => x"80e5e40c",
+1552 => x"80e6a00b",
+1553 => x"8805087a",
+1554 => x"18810784",
+1555 => x"72050c55",
+1556 => x"80e69008",
+1557 => x"79278638",
+1558 => x"7880e690",
+1559 => x"0c80e68c",
+1560 => x"087927fb",
+1561 => x"f9387880",
+1562 => x"e68c0c84",
+1563 => x"1508fc06",
+1564 => x"70793179",
+1565 => x"72268f72",
+1566 => x"25075d55",
+1567 => x"5a7a802e",
+1568 => x"fbf2388a",
+1569 => x"39807457",
+1570 => x"530b0bfe",
+1571 => x"d7397c51",
+1572 => x"84a43f80",
+1573 => x"0b800c8e",
+1574 => x"3d0d0480",
+1575 => x"7324a538",
+1576 => x"72822c81",
+1577 => x"712b80e6",
+1578 => x"a4080770",
+1579 => x"80e6a00b",
+1580 => x"84050c5c",
+1581 => x"5a768c17",
+1582 => x"0c738817",
+1583 => x"0c758818",
+1584 => x"0cf9bf39",
+1585 => x"83730570",
+1586 => x"822c8171",
+1587 => x"2b80e6a4",
+1588 => x"08077080",
+1589 => x"e6a00b84",
+1590 => x"050c5d5b",
+1591 => x"530b0bd5",
+1592 => x"397a7506",
+1593 => x"5c0b0b7b",
+1594 => x"fbfa3884",
+1595 => x"19751056",
+1596 => x"59ef39ff",
+1597 => x"17810559",
+1598 => x"f6bf398c",
+1599 => x"15088816",
+1600 => x"08718c72",
+1601 => x"050c8872",
+1602 => x"050c5975",
+1603 => x"15847105",
+1604 => x"08810784",
+1605 => x"72050c58",
+1606 => x"7c51839a",
+1607 => x"3f881554",
+1608 => x"0b0bfaf2",
+1609 => x"39771678",
+1610 => x"81078418",
+1611 => x"0c8c1708",
+1612 => x"88180871",
+1613 => x"8c72050c",
+1614 => x"8872050c",
+1615 => x"5c7080e6",
+1616 => x"b40c7080",
+1617 => x"e6b00c80",
+1618 => x"e6a80b8c",
+1619 => x"72050c8c",
+1620 => x"71050888",
+1621 => x"72050c77",
+1622 => x"81078472",
+1623 => x"050c7705",
+1624 => x"77710c55",
+1625 => x"7c5182ce",
+1626 => x"3f881654",
+1627 => x"0b0bf4b6",
+1628 => x"39721684",
+1629 => x"71050881",
+1630 => x"07847205",
+1631 => x"0c588c16",
+1632 => x"08881708",
+1633 => x"718c7205",
+1634 => x"0c887205",
+1635 => x"0c577c51",
+1636 => x"82a43f88",
+1637 => x"16540b0b",
+1638 => x"f48c3972",
+1639 => x"84150cf4",
+1640 => x"1af80670",
+1641 => x"841d0881",
+1642 => x"0607841d",
+1643 => x"0c701c55",
+1644 => x"56850b84",
+1645 => x"150c850b",
+1646 => x"88150c8f",
+1647 => x"7627fd90",
+1648 => x"38881b52",
+1649 => x"0b0b7c51",
+1650 => x"85b43f80",
+1651 => x"e6a00b88",
+1652 => x"050880e5",
+1653 => x"e4085a55",
+1654 => x"fcf63978",
+1655 => x"80e5e40c",
+1656 => x"7380e694",
+1657 => x"0cfbc639",
+1658 => x"7284150c",
+1659 => x"fce239fb",
+1660 => x"3d0d7770",
+1661 => x"7a7c5855",
+1662 => x"530b0b56",
+1663 => x"8f752781",
+1664 => x"85387276",
+1665 => x"07830651",
+1666 => x"0b0b7080",
+1667 => x"f9387573",
+1668 => x"520b0b54",
+1669 => x"0b0b7070",
+1670 => x"8405520b",
+1671 => x"0b087470",
+1672 => x"8405560c",
+1673 => x"73717084",
+1674 => x"05530b0b",
+1675 => x"08717084",
+1676 => x"05530b0b",
+1677 => x"0c717084",
+1678 => x"05530b0b",
+1679 => x"08717084",
+1680 => x"05530b0b",
+1681 => x"0c717084",
+1682 => x"05530b0b",
+1683 => x"08717084",
+1684 => x"05530b0b",
+1685 => x"0cf01656",
+1686 => x"540b0b74",
+1687 => x"8f26ffb6",
+1688 => x"38837527",
+1689 => x"99387070",
+1690 => x"8405520b",
+1691 => x"0b087470",
+1692 => x"8405560c",
+1693 => x"fc15550b",
+1694 => x"0b748326",
+1695 => x"e9387371",
+1696 => x"540b0b52",
+1697 => x"0b0bff15",
+1698 => x"510b0b70",
+1699 => x"ff2e9f38",
+1700 => x"72708105",
+1701 => x"540b0b33",
+1702 => x"72708105",
+1703 => x"540b0b34",
+1704 => x"ff710551",
+1705 => x"0b0b70ff",
+1706 => x"2e098106",
+1707 => x"e3387580",
+1708 => x"0c873d0d",
+1709 => x"04040470",
+1710 => x"70707080",
+1711 => x"0b81c5e8",
+1712 => x"0c765188",
+1713 => x"d93f8008",
+1714 => x"530b0b80",
+1715 => x"08ff2e89",
+1716 => x"3872800c",
+1717 => x"50505050",
+1718 => x"0481c5e8",
+1719 => x"08540b0b",
+1720 => x"73802eed",
+1721 => x"38757471",
+1722 => x"0c520b0b",
+1723 => x"72800c50",
+1724 => x"50505004",
+1725 => x"fb3d0d77",
+1726 => x"79707207",
+1727 => x"8306530b",
+1728 => x"0b540b0b",
+1729 => x"520b0b70",
+1730 => x"9b387173",
+1731 => x"7308540b",
+1732 => x"0b56540b",
+1733 => x"0b717308",
+1734 => x"2e80d838",
+1735 => x"7375540b",
+1736 => x"0b520b0b",
+1737 => x"0b0b7133",
+1738 => x"7081ff06",
+1739 => x"520b0b54",
+1740 => x"0b0b7080",
+1741 => x"2ea53872",
+1742 => x"3355700b",
+1743 => x"752e0981",
+1744 => x"069c3881",
+1745 => x"72058114",
+1746 => x"71337081",
+1747 => x"ff06540b",
+1748 => x"0b56540b",
+1749 => x"0b520b0b",
+1750 => x"70dd3872",
+1751 => x"33557381",
+1752 => x"ff067581",
+1753 => x"ff067171",
+1754 => x"31800c55",
+1755 => x"520b0b87",
+1756 => x"3d0d0471",
+1757 => x"09f7fbfd",
+1758 => x"ff730506",
+1759 => x"f8848281",
+1760 => x"8006520b",
+1761 => x"0b0b0b71",
+1762 => x"9f388414",
+1763 => x"84167108",
+1764 => x"540b0b56",
+1765 => x"540b0b71",
+1766 => x"75082ed7",
+1767 => x"38737554",
+1768 => x"0b0b520b",
+1769 => x"0bfefd39",
+1770 => x"800b800c",
+1771 => x"873d0d04",
+1772 => x"fb3d0d77",
+1773 => x"70520b0b",
+1774 => x"56fdfa3f",
+1775 => x"80e6a00b",
+1776 => x"88050884",
+1777 => x"710508fc",
+1778 => x"06707b31",
+1779 => x"9fef05e0",
+1780 => x"8006e080",
+1781 => x"05520b0b",
+1782 => x"5555a080",
+1783 => x"75249838",
+1784 => x"80520b0b",
+1785 => x"7551fdcf",
+1786 => x"3f80e6a8",
+1787 => x"0814530b",
+1788 => x"0b728008",
+1789 => x"2e913875",
+1790 => x"51fdbb3f",
+1791 => x"80530b0b",
+1792 => x"72800c87",
+1793 => x"3d0d0474",
+1794 => x"30520b0b",
+1795 => x"7551fda7",
+1796 => x"3f8008ff",
+1797 => x"2eab3880",
+1798 => x"e6a00b88",
+1799 => x"05087476",
+1800 => x"31810784",
+1801 => x"72050c53",
+1802 => x"0b0b80e5",
+1803 => x"e4087531",
+1804 => x"80e5e40c",
+1805 => x"7551fcfe",
+1806 => x"3f810b80",
+1807 => x"0c873d0d",
+1808 => x"0480520b",
+1809 => x"0b7551fc",
+1810 => x"ee3f80e6",
+1811 => x"a00b8805",
+1812 => x"08800871",
+1813 => x"31540b0b",
+1814 => x"540b0b8f",
+1815 => x"7325ff97",
+1816 => x"38800880",
+1817 => x"e6940831",
+1818 => x"80e5e40c",
+1819 => x"72810784",
+1820 => x"150c7551",
+1821 => x"fcc03f80",
+1822 => x"530b0bff",
+1823 => x"8339f73d",
+1824 => x"0d7b7d54",
+1825 => x"0b0b5a72",
+1826 => x"802e82ab",
+1827 => x"387951fc",
+1828 => x"a43ff873",
+1829 => x"05847105",
+1830 => x"0870fe06",
+1831 => x"70730584",
+1832 => x"710508fc",
+1833 => x"065c5758",
+1834 => x"540b0b57",
+1835 => x"80e6a808",
+1836 => x"742e838b",
+1837 => x"38778415",
+1838 => x"0c807381",
+1839 => x"0656590b",
+1840 => x"740b792e",
+1841 => x"81f53877",
+1842 => x"14847105",
+1843 => x"08810656",
+1844 => x"530b0b74",
+1845 => x"a3387716",
+1846 => x"56788287",
+1847 => x"38881408",
+1848 => x"550b0b74",
+1849 => x"80e6a82e",
+1850 => x"83a7388c",
+1851 => x"1408708c",
+1852 => x"170c7588",
+1853 => x"72050c58",
+1854 => x"75810784",
+1855 => x"180c7517",
+1856 => x"76710c54",
+1857 => x"0b0b7881",
+1858 => x"a93883ff",
+1859 => x"762781e5",
+1860 => x"3875892a",
+1861 => x"76832a54",
+1862 => x"0b0b540b",
+1863 => x"0b73802e",
+1864 => x"80cb3875",
+1865 => x"862ab805",
+1866 => x"530b0b84",
+1867 => x"7427be38",
+1868 => x"80db1453",
+1869 => x"0b0b9474",
+1870 => x"27b33875",
+1871 => x"8c2a80ee",
+1872 => x"05530b0b",
+1873 => x"80d47427",
+1874 => x"a438758f",
+1875 => x"2a80f705",
+1876 => x"530b0b82",
+1877 => x"d4742795",
+1878 => x"3875922a",
+1879 => x"80fc0553",
+1880 => x"0b0b8ad4",
+1881 => x"74278638",
+1882 => x"80fe530b",
+1883 => x"0b721010",
+1884 => x"1080e6a0",
+1885 => x"05887105",
+1886 => x"0855550b",
+1887 => x"730b752e",
+1888 => x"82da3884",
+1889 => x"1408fc06",
+1890 => x"59750b79",
+1891 => x"278f3888",
+1892 => x"1408540b",
+1893 => x"0b73752e",
+1894 => x"098106e7",
+1895 => x"388c1408",
+1896 => x"708c190c",
+1897 => x"7488190c",
+1898 => x"77887205",
+1899 => x"0c55768c",
+1900 => x"150c7951",
+1901 => x"fa803f8b",
+1902 => x"3d0d0476",
+1903 => x"08777131",
+1904 => x"58760588",
+1905 => x"18085656",
+1906 => x"0b7480e6",
+1907 => x"a82e80ea",
+1908 => x"388c1708",
+1909 => x"708c170c",
+1910 => x"75887205",
+1911 => x"0c530b0b",
+1912 => x"fde53988",
+1913 => x"14088c15",
+1914 => x"08708c73",
+1915 => x"050c5988",
+1916 => x"190cfe84",
+1917 => x"3975832a",
+1918 => x"70540b0b",
+1919 => x"540b0b80",
+1920 => x"742481a2",
+1921 => x"3872822c",
+1922 => x"81712b80",
+1923 => x"e6a40807",
+1924 => x"80e6a00b",
+1925 => x"84050c74",
+1926 => x"10101080",
+1927 => x"e6a00588",
+1928 => x"71050871",
+1929 => x"8c1b0c70",
+1930 => x"881b0c79",
+1931 => x"8873050c",
+1932 => x"565a5576",
+1933 => x"8c150cfe",
+1934 => x"f9398159",
+1935 => x"fd893977",
+1936 => x"16738106",
+1937 => x"540b0b55",
+1938 => x"729a3876",
+1939 => x"08777131",
+1940 => x"5875058c",
+1941 => x"18088819",
+1942 => x"08718c72",
+1943 => x"050c8872",
+1944 => x"050c5555",
+1945 => x"0b0b7481",
+1946 => x"0784180c",
+1947 => x"7680e6a0",
+1948 => x"0b88050c",
+1949 => x"80e69c08",
+1950 => x"7526feb6",
+1951 => x"3880e698",
+1952 => x"08520b0b",
+1953 => x"7951faa8",
+1954 => x"3f7951f8",
+1955 => x"a93ffea7",
+1956 => x"3981778c",
+1957 => x"170c7788",
+1958 => x"170c758c",
+1959 => x"190c7588",
+1960 => x"190c59fc",
+1961 => x"d3398314",
+1962 => x"70822c81",
+1963 => x"712b80e6",
+1964 => x"a4080780",
+1965 => x"e6a00b84",
+1966 => x"050c7510",
+1967 => x"101080e6",
+1968 => x"a0058871",
+1969 => x"0508718c",
+1970 => x"1c0c7088",
+1971 => x"1c0c7a88",
+1972 => x"73050c57",
+1973 => x"5b56530b",
+1974 => x"0bfed839",
+1975 => x"807324a3",
+1976 => x"3872822c",
+1977 => x"81712b80",
+1978 => x"e6a40807",
+1979 => x"80e6a00b",
+1980 => x"84050c58",
+1981 => x"748c180c",
+1982 => x"7388180c",
+1983 => x"7688160c",
+1984 => x"fdac3983",
+1985 => x"73057082",
+1986 => x"2c81712b",
+1987 => x"80e6a408",
+1988 => x"0780e6a0",
+1989 => x"0b84050c",
+1990 => x"59530b0b",
+1991 => x"d7397070",
+1992 => x"7081c5ec",
+1993 => x"08510b0b",
+1994 => x"708a3881",
+1995 => x"c5f47081",
+1996 => x"c5ec0c51",
+1997 => x"740b7105",
+1998 => x"520b0bff",
+1999 => x"530b0b71",
+2000 => x"87fb8080",
+2001 => x"268a3871",
+2002 => x"81c5ec0c",
+2003 => x"70530b0b",
+2004 => x"72800c50",
+2005 => x"50500470",
+2006 => x"70707080",
+2007 => x"0b80e5d0",
+2008 => x"08540b0b",
+2009 => x"540b0b72",
+2010 => x"812e9d38",
+2011 => x"7381c5f0",
+2012 => x"0ccabe3f",
+2013 => x"c98a3f80",
+2014 => x"f5a8520b",
+2015 => x"0b8151d3",
+2016 => x"fa3f8008",
+2017 => x"518a8f3f",
+2018 => x"7281c5f0",
+2019 => x"0ccaa23f",
+2020 => x"c8ee3f80",
+2021 => x"f5a8520b",
+2022 => x"0b8151d3",
+2023 => x"de3f8008",
+2024 => x"5189f33f",
+2025 => x"00ff3900",
+2026 => x"ff39f53d",
+2027 => x"0d7e6081",
+2028 => x"c5f00870",
+2029 => x"5b585b5b",
+2030 => x"7580c538",
+2031 => x"777a25a2",
+2032 => x"38771b70",
+2033 => x"337081ff",
+2034 => x"06585859",
+2035 => x"758a2e99",
+2036 => x"387681ff",
+2037 => x"0651c9b4",
+2038 => x"3f811858",
+2039 => x"790b7824",
+2040 => x"e0387980",
+2041 => x"0c8d3d0d",
+2042 => x"048d51c9",
+2043 => x"9f3f7833",
+2044 => x"7081ff06",
+2045 => x"520b0b57",
+2046 => x"c9923f81",
+2047 => x"1858dd39",
+2048 => x"79557a54",
+2049 => x"0b0b7d53",
+2050 => x"0b0b8552",
+2051 => x"0b0b8d3d",
+2052 => x"fc0551c8",
+2053 => x"af3f8008",
+2054 => x"5688f43f",
+2055 => x"7b80080c",
+2056 => x"75800c8d",
+2057 => x"3d0d04f6",
+2058 => x"3d0d7d7f",
+2059 => x"81c5f008",
+2060 => x"705a585a",
+2061 => x"5a7580ca",
+2062 => x"38767925",
+2063 => x"b638761a",
+2064 => x"58c8a53f",
+2065 => x"80087834",
+2066 => x"800b8008",
+2067 => x"81ff0657",
+2068 => x"580b758a",
+2069 => x"2ea83875",
+2070 => x"8d327030",
+2071 => x"7080257a",
+2072 => x"07515156",
+2073 => x"0b0b7580",
+2074 => x"c0388117",
+2075 => x"57780b77",
+2076 => x"24cc3876",
+2077 => x"560b0b75",
+2078 => x"800c8c3d",
+2079 => x"0d048158",
+2080 => x"d6397855",
+2081 => x"79540b0b",
+2082 => x"7c530b0b",
+2083 => x"84520b0b",
+2084 => x"8c3dfc05",
+2085 => x"51c7ad3f",
+2086 => x"80085687",
+2087 => x"f23f7a80",
+2088 => x"080c7580",
+2089 => x"0c8c3d0d",
+2090 => x"04811756",
+2091 => x"c839f93d",
+2092 => x"0d795781",
+2093 => x"c5f00880",
+2094 => x"2eb23876",
+2095 => x"518ac03f",
+2096 => x"7b567a55",
+2097 => x"80088105",
+2098 => x"540b0b76",
+2099 => x"530b0b82",
+2100 => x"520b0b89",
+2101 => x"3dfc0551",
+2102 => x"c6ea3f80",
+2103 => x"085787af",
+2104 => x"3f778008",
+2105 => x"0c76800c",
+2106 => x"893d0d04",
+2107 => x"87a13f85",
+2108 => x"0b80080c",
+2109 => x"ff0b800c",
+2110 => x"893d0d04",
+2111 => x"fb3d0d81",
+2112 => x"c5f00870",
+2113 => x"56540b0b",
+2114 => x"73883874",
+2115 => x"800c873d",
+2116 => x"0d047753",
+2117 => x"0b0b8352",
+2118 => x"0b0b873d",
+2119 => x"fc0551c6",
+2120 => x"a33f8008",
+2121 => x"540b0b86",
+2122 => x"e63f7580",
+2123 => x"080c7380",
+2124 => x"0c873d0d",
+2125 => x"04ff0b80",
+2126 => x"0c04fb3d",
+2127 => x"0d775581",
+2128 => x"c5f00880",
+2129 => x"2eae3874",
+2130 => x"5189b43f",
+2131 => x"80088105",
+2132 => x"540b0b74",
+2133 => x"530b0b87",
+2134 => x"520b0b87",
+2135 => x"3dfc0551",
+2136 => x"c5e23f80",
+2137 => x"085586a7",
+2138 => x"3f758008",
+2139 => x"0c74800c",
+2140 => x"873d0d04",
+2141 => x"86993f85",
+2142 => x"0b80080c",
+2143 => x"ff0b800c",
+2144 => x"873d0d04",
+2145 => x"fa3d0d81",
+2146 => x"c5f00880",
+2147 => x"2ea8387a",
+2148 => x"5579540b",
+2149 => x"0b78530b",
+2150 => x"0b86520b",
+2151 => x"0b883dfc",
+2152 => x"0551c5a0",
+2153 => x"3f800856",
+2154 => x"85e53f76",
+2155 => x"80080c75",
+2156 => x"800c883d",
+2157 => x"0d0485d7",
+2158 => x"3f9d0b80",
+2159 => x"080cff0b",
+2160 => x"800c883d",
+2161 => x"0d04f73d",
+2162 => x"0d7b7d5b",
+2163 => x"59bc530b",
+2164 => x"0b80520b",
+2165 => x"0b795186",
+2166 => x"fd3f8070",
+2167 => x"56579856",
+2168 => x"74197033",
+2169 => x"70782b79",
+2170 => x"078118f8",
+2171 => x"1a5a5859",
+2172 => x"55588475",
+2173 => x"24ea3876",
+2174 => x"7a238419",
+2175 => x"58807056",
+2176 => x"57985674",
+2177 => x"18703370",
+2178 => x"782b7907",
+2179 => x"8118f81a",
+2180 => x"5a585951",
+2181 => x"540b0b84",
+2182 => x"7524e838",
+2183 => x"76821b23",
+2184 => x"88195880",
+2185 => x"70565798",
+2186 => x"56741870",
+2187 => x"3370782b",
+2188 => x"79078118",
+2189 => x"f81a5a58",
+2190 => x"5951540b",
+2191 => x"0b847524",
+2192 => x"e8387684",
+2193 => x"1b0c8c19",
+2194 => x"58807056",
+2195 => x"57985674",
+2196 => x"18703370",
+2197 => x"782b7907",
+2198 => x"8118f81a",
+2199 => x"5a585951",
+2200 => x"540b0b84",
+2201 => x"7524e838",
+2202 => x"76881b23",
+2203 => x"90195880",
+2204 => x"70565798",
+2205 => x"56741870",
+2206 => x"3370782b",
+2207 => x"79078118",
+2208 => x"f81a5a58",
+2209 => x"5951540b",
+2210 => x"0b847524",
+2211 => x"e838768a",
+2212 => x"1b239419",
+2213 => x"58807056",
+2214 => x"57985674",
+2215 => x"18703370",
+2216 => x"782b7907",
+2217 => x"8118f81a",
+2218 => x"5a585951",
+2219 => x"540b0b84",
+2220 => x"7524e838",
+2221 => x"768c1b23",
+2222 => x"98195880",
+2223 => x"70565798",
+2224 => x"56741870",
+2225 => x"3370782b",
+2226 => x"79078118",
+2227 => x"f81a5a58",
+2228 => x"5951540b",
+2229 => x"0b847524",
+2230 => x"e838768e",
+2231 => x"1b239c19",
+2232 => x"58807056",
+2233 => x"57b85674",
+2234 => x"18703370",
+2235 => x"782b7907",
+2236 => x"8118f81a",
+2237 => x"5a58595a",
+2238 => x"540b0b88",
+2239 => x"7524e838",
+2240 => x"76901b0c",
+2241 => x"8b3d0d04",
+2242 => x"e93d0d6a",
+2243 => x"81c5f008",
+2244 => x"57570b75",
+2245 => x"933880c0",
+2246 => x"800b8418",
+2247 => x"0c75ac18",
+2248 => x"0c75800c",
+2249 => x"993d0d04",
+2250 => x"893d7055",
+2251 => x"6a540b0b",
+2252 => x"558a520b",
+2253 => x"0b993dff",
+2254 => x"bc0551c2",
+2255 => x"873f8008",
+2256 => x"77530b0b",
+2257 => x"75520b0b",
+2258 => x"56fcfb3f",
+2259 => x"82c13f77",
+2260 => x"80080c75",
+2261 => x"800c993d",
+2262 => x"0d04e93d",
+2263 => x"0d695781",
+2264 => x"c5f00880",
+2265 => x"2ebd3876",
+2266 => x"5185943f",
+2267 => x"893d7056",
+2268 => x"80088105",
+2269 => x"5577540b",
+2270 => x"0b568f52",
+2271 => x"0b0b993d",
+2272 => x"ffbc0551",
+2273 => x"c1be3f80",
+2274 => x"086b530b",
+2275 => x"0b76520b",
+2276 => x"0b57fcb2",
+2277 => x"3f81f83f",
+2278 => x"7780080c",
+2279 => x"76800c99",
+2280 => x"3d0d0481",
+2281 => x"ea3f850b",
+2282 => x"80080cff",
+2283 => x"0b800c99",
+2284 => x"3d0d04fc",
+2285 => x"3d0d8154",
+2286 => x"0b0b81c5",
+2287 => x"f0088838",
+2288 => x"73800c86",
+2289 => x"3d0d0476",
+2290 => x"530b0b97",
+2291 => x"b9520b0b",
+2292 => x"863dfc05",
+2293 => x"51c0ed3f",
+2294 => x"8008540b",
+2295 => x"0b81b03f",
+2296 => x"7480080c",
+2297 => x"73800c86",
+2298 => x"3d0d04f4",
+2299 => x"3d0d7e80",
+2300 => x"f5d40870",
+2301 => x"0881ff06",
+2302 => x"913df805",
+2303 => x"540b0b51",
+2304 => x"5959c29d",
+2305 => x"3f775780",
+2306 => x"540b0b76",
+2307 => x"557b7d58",
+2308 => x"520b0b0b",
+2309 => x"76530b0b",
+2310 => x"8e3df005",
+2311 => x"5184dc3f",
+2312 => x"797b5879",
+2313 => x"0c76841a",
+2314 => x"0c78800c",
+2315 => x"8e3d0d04",
+2316 => x"f43d0d7e",
+2317 => x"80f5d408",
+2318 => x"70087081",
+2319 => x"ff06923d",
+2320 => x"f8055551",
+2321 => x"5a5759c1",
+2322 => x"d83f7757",
+2323 => x"800b8b3d",
+2324 => x"59540b0b",
+2325 => x"76557b7d",
+2326 => x"58520b0b",
+2327 => x"0b76530b",
+2328 => x"0b775184",
+2329 => x"963f8056",
+2330 => x"bd84c076",
+2331 => x"5555797b",
+2332 => x"58520b0b",
+2333 => x"0b76530b",
+2334 => x"0b775183",
+2335 => x"fe3f7a57",
+2336 => x"78802e84",
+2337 => x"3876790c",
+2338 => x"76800c8e",
+2339 => x"3d0d0480",
+2340 => x"eea80880",
+2341 => x"0c04f73d",
+2342 => x"0d7b80ee",
+2343 => x"a80882c8",
+2344 => x"7105085a",
+2345 => x"540b0b5a",
+2346 => x"77802e80",
+2347 => x"eb388188",
+2348 => x"18841908",
+2349 => x"ff058171",
+2350 => x"2b595559",
+2351 => x"80742481",
+2352 => x"80388074",
+2353 => x"2480c138",
+2354 => x"73822b78",
+2355 => x"71058805",
+2356 => x"56568180",
+2357 => x"19087706",
+2358 => x"530b0b72",
+2359 => x"802e80c3",
+2360 => x"38781670",
+2361 => x"08530b0b",
+2362 => x"530b0b79",
+2363 => x"51740853",
+2364 => x"0b0b722d",
+2365 => x"ff14fc17",
+2366 => x"fc177981",
+2367 => x"2c5a5757",
+2368 => x"540b0b73",
+2369 => x"8025cb38",
+2370 => x"7708580b",
+2371 => x"0b77ff9e",
+2372 => x"3880eea8",
+2373 => x"08530b0b",
+2374 => x"bc730508",
+2375 => x"a9387951",
+2376 => x"f5823f74",
+2377 => x"08530b0b",
+2378 => x"722dff14",
+2379 => x"fc17fc17",
+2380 => x"79812c5a",
+2381 => x"5757540b",
+2382 => x"0b738025",
+2383 => x"ff9438c8",
+2384 => x"398057fe",
+2385 => x"fd397251",
+2386 => x"bc730508",
+2387 => x"540b0b73",
+2388 => x"2d7951f4",
+2389 => x"cf3ffb3d",
+2390 => x"0d777a71",
+2391 => x"028c05a3",
+2392 => x"05335854",
+2393 => x"0b0b540b",
+2394 => x"0b568373",
+2395 => x"2780e738",
+2396 => x"75830651",
+2397 => x"0b0b7080",
+2398 => x"dd387488",
+2399 => x"2b750770",
+2400 => x"71902b07",
+2401 => x"55518f73",
+2402 => x"27b33873",
+2403 => x"72708405",
+2404 => x"540b0b0c",
+2405 => x"71747170",
+2406 => x"8405530b",
+2407 => x"0b0c7471",
+2408 => x"70840553",
+2409 => x"0b0b0c74",
+2410 => x"71708405",
+2411 => x"530b0b0c",
+2412 => x"f014540b",
+2413 => x"0b520b0b",
+2414 => x"728f26cf",
+2415 => x"38837327",
+2416 => x"95387372",
+2417 => x"70840554",
+2418 => x"0b0b0cfc",
+2419 => x"7305530b",
+2420 => x"0b728326",
+2421 => x"ed38ff73",
+2422 => x"05510b0b",
+2423 => x"70ff2e98",
+2424 => x"38747270",
+2425 => x"8105540b",
+2426 => x"0b34ff71",
+2427 => x"05510b0b",
+2428 => x"70ff2e09",
+2429 => x"8106ea38",
+2430 => x"75800c87",
+2431 => x"3d0d0470",
+2432 => x"70707075",
+2433 => x"70718306",
+2434 => x"530b0b55",
+2435 => x"520b0b70",
+2436 => x"80c53871",
+2437 => x"70087009",
+2438 => x"f7fbfdff",
+2439 => x"720506f8",
+2440 => x"84828180",
+2441 => x"06540b0b",
+2442 => x"520b0b53",
+2443 => x"0b0b71a3",
+2444 => x"38847305",
+2445 => x"70087009",
+2446 => x"f7fbfdff",
+2447 => x"720506f8",
+2448 => x"84828180",
+2449 => x"06540b0b",
+2450 => x"520b0b53",
+2451 => x"0b0b7180",
+2452 => x"2edf3872",
+2453 => x"520b0b0b",
+2454 => x"0b713353",
+2455 => x"0b0b7280",
+2456 => x"2e8f3881",
+2457 => x"72057033",
+2458 => x"540b0b52",
+2459 => x"0b0b72f3",
+2460 => x"38717431",
+2461 => x"800c5050",
+2462 => x"505004e4",
+2463 => x"3d0d6ea1",
+2464 => x"3d08a33d",
+2465 => x"0859575f",
+2466 => x"80764d77",
+2467 => x"4ea33d08",
+2468 => x"a53d0857",
+2469 => x"4b0b754c",
+2470 => x"5e0b0b7d",
+2471 => x"6c2487b2",
+2472 => x"38806a24",
+2473 => x"87cd3869",
+2474 => x"6b58566b",
+2475 => x"6d5d460b",
+2476 => x"7b477544",
+2477 => x"76450b0b",
+2478 => x"64646868",
+2479 => x"5c5c5656",
+2480 => x"0b7481f5",
+2481 => x"38787627",
+2482 => x"82dd3875",
+2483 => x"81ff2683",
+2484 => x"2b5583ff",
+2485 => x"ff76278c",
+2486 => x"389055fe",
+2487 => x"800a7627",
+2488 => x"83389855",
+2489 => x"750b752a",
+2490 => x"80e3bc05",
+2491 => x"7033a077",
+2492 => x"31713157",
+2493 => x"55577480",
+2494 => x"2e953875",
+2495 => x"752ba076",
+2496 => x"317a772b",
+2497 => x"7c722a07",
+2498 => x"7c782b5d",
+2499 => x"5b59560b",
+2500 => x"0b75902a",
+2501 => x"7683ffff",
+2502 => x"0671540b",
+2503 => x"0b7a530b",
+2504 => x"0b595788",
+2505 => x"bf3f8008",
+2506 => x"5b88a53f",
+2507 => x"80088008",
+2508 => x"79297c90",
+2509 => x"2b7c902a",
+2510 => x"07565659",
+2511 => x"73752794",
+2512 => x"388008ff",
+2513 => x"05761555",
+2514 => x"59757426",
+2515 => x"87387474",
+2516 => x"2687f438",
+2517 => x"76520b0b",
+2518 => x"73753151",
+2519 => x"88863f80",
+2520 => x"085587ec",
+2521 => x"3f800880",
+2522 => x"0879297b",
+2523 => x"83ffff06",
+2524 => x"77902b07",
+2525 => x"56595773",
+2526 => x"78279638",
+2527 => x"8008ff05",
+2528 => x"76155557",
+2529 => x"75742689",
+2530 => x"38777426",
+2531 => x"77713158",
+2532 => x"5678902b",
+2533 => x"77075880",
+2534 => x"5b0b0b7a",
+2535 => x"4077417f",
+2536 => x"0b615654",
+2537 => x"0b0b7d80",
+2538 => x"dd38737f",
+2539 => x"0c747f84",
+2540 => x"050c7e80",
+2541 => x"0c9e3d0d",
+2542 => x"0480705c",
+2543 => x"58747926",
+2544 => x"d8387481",
+2545 => x"ff26832b",
+2546 => x"577483ff",
+2547 => x"ff2682bd",
+2548 => x"3874772a",
+2549 => x"80e3bc05",
+2550 => x"7033a079",
+2551 => x"31713159",
+2552 => x"5c5d7682",
+2553 => x"cf387654",
+2554 => x"0b0b7479",
+2555 => x"27853881",
+2556 => x"540b0b79",
+2557 => x"76277407",
+2558 => x"59815878",
+2559 => x"ff993876",
+2560 => x"58805bff",
+2561 => x"94397352",
+2562 => x"0b0b7453",
+2563 => x"0b0b9e3d",
+2564 => x"e80551d2",
+2565 => x"d43f6769",
+2566 => x"567f0c74",
+2567 => x"7f84050c",
+2568 => x"7e800c9e",
+2569 => x"3d0d0475",
+2570 => x"802e81d2",
+2571 => x"387581ff",
+2572 => x"26832b55",
+2573 => x"83ffff76",
+2574 => x"278c3890",
+2575 => x"55fe800a",
+2576 => x"76278338",
+2577 => x"9855750b",
+2578 => x"752a80e3",
+2579 => x"bc057033",
+2580 => x"a0773171",
+2581 => x"31575e54",
+2582 => x"0b0b7484",
+2583 => x"b8387876",
+2584 => x"31540b0b",
+2585 => x"8176902a",
+2586 => x"7783ffff",
+2587 => x"065f5d5b",
+2588 => x"0b7b520b",
+2589 => x"0b735185",
+2590 => x"eb3f8008",
+2591 => x"5785d13f",
+2592 => x"80088008",
+2593 => x"7e297890",
+2594 => x"2b7c902a",
+2595 => x"07565659",
+2596 => x"73752794",
+2597 => x"388008ff",
+2598 => x"05761555",
+2599 => x"59757426",
+2600 => x"87387474",
+2601 => x"26859738",
+2602 => x"7b520b0b",
+2603 => x"73753151",
+2604 => x"85b23f80",
+2605 => x"08558598",
+2606 => x"3f800880",
+2607 => x"087e297b",
+2608 => x"83ffff06",
+2609 => x"77902b07",
+2610 => x"56595773",
+2611 => x"78279638",
+2612 => x"8008ff05",
+2613 => x"76155557",
+2614 => x"75742689",
+2615 => x"38777426",
+2616 => x"77713158",
+2617 => x"5a78902b",
+2618 => x"77077b41",
+2619 => x"410b7f0b",
+2620 => x"6156540b",
+2621 => x"0b7d802e",
+2622 => x"fdb038fe",
+2623 => x"89397552",
+2624 => x"0b0b8151",
+2625 => x"84ca3f80",
+2626 => x"0856fea1",
+2627 => x"399057fe",
+2628 => x"800a7527",
+2629 => x"fdbb3898",
+2630 => x"75712a80",
+2631 => x"e3bc0570",
+2632 => x"33a07331",
+2633 => x"7131530b",
+2634 => x"0b5d5e57",
+2635 => x"0b0b7680",
+2636 => x"2efdb338",
+2637 => x"a0773175",
+2638 => x"782b7772",
+2639 => x"2a077779",
+2640 => x"2b7b7a2b",
+2641 => x"7d742a07",
+2642 => x"7d7b2b73",
+2643 => x"902a7483",
+2644 => x"ffff0671",
+2645 => x"597f772a",
+2646 => x"585e5c41",
+2647 => x"5f585c54",
+2648 => x"0b0b8480",
+2649 => x"3f800854",
+2650 => x"0b0b83e4",
+2651 => x"3f800880",
+2652 => x"08792975",
+2653 => x"902b7e90",
+2654 => x"2a075656",
+2655 => x"59737527",
+2656 => x"99388008",
+2657 => x"ff057b15",
+2658 => x"55597a74",
+2659 => x"268c3873",
+2660 => x"75278738",
+2661 => x"ff197b15",
+2662 => x"55597652",
+2663 => x"0b0b7375",
+2664 => x"315183c0",
+2665 => x"3f800855",
+2666 => x"83a63f80",
+2667 => x"08800879",
+2668 => x"297d83ff",
+2669 => x"ff067790",
+2670 => x"2b075659",
+2671 => x"57737827",
+2672 => x"99388008",
+2673 => x"ff057b15",
+2674 => x"55577a74",
+2675 => x"268c3873",
+2676 => x"78278738",
+2677 => x"ff177b15",
+2678 => x"55570b73",
+2679 => x"78317990",
+2680 => x"2b780770",
+2681 => x"83ffff06",
+2682 => x"71902a79",
+2683 => x"83ffff06",
+2684 => x"7a902a73",
+2685 => x"72297373",
+2686 => x"29747329",
+2687 => x"76742973",
+2688 => x"902a0572",
+2689 => x"05575543",
+2690 => x"5f5b585a",
+2691 => x"57595a74",
+2692 => x"7c278638",
+2693 => x"84808017",
+2694 => x"5774902a",
+2695 => x"177983ff",
+2696 => x"ff067684",
+2697 => x"80802905",
+2698 => x"57570b0b",
+2699 => x"767a269a",
+2700 => x"38767a32",
+2701 => x"70307072",
+2702 => x"07802556",
+2703 => x"5a5b7c76",
+2704 => x"27fad438",
+2705 => x"73802efa",
+2706 => x"ce38ff18",
+2707 => x"58805bfa",
+2708 => x"c839ff76",
+2709 => x"530b0b77",
+2710 => x"540b0b9f",
+2711 => x"3de80552",
+2712 => x"0b0b5ece",
+2713 => x"843f6769",
+2714 => x"574c0b75",
+2715 => x"4d698025",
+2716 => x"f8b5387d",
+2717 => x"096a6c5c",
+2718 => x"530b0b7a",
+2719 => x"540b0b9f",
+2720 => x"3de80552",
+2721 => x"0b0b5ecd",
+2722 => x"e03f6769",
+2723 => x"714c704d",
+2724 => x"5856f897",
+2725 => x"39a07531",
+2726 => x"76762b7a",
+2727 => x"772b7c73",
+2728 => x"2a077c78",
+2729 => x"2b72902a",
+2730 => x"7383ffff",
+2731 => x"0671587e",
+2732 => x"762a5742",
+2733 => x"405d5d57",
+2734 => x"5881a93f",
+2735 => x"80085781",
+2736 => x"8f3f8008",
+2737 => x"80087e29",
+2738 => x"78902b7d",
+2739 => x"902a0756",
+2740 => x"56597375",
+2741 => x"27993880",
+2742 => x"08ff0576",
+2743 => x"15555975",
+2744 => x"74268c38",
+2745 => x"73752787",
+2746 => x"38ff1976",
+2747 => x"1555597b",
+2748 => x"520b0b73",
+2749 => x"75315180",
+2750 => x"eb3f8008",
+2751 => x"5580d13f",
+2752 => x"80088008",
+2753 => x"7e297c83",
+2754 => x"ffff0670",
+2755 => x"78902b07",
+2756 => x"51565858",
+2757 => x"73772799",
+2758 => x"388008ff",
+2759 => x"05761555",
+2760 => x"58757426",
+2761 => x"8c387377",
+2762 => x"278738ff",
+2763 => x"18761555",
+2764 => x"5878902b",
+2765 => x"78077478",
+2766 => x"31555bfa",
+2767 => x"b339ff19",
+2768 => x"76155559",
+2769 => x"fae239ff",
+2770 => x"19761555",
+2771 => x"59f88539",
+2772 => x"70707080",
+2773 => x"530b0b75",
+2774 => x"520b0b74",
+2775 => x"51ceaf3f",
+2776 => x"50505004",
+2777 => x"70707081",
+2778 => x"530b0b75",
+2779 => x"520b0b74",
+2780 => x"51ce9b3f",
+2781 => x"50505004",
+2782 => x"707080f5",
+2783 => x"b00bfc05",
+2784 => x"7008520b",
+2785 => x"0b520b0b",
+2786 => x"0b70ff2e",
+2787 => x"9738702d",
+2788 => x"fc720570",
+2789 => x"08520b0b",
+2790 => x"520b0b0b",
+2791 => x"70ff2e09",
+2792 => x"8106eb38",
+2793 => x"50500404",
+2794 => x"ffb4963f",
+2795 => x"04000000",
+2796 => x"30313233",
+2797 => x"34353637",
+2798 => x"38390000",
+2799 => x"44485259",
+2800 => x"53544f4e",
+2801 => x"45205052",
+2802 => x"4f475241",
+2803 => x"4d2c2053",
+2804 => x"4f4d4520",
+2805 => x"53545249",
+2806 => x"4e470000",
+2807 => x"44485259",
+2808 => x"53544f4e",
+2809 => x"45205052",
+2810 => x"4f475241",
+2811 => x"4d2c2031",
+2812 => x"27535420",
+2813 => x"53545249",
+2814 => x"4e470000",
+2815 => x"44687279",
+2816 => x"73746f6e",
+2817 => x"65204265",
+2818 => x"6e63686d",
+2819 => x"61726b2c",
+2820 => x"20566572",
+2821 => x"73696f6e",
+2822 => x"20322e31",
+2823 => x"20284c61",
+2824 => x"6e677561",
+2825 => x"67653a20",
+2826 => x"43290a00",
+2827 => x"50726f67",
+2828 => x"72616d20",
+2829 => x"636f6d70",
+2830 => x"696c6564",
+2831 => x"20776974",
+2832 => x"68202772",
+2833 => x"65676973",
+2834 => x"74657227",
+2835 => x"20617474",
+2836 => x"72696275",
+2837 => x"74650a00",
+2838 => x"45786563",
+2839 => x"7574696f",
+2840 => x"6e207374",
+2841 => x"61727473",
+2842 => x"2c202564",
+2843 => x"2072756e",
+2844 => x"73207468",
+2845 => x"726f7567",
+2846 => x"68204468",
+2847 => x"72797374",
+2848 => x"6f6e650a",
+2849 => x"00000000",
+2850 => x"44485259",
+2851 => x"53544f4e",
+2852 => x"45205052",
+2853 => x"4f475241",
+2854 => x"4d2c2032",
+2855 => x"274e4420",
+2856 => x"53545249",
+2857 => x"4e470000",
+2858 => x"45786563",
+2859 => x"7574696f",
+2860 => x"6e20656e",
+2861 => x"64730a00",
+2862 => x"46696e61",
+2863 => x"6c207661",
+2864 => x"6c756573",
+2865 => x"206f6620",
+2866 => x"74686520",
+2867 => x"76617269",
+2868 => x"61626c65",
+2869 => x"73207573",
+2870 => x"65642069",
+2871 => x"6e207468",
+2872 => x"65206265",
+2873 => x"6e63686d",
+2874 => x"61726b3a",
+2875 => x"0a000000",
+2876 => x"496e745f",
+2877 => x"476c6f62",
+2878 => x"3a202020",
+2879 => x"20202020",
+2880 => x"20202020",
+2881 => x"2025640a",
+2882 => x"00000000",
+2883 => x"20202020",
+2884 => x"20202020",
+2885 => x"73686f75",
+2886 => x"6c642062",
+2887 => x"653a2020",
+2888 => x"2025640a",
+2889 => x"00000000",
+2890 => x"426f6f6c",
+2891 => x"5f476c6f",
+2892 => x"623a2020",
+2893 => x"20202020",
+2894 => x"20202020",
+2895 => x"2025640a",
+2896 => x"00000000",
+2897 => x"43685f31",
+2898 => x"5f476c6f",
+2899 => x"623a2020",
+2900 => x"20202020",
+2901 => x"20202020",
+2902 => x"2025630a",
+2903 => x"00000000",
+2904 => x"20202020",
+2905 => x"20202020",
+2906 => x"73686f75",
+2907 => x"6c642062",
+2908 => x"653a2020",
+2909 => x"2025630a",
+2910 => x"00000000",
+2911 => x"43685f32",
+2912 => x"5f476c6f",
+2913 => x"623a2020",
+2914 => x"20202020",
+2915 => x"20202020",
+2916 => x"2025630a",
+2917 => x"00000000",
+2918 => x"4172725f",
+2919 => x"315f476c",
+2920 => x"6f625b38",
+2921 => x"5d3a2020",
+2922 => x"20202020",
+2923 => x"2025640a",
+2924 => x"00000000",
+2925 => x"4172725f",
+2926 => x"325f476c",
+2927 => x"6f625b38",
+2928 => x"5d5b375d",
+2929 => x"3a202020",
+2930 => x"2025640a",
+2931 => x"00000000",
+2932 => x"20202020",
+2933 => x"20202020",
+2934 => x"73686f75",
+2935 => x"6c642062",
+2936 => x"653a2020",
+2937 => x"204e756d",
+2938 => x"6265725f",
+2939 => x"4f665f52",
+2940 => x"756e7320",
+2941 => x"2b203130",
+2942 => x"0a000000",
+2943 => x"5074725f",
+2944 => x"476c6f62",
+2945 => x"2d3e0a00",
+2946 => x"20205074",
+2947 => x"725f436f",
+2948 => x"6d703a20",
+2949 => x"20202020",
+2950 => x"20202020",
+2951 => x"2025640a",
+2952 => x"00000000",
+2953 => x"20202020",
+2954 => x"20202020",
+2955 => x"73686f75",
+2956 => x"6c642062",
+2957 => x"653a2020",
+2958 => x"2028696d",
+2959 => x"706c656d",
+2960 => x"656e7461",
+2961 => x"74696f6e",
+2962 => x"2d646570",
+2963 => x"656e6465",
+2964 => x"6e74290a",
+2965 => x"00000000",
+2966 => x"20204469",
+2967 => x"7363723a",
+2968 => x"20202020",
+2969 => x"20202020",
+2970 => x"20202020",
+2971 => x"2025640a",
+2972 => x"00000000",
+2973 => x"2020456e",
+2974 => x"756d5f43",
+2975 => x"6f6d703a",
+2976 => x"20202020",
+2977 => x"20202020",
+2978 => x"2025640a",
+2979 => x"00000000",
+2980 => x"2020496e",
+2981 => x"745f436f",
+2982 => x"6d703a20",
+2983 => x"20202020",
+2984 => x"20202020",
+2985 => x"2025640a",
+2986 => x"00000000",
+2987 => x"20205374",
+2988 => x"725f436f",
+2989 => x"6d703a20",
+2990 => x"20202020",
+2991 => x"20202020",
+2992 => x"2025730a",
+2993 => x"00000000",
+2994 => x"20202020",
+2995 => x"20202020",
+2996 => x"73686f75",
+2997 => x"6c642062",
+2998 => x"653a2020",
+2999 => x"20444852",
+3000 => x"5953544f",
+3001 => x"4e452050",
+3002 => x"524f4752",
+3003 => x"414d2c20",
+3004 => x"534f4d45",
+3005 => x"20535452",
+3006 => x"494e470a",
+3007 => x"00000000",
+3008 => x"4e657874",
+3009 => x"5f507472",
+3010 => x"5f476c6f",
+3011 => x"622d3e0a",
+3012 => x"00000000",
+3013 => x"20202020",
+3014 => x"20202020",
+3015 => x"73686f75",
+3016 => x"6c642062",
+3017 => x"653a2020",
+3018 => x"2028696d",
+3019 => x"706c656d",
+3020 => x"656e7461",
+3021 => x"74696f6e",
+3022 => x"2d646570",
+3023 => x"656e6465",
+3024 => x"6e74292c",
+3025 => x"2073616d",
+3026 => x"65206173",
+3027 => x"2061626f",
+3028 => x"76650a00",
+3029 => x"496e745f",
+3030 => x"315f4c6f",
+3031 => x"633a2020",
+3032 => x"20202020",
+3033 => x"20202020",
+3034 => x"2025640a",
+3035 => x"00000000",
+3036 => x"496e745f",
+3037 => x"325f4c6f",
+3038 => x"633a2020",
+3039 => x"20202020",
+3040 => x"20202020",
+3041 => x"2025640a",
+3042 => x"00000000",
+3043 => x"496e745f",
+3044 => x"335f4c6f",
+3045 => x"633a2020",
+3046 => x"20202020",
+3047 => x"20202020",
+3048 => x"2025640a",
+3049 => x"00000000",
+3050 => x"456e756d",
+3051 => x"5f4c6f63",
+3052 => x"3a202020",
+3053 => x"20202020",
+3054 => x"20202020",
+3055 => x"2025640a",
+3056 => x"00000000",
+3057 => x"5374725f",
+3058 => x"315f4c6f",
+3059 => x"633a2020",
+3060 => x"20202020",
+3061 => x"20202020",
+3062 => x"2025730a",
+3063 => x"00000000",
+3064 => x"20202020",
+3065 => x"20202020",
+3066 => x"73686f75",
+3067 => x"6c642062",
+3068 => x"653a2020",
+3069 => x"20444852",
+3070 => x"5953544f",
+3071 => x"4e452050",
+3072 => x"524f4752",
+3073 => x"414d2c20",
+3074 => x"31275354",
+3075 => x"20535452",
+3076 => x"494e470a",
+3077 => x"00000000",
+3078 => x"5374725f",
+3079 => x"325f4c6f",
+3080 => x"633a2020",
+3081 => x"20202020",
+3082 => x"20202020",
+3083 => x"2025730a",
+3084 => x"00000000",
+3085 => x"20202020",
+3086 => x"20202020",
+3087 => x"73686f75",
+3088 => x"6c642062",
+3089 => x"653a2020",
+3090 => x"20444852",
+3091 => x"5953544f",
+3092 => x"4e452050",
+3093 => x"524f4752",
+3094 => x"414d2c20",
+3095 => x"32274e44",
+3096 => x"20535452",
+3097 => x"494e470a",
+3098 => x"00000000",
+3099 => x"55736572",
+3100 => x"2074696d",
+3101 => x"653a2025",
+3102 => x"640a0000",
+3103 => x"4d696372",
+3104 => x"6f736563",
+3105 => x"6f6e6473",
+3106 => x"20666f72",
+3107 => x"206f6e65",
+3108 => x"2072756e",
+3109 => x"20746872",
+3110 => x"6f756768",
+3111 => x"20446872",
+3112 => x"7973746f",
+3113 => x"6e653a20",
+3114 => x"00000000",
+3115 => x"2564200a",
+3116 => x"00000000",
+3117 => x"44687279",
+3118 => x"73746f6e",
+3119 => x"65732070",
+3120 => x"65722053",
+3121 => x"65636f6e",
+3122 => x"643a2020",
+3123 => x"20202020",
+3124 => x"20202020",
+3125 => x"20202020",
+3126 => x"20202020",
+3127 => x"20202020",
+3128 => x"00000000",
+3129 => x"56415820",
+3130 => x"4d495053",
+3131 => x"20726174",
+3132 => x"696e6720",
+3133 => x"2a203130",
+3134 => x"3030203d",
+3135 => x"20256420",
+3136 => x"0a000000",
+3137 => x"50726f67",
+3138 => x"72616d20",
+3139 => x"636f6d70",
+3140 => x"696c6564",
+3141 => x"20776974",
+3142 => x"686f7574",
+3143 => x"20277265",
+3144 => x"67697374",
+3145 => x"65722720",
+3146 => x"61747472",
+3147 => x"69627574",
+3148 => x"650a0000",
+3149 => x"4d656173",
+3150 => x"75726564",
+3151 => x"2074696d",
+3152 => x"6520746f",
+3153 => x"6f20736d",
+3154 => x"616c6c20",
+3155 => x"746f206f",
+3156 => x"62746169",
+3157 => x"6e206d65",
+3158 => x"616e696e",
+3159 => x"6766756c",
+3160 => x"20726573",
+3161 => x"756c7473",
+3162 => x"0a000000",
+3163 => x"506c6561",
+3164 => x"73652069",
+3165 => x"6e637265",
+3166 => x"61736520",
+3167 => x"6e756d62",
+3168 => x"6572206f",
+3169 => x"66207275",
+3170 => x"6e730a00",
+3171 => x"44485259",
+3172 => x"53544f4e",
+3173 => x"45205052",
+3174 => x"4f475241",
+3175 => x"4d2c2033",
+3176 => x"27524420",
+3177 => x"53545249",
+3178 => x"4e470000",
+3179 => x"43000000",
+3180 => x"64756d6d",
+3181 => x"792e6578",
+3182 => x"65000000",
+3183 => x"00010202",
+3184 => x"03030303",
+3185 => x"04040404",
+3186 => x"04040404",
+3187 => x"05050505",
+3188 => x"05050505",
+3189 => x"05050505",
+3190 => x"05050505",
+3191 => x"06060606",
+3192 => x"06060606",
+3193 => x"06060606",
+3194 => x"06060606",
+3195 => x"06060606",
+3196 => x"06060606",
+3197 => x"06060606",
+3198 => x"06060606",
+3199 => x"07070707",
+3200 => x"07070707",
+3201 => x"07070707",
+3202 => x"07070707",
+3203 => x"07070707",
+3204 => x"07070707",
+3205 => x"07070707",
+3206 => x"07070707",
+3207 => x"07070707",
+3208 => x"07070707",
+3209 => x"07070707",
+3210 => x"07070707",
+3211 => x"07070707",
+3212 => x"07070707",
+3213 => x"07070707",
+3214 => x"07070707",
+3215 => x"08080808",
+3216 => x"08080808",
+3217 => x"08080808",
+3218 => x"08080808",
+3219 => x"08080808",
+3220 => x"08080808",
+3221 => x"08080808",
+3222 => x"08080808",
+3223 => x"08080808",
+3224 => x"08080808",
+3225 => x"08080808",
+3226 => x"08080808",
+3227 => x"08080808",
+3228 => x"08080808",
+3229 => x"08080808",
+3230 => x"08080808",
+3231 => x"08080808",
+3232 => x"08080808",
+3233 => x"08080808",
+3234 => x"08080808",
+3235 => x"08080808",
+3236 => x"08080808",
+3237 => x"08080808",
+3238 => x"08080808",
+3239 => x"08080808",
+3240 => x"08080808",
+3241 => x"08080808",
+3242 => x"08080808",
+3243 => x"08080808",
+3244 => x"08080808",
+3245 => x"08080808",
+3246 => x"08080808",
+3247 => x"00ffffff",
+3248 => x"ff00ffff",
+3249 => x"ffff00ff",
+3250 => x"ffffff00",
+3251 => x"00000000",
+3252 => x"00000000",
+3253 => x"00000000",
+3254 => x"00003ab8",
+3255 => x"000186a0", -- iterations
+3256 => x"00000000",
+3257 => x"00000000",
+3258 => x"00000000",
+3259 => x"00000000",
+3260 => x"00000000",
+3261 => x"00000000",
+3262 => x"00000000",
+3263 => x"00000000",
+3264 => x"00000000",
+3265 => x"00000000",
+3266 => x"00000000",
+3267 => x"00000000",
+3268 => x"00000000",
+3269 => x"ffffffff",
+3270 => x"00000000",
+3271 => x"00020000",
+3272 => x"00000000",
+3273 => x"00000000",
+3274 => x"00003320",
+3275 => x"00003320",
+3276 => x"00003328",
+3277 => x"00003328",
+3278 => x"00003330",
+3279 => x"00003330",
+3280 => x"00003338",
+3281 => x"00003338",
+3282 => x"00003340",
+3283 => x"00003340",
+3284 => x"00003348",
+3285 => x"00003348",
+3286 => x"00003350",
+3287 => x"00003350",
+3288 => x"00003358",
+3289 => x"00003358",
+3290 => x"00003360",
+3291 => x"00003360",
+3292 => x"00003368",
+3293 => x"00003368",
+3294 => x"00003370",
+3295 => x"00003370",
+3296 => x"00003378",
+3297 => x"00003378",
+3298 => x"00003380",
+3299 => x"00003380",
+3300 => x"00003388",
+3301 => x"00003388",
+3302 => x"00003390",
+3303 => x"00003390",
+3304 => x"00003398",
+3305 => x"00003398",
+3306 => x"000033a0",
+3307 => x"000033a0",
+3308 => x"000033a8",
+3309 => x"000033a8",
+3310 => x"000033b0",
+3311 => x"000033b0",
+3312 => x"000033b8",
+3313 => x"000033b8",
+3314 => x"000033c0",
+3315 => x"000033c0",
+3316 => x"000033c8",
+3317 => x"000033c8",
+3318 => x"000033d0",
+3319 => x"000033d0",
+3320 => x"000033d8",
+3321 => x"000033d8",
+3322 => x"000033e0",
+3323 => x"000033e0",
+3324 => x"000033e8",
+3325 => x"000033e8",
+3326 => x"000033f0",
+3327 => x"000033f0",
+3328 => x"000033f8",
+3329 => x"000033f8",
+3330 => x"00003400",
+3331 => x"00003400",
+3332 => x"00003408",
+3333 => x"00003408",
+3334 => x"00003410",
+3335 => x"00003410",
+3336 => x"00003418",
+3337 => x"00003418",
+3338 => x"00003420",
+3339 => x"00003420",
+3340 => x"00003428",
+3341 => x"00003428",
+3342 => x"00003430",
+3343 => x"00003430",
+3344 => x"00003438",
+3345 => x"00003438",
+3346 => x"00003440",
+3347 => x"00003440",
+3348 => x"00003448",
+3349 => x"00003448",
+3350 => x"00003450",
+3351 => x"00003450",
+3352 => x"00003458",
+3353 => x"00003458",
+3354 => x"00003460",
+3355 => x"00003460",
+3356 => x"00003468",
+3357 => x"00003468",
+3358 => x"00003470",
+3359 => x"00003470",
+3360 => x"00003478",
+3361 => x"00003478",
+3362 => x"00003480",
+3363 => x"00003480",
+3364 => x"00003488",
+3365 => x"00003488",
+3366 => x"00003490",
+3367 => x"00003490",
+3368 => x"00003498",
+3369 => x"00003498",
+3370 => x"000034a0",
+3371 => x"000034a0",
+3372 => x"000034a8",
+3373 => x"000034a8",
+3374 => x"000034b0",
+3375 => x"000034b0",
+3376 => x"000034b8",
+3377 => x"000034b8",
+3378 => x"000034c0",
+3379 => x"000034c0",
+3380 => x"000034c8",
+3381 => x"000034c8",
+3382 => x"000034d0",
+3383 => x"000034d0",
+3384 => x"000034d8",
+3385 => x"000034d8",
+3386 => x"000034e0",
+3387 => x"000034e0",
+3388 => x"000034e8",
+3389 => x"000034e8",
+3390 => x"000034f0",
+3391 => x"000034f0",
+3392 => x"000034f8",
+3393 => x"000034f8",
+3394 => x"00003500",
+3395 => x"00003500",
+3396 => x"00003508",
+3397 => x"00003508",
+3398 => x"00003510",
+3399 => x"00003510",
+3400 => x"00003518",
+3401 => x"00003518",
+3402 => x"00003520",
+3403 => x"00003520",
+3404 => x"00003528",
+3405 => x"00003528",
+3406 => x"00003530",
+3407 => x"00003530",
+3408 => x"00003538",
+3409 => x"00003538",
+3410 => x"00003540",
+3411 => x"00003540",
+3412 => x"00003548",
+3413 => x"00003548",
+3414 => x"00003550",
+3415 => x"00003550",
+3416 => x"00003558",
+3417 => x"00003558",
+3418 => x"00003560",
+3419 => x"00003560",
+3420 => x"00003568",
+3421 => x"00003568",
+3422 => x"00003570",
+3423 => x"00003570",
+3424 => x"00003578",
+3425 => x"00003578",
+3426 => x"00003580",
+3427 => x"00003580",
+3428 => x"00003588",
+3429 => x"00003588",
+3430 => x"00003590",
+3431 => x"00003590",
+3432 => x"00003598",
+3433 => x"00003598",
+3434 => x"000035a0",
+3435 => x"000035a0",
+3436 => x"000035a8",
+3437 => x"000035a8",
+3438 => x"000035b0",
+3439 => x"000035b0",
+3440 => x"000035b8",
+3441 => x"000035b8",
+3442 => x"000035c0",
+3443 => x"000035c0",
+3444 => x"000035c8",
+3445 => x"000035c8",
+3446 => x"000035d0",
+3447 => x"000035d0",
+3448 => x"000035d8",
+3449 => x"000035d8",
+3450 => x"000035e0",
+3451 => x"000035e0",
+3452 => x"000035e8",
+3453 => x"000035e8",
+3454 => x"000035f0",
+3455 => x"000035f0",
+3456 => x"000035f8",
+3457 => x"000035f8",
+3458 => x"00003600",
+3459 => x"00003600",
+3460 => x"00003608",
+3461 => x"00003608",
+3462 => x"00003610",
+3463 => x"00003610",
+3464 => x"00003618",
+3465 => x"00003618",
+3466 => x"00003620",
+3467 => x"00003620",
+3468 => x"00003628",
+3469 => x"00003628",
+3470 => x"00003630",
+3471 => x"00003630",
+3472 => x"00003638",
+3473 => x"00003638",
+3474 => x"00003640",
+3475 => x"00003640",
+3476 => x"00003648",
+3477 => x"00003648",
+3478 => x"00003650",
+3479 => x"00003650",
+3480 => x"00003658",
+3481 => x"00003658",
+3482 => x"00003660",
+3483 => x"00003660",
+3484 => x"00003668",
+3485 => x"00003668",
+3486 => x"00003670",
+3487 => x"00003670",
+3488 => x"00003678",
+3489 => x"00003678",
+3490 => x"00003680",
+3491 => x"00003680",
+3492 => x"00003688",
+3493 => x"00003688",
+3494 => x"00003690",
+3495 => x"00003690",
+3496 => x"00003698",
+3497 => x"00003698",
+3498 => x"000036a0",
+3499 => x"000036a0",
+3500 => x"000036a8",
+3501 => x"000036a8",
+3502 => x"000036b0",
+3503 => x"000036b0",
+3504 => x"000036b8",
+3505 => x"000036b8",
+3506 => x"000036c0",
+3507 => x"000036c0",
+3508 => x"000036c8",
+3509 => x"000036c8",
+3510 => x"000036d0",
+3511 => x"000036d0",
+3512 => x"000036d8",
+3513 => x"000036d8",
+3514 => x"000036e0",
+3515 => x"000036e0",
+3516 => x"000036e8",
+3517 => x"000036e8",
+3518 => x"000036f0",
+3519 => x"000036f0",
+3520 => x"000036f8",
+3521 => x"000036f8",
+3522 => x"00003700",
+3523 => x"00003700",
+3524 => x"00003708",
+3525 => x"00003708",
+3526 => x"00003710",
+3527 => x"00003710",
+3528 => x"00003718",
+3529 => x"00003718",
+3530 => x"0000372c",
+3531 => x"00000000",
+3532 => x"00003994",
+3533 => x"000039f0",
+3534 => x"00003a4c",
+3535 => x"00000000",
+3536 => x"00000000",
+3537 => x"00000000",
+3538 => x"00000000",
+3539 => x"00000000",
+3540 => x"00000000",
+3541 => x"00000000",
+3542 => x"00000000",
+3543 => x"00000000",
+3544 => x"000031ac",
+3545 => x"00000000",
+3546 => x"00000000",
+3547 => x"00000000",
+3548 => x"00000000",
+3549 => x"00000000",
+3550 => x"00000000",
+3551 => x"00000000",
+3552 => x"00000000",
+3553 => x"00000000",
+3554 => x"00000000",
+3555 => x"00000000",
+3556 => x"00000000",
+3557 => x"00000000",
+3558 => x"00000000",
+3559 => x"00000000",
+3560 => x"00000000",
+3561 => x"00000000",
+3562 => x"00000000",
+3563 => x"00000000",
+3564 => x"00000000",
+3565 => x"00000000",
+3566 => x"00000000",
+3567 => x"00000000",
+3568 => x"00000000",
+3569 => x"00000000",
+3570 => x"00000000",
+3571 => x"00000000",
+3572 => x"00000000",
+3573 => x"00000001",
+3574 => x"330eabcd",
+3575 => x"1234e66d",
+3576 => x"deec0005",
+3577 => x"000b0000",
+3578 => x"00000000",
+3579 => x"00000000",
+3580 => x"00000000",
+3581 => x"00000000",
+3582 => x"00000000",
+3583 => x"00000000",
+3584 => x"00000000",
+3585 => x"00000000",
+3586 => x"00000000",
+3587 => x"00000000",
+3588 => x"00000000",
+3589 => x"00000000",
+3590 => x"00000000",
+3591 => x"00000000",
+3592 => x"00000000",
+3593 => x"00000000",
+3594 => x"00000000",
+3595 => x"00000000",
+3596 => x"00000000",
+3597 => x"00000000",
+3598 => x"00000000",
+3599 => x"00000000",
+3600 => x"00000000",
+3601 => x"00000000",
+3602 => x"00000000",
+3603 => x"00000000",
+3604 => x"00000000",
+3605 => x"00000000",
+3606 => x"00000000",
+3607 => x"00000000",
+3608 => x"00000000",
+3609 => x"00000000",
+3610 => x"00000000",
+3611 => x"00000000",
+3612 => x"00000000",
+3613 => x"00000000",
+3614 => x"00000000",
+3615 => x"00000000",
+3616 => x"00000000",
+3617 => x"00000000",
+3618 => x"00000000",
+3619 => x"00000000",
+3620 => x"00000000",
+3621 => x"00000000",
+3622 => x"00000000",
+3623 => x"00000000",
+3624 => x"00000000",
+3625 => x"00000000",
+3626 => x"00000000",
+3627 => x"00000000",
+3628 => x"00000000",
+3629 => x"00000000",
+3630 => x"00000000",
+3631 => x"00000000",
+3632 => x"00000000",
+3633 => x"00000000",
+3634 => x"00000000",
+3635 => x"00000000",
+3636 => x"00000000",
+3637 => x"00000000",
+3638 => x"00000000",
+3639 => x"00000000",
+3640 => x"00000000",
+3641 => x"00000000",
+3642 => x"00000000",
+3643 => x"00000000",
+3644 => x"00000000",
+3645 => x"00000000",
+3646 => x"00000000",
+3647 => x"00000000",
+3648 => x"00000000",
+3649 => x"00000000",
+3650 => x"00000000",
+3651 => x"00000000",
+3652 => x"00000000",
+3653 => x"00000000",
+3654 => x"00000000",
+3655 => x"00000000",
+3656 => x"00000000",
+3657 => x"00000000",
+3658 => x"00000000",
+3659 => x"00000000",
+3660 => x"00000000",
+3661 => x"00000000",
+3662 => x"00000000",
+3663 => x"00000000",
+3664 => x"00000000",
+3665 => x"00000000",
+3666 => x"00000000",
+3667 => x"00000000",
+3668 => x"00000000",
+3669 => x"00000000",
+3670 => x"00000000",
+3671 => x"00000000",
+3672 => x"00000000",
+3673 => x"00000000",
+3674 => x"00000000",
+3675 => x"00000000",
+3676 => x"00000000",
+3677 => x"00000000",
+3678 => x"00000000",
+3679 => x"00000000",
+3680 => x"00000000",
+3681 => x"00000000",
+3682 => x"00000000",
+3683 => x"00000000",
+3684 => x"00000000",
+3685 => x"00000000",
+3686 => x"00000000",
+3687 => x"00000000",
+3688 => x"00000000",
+3689 => x"00000000",
+3690 => x"00000000",
+3691 => x"00000000",
+3692 => x"00000000",
+3693 => x"00000000",
+3694 => x"00000000",
+3695 => x"00000000",
+3696 => x"00000000",
+3697 => x"00000000",
+3698 => x"00000000",
+3699 => x"00000000",
+3700 => x"00000000",
+3701 => x"00000000",
+3702 => x"00000000",
+3703 => x"00000000",
+3704 => x"00000000",
+3705 => x"00000000",
+3706 => x"00000000",
+3707 => x"00000000",
+3708 => x"00000000",
+3709 => x"00000000",
+3710 => x"00000000",
+3711 => x"00000000",
+3712 => x"00000000",
+3713 => x"00000000",
+3714 => x"00000000",
+3715 => x"00000000",
+3716 => x"00000000",
+3717 => x"00000000",
+3718 => x"00000000",
+3719 => x"00000000",
+3720 => x"00000000",
+3721 => x"00000000",
+3722 => x"00000000",
+3723 => x"00000000",
+3724 => x"00000000",
+3725 => x"00000000",
+3726 => x"00000000",
+3727 => x"00000000",
+3728 => x"00000000",
+3729 => x"00000000",
+3730 => x"00000000",
+3731 => x"00000000",
+3732 => x"00000000",
+3733 => x"00000000",
+3734 => x"00000000",
+3735 => x"00000000",
+3736 => x"00000000",
+3737 => x"00000000",
+3738 => x"00000000",
+3739 => x"00000000",
+3740 => x"00000000",
+3741 => x"00000000",
+3742 => x"00000000",
+3743 => x"00000000",
+3744 => x"00000000",
+3745 => x"00000000",
+3746 => x"00000000",
+3747 => x"00000000",
+3748 => x"00000000",
+3749 => x"00000000",
+3750 => x"00000000",
+3751 => x"00000000",
+3752 => x"00000000",
+3753 => x"00000000",
+3754 => x"000031b0",
+3755 => x"ffffffff",
+3756 => x"00000000",
+3757 => x"ffffffff",
+3758 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
+ report "write collision" severity failure;
+ end if;
+
+ if (memAWriteEnable = '1') then
+ ram(conv_integer(memAAddr)) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(conv_integer(memAAddr));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(conv_integer(memBAddr)) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(conv_integer(memBAddr));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/zpu3/src/dualport_ram.vhd b/zpu/hdl/zpu3/src/dualport_ram.vhd
new file mode 100644
index 0000000..54380ce
--- /dev/null
+++ b/zpu/hdl/zpu3/src/dualport_ram.vhd
@@ -0,0 +1,4996 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"800b0b0b",
+1 => x"0b0b8070",
+2 => x"0b0b818a",
+3 => x"880c3a0b",
+4 => x"0b80fae8",
+5 => x"04000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80fbba2d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"530b0b51",
+38 => x"04000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"0b0b5104",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"530b0b51",
+55 => x"04000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"0b0b5104",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"72728072",
+73 => x"8106ff05",
+74 => x"09720605",
+75 => x"71105272",
+76 => x"0a100a53",
+77 => x"0b0b72eb",
+78 => x"38515153",
+79 => x"0b0b5104",
+80 => x"720a722b",
+81 => x"0a530b0b",
+82 => x"51040000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"0607530b",
+101 => x"0b510400",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"7171530b",
+105 => x"0b510406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"0b0b5104",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"530b0b51",
+125 => x"04000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"0505530b",
+138 => x"0b510400",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07530b0b",
+147 => x"51040000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b8189",
+162 => x"f4738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88ac0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0b8f",
+171 => x"e42d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0b91",
+179 => x"9c2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70540b0b",
+188 => x"71067309",
+189 => x"727405ff",
+190 => x"05060751",
+191 => x"51510400",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"0570540b",
+196 => x"0b710673",
+197 => x"09727405",
+198 => x"ff050607",
+199 => x"51515104",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"818a840c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"0571530b",
+250 => x"0b510400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"83cd3f80",
+257 => x"fd803f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"0b0b5104",
+267 => x"7381ff06",
+268 => x"73830609",
+269 => x"81058305",
+270 => x"1010102b",
+271 => x"0772fc06",
+272 => x"0c515104",
+273 => x"3c047070",
+274 => x"0b0b819a",
+275 => x"90085284",
+276 => x"0b720508",
+277 => x"70810651",
+278 => x"510b0b70",
+279 => x"f2387108",
+280 => x"81ff0680",
+281 => x"0c505004",
+282 => x"70700b0b",
+283 => x"819a9008",
+284 => x"52840b72",
+285 => x"0508700a",
+286 => x"100a7081",
+287 => x"06515151",
+288 => x"0b0b70ed",
+289 => x"3873720c",
+290 => x"50500481",
+291 => x"8a840880",
+292 => x"2ea83883",
+293 => x"80800b0b",
+294 => x"0b819a90",
+295 => x"0c82a080",
+296 => x"0b0b0b81",
+297 => x"9a940c82",
+298 => x"90800b81",
+299 => x"9aa40c0b",
+300 => x"0b819a98",
+301 => x"0b819aa8",
+302 => x"0c04f880",
+303 => x"8080a40b",
+304 => x"0b0b819a",
+305 => x"900cf880",
+306 => x"8082800b",
+307 => x"0b0b819a",
+308 => x"940cf880",
+309 => x"8084800b",
+310 => x"819aa40c",
+311 => x"f8808080",
+312 => x"940b819a",
+313 => x"a80cf880",
+314 => x"80809c0b",
+315 => x"819aa00c",
+316 => x"f8808080",
+317 => x"a00b819a",
+318 => x"ac0c04f2",
+319 => x"3d0d600b",
+320 => x"0b819a94",
+321 => x"08565d82",
+322 => x"750c8059",
+323 => x"805a800b",
+324 => x"8f3d7110",
+325 => x"10177008",
+326 => x"5a575d5b",
+327 => x"807781ff",
+328 => x"067c832b",
+329 => x"5658520b",
+330 => x"76530b0b",
+331 => x"7b5183ae",
+332 => x"3f7d7f7a",
+333 => x"72077c72",
+334 => x"07717160",
+335 => x"8105415f",
+336 => x"5d5b5957",
+337 => x"557a8724",
+338 => x"bf380b0b",
+339 => x"819a9408",
+340 => x"7b101071",
+341 => x"05700859",
+342 => x"51558077",
+343 => x"81ff067c",
+344 => x"832b5658",
+345 => x"520b7653",
+346 => x"0b0b7b51",
+347 => x"82f03f7d",
+348 => x"7f7a7207",
+349 => x"7c720771",
+350 => x"71608105",
+351 => x"415f5d5b",
+352 => x"59575587",
+353 => x"7b25c338",
+354 => x"767d0c77",
+355 => x"841e0c7c",
+356 => x"800c903d",
+357 => x"0d047070",
+358 => x"819a9c33",
+359 => x"510b0b70",
+360 => x"aa38818a",
+361 => x"90087008",
+362 => x"52520b70",
+363 => x"802e9638",
+364 => x"84720581",
+365 => x"8a900c70",
+366 => x"2d818a90",
+367 => x"08700852",
+368 => x"520b70ec",
+369 => x"38810b81",
+370 => x"9a9c3450",
+371 => x"50040470",
+372 => x"0b0b819a",
+373 => x"8c08802e",
+374 => x"8e380b0b",
+375 => x"0b0b800b",
+376 => x"802e0981",
+377 => x"06833850",
+378 => x"040b0b81",
+379 => x"9a8c510b",
+380 => x"0b0bf48c",
+381 => x"3f500404",
+382 => x"8c08028c",
+383 => x"0cfa3d0d",
+384 => x"800b8c08",
+385 => x"fc050c8c",
+386 => x"08fc0508",
+387 => x"892481b9",
+388 => x"388c08f0",
+389 => x"05705253",
+390 => x"0b0bfddf",
+391 => x"3f8c08f4",
+392 => x"05088c08",
+393 => x"f8050c8c",
+394 => x"08f80508",
+395 => x"520b0b81",
+396 => x"85b45187",
+397 => x"c53f0b0b",
+398 => x"8185c051",
+399 => x"8a8b3f0b",
+400 => x"0b8185d0",
+401 => x"518a823f",
+402 => x"fc0b819a",
+403 => x"b00c819a",
+404 => x"b008812c",
+405 => x"530b0b72",
+406 => x"fe2e8438",
+407 => x"87903f8a",
+408 => x"0b819ab4",
+409 => x"0c819ab4",
+410 => x"08819ab0",
+411 => x"0829530b",
+412 => x"0b72d82e",
+413 => x"843886f6",
+414 => x"3f8a0b81",
+415 => x"9ab00c84",
+416 => x"e2ad800b",
+417 => x"819ab40c",
+418 => x"819ab408",
+419 => x"819ab008",
+420 => x"29530b0b",
+421 => x"72afd7c2",
+422 => x"802e8438",
+423 => x"86d03f81",
+424 => x"0a0b819a",
+425 => x"b00cff0b",
+426 => x"819ab40c",
+427 => x"819ab408",
+428 => x"819ab008",
+429 => x"25843886",
+430 => x"b53f8c08",
+431 => x"fc050881",
+432 => x"058c08fc",
+433 => x"050cfebf",
+434 => x"398c08fc",
+435 => x"05088a2e",
+436 => x"8438869a",
+437 => x"3f72800c",
+438 => x"883d0d8c",
+439 => x"0c048c08",
+440 => x"028c0cf5",
+441 => x"3d0d8c08",
+442 => x"9405089f",
+443 => x"388c088c",
+444 => x"05088c08",
+445 => x"9005088c",
+446 => x"08880508",
+447 => x"5856540b",
+448 => x"0b73760c",
+449 => x"7484170c",
+450 => x"81cd3980",
+451 => x"0b8c08f0",
+452 => x"050c800b",
+453 => x"8c08f405",
+454 => x"0c8c088c",
+455 => x"05088c08",
+456 => x"90050856",
+457 => x"540b0b73",
+458 => x"8c08f005",
+459 => x"0c748c08",
+460 => x"f4050c8c",
+461 => x"08f8058c",
+462 => x"08f00556",
+463 => x"56887054",
+464 => x"0b0b7553",
+465 => x"0b0b7652",
+466 => x"540b0b85",
+467 => x"ef3fa00b",
+468 => x"8c089405",
+469 => x"08318c08",
+470 => x"ec050c8c",
+471 => x"08ec0508",
+472 => x"80249f38",
+473 => x"800b8c08",
+474 => x"f4050c8c",
+475 => x"08ec0508",
+476 => x"308c08fc",
+477 => x"0508712b",
+478 => x"8c08f005",
+479 => x"0c540b0b",
+480 => x"bb398c08",
+481 => x"fc05088c",
+482 => x"08ec0508",
+483 => x"2a8c08e8",
+484 => x"050c8c08",
+485 => x"fc05088c",
+486 => x"08940508",
+487 => x"2b8c08f4",
+488 => x"050c8c08",
+489 => x"f805088c",
+490 => x"08940508",
+491 => x"2b708c08",
+492 => x"e8050807",
+493 => x"8c08f005",
+494 => x"0c540b0b",
+495 => x"8c08f005",
+496 => x"088c08f4",
+497 => x"05088c08",
+498 => x"88050858",
+499 => x"56540b0b",
+500 => x"73760c74",
+501 => x"84170c8c",
+502 => x"08880508",
+503 => x"800c8d3d",
+504 => x"0d8c0c04",
+505 => x"8c08028c",
+506 => x"0cf93d0d",
+507 => x"800b8c08",
+508 => x"fc050c8c",
+509 => x"08880508",
+510 => x"8025ab38",
+511 => x"8c088805",
+512 => x"08308c08",
+513 => x"88050c80",
+514 => x"0b8c08f4",
+515 => x"050c8c08",
+516 => x"fc050888",
+517 => x"38810b8c",
+518 => x"08f4050c",
+519 => x"8c08f405",
+520 => x"088c08fc",
+521 => x"050c8c08",
+522 => x"8c050880",
+523 => x"25ab388c",
+524 => x"088c0508",
+525 => x"308c088c",
+526 => x"050c800b",
+527 => x"8c08f005",
+528 => x"0c8c08fc",
+529 => x"05088838",
+530 => x"810b8c08",
+531 => x"f0050c8c",
+532 => x"08f00508",
+533 => x"8c08fc05",
+534 => x"0c80530b",
+535 => x"0b8c088c",
+536 => x"0508528c",
+537 => x"08880508",
+538 => x"5181b13f",
+539 => x"8008708c",
+540 => x"08f8050c",
+541 => x"540b0b8c",
+542 => x"08fc0508",
+543 => x"802e8c38",
+544 => x"8c08f805",
+545 => x"08308c08",
+546 => x"f8050c8c",
+547 => x"08f80508",
+548 => x"70800c54",
+549 => x"0b0b893d",
+550 => x"0d8c0c04",
+551 => x"8c08028c",
+552 => x"0cfb3d0d",
+553 => x"800b8c08",
+554 => x"fc050c8c",
+555 => x"08880508",
+556 => x"80259338",
+557 => x"8c088805",
+558 => x"08308c08",
+559 => x"88050c81",
+560 => x"0b8c08fc",
+561 => x"050c8c08",
+562 => x"8c050880",
+563 => x"258c388c",
+564 => x"088c0508",
+565 => x"308c088c",
+566 => x"050c8153",
+567 => x"0b0b8c08",
+568 => x"8c050852",
+569 => x"8c088805",
+570 => x"0851b13f",
+571 => x"8008708c",
+572 => x"08f8050c",
+573 => x"540b0b8c",
+574 => x"08fc0508",
+575 => x"802e8c38",
+576 => x"8c08f805",
+577 => x"08308c08",
+578 => x"f8050c8c",
+579 => x"08f80508",
+580 => x"70800c54",
+581 => x"0b0b873d",
+582 => x"0d8c0c04",
+583 => x"8c08028c",
+584 => x"0c707070",
+585 => x"70810b8c",
+586 => x"08fc050c",
+587 => x"800b8c08",
+588 => x"f8050c8c",
+589 => x"088c0508",
+590 => x"8c088805",
+591 => x"0827ac38",
+592 => x"8c08fc05",
+593 => x"08802ea3",
+594 => x"38800b8c",
+595 => x"088c0508",
+596 => x"2499388c",
+597 => x"088c0508",
+598 => x"108c088c",
+599 => x"050c8c08",
+600 => x"fc050810",
+601 => x"8c08fc05",
+602 => x"0cc9398c",
+603 => x"08fc0508",
+604 => x"802e80c9",
+605 => x"388c088c",
+606 => x"05088c08",
+607 => x"88050826",
+608 => x"a1388c08",
+609 => x"8805088c",
+610 => x"088c0508",
+611 => x"318c0888",
+612 => x"050c8c08",
+613 => x"f805088c",
+614 => x"08fc0508",
+615 => x"078c08f8",
+616 => x"050c8c08",
+617 => x"fc050881",
+618 => x"2a8c08fc",
+619 => x"050c8c08",
+620 => x"8c050881",
+621 => x"2a8c088c",
+622 => x"050cffaf",
+623 => x"398c0890",
+624 => x"0508802e",
+625 => x"8f388c08",
+626 => x"88050870",
+627 => x"8c08f405",
+628 => x"0c518d39",
+629 => x"8c08f805",
+630 => x"08708c08",
+631 => x"f4050c51",
+632 => x"8c08f405",
+633 => x"08800c50",
+634 => x"5050508c",
+635 => x"0c047086",
+636 => x"5186a03f",
+637 => x"815180e7",
+638 => x"be3ffc3d",
+639 => x"0d873d70",
+640 => x"70840552",
+641 => x"0856530b",
+642 => x"0b745281",
+643 => x"8a940888",
+644 => x"71050852",
+645 => x"540b0b9f",
+646 => x"e73f863d",
+647 => x"0d047070",
+648 => x"7070863d",
+649 => x"8805530b",
+650 => x"0b765275",
+651 => x"88710508",
+652 => x"52540b0b",
+653 => x"9fca3f50",
+654 => x"50505004",
+655 => x"fc3d0d76",
+656 => x"70797b55",
+657 => x"5555558f",
+658 => x"72278e38",
+659 => x"72750783",
+660 => x"06510b0b",
+661 => x"70802eaf",
+662 => x"38ff7205",
+663 => x"520b0b71",
+664 => x"ff2e9d38",
+665 => x"72708105",
+666 => x"540b0b33",
+667 => x"74708105",
+668 => x"5634ff72",
+669 => x"05520b0b",
+670 => x"71ff2e09",
+671 => x"8106e538",
+672 => x"74800c86",
+673 => x"3d0d0474",
+674 => x"51727084",
+675 => x"05540b0b",
+676 => x"08717084",
+677 => x"05530b0b",
+678 => x"0c727084",
+679 => x"05540b0b",
+680 => x"08717084",
+681 => x"05530b0b",
+682 => x"0c727084",
+683 => x"05540b0b",
+684 => x"08717084",
+685 => x"05530b0b",
+686 => x"0c727084",
+687 => x"05540b0b",
+688 => x"08717084",
+689 => x"05530b0b",
+690 => x"0cf07205",
+691 => x"520b0b71",
+692 => x"8f26ffb5",
+693 => x"38837227",
+694 => x"9c387270",
+695 => x"8405540b",
+696 => x"0b087170",
+697 => x"8405530b",
+698 => x"0b0cfc72",
+699 => x"05520b0b",
+700 => x"718326e6",
+701 => x"3870540b",
+702 => x"0bfede39",
+703 => x"f73d0d7c",
+704 => x"7052530b",
+705 => x"0b858c3f",
+706 => x"72540b0b",
+707 => x"80085581",
+708 => x"85e05681",
+709 => x"57800881",
+710 => x"055a8b3d",
+711 => x"e4710559",
+712 => x"530b0b82",
+713 => x"59f47305",
+714 => x"527b8871",
+715 => x"05085253",
+716 => x"0b0bb7ce",
+717 => x"3f800830",
+718 => x"70800807",
+719 => x"9f2c8a07",
+720 => x"800c530b",
+721 => x"0b8b3d0d",
+722 => x"04707073",
+723 => x"52818a94",
+724 => x"0851ffa8",
+725 => x"3f505004",
+726 => x"70707070",
+727 => x"75530b0b",
+728 => x"84d87305",
+729 => x"08802e8d",
+730 => x"3880530b",
+731 => x"0b72800c",
+732 => x"50505050",
+733 => x"04818052",
+734 => x"725180c1",
+735 => x"cc3f8008",
+736 => x"84d8140c",
+737 => x"ff530b0b",
+738 => x"8008802e",
+739 => x"e0388008",
+740 => x"540b0b9f",
+741 => x"530b0b80",
+742 => x"74708405",
+743 => x"560cff73",
+744 => x"05530b0b",
+745 => x"807324c1",
+746 => x"38807470",
+747 => x"8405560c",
+748 => x"ff730553",
+749 => x"0b0b7280",
+750 => x"25dd38ff",
+751 => x"ac397070",
+752 => x"70707577",
+753 => x"55530b0b",
+754 => x"9f742790",
+755 => x"3896730c",
+756 => x"ff520b0b",
+757 => x"71800c50",
+758 => x"50505004",
+759 => x"84d87305",
+760 => x"08520b0b",
+761 => x"71802e97",
+762 => x"38731010",
+763 => x"72057008",
+764 => x"79720c51",
+765 => x"520b0b71",
+766 => x"800c5050",
+767 => x"50500472",
+768 => x"51fed53f",
+769 => x"ff528008",
+770 => x"c93884d8",
+771 => x"73050874",
+772 => x"10107105",
+773 => x"70087a72",
+774 => x"0c515152",
+775 => x"d839f93d",
+776 => x"0d797b58",
+777 => x"560b769f",
+778 => x"2680f138",
+779 => x"84d81608",
+780 => x"540b0b73",
+781 => x"802ead38",
+782 => x"76101014",
+783 => x"70085555",
+784 => x"0b73802e",
+785 => x"be388058",
+786 => x"73812e8f",
+787 => x"3873ff2e",
+788 => x"a7388075",
+789 => x"0c765173",
+790 => x"2d80580b",
+791 => x"0b77800c",
+792 => x"893d0d04",
+793 => x"7551fdf0",
+794 => x"3fff5880",
+795 => x"08ed3884",
+796 => x"d8160854",
+797 => x"0b0bc139",
+798 => x"96760c81",
+799 => x"0b800c89",
+800 => x"3d0d0475",
+801 => x"5182873f",
+802 => x"76530b0b",
+803 => x"80085275",
+804 => x"5181be3f",
+805 => x"8008800c",
+806 => x"893d0d04",
+807 => x"96760cff",
+808 => x"0b800c89",
+809 => x"3d0d04fc",
+810 => x"3d0d7678",
+811 => x"56530b0b",
+812 => x"ff540b0b",
+813 => x"749f2680",
+814 => x"c13884d8",
+815 => x"73050852",
+816 => x"0b0b7180",
+817 => x"2ebb3874",
+818 => x"10107205",
+819 => x"7008530b",
+820 => x"0b530b0b",
+821 => x"81540b0b",
+822 => x"71802e9e",
+823 => x"3882540b",
+824 => x"0b71ff2e",
+825 => x"95388354",
+826 => x"0b0b7181",
+827 => x"2e8c3880",
+828 => x"730c7451",
+829 => x"712d8054",
+830 => x"0b0b7380",
+831 => x"0c863d0d",
+832 => x"047251fc",
+833 => x"d33f8008",
+834 => x"f13884d8",
+835 => x"73050852",
+836 => x"ffb53970",
+837 => x"70735281",
+838 => x"8a940851",
+839 => x"fe803f50",
+840 => x"50047070",
+841 => x"7075530b",
+842 => x"0b745281",
+843 => x"8a940851",
+844 => x"fd8c3f50",
+845 => x"50500470",
+846 => x"818a9408",
+847 => x"51fc993f",
+848 => x"50047070",
+849 => x"7352818a",
+850 => x"940851fe",
+851 => x"da3f5050",
+852 => x"04fc3d0d",
+853 => x"800b819a",
+854 => x"b80c7852",
+855 => x"775180df",
+856 => x"bc3f8008",
+857 => x"540b0b80",
+858 => x"08ff2e88",
+859 => x"3873800c",
+860 => x"863d0d04",
+861 => x"819ab808",
+862 => x"550b0b74",
+863 => x"802eee38",
+864 => x"7675710c",
+865 => x"530b0b73",
+866 => x"800c863d",
+867 => x"0d0480df",
+868 => x"873f0470",
+869 => x"70707075",
+870 => x"70718306",
+871 => x"530b0b55",
+872 => x"5270bf38",
+873 => x"71700870",
+874 => x"09f7fbfd",
+875 => x"ff720506",
+876 => x"70f88482",
+877 => x"81800651",
+878 => x"5152530b",
+879 => x"0b70a138",
+880 => x"84730570",
+881 => x"087009f7",
+882 => x"fbfdff72",
+883 => x"050670f8",
+884 => x"84828180",
+885 => x"06515152",
+886 => x"530b0b70",
+887 => x"802ee138",
+888 => x"72520b0b",
+889 => x"7133510b",
+890 => x"0b70802e",
+891 => x"8c388172",
+892 => x"05703352",
+893 => x"520b70f6",
+894 => x"38717431",
+895 => x"800c5050",
+896 => x"50500470",
+897 => x"70707076",
+898 => x"88710508",
+899 => x"540b0b54",
+900 => x"0b0b728d",
+901 => x"38728415",
+902 => x"0c72800c",
+903 => x"50505050",
+904 => x"04735275",
+905 => x"51b1db3f",
+906 => x"800b8815",
+907 => x"0c800b84",
+908 => x"150c8008",
+909 => x"800c5050",
+910 => x"505004fd",
+911 => x"ad3d0d82",
+912 => x"d63d0882",
+913 => x"d83d0882",
+914 => x"da3d0882",
+915 => x"dc3d0844",
+916 => x"5b454980",
+917 => x"70658c05",
+918 => x"2270832a",
+919 => x"81327081",
+920 => x"06515959",
+921 => x"4947750b",
+922 => x"672e0981",
+923 => x"068c3863",
+924 => x"90050867",
+925 => x"2e098106",
+926 => x"92386351",
+927 => x"a2e03fff",
+928 => x"56800881",
+929 => x"ec38638c",
+930 => x"0522570b",
+931 => x"0b769a06",
+932 => x"560b0b75",
+933 => x"8a2ebf38",
+934 => x"82c13d70",
+935 => x"7182d43d",
+936 => x"0c5b4380",
+937 => x"0b82d43d",
+938 => x"0c800b82",
+939 => x"d33d0c80",
+940 => x"46785b80",
+941 => x"79337081",
+942 => x"ff065959",
+943 => x"56760b76",
+944 => x"2e833881",
+945 => x"5676a52e",
+946 => x"81b13875",
+947 => x"802e81ab",
+948 => x"38811959",
+949 => x"de39638e",
+950 => x"05227090",
+951 => x"2b575880",
+952 => x"7624ffb4",
+953 => x"3876fd06",
+954 => x"560b0b75",
+955 => x"82a33d23",
+956 => x"77028405",
+957 => x"89860523",
+958 => x"639c0508",
+959 => x"82a73d0c",
+960 => x"63a40508",
+961 => x"82a93d0c",
+962 => x"9f3d7082",
+963 => x"a13d0c82",
+964 => x"a43d0c88",
+965 => x"800b82a2",
+966 => x"3d0c8880",
+967 => x"0b82a53d",
+968 => x"0c800b82",
+969 => x"a63d0c60",
+970 => x"530b0b78",
+971 => x"52829f3d",
+972 => x"70525695",
+973 => x"cb3f8008",
+974 => x"57800b80",
+975 => x"08248e38",
+976 => x"7551a39b",
+977 => x"3f800880",
+978 => x"2e8338ff",
+979 => x"5782a23d",
+980 => x"2270862a",
+981 => x"70810651",
+982 => x"57580b75",
+983 => x"802e9038",
+984 => x"638c0522",
+985 => x"80c00756",
+986 => x"0b0b7564",
+987 => x"8c052376",
+988 => x"560b0b75",
+989 => x"800c82d5",
+990 => x"3d0d0478",
+991 => x"7b31570b",
+992 => x"0b76802e",
+993 => x"b1387a7a",
+994 => x"0c76841b",
+995 => x"0c82d33d",
+996 => x"081782d4",
+997 => x"3d0c881a",
+998 => x"82d33d08",
+999 => x"81710582",
+1000 => x"d53d0c81",
+1001 => x"71055157",
+1002 => x"5a0b7587",
+1003 => x"2480cb38",
+1004 => x"65177933",
+1005 => x"59460b77",
+1006 => x"81ff0656",
+1007 => x"0b0b7580",
+1008 => x"2e93fe38",
+1009 => x"81195980",
+1010 => x"70714743",
+1011 => x"5fff5e7e",
+1012 => x"82d53d34",
+1013 => x"7833580b",
+1014 => x"0b7781ff",
+1015 => x"06811a5a",
+1016 => x"5de01d56",
+1017 => x"0b0b7580",
+1018 => x"d82687a1",
+1019 => x"38751010",
+1020 => x"81868405",
+1021 => x"560b0b75",
+1022 => x"080482d5",
+1023 => x"3df00552",
+1024 => x"6351fbff",
+1025 => x"3f80088a",
+1026 => x"a5386266",
+1027 => x"187a335a",
+1028 => x"475affa2",
+1029 => x"397e9007",
+1030 => x"5f0b0b7e",
+1031 => x"842a7081",
+1032 => x"0651560b",
+1033 => x"0b7592ba",
+1034 => x"387e862a",
+1035 => x"70810651",
+1036 => x"560b0b75",
+1037 => x"802e92aa",
+1038 => x"38606184",
+1039 => x"05827205",
+1040 => x"225a4256",
+1041 => x"815c800b",
+1042 => x"82d53d34",
+1043 => x"7d42807e",
+1044 => x"2486387e",
+1045 => x"feff065f",
+1046 => x"62783070",
+1047 => x"7a079f2a",
+1048 => x"64307066",
+1049 => x"079f2a72",
+1050 => x"07525951",
+1051 => x"585b0b76",
+1052 => x"802e918d",
+1053 => x"387b812e",
+1054 => x"8b9d3881",
+1055 => x"7c259281",
+1056 => x"387b822e",
+1057 => x"8bd63881",
+1058 => x"88e85b0b",
+1059 => x"0b7a51fa",
+1060 => x"823f8008",
+1061 => x"5c0b0b7b",
+1062 => x"5e7b6225",
+1063 => x"8338615e",
+1064 => x"82d43d33",
+1065 => x"7081ff06",
+1066 => x"57580b75",
+1067 => x"802e90ba",
+1068 => x"38811e5e",
+1069 => x"7e818406",
+1070 => x"400b0b7f",
+1071 => x"80fa3864",
+1072 => x"7e315780",
+1073 => x"0b772580",
+1074 => x"ef389077",
+1075 => x"25b93881",
+1076 => x"85e47a0c",
+1077 => x"900b841b",
+1078 => x"0c82d33d",
+1079 => x"08900582",
+1080 => x"d43d0c88",
+1081 => x"1a82d33d",
+1082 => x"08817105",
+1083 => x"82d53d0c",
+1084 => x"81710551",
+1085 => x"575a0b75",
+1086 => x"872485aa",
+1087 => x"38f01757",
+1088 => x"0b0b7690",
+1089 => x"24c93881",
+1090 => x"85e47a0c",
+1091 => x"76841b0c",
+1092 => x"82d33d08",
+1093 => x"1782d43d",
+1094 => x"0c881a82",
+1095 => x"d33d0881",
+1096 => x"710582d5",
+1097 => x"3d0c8171",
+1098 => x"0551575a",
+1099 => x"0b758724",
+1100 => x"8ff63882",
+1101 => x"d43d3358",
+1102 => x"0b0b7781",
+1103 => x"ff06560b",
+1104 => x"0b75802e",
+1105 => x"86e83882",
+1106 => x"d53dfc71",
+1107 => x"057b0c58",
+1108 => x"810b841b",
+1109 => x"0c82d33d",
+1110 => x"08810582",
+1111 => x"d43d0c88",
+1112 => x"1a82d33d",
+1113 => x"08817105",
+1114 => x"82d53d0c",
+1115 => x"81710551",
+1116 => x"575a0b75",
+1117 => x"87248789",
+1118 => x"387f8180",
+1119 => x"2e84d738",
+1120 => x"617c3157",
+1121 => x"800b7725",
+1122 => x"80fa3890",
+1123 => x"7725b938",
+1124 => x"8185f47a",
+1125 => x"0c900b84",
+1126 => x"1b0c82d3",
+1127 => x"3d089005",
+1128 => x"82d43d0c",
+1129 => x"881a82d3",
+1130 => x"3d088171",
+1131 => x"0582d53d",
+1132 => x"0c817105",
+1133 => x"51575a0b",
+1134 => x"75872484",
+1135 => x"8138f017",
+1136 => x"570b0b76",
+1137 => x"9024c938",
+1138 => x"8185f47a",
+1139 => x"0c76841b",
+1140 => x"0c82d33d",
+1141 => x"081782d4",
+1142 => x"3d0c881a",
+1143 => x"82d33d08",
+1144 => x"81710582",
+1145 => x"d53d0c81",
+1146 => x"71055157",
+1147 => x"5a877625",
+1148 => x"933882d5",
+1149 => x"3df00552",
+1150 => x"6351f887",
+1151 => x"3f800886",
+1152 => x"ad38625a",
+1153 => x"7a0b7a0c",
+1154 => x"7b841b0c",
+1155 => x"82d33d08",
+1156 => x"1c82d43d",
+1157 => x"0c881a82",
+1158 => x"d33d0881",
+1159 => x"710582d5",
+1160 => x"3d0c8171",
+1161 => x"0551575a",
+1162 => x"0b758724",
+1163 => x"84eb387e",
+1164 => x"822a7081",
+1165 => x"0651560b",
+1166 => x"0b75802e",
+1167 => x"81813864",
+1168 => x"7e315780",
+1169 => x"0b772580",
+1170 => x"f6389077",
+1171 => x"25b93881",
+1172 => x"85e47a0c",
+1173 => x"900b841b",
+1174 => x"0c82d33d",
+1175 => x"08900582",
+1176 => x"d43d0c88",
+1177 => x"1a82d33d",
+1178 => x"08817105",
+1179 => x"82d53d0c",
+1180 => x"81710551",
+1181 => x"575a0b75",
+1182 => x"87248485",
+1183 => x"38f01757",
+1184 => x"0b0b7690",
+1185 => x"24c93881",
+1186 => x"85e47a0c",
+1187 => x"76841b0c",
+1188 => x"82d33d08",
+1189 => x"1782d43d",
+1190 => x"0c82d23d",
+1191 => x"08817105",
+1192 => x"82d43d0c",
+1193 => x"81710551",
+1194 => x"56870b76",
+1195 => x"25913882",
+1196 => x"d53df005",
+1197 => x"526351f6",
+1198 => x"ca3f8008",
+1199 => x"84f0387d",
+1200 => x"567d6525",
+1201 => x"83386456",
+1202 => x"65164682",
+1203 => x"d33d0884",
+1204 => x"cb38800b",
+1205 => x"82d33d0c",
+1206 => x"625a6680",
+1207 => x"2ef7d238",
+1208 => x"6651b2d6",
+1209 => x"3f80795c",
+1210 => x"47f7c839",
+1211 => x"7e90075f",
+1212 => x"0b0b7e84",
+1213 => x"2a708106",
+1214 => x"51560b0b",
+1215 => x"758cd538",
+1216 => x"7e862a70",
+1217 => x"81065156",
+1218 => x"0b0b7580",
+1219 => x"2e8cc538",
+1220 => x"60618405",
+1221 => x"82720522",
+1222 => x"5a425680",
+1223 => x"5c800b82",
+1224 => x"d53d34fa",
+1225 => x"a7397e90",
+1226 => x"075f0b0b",
+1227 => x"7e842a70",
+1228 => x"81065156",
+1229 => x"0b0b758c",
+1230 => x"89387e86",
+1231 => x"2a708106",
+1232 => x"51560b0b",
+1233 => x"75802e8b",
+1234 => x"f9386061",
+1235 => x"84057108",
+1236 => x"902b7090",
+1237 => x"2c515a42",
+1238 => x"56807824",
+1239 => x"89ac3881",
+1240 => x"5cf9e939",
+1241 => x"60618405",
+1242 => x"71084742",
+1243 => x"56648025",
+1244 => x"f8e23864",
+1245 => x"30457e84",
+1246 => x"07793359",
+1247 => x"5ff8d839",
+1248 => x"8119597e",
+1249 => x"90077933",
+1250 => x"595ff8cb",
+1251 => x"397c802e",
+1252 => x"8caf3882",
+1253 => x"b73d5b7c",
+1254 => x"0b7b3481",
+1255 => x"5c800b82",
+1256 => x"d53d34f9",
+1257 => x"f03982d5",
+1258 => x"3df00552",
+1259 => x"6351f4d3",
+1260 => x"3f800882",
+1261 => x"f93862f0",
+1262 => x"18585afa",
+1263 => x"c33982d5",
+1264 => x"3df00552",
+1265 => x"6351f4bb",
+1266 => x"3f800882",
+1267 => x"e13862f0",
+1268 => x"18585afb",
+1269 => x"ec39647e",
+1270 => x"3157800b",
+1271 => x"7725fba0",
+1272 => x"38907725",
+1273 => x"b9388185",
+1274 => x"f47a0c90",
+1275 => x"0b841b0c",
+1276 => x"82d33d08",
+1277 => x"900582d4",
+1278 => x"3d0c881a",
+1279 => x"82d33d08",
+1280 => x"81710582",
+1281 => x"d53d0c81",
+1282 => x"71055157",
+1283 => x"5a0b7587",
+1284 => x"2480d638",
+1285 => x"f017570b",
+1286 => x"0b769024",
+1287 => x"c9388185",
+1288 => x"f47a0c76",
+1289 => x"841b0c82",
+1290 => x"d33d0817",
+1291 => x"82d43d0c",
+1292 => x"881a82d3",
+1293 => x"3d088171",
+1294 => x"0582d53d",
+1295 => x"0c817105",
+1296 => x"51575a87",
+1297 => x"7625fab8",
+1298 => x"3882d53d",
+1299 => x"f0055263",
+1300 => x"51f3b03f",
+1301 => x"800881d6",
+1302 => x"3862627d",
+1303 => x"31585a0b",
+1304 => x"768024fa",
+1305 => x"a638fb9c",
+1306 => x"3982d53d",
+1307 => x"f0055263",
+1308 => x"51f3903f",
+1309 => x"800881b6",
+1310 => x"3862f018",
+1311 => x"585aff97",
+1312 => x"3982d53d",
+1313 => x"f0055263",
+1314 => x"51f2f83f",
+1315 => x"8008819e",
+1316 => x"3862f018",
+1317 => x"585afbe8",
+1318 => x"3982d53d",
+1319 => x"f0055263",
+1320 => x"51f2e03f",
+1321 => x"80088186",
+1322 => x"38625afb",
+1323 => x"82397e0a",
+1324 => x"100a7081",
+1325 => x"0651560b",
+1326 => x"0b75802e",
+1327 => x"f9bb38b0",
+1328 => x"0b82b73d",
+1329 => x"347c0284",
+1330 => x"0589d505",
+1331 => x"3482d53d",
+1332 => x"ff84057a",
+1333 => x"0c820b84",
+1334 => x"1b0c82d3",
+1335 => x"3d088205",
+1336 => x"82d43d0c",
+1337 => x"881a82d3",
+1338 => x"3d088171",
+1339 => x"0582d53d",
+1340 => x"0c817105",
+1341 => x"51575a87",
+1342 => x"7625f8fd",
+1343 => x"3882d53d",
+1344 => x"58f01852",
+1345 => x"6351f1fb",
+1346 => x"3f8008a2",
+1347 => x"38625a7f",
+1348 => x"81802e09",
+1349 => x"8106f8e8",
+1350 => x"38fdbb39",
+1351 => x"82d53df0",
+1352 => x"05526351",
+1353 => x"f1dd3f80",
+1354 => x"08802efb",
+1355 => x"a5386680",
+1356 => x"2e863866",
+1357 => x"51ae833f",
+1358 => x"638c0522",
+1359 => x"70862a70",
+1360 => x"8106685a",
+1361 => x"5157440b",
+1362 => x"75802ef4",
+1363 => x"a238ff56",
+1364 => x"f49f3980",
+1365 => x"0b82d53d",
+1366 => x"34606184",
+1367 => x"0571085d",
+1368 => x"42567a80",
+1369 => x"2e88d138",
+1370 => x"7c80d32e",
+1371 => x"85aa387e",
+1372 => x"842a7081",
+1373 => x"0651560b",
+1374 => x"0b75859c",
+1375 => x"38807e24",
+1376 => x"f689387d",
+1377 => x"530b0b75",
+1378 => x"527a51ba",
+1379 => x"d03f7d5c",
+1380 => x"8008802e",
+1381 => x"f5ff3880",
+1382 => x"087b315c",
+1383 => x"7d0b7c25",
+1384 => x"f5f3387d",
+1385 => x"5cf5ee39",
+1386 => x"7e842a70",
+1387 => x"81065156",
+1388 => x"0b0b7587",
+1389 => x"bb387e86",
+1390 => x"2a708106",
+1391 => x"51560b0b",
+1392 => x"75802e87",
+1393 => x"ab386061",
+1394 => x"84057108",
+1395 => x"52425665",
+1396 => x"0b762378",
+1397 => x"5bf1dc39",
+1398 => x"78337081",
+1399 => x"ff065758",
+1400 => x"0b7580ec",
+1401 => x"2efb9938",
+1402 => x"7e900778",
+1403 => x"81ff0681",
+1404 => x"1b5b5e5f",
+1405 => x"f3eb3960",
+1406 => x"61840571",
+1407 => x"085a4256",
+1408 => x"820b8189",
+1409 => x"84607207",
+1410 => x"41495c80",
+1411 => x"f85d800b",
+1412 => x"82d53d34",
+1413 => x"f4b63989",
+1414 => x"7827a838",
+1415 => x"ff1b5b8a",
+1416 => x"52775180",
+1417 => x"d8b43f80",
+1418 => x"08b00556",
+1419 => x"0b0b757b",
+1420 => x"348a5277",
+1421 => x"5180d7f6",
+1422 => x"3f800858",
+1423 => x"0b0b7789",
+1424 => x"26da38ff",
+1425 => x"1bb01957",
+1426 => x"5b0b750b",
+1427 => x"7b3482d5",
+1428 => x"3d707c31",
+1429 => x"ffb0055d",
+1430 => x"56f4ba39",
+1431 => x"ff1b788f",
+1432 => x"06690557",
+1433 => x"5b0b7533",
+1434 => x"7b347784",
+1435 => x"2a580b0b",
+1436 => x"77802eda",
+1437 => x"38ff1b78",
+1438 => x"8f066905",
+1439 => x"575b0b75",
+1440 => x"337b3477",
+1441 => x"842a580b",
+1442 => x"0b77d138",
+1443 => x"c1397e80",
+1444 => x"c0077933",
+1445 => x"595ff2bf",
+1446 => x"3982b73d",
+1447 => x"5b7c80c3",
+1448 => x"2e91387e",
+1449 => x"842a7081",
+1450 => x"0651560b",
+1451 => x"0b75802e",
+1452 => x"82c83888",
+1453 => x"530b0b80",
+1454 => x"529d3d70",
+1455 => x"5256bbcf",
+1456 => x"3f75540b",
+1457 => x"0b606184",
+1458 => x"05710855",
+1459 => x"7c540b0b",
+1460 => x"6a530b0b",
+1461 => x"425686e8",
+1462 => x"3f80085c",
+1463 => x"8008ff2e",
+1464 => x"fccc3880",
+1465 => x"0b82d53d",
+1466 => x"34f3aa39",
+1467 => x"78708105",
+1468 => x"5a335d0b",
+1469 => x"0b7caa2e",
+1470 => x"85ef3880",
+1471 => x"0bd01e71",
+1472 => x"4057570b",
+1473 => x"758926f1",
+1474 => x"d8387610",
+1475 => x"10107710",
+1476 => x"057d05d0",
+1477 => x"05797081",
+1478 => x"055b33d0",
+1479 => x"7105585e",
+1480 => x"57897627",
+1481 => x"e538765e",
+1482 => x"76ff25f1",
+1483 => x"b438ff5e",
+1484 => x"f1af3981",
+1485 => x"89987f84",
+1486 => x"2a708106",
+1487 => x"5157480b",
+1488 => x"75818a38",
+1489 => x"7e862a70",
+1490 => x"81065156",
+1491 => x"0b0b7580",
+1492 => x"2e80fa38",
+1493 => x"60618405",
+1494 => x"82720522",
+1495 => x"5a425682",
+1496 => x"7f810657",
+1497 => x"5c77802e",
+1498 => x"f1dc3875",
+1499 => x"802ef1d6",
+1500 => x"387e7c07",
+1501 => x"5f800b82",
+1502 => x"d53d34f1",
+1503 => x"cf39ab0b",
+1504 => x"82d53d34",
+1505 => x"783358f0",
+1506 => x"ce398057",
+1507 => x"0b0b7610",
+1508 => x"10107710",
+1509 => x"057d05d0",
+1510 => x"05797081",
+1511 => x"055b33d0",
+1512 => x"7105585e",
+1513 => x"57897627",
+1514 => x"e3387645",
+1515 => x"f0b3397e",
+1516 => x"81800779",
+1517 => x"33595ff0",
+1518 => x"9e398189",
+1519 => x"847f842a",
+1520 => x"70810651",
+1521 => x"57480b75",
+1522 => x"802efef8",
+1523 => x"38606184",
+1524 => x"0571085a",
+1525 => x"4256ff87",
+1526 => x"397e8107",
+1527 => x"7933595f",
+1528 => x"eff53982",
+1529 => x"d43d3356",
+1530 => x"0b0b75ef",
+1531 => x"e738a00b",
+1532 => x"82d53d34",
+1533 => x"783358ef",
+1534 => x"de396061",
+1535 => x"84054256",
+1536 => x"8316337b",
+1537 => x"34815cf7",
+1538 => x"94397730",
+1539 => x"58ad0b82",
+1540 => x"d53d3481",
+1541 => x"5cf0b539",
+1542 => x"7a4a8070",
+1543 => x"585c8853",
+1544 => x"0b0b7b52",
+1545 => x"9b3d7052",
+1546 => x"58b8e43f",
+1547 => x"7b7e2481",
+1548 => x"94387610",
+1549 => x"106a0556",
+1550 => x"0b0b7508",
+1551 => x"802eb638",
+1552 => x"77540b0b",
+1553 => x"7508530b",
+1554 => x"0b82d53d",
+1555 => x"ff880552",
+1556 => x"685183ec",
+1557 => x"3f8008ff",
+1558 => x"2ef9d338",
+1559 => x"80081c56",
+1560 => x"0b0b757e",
+1561 => x"248f3881",
+1562 => x"17765d57",
+1563 => x"757e2e09",
+1564 => x"8106ffbe",
+1565 => x"387b802e",
+1566 => x"f09b3881",
+1567 => x"1c526851",
+1568 => x"a7c73f80",
+1569 => x"08478008",
+1570 => x"802ef9ac",
+1571 => x"3888530b",
+1572 => x"0b805277",
+1573 => x"51b7f83f",
+1574 => x"77557b54",
+1575 => x"0b0b82d5",
+1576 => x"3df69405",
+1577 => x"530b0b66",
+1578 => x"52685184",
+1579 => x"8a3f8008",
+1580 => x"7c2e0981",
+1581 => x"06f8f738",
+1582 => x"66678008",
+1583 => x"05575b80",
+1584 => x"7634efd1",
+1585 => x"3977557b",
+1586 => x"540b0b82",
+1587 => x"d53df694",
+1588 => x"05530b0b",
+1589 => x"7b526851",
+1590 => x"83dd3f80",
+1591 => x"085c8008",
+1592 => x"ff2ef8ca",
+1593 => x"387a4aff",
+1594 => x"8c397e0a",
+1595 => x"100a7081",
+1596 => x"0651560b",
+1597 => x"0b75802e",
+1598 => x"efba3882",
+1599 => x"1e5eefb4",
+1600 => x"397bfaca",
+1601 => x"387e8106",
+1602 => x"560b0b75",
+1603 => x"802efabe",
+1604 => x"380289ff",
+1605 => x"055bb00b",
+1606 => x"7b3482d5",
+1607 => x"3d707c31",
+1608 => x"ffb0055d",
+1609 => x"56eeee39",
+1610 => x"82d53df0",
+1611 => x"05526351",
+1612 => x"e9d13f80",
+1613 => x"08f7f738",
+1614 => x"6282d53d",
+1615 => x"33595aef",
+1616 => x"f7396061",
+1617 => x"84057108",
+1618 => x"5a425677",
+1619 => x"8025f48f",
+1620 => x"38fdb739",
+1621 => x"60618405",
+1622 => x"71085a42",
+1623 => x"56805cf3",
+1624 => x"bc396061",
+1625 => x"84057108",
+1626 => x"5a425681",
+1627 => x"5cedd739",
+1628 => x"60618405",
+1629 => x"71086871",
+1630 => x"0c527a5d",
+1631 => x"4256eab3",
+1632 => x"397bee83",
+1633 => x"38ff1b78",
+1634 => x"b706b007",
+1635 => x"585b0b76",
+1636 => x"0b7b3477",
+1637 => x"832a580b",
+1638 => x"0b77ea38",
+1639 => x"7e810656",
+1640 => x"0b0b7580",
+1641 => x"2ef9a738",
+1642 => x"76b02ef9",
+1643 => x"a138ff1b",
+1644 => x"5bb00b7b",
+1645 => x"34fee339",
+1646 => x"8189ac5b",
+1647 => x"865cedd5",
+1648 => x"3982d33d",
+1649 => x"088a3880",
+1650 => x"0b82d33d",
+1651 => x"0cf6df39",
+1652 => x"82d53df0",
+1653 => x"05526351",
+1654 => x"e8a93f80",
+1655 => x"08f6cf38",
+1656 => x"800b82d3",
+1657 => x"3d0cf6c6",
+1658 => x"39606184",
+1659 => x"05710840",
+1660 => x"42567d80",
+1661 => x"25ebdd38",
+1662 => x"ff793359",
+1663 => x"5eebd839",
+1664 => x"fc3d0d81",
+1665 => x"8a940855",
+1666 => x"b8150880",
+1667 => x"2e973878",
+1668 => x"540b0b77",
+1669 => x"530b0b76",
+1670 => x"52818a94",
+1671 => x"0851e89b",
+1672 => x"3f863d0d",
+1673 => x"04745190",
+1674 => x"c13f7854",
+1675 => x"0b0b7753",
+1676 => x"0b0b7652",
+1677 => x"818a9408",
+1678 => x"51e8803f",
+1679 => x"863d0d04",
+1680 => x"f63d0d7c",
+1681 => x"7e615956",
+1682 => x"58805674",
+1683 => x"0b762ea0",
+1684 => x"3876540b",
+1685 => x"0b7e530b",
+1686 => x"0b745277",
+1687 => x"5182d53f",
+1688 => x"80085580",
+1689 => x"08ff2ea6",
+1690 => x"3874800c",
+1691 => x"8c3d0d04",
+1692 => x"76540b0b",
+1693 => x"75530b0b",
+1694 => x"8c3df405",
+1695 => x"52775182",
+1696 => x"b33f8008",
+1697 => x"558008ff",
+1698 => x"2e098106",
+1699 => x"dc388077",
+1700 => x"0c818a78",
+1701 => x"0c74800c",
+1702 => x"8c3d0d04",
+1703 => x"70707070",
+1704 => x"77540b0b",
+1705 => x"76530b0b",
+1706 => x"7552818a",
+1707 => x"940851ff",
+1708 => x"8f3f5050",
+1709 => x"505004ec",
+1710 => x"3d0d6668",
+1711 => x"6a6c6e73",
+1712 => x"5c405d42",
+1713 => x"42420b60",
+1714 => x"802e819b",
+1715 => x"38806008",
+1716 => x"5a5d0b0b",
+1717 => x"7c7a2781",
+1718 => x"8338933d",
+1719 => x"5b7b0884",
+1720 => x"1d087d56",
+1721 => x"7a08557c",
+1722 => x"540b0b63",
+1723 => x"530b0b40",
+1724 => x"5efecd3f",
+1725 => x"80085880",
+1726 => x"08ff2e80",
+1727 => x"fa38807a",
+1728 => x"80083156",
+1729 => x"567c7526",
+1730 => x"83388156",
+1731 => x"80087a27",
+1732 => x"80da3875",
+1733 => x"802e80d4",
+1734 => x"3880081d",
+1735 => x"5d60802e",
+1736 => x"a7388056",
+1737 => x"0b0b7580",
+1738 => x"08259738",
+1739 => x"751b550b",
+1740 => x"0b743377",
+1741 => x"70810559",
+1742 => x"34811656",
+1743 => x"770b7624",
+1744 => x"eb387f08",
+1745 => x"8405600c",
+1746 => x"78708405",
+1747 => x"5a08550b",
+1748 => x"0b74802e",
+1749 => x"b138797d",
+1750 => x"26ff8238",
+1751 => x"7c550b0b",
+1752 => x"74800c96",
+1753 => x"3d0d04ff",
+1754 => x"5afee239",
+1755 => x"7d7c0c7e",
+1756 => x"841d0c7c",
+1757 => x"55e83981",
+1758 => x"8a620c80",
+1759 => x"7c0c8008",
+1760 => x"800c963d",
+1761 => x"0d046080",
+1762 => x"2e843874",
+1763 => x"600c747c",
+1764 => x"0cff1d80",
+1765 => x"0c963d0d",
+1766 => x"04fc3d0d",
+1767 => x"79557854",
+1768 => x"0b0b7753",
+1769 => x"0b0b7652",
+1770 => x"818a9408",
+1771 => x"51fe883f",
+1772 => x"863d0d04",
+1773 => x"f83d0d7b",
+1774 => x"7d7f8191",
+1775 => x"94540b0b",
+1776 => x"595755e3",
+1777 => x"ce3f8008",
+1778 => x"81269838",
+1779 => x"74540b0b",
+1780 => x"74802e88",
+1781 => x"38757534",
+1782 => x"81540b0b",
+1783 => x"73800c8a",
+1784 => x"3d0d0481",
+1785 => x"89b45281",
+1786 => x"919451be",
+1787 => x"c93f8008",
+1788 => x"81d93880",
+1789 => x"08540b0b",
+1790 => x"74802ee0",
+1791 => x"3880ff76",
+1792 => x"25d338ff",
+1793 => x"8016530b",
+1794 => x"0b8eff73",
+1795 => x"2785b838",
+1796 => x"f0801653",
+1797 => x"0b0b83ef",
+1798 => x"ff732782",
+1799 => x"d038fc80",
+1800 => x"8016530b",
+1801 => x"0b80fbff",
+1802 => x"ff732785",
+1803 => x"c2388fff",
+1804 => x"0a16530b",
+1805 => x"0bf7c00a",
+1806 => x"73278689",
+1807 => x"38ff540b",
+1808 => x"0bc00a76",
+1809 => x"25ff9538",
+1810 => x"75820a06",
+1811 => x"709e2c70",
+1812 => x"fc075151",
+1813 => x"530b0b72",
+1814 => x"75708105",
+1815 => x"57347581",
+1816 => x"fc0a0670",
+1817 => x"982aff80",
+1818 => x"0751530b",
+1819 => x"0b727570",
+1820 => x"81055734",
+1821 => x"7587f080",
+1822 => x"80067092",
+1823 => x"2aff8007",
+1824 => x"51530b0b",
+1825 => x"72757081",
+1826 => x"05573475",
+1827 => x"8fe08006",
+1828 => x"708c2aff",
+1829 => x"80075153",
+1830 => x"0b0b7275",
+1831 => x"70810557",
+1832 => x"34759fc0",
+1833 => x"0670862a",
+1834 => x"ff800751",
+1835 => x"530b0b72",
+1836 => x"75708105",
+1837 => x"573475ff",
+1838 => x"bf06ff80",
+1839 => x"07530b0b",
+1840 => x"72753486",
+1841 => x"0b800c8a",
+1842 => x"3d0d0481",
+1843 => x"89bc5281",
+1844 => x"919451bc",
+1845 => x"e13f8008",
+1846 => x"81f93875",
+1847 => x"81ff0676",
+1848 => x"882c7081",
+1849 => x"ff068008",
+1850 => x"5759540b",
+1851 => x"0b587480",
+1852 => x"2efde938",
+1853 => x"76802efd",
+1854 => x"d3388008",
+1855 => x"80ff1870",
+1856 => x"81ff0651",
+1857 => x"540b0b56",
+1858 => x"729e2683",
+1859 => x"38815680",
+1860 => x"08a01870",
+1861 => x"81ff0651",
+1862 => x"540b0b54",
+1863 => x"0b0b728f",
+1864 => x"26853881",
+1865 => x"540b0b75",
+1866 => x"7407530b",
+1867 => x"0b72802e",
+1868 => x"b4388008",
+1869 => x"c019540b",
+1870 => x"0b5672be",
+1871 => x"26833881",
+1872 => x"568008ff",
+1873 => x"80197081",
+1874 => x"ff065154",
+1875 => x"0b0b540b",
+1876 => x"0b7280fc",
+1877 => x"26853881",
+1878 => x"540b0b75",
+1879 => x"7407530b",
+1880 => x"0b7280da",
+1881 => x"38ff0b80",
+1882 => x"0c8a3d0d",
+1883 => x"04fcd080",
+1884 => x"16530b0b",
+1885 => x"ff540b0b",
+1886 => x"8fff7327",
+1887 => x"fcde3875",
+1888 => x"83e08006",
+1889 => x"708c2ae0",
+1890 => x"0751530b",
+1891 => x"0b727570",
+1892 => x"81055734",
+1893 => x"759fc006",
+1894 => x"70862aff",
+1895 => x"80075153",
+1896 => x"0b0b7275",
+1897 => x"70810557",
+1898 => x"3475ffbf",
+1899 => x"06ff8007",
+1900 => x"530b0b72",
+1901 => x"7534830b",
+1902 => x"800c8a3d",
+1903 => x"0d047675",
+1904 => x"70810557",
+1905 => x"34777534",
+1906 => x"82540b0b",
+1907 => x"73800c8a",
+1908 => x"3d0d0481",
+1909 => x"89c45281",
+1910 => x"919451ba",
+1911 => x"d93f8008",
+1912 => x"80eb3875",
+1913 => x"81ff0676",
+1914 => x"882c7081",
+1915 => x"ff068008",
+1916 => x"5759540b",
+1917 => x"0b587480",
+1918 => x"2efbe138",
+1919 => x"76802efb",
+1920 => x"cb388008",
+1921 => x"530b0b81",
+1922 => x"a0772785",
+1923 => x"3881530b",
+1924 => x"0b7681ff",
+1925 => x"2efece38",
+1926 => x"81707406",
+1927 => x"540b0b54",
+1928 => x"0b0b7280",
+1929 => x"2efebe38",
+1930 => x"8008530b",
+1931 => x"0b81a078",
+1932 => x"27853873",
+1933 => x"530b0b77",
+1934 => x"81ff2efe",
+1935 => x"a8387274",
+1936 => x"06530b0b",
+1937 => x"72802efe",
+1938 => x"9c38fef2",
+1939 => x"398189cc",
+1940 => x"52819194",
+1941 => x"51b9df3f",
+1942 => x"8008faf0",
+1943 => x"38800876",
+1944 => x"81ff0677",
+1945 => x"882c7081",
+1946 => x"ff065955",
+1947 => x"59598154",
+1948 => x"0b0b7480",
+1949 => x"2efae538",
+1950 => x"75802e82",
+1951 => x"b438df16",
+1952 => x"530b0b72",
+1953 => x"80dd26fd",
+1954 => x"dc38df18",
+1955 => x"530b0b72",
+1956 => x"80dd26fd",
+1957 => x"d0387608",
+1958 => x"9c387377",
+1959 => x"0c9b7570",
+1960 => x"81055734",
+1961 => x"a4757081",
+1962 => x"05573480",
+1963 => x"c2757081",
+1964 => x"05573483",
+1965 => x"59757570",
+1966 => x"81055734",
+1967 => x"77753482",
+1968 => x"19800c8a",
+1969 => x"3d0d0475",
+1970 => x"8fc00670",
+1971 => x"862ac007",
+1972 => x"51530b0b",
+1973 => x"72757081",
+1974 => x"05573475",
+1975 => x"ffbf06ff",
+1976 => x"8007530b",
+1977 => x"0b727534",
+1978 => x"82540b0b",
+1979 => x"fdde3975",
+1980 => x"80f08080",
+1981 => x"0670922a",
+1982 => x"f0075153",
+1983 => x"0b0b7275",
+1984 => x"70810557",
+1985 => x"34758fe0",
+1986 => x"8006708c",
+1987 => x"2aff8007",
+1988 => x"51530b0b",
+1989 => x"72757081",
+1990 => x"05573475",
+1991 => x"9fc00670",
+1992 => x"862aff80",
+1993 => x"0751530b",
+1994 => x"0b727570",
+1995 => x"81055734",
+1996 => x"75ffbf06",
+1997 => x"ff800753",
+1998 => x"0b0b7275",
+1999 => x"34840b80",
+2000 => x"0c8a3d0d",
+2001 => x"047581c0",
+2002 => x"0a067098",
+2003 => x"2af80751",
+2004 => x"530b0b72",
+2005 => x"75708105",
+2006 => x"57347587",
+2007 => x"f0808006",
+2008 => x"70922aff",
+2009 => x"80075153",
+2010 => x"0b0b7275",
+2011 => x"70810557",
+2012 => x"34758fe0",
+2013 => x"8006708c",
+2014 => x"2aff8007",
+2015 => x"51530b0b",
+2016 => x"72757081",
+2017 => x"05573475",
+2018 => x"9fc00670",
+2019 => x"862aff80",
+2020 => x"0751530b",
+2021 => x"0b727570",
+2022 => x"81055734",
+2023 => x"75ffbf06",
+2024 => x"ff800753",
+2025 => x"0b0b7275",
+2026 => x"34850b80",
+2027 => x"0c8a3d0d",
+2028 => x"04760880",
+2029 => x"2e9d3880",
+2030 => x"08770c9b",
+2031 => x"75708105",
+2032 => x"5734a875",
+2033 => x"70810557",
+2034 => x"3480c275",
+2035 => x"70810557",
+2036 => x"34835977",
+2037 => x"75348119",
+2038 => x"800c8a3d",
+2039 => x"0d04fa3d",
+2040 => x"0d78818a",
+2041 => x"9408540b",
+2042 => x"0b55b873",
+2043 => x"0508802e",
+2044 => x"81ce388c",
+2045 => x"15227083",
+2046 => x"ffff0670",
+2047 => x"832a8132",
+2048 => x"70810651",
+2049 => x"55555672",
+2050 => x"802e80ea",
+2051 => x"3873842a",
+2052 => x"81328106",
+2053 => x"57ff530b",
+2054 => x"0b76818b",
+2055 => x"3873822a",
+2056 => x"70810651",
+2057 => x"530b0b72",
+2058 => x"802ebf38",
+2059 => x"b0150854",
+2060 => x"0b0b7380",
+2061 => x"2e9e3880",
+2062 => x"c015530b",
+2063 => x"0b73732e",
+2064 => x"8f387352",
+2065 => x"818a9408",
+2066 => x"5188a53f",
+2067 => x"8c152256",
+2068 => x"76b0160c",
+2069 => x"75db0653",
+2070 => x"0b0b728c",
+2071 => x"1623800b",
+2072 => x"84160c90",
+2073 => x"1508750c",
+2074 => x"72560b0b",
+2075 => x"75880753",
+2076 => x"0b0b728c",
+2077 => x"16239015",
+2078 => x"08802e80",
+2079 => x"cb388c15",
+2080 => x"22708106",
+2081 => x"55530b0b",
+2082 => x"73a43872",
+2083 => x"0a100a70",
+2084 => x"81065153",
+2085 => x"0b0b7287",
+2086 => x"38941508",
+2087 => x"540b0b73",
+2088 => x"88160c80",
+2089 => x"530b0b72",
+2090 => x"800c883d",
+2091 => x"0d04800b",
+2092 => x"88160c94",
+2093 => x"15083098",
+2094 => x"160c8053",
+2095 => x"0b0be839",
+2096 => x"725183a6",
+2097 => x"3ffeac39",
+2098 => x"745194c6",
+2099 => x"3f8c1522",
+2100 => x"70810655",
+2101 => x"530b0b73",
+2102 => x"802effaf",
+2103 => x"38d039f8",
+2104 => x"3d0d7a58",
+2105 => x"0b0b7780",
+2106 => x"2e81a938",
+2107 => x"818a9408",
+2108 => x"540b0bb8",
+2109 => x"1408802e",
+2110 => x"80f9388c",
+2111 => x"18227090",
+2112 => x"2b70902c",
+2113 => x"70832a81",
+2114 => x"3281065c",
+2115 => x"5157540b",
+2116 => x"0b7880d7",
+2117 => x"38901808",
+2118 => x"570b0b76",
+2119 => x"802e80cb",
+2120 => x"38770877",
+2121 => x"3177790c",
+2122 => x"7683067a",
+2123 => x"5855550b",
+2124 => x"73853894",
+2125 => x"1808560b",
+2126 => x"0b758819",
+2127 => x"0c807525",
+2128 => x"aa387453",
+2129 => x"0b0b7652",
+2130 => x"9c180851",
+2131 => x"a4180854",
+2132 => x"0b0b732d",
+2133 => x"800b8008",
+2134 => x"2580cd38",
+2135 => x"80081775",
+2136 => x"80083156",
+2137 => x"570b7480",
+2138 => x"24d83880",
+2139 => x"0b800c8a",
+2140 => x"3d0d0473",
+2141 => x"5181f33f",
+2142 => x"8c182270",
+2143 => x"902b7090",
+2144 => x"2c70832a",
+2145 => x"81328106",
+2146 => x"5c515754",
+2147 => x"0b0b78db",
+2148 => x"38ff8239",
+2149 => x"80c1df52",
+2150 => x"818a9408",
+2151 => x"5191973f",
+2152 => x"8008800c",
+2153 => x"8a3d0d04",
+2154 => x"8c182280",
+2155 => x"c007540b",
+2156 => x"0b738c19",
+2157 => x"23ff0b80",
+2158 => x"0c8a3d0d",
+2159 => x"04707251",
+2160 => x"800b710c",
+2161 => x"800b8472",
+2162 => x"050c800b",
+2163 => x"8872050c",
+2164 => x"028e0522",
+2165 => x"8c720523",
+2166 => x"02920522",
+2167 => x"8e720523",
+2168 => x"800b9072",
+2169 => x"050c800b",
+2170 => x"9472050c",
+2171 => x"800b9872",
+2172 => x"050c709c",
+2173 => x"72050c80",
+2174 => x"f3d60ba0",
+2175 => x"72050c80",
+2176 => x"f4a90ba4",
+2177 => x"72050c80",
+2178 => x"f5bc0ba8",
+2179 => x"72050c80",
+2180 => x"f6960bac",
+2181 => x"72050c50",
+2182 => x"04fa3d0d",
+2183 => x"797080dc",
+2184 => x"298c7105",
+2185 => x"540b0b7a",
+2186 => x"530b0b56",
+2187 => x"57949a3f",
+2188 => x"80088008",
+2189 => x"55568008",
+2190 => x"802ea838",
+2191 => x"80088c05",
+2192 => x"540b0b80",
+2193 => x"0b80080c",
+2194 => x"76800884",
+2195 => x"050c7380",
+2196 => x"0888050c",
+2197 => x"74530b0b",
+2198 => x"80527351",
+2199 => x"a4b13f75",
+2200 => x"540b0b73",
+2201 => x"800c883d",
+2202 => x"0d04fc3d",
+2203 => x"0d7680c7",
+2204 => x"940bbc72",
+2205 => x"050c5581",
+2206 => x"0bb8160c",
+2207 => x"800b84dc",
+2208 => x"160c830b",
+2209 => x"84e0160c",
+2210 => x"84e81584",
+2211 => x"e4160c74",
+2212 => x"540b0b80",
+2213 => x"530b0b84",
+2214 => x"52841508",
+2215 => x"51fe9e3f",
+2216 => x"74540b0b",
+2217 => x"81530b0b",
+2218 => x"89528815",
+2219 => x"0851fe8d",
+2220 => x"3f74540b",
+2221 => x"0b82530b",
+2222 => x"0b8a528c",
+2223 => x"150851fd",
+2224 => x"fc3f863d",
+2225 => x"0d04f93d",
+2226 => x"0d79818a",
+2227 => x"9408540b",
+2228 => x"0b57b873",
+2229 => x"0508802e",
+2230 => x"80ce3884",
+2231 => x"dc730556",
+2232 => x"88160884",
+2233 => x"1708ff05",
+2234 => x"55558074",
+2235 => x"24a2388c",
+2236 => x"15227090",
+2237 => x"2b70902c",
+2238 => x"51540b0b",
+2239 => x"5872802e",
+2240 => x"80cd3880",
+2241 => x"dc15ff15",
+2242 => x"55550b73",
+2243 => x"8025e038",
+2244 => x"7508530b",
+2245 => x"0b72802e",
+2246 => x"9f387256",
+2247 => x"88160884",
+2248 => x"1708ff05",
+2249 => x"5555c339",
+2250 => x"7251febe",
+2251 => x"3f818a94",
+2252 => x"0884dc05",
+2253 => x"56ffa939",
+2254 => x"84527651",
+2255 => x"fddb3f80",
+2256 => x"08760c80",
+2257 => x"08802e80",
+2258 => x"c0388008",
+2259 => x"56ce3981",
+2260 => x"0b8c1623",
+2261 => x"72750c72",
+2262 => x"88160c72",
+2263 => x"84160c72",
+2264 => x"90160c72",
+2265 => x"94160c72",
+2266 => x"98160cff",
+2267 => x"0b8e1623",
+2268 => x"72b0160c",
+2269 => x"72b4160c",
+2270 => x"7280c416",
+2271 => x"0c7280c8",
+2272 => x"160c7480",
+2273 => x"0c893d0d",
+2274 => x"048c770c",
+2275 => x"800b800c",
+2276 => x"893d0d04",
+2277 => x"707080c1",
+2278 => x"df527351",
+2279 => x"8d983f50",
+2280 => x"50047081",
+2281 => x"8a940851",
+2282 => x"eb3f5004",
+2283 => x"fb3d0d77",
+2284 => x"705256a3",
+2285 => x"873f8191",
+2286 => x"f00b8805",
+2287 => x"08847105",
+2288 => x"08fc0670",
+2289 => x"7b319fef",
+2290 => x"05e08006",
+2291 => x"e0800556",
+2292 => x"56530b0b",
+2293 => x"a0807424",
+2294 => x"96388052",
+2295 => x"7551abbb",
+2296 => x"3f8191f8",
+2297 => x"0815530b",
+2298 => x"0b728008",
+2299 => x"2e913875",
+2300 => x"51a2ca3f",
+2301 => x"80530b0b",
+2302 => x"72800c87",
+2303 => x"3d0d0473",
+2304 => x"30527551",
+2305 => x"ab953f80",
+2306 => x"08ff2eab",
+2307 => x"388191f0",
+2308 => x"0b880508",
+2309 => x"75753181",
+2310 => x"07847205",
+2311 => x"0c530b0b",
+2312 => x"8191b408",
+2313 => x"74318191",
+2314 => x"b40c7551",
+2315 => x"a28f3f81",
+2316 => x"0b800c87",
+2317 => x"3d0d0480",
+2318 => x"527551aa",
+2319 => x"de3f8191",
+2320 => x"f00b8805",
+2321 => x"08800871",
+2322 => x"3156530b",
+2323 => x"0b8f7525",
+2324 => x"ff9d3880",
+2325 => x"088191e4",
+2326 => x"08318191",
+2327 => x"b40c7481",
+2328 => x"0784140c",
+2329 => x"7551a1d5",
+2330 => x"3f80530b",
+2331 => x"0bff8939",
+2332 => x"f63d0d7c",
+2333 => x"7e540b0b",
+2334 => x"5b72802e",
+2335 => x"82a2387a",
+2336 => x"51a1b93f",
+2337 => x"f8730584",
+2338 => x"71050870",
+2339 => x"fe067073",
+2340 => x"05847105",
+2341 => x"08fc065d",
+2342 => x"5859540b",
+2343 => x"0b588191",
+2344 => x"f808752e",
+2345 => x"83833878",
+2346 => x"84160c80",
+2347 => x"73810654",
+2348 => x"0b0b5a72",
+2349 => x"0b7a2e81",
+2350 => x"eb387815",
+2351 => x"84710508",
+2352 => x"81065153",
+2353 => x"0b0b72a3",
+2354 => x"38781757",
+2355 => x"7981fc38",
+2356 => x"88150853",
+2357 => x"0b0b7281",
+2358 => x"91f82e83",
+2359 => x"9c388c15",
+2360 => x"08708c15",
+2361 => x"0c738872",
+2362 => x"050c5676",
+2363 => x"81078419",
+2364 => x"0c761877",
+2365 => x"710c530b",
+2366 => x"0b79819f",
+2367 => x"3883ff77",
+2368 => x"2781da38",
+2369 => x"76892a77",
+2370 => x"832a5653",
+2371 => x"0b0b7280",
+2372 => x"2e80c038",
+2373 => x"76862ab8",
+2374 => x"05558473",
+2375 => x"27b53880",
+2376 => x"db730555",
+2377 => x"947327ab",
+2378 => x"38768c2a",
+2379 => x"80ee0555",
+2380 => x"80d47327",
+2381 => x"9e38768f",
+2382 => x"2a80f705",
+2383 => x"5582d473",
+2384 => x"27913876",
+2385 => x"922a80fc",
+2386 => x"05558ad4",
+2387 => x"73278438",
+2388 => x"80fe550b",
+2389 => x"0b741010",
+2390 => x"108191f0",
+2391 => x"05887105",
+2392 => x"0855560b",
+2393 => x"730b762e",
+2394 => x"82cd3884",
+2395 => x"1408fc06",
+2396 => x"530b0b76",
+2397 => x"73278f38",
+2398 => x"88140854",
+2399 => x"0b0b7376",
+2400 => x"2e098106",
+2401 => x"e6388c14",
+2402 => x"08708c1a",
+2403 => x"0c74881a",
+2404 => x"0c788872",
+2405 => x"050c5677",
+2406 => x"8c150c7a",
+2407 => x"519f9e3f",
+2408 => x"8c3d0d04",
+2409 => x"77087871",
+2410 => x"31597705",
+2411 => x"88190854",
+2412 => x"0b0b5772",
+2413 => x"8191f82e",
+2414 => x"80ea388c",
+2415 => x"1808708c",
+2416 => x"150c7388",
+2417 => x"72050c56",
+2418 => x"fdf03988",
+2419 => x"15088c16",
+2420 => x"08708c73",
+2421 => x"050c5788",
+2422 => x"170cfe8f",
+2423 => x"3976832a",
+2424 => x"70540b0b",
+2425 => x"55800b75",
+2426 => x"2481a338",
+2427 => x"72822c81",
+2428 => x"712b8191",
+2429 => x"f4080781",
+2430 => x"91f00b84",
+2431 => x"050c530b",
+2432 => x"0b741010",
+2433 => x"108191f0",
+2434 => x"05887105",
+2435 => x"0855560b",
+2436 => x"0b758c19",
+2437 => x"0c738819",
+2438 => x"0c778817",
+2439 => x"0c778c15",
+2440 => x"0cfef839",
+2441 => x"815afd92",
+2442 => x"39781773",
+2443 => x"8106540b",
+2444 => x"0b57729a",
+2445 => x"38770878",
+2446 => x"71315977",
+2447 => x"058c1908",
+2448 => x"881a0871",
+2449 => x"8c72050c",
+2450 => x"8872050c",
+2451 => x"57570b0b",
+2452 => x"76810784",
+2453 => x"190c7781",
+2454 => x"91f00b88",
+2455 => x"050c8191",
+2456 => x"ec087726",
+2457 => x"feb53881",
+2458 => x"91e80852",
+2459 => x"7a51fabc",
+2460 => x"3f7a519d",
+2461 => x"c83ffea8",
+2462 => x"3981788c",
+2463 => x"150c7888",
+2464 => x"150c738c",
+2465 => x"1a0c7388",
+2466 => x"1a0c5afc",
+2467 => x"de398315",
+2468 => x"70822c81",
+2469 => x"712b8191",
+2470 => x"f4080781",
+2471 => x"91f00b84",
+2472 => x"050c5153",
+2473 => x"0b0b7410",
+2474 => x"10108191",
+2475 => x"f0058871",
+2476 => x"05085556",
+2477 => x"fed93974",
+2478 => x"530b0b80",
+2479 => x"7524a938",
+2480 => x"72822c81",
+2481 => x"712b8191",
+2482 => x"f4080781",
+2483 => x"91f00b84",
+2484 => x"050c530b",
+2485 => x"0b758c19",
+2486 => x"0c738819",
+2487 => x"0c778817",
+2488 => x"0c778c15",
+2489 => x"0cfdb439",
+2490 => x"83157082",
+2491 => x"2c81712b",
+2492 => x"8191f408",
+2493 => x"078191f0",
+2494 => x"0b84050c",
+2495 => x"51530b0b",
+2496 => x"d439f23d",
+2497 => x"0d606288",
+2498 => x"71050870",
+2499 => x"57575f5a",
+2500 => x"74802e81",
+2501 => x"9f388c1a",
+2502 => x"2270832a",
+2503 => x"81327081",
+2504 => x"06515558",
+2505 => x"0b738638",
+2506 => x"901a0893",
+2507 => x"387951f1",
+2508 => x"ad3fff54",
+2509 => x"0b0b8008",
+2510 => x"80fa388c",
+2511 => x"1a22587d",
+2512 => x"08578078",
+2513 => x"83ffff06",
+2514 => x"700a100a",
+2515 => x"70810651",
+2516 => x"56575573",
+2517 => x"0b752e80",
+2518 => x"e2387491",
+2519 => x"38760884",
+2520 => x"18088819",
+2521 => x"5956590b",
+2522 => x"74802ef1",
+2523 => x"3874540b",
+2524 => x"0b888075",
+2525 => x"27863888",
+2526 => x"80540b0b",
+2527 => x"73530b0b",
+2528 => x"78529c1a",
+2529 => x"0851a41a",
+2530 => x"08540b0b",
+2531 => x"732d800b",
+2532 => x"80082583",
+2533 => x"86388008",
+2534 => x"19758008",
+2535 => x"317f8805",
+2536 => x"08800831",
+2537 => x"70618805",
+2538 => x"0c565659",
+2539 => x"73ffab38",
+2540 => x"80540b0b",
+2541 => x"73800c90",
+2542 => x"3d0d0475",
+2543 => x"81327081",
+2544 => x"06764151",
+2545 => x"540b0b73",
+2546 => x"802e81d0",
+2547 => x"38749138",
+2548 => x"76088418",
+2549 => x"08881959",
+2550 => x"56590b74",
+2551 => x"802ef138",
+2552 => x"881a0878",
+2553 => x"83ffff06",
+2554 => x"70892a70",
+2555 => x"81065156",
+2556 => x"59567380",
+2557 => x"2e839e38",
+2558 => x"7575278f",
+2559 => x"3877872a",
+2560 => x"70810651",
+2561 => x"540b0b73",
+2562 => x"82d63874",
+2563 => x"76278338",
+2564 => x"74560b0b",
+2565 => x"75530b0b",
+2566 => x"78527908",
+2567 => x"5196f93f",
+2568 => x"881a0876",
+2569 => x"31881b0c",
+2570 => x"7908167a",
+2571 => x"0c74560b",
+2572 => x"0b751975",
+2573 => x"77317f88",
+2574 => x"05087831",
+2575 => x"70618805",
+2576 => x"0c565659",
+2577 => x"73802efe",
+2578 => x"e7388c1a",
+2579 => x"2258fefd",
+2580 => x"39777854",
+2581 => x"0b0b7953",
+2582 => x"0b0b7b52",
+2583 => x"5696b93f",
+2584 => x"881a0878",
+2585 => x"31881b0c",
+2586 => x"7908187a",
+2587 => x"0c7c7631",
+2588 => x"5d0b0b7c",
+2589 => x"8e387951",
+2590 => x"f0e53f80",
+2591 => x"08819c38",
+2592 => x"80085f75",
+2593 => x"19757731",
+2594 => x"7f880508",
+2595 => x"78317061",
+2596 => x"88050c56",
+2597 => x"56597380",
+2598 => x"2efe9538",
+2599 => x"74819438",
+2600 => x"76088418",
+2601 => x"08881959",
+2602 => x"56590b74",
+2603 => x"802ef138",
+2604 => x"74530b0b",
+2605 => x"8a527851",
+2606 => x"94a33f80",
+2607 => x"08793181",
+2608 => x"055d8008",
+2609 => x"84388115",
+2610 => x"5d815f7c",
+2611 => x"58747d27",
+2612 => x"83387458",
+2613 => x"941a0888",
+2614 => x"1b087105",
+2615 => x"575c807a",
+2616 => x"085c540b",
+2617 => x"0b901a08",
+2618 => x"7b278538",
+2619 => x"81540b0b",
+2620 => x"75782585",
+2621 => x"387380c2",
+2622 => x"387b7824",
+2623 => x"fed3387b",
+2624 => x"530b0b78",
+2625 => x"529c1a08",
+2626 => x"51a41a08",
+2627 => x"540b0b73",
+2628 => x"2d800856",
+2629 => x"80088024",
+2630 => x"fed3388c",
+2631 => x"1a2280c0",
+2632 => x"07540b0b",
+2633 => x"738c1b23",
+2634 => x"ff540b0b",
+2635 => x"73800c90",
+2636 => x"3d0d047e",
+2637 => x"ff9538fe",
+2638 => x"f7397553",
+2639 => x"0b0b7852",
+2640 => x"7a5194d4",
+2641 => x"3f790816",
+2642 => x"7a0c7951",
+2643 => x"ef913f80",
+2644 => x"08c9387c",
+2645 => x"76315d0b",
+2646 => x"0b7cfea7",
+2647 => x"38fe9739",
+2648 => x"901a087a",
+2649 => x"08713176",
+2650 => x"71057056",
+2651 => x"5a575281",
+2652 => x"8a940851",
+2653 => x"97c83f80",
+2654 => x"08802eff",
+2655 => x"9e388008",
+2656 => x"901b0c80",
+2657 => x"08167a0c",
+2658 => x"77941b0c",
+2659 => x"74881b0c",
+2660 => x"7456fcf7",
+2661 => x"39790858",
+2662 => x"901a0878",
+2663 => x"27853881",
+2664 => x"540b0b75",
+2665 => x"75278438",
+2666 => x"73bd3894",
+2667 => x"1a08560b",
+2668 => x"0b757526",
+2669 => x"80e13875",
+2670 => x"530b0b78",
+2671 => x"529c1a08",
+2672 => x"51a41a08",
+2673 => x"540b0b73",
+2674 => x"2d800856",
+2675 => x"80088024",
+2676 => x"fcdd388c",
+2677 => x"1a2280c0",
+2678 => x"07540b0b",
+2679 => x"738c1b23",
+2680 => x"ff540b0b",
+2681 => x"fec63975",
+2682 => x"530b0b78",
+2683 => x"52775193",
+2684 => x"a73f7908",
+2685 => x"167a0c79",
+2686 => x"51ede43f",
+2687 => x"8008802e",
+2688 => x"fcad388c",
+2689 => x"1a2280c0",
+2690 => x"07540b0b",
+2691 => x"738c1b23",
+2692 => x"ff540b0b",
+2693 => x"fe963974",
+2694 => x"75540b0b",
+2695 => x"79530b0b",
+2696 => x"78525692",
+2697 => x"f33f881a",
+2698 => x"08753188",
+2699 => x"1b0c7908",
+2700 => x"157a0cfb",
+2701 => x"fa39f93d",
+2702 => x"0d797b58",
+2703 => x"530b0b80",
+2704 => x"0b818a94",
+2705 => x"08530b0b",
+2706 => x"5672722e",
+2707 => x"80d03884",
+2708 => x"dc730555",
+2709 => x"0b0b7476",
+2710 => x"2e80c338",
+2711 => x"88150884",
+2712 => x"1608ff05",
+2713 => x"540b0b54",
+2714 => x"0b0b8073",
+2715 => x"24a3388c",
+2716 => x"14227090",
+2717 => x"2b70902c",
+2718 => x"51530b0b",
+2719 => x"587180ed",
+2720 => x"3880dc14",
+2721 => x"ff14540b",
+2722 => x"0b540b0b",
+2723 => x"728025df",
+2724 => x"38740855",
+2725 => x"0b0b74c4",
+2726 => x"38818a94",
+2727 => x"085284dc",
+2728 => x"7205550b",
+2729 => x"0b74802e",
+2730 => x"bd388815",
+2731 => x"08841608",
+2732 => x"ff05540b",
+2733 => x"0b540b0b",
+2734 => x"807324a2",
+2735 => x"388c1422",
+2736 => x"70902b70",
+2737 => x"902c5153",
+2738 => x"0b0b5871",
+2739 => x"b33880dc",
+2740 => x"14ff1454",
+2741 => x"0b0b540b",
+2742 => x"0b728025",
+2743 => x"e0387408",
+2744 => x"550b0b74",
+2745 => x"c5387580",
+2746 => x"0c893d0d",
+2747 => x"04735176",
+2748 => x"2d758008",
+2749 => x"0780dc15",
+2750 => x"ff155555",
+2751 => x"56ff8d39",
+2752 => x"7351762d",
+2753 => x"75800807",
+2754 => x"80dc15ff",
+2755 => x"15555556",
+2756 => x"c839ea3d",
+2757 => x"0d688c71",
+2758 => x"0522700a",
+2759 => x"100a8106",
+2760 => x"57585674",
+2761 => x"80ee388e",
+2762 => x"16227090",
+2763 => x"2b70902c",
+2764 => x"51555880",
+2765 => x"7424b538",
+2766 => x"983dc405",
+2767 => x"530b0b73",
+2768 => x"52818a94",
+2769 => x"0851a298",
+2770 => x"3f800b80",
+2771 => x"08249938",
+2772 => x"7983e080",
+2773 => x"06540b0b",
+2774 => x"7380c080",
+2775 => x"2e819f38",
+2776 => x"73828080",
+2777 => x"2e81a138",
+2778 => x"8c162257",
+2779 => x"0b0b7690",
+2780 => x"8007540b",
+2781 => x"0b738c17",
+2782 => x"23888052",
+2783 => x"818a9408",
+2784 => x"5181c63f",
+2785 => x"80089f38",
+2786 => x"8c162282",
+2787 => x"07540b0b",
+2788 => x"738c1723",
+2789 => x"80c31670",
+2790 => x"770c9017",
+2791 => x"0c810b94",
+2792 => x"170c983d",
+2793 => x"0d04818a",
+2794 => x"940880c7",
+2795 => x"940bbc72",
+2796 => x"050c540b",
+2797 => x"0b8c1622",
+2798 => x"81800754",
+2799 => x"0b0b738c",
+2800 => x"17238008",
+2801 => x"760c8008",
+2802 => x"90170c88",
+2803 => x"800b9417",
+2804 => x"0c74802e",
+2805 => x"cd388e16",
+2806 => x"2270902b",
+2807 => x"70902c53",
+2808 => x"0b0b5558",
+2809 => x"aacb3f80",
+2810 => x"08802eff",
+2811 => x"b5388c16",
+2812 => x"22810754",
+2813 => x"0b0b738c",
+2814 => x"1723983d",
+2815 => x"0d04810b",
+2816 => x"8c172258",
+2817 => x"55fee539",
+2818 => x"a8160880",
+2819 => x"f5bc2e09",
+2820 => x"8106fed4",
+2821 => x"388c1622",
+2822 => x"88800754",
+2823 => x"0b0b738c",
+2824 => x"17238880",
+2825 => x"0b80cc17",
+2826 => x"0cfece39",
+2827 => x"70707352",
+2828 => x"818a9408",
+2829 => x"51933f50",
+2830 => x"50047070",
+2831 => x"7352818a",
+2832 => x"940851f0",
+2833 => x"ab3f5050",
+2834 => x"04f33d0d",
+2835 => x"7f618b71",
+2836 => x"0570f806",
+2837 => x"5c55555e",
+2838 => x"72962683",
+2839 => x"38905980",
+2840 => x"0b792474",
+2841 => x"7a260753",
+2842 => x"0b0b8054",
+2843 => x"0b0b7274",
+2844 => x"2e098106",
+2845 => x"80d4387d",
+2846 => x"5191c13f",
+2847 => x"7883f726",
+2848 => x"80cf3878",
+2849 => x"832a7010",
+2850 => x"10108191",
+2851 => x"f0058c71",
+2852 => x"05085959",
+2853 => x"5a76782e",
+2854 => x"83e73884",
+2855 => x"1708fc06",
+2856 => x"568c1708",
+2857 => x"88180871",
+2858 => x"8c72050c",
+2859 => x"8872050c",
+2860 => x"58751784",
+2861 => x"71050881",
+2862 => x"07847205",
+2863 => x"0c530b0b",
+2864 => x"7d5190f9",
+2865 => x"3f881754",
+2866 => x"0b0b7380",
+2867 => x"0c8f3d0d",
+2868 => x"0478892a",
+2869 => x"79832a5b",
+2870 => x"530b0b72",
+2871 => x"802e80c0",
+2872 => x"3878862a",
+2873 => x"b8055a84",
+2874 => x"7327b538",
+2875 => x"80db7305",
+2876 => x"5a947327",
+2877 => x"ab38788c",
+2878 => x"2a80ee05",
+2879 => x"5a80d473",
+2880 => x"279e3878",
+2881 => x"8f2a80f7",
+2882 => x"055a82d4",
+2883 => x"73279138",
+2884 => x"78922a80",
+2885 => x"fc055a8a",
+2886 => x"d4732784",
+2887 => x"3880fe5a",
+2888 => x"0b0b7910",
+2889 => x"10108191",
+2890 => x"f0058c71",
+2891 => x"05085855",
+2892 => x"0b760b75",
+2893 => x"2ea63884",
+2894 => x"1708fc06",
+2895 => x"707a3155",
+2896 => x"560b738f",
+2897 => x"2489c638",
+2898 => x"738025fe",
+2899 => x"d4388c17",
+2900 => x"08570b0b",
+2901 => x"76752e09",
+2902 => x"8106dc38",
+2903 => x"811a5a81",
+2904 => x"92800857",
+2905 => x"0b0b7681",
+2906 => x"91f82e82",
+2907 => x"ed388417",
+2908 => x"08fc0670",
+2909 => x"7a315556",
+2910 => x"0b738f24",
+2911 => x"829c3881",
+2912 => x"91f80b81",
+2913 => x"92840c81",
+2914 => x"91f80b81",
+2915 => x"92800c73",
+2916 => x"8025fe9d",
+2917 => x"3883ff76",
+2918 => x"27849d38",
+2919 => x"75892a76",
+2920 => x"832a5553",
+2921 => x"0b0b7280",
+2922 => x"2e80cc38",
+2923 => x"75862ab8",
+2924 => x"05540b0b",
+2925 => x"847327bf",
+2926 => x"3880db73",
+2927 => x"05540b0b",
+2928 => x"947327b3",
+2929 => x"38758c2a",
+2930 => x"80ee0554",
+2931 => x"0b0b80d4",
+2932 => x"7327a438",
+2933 => x"758f2a80",
+2934 => x"f705540b",
+2935 => x"0b82d473",
+2936 => x"27953875",
+2937 => x"922a80fc",
+2938 => x"05540b0b",
+2939 => x"8ad47327",
+2940 => x"863880fe",
+2941 => x"540b0b73",
+2942 => x"10101081",
+2943 => x"91f00588",
+2944 => x"71050856",
+2945 => x"580b740b",
+2946 => x"782e87a0",
+2947 => x"38841508",
+2948 => x"fc06530b",
+2949 => x"0b757327",
+2950 => x"8f388815",
+2951 => x"08550b0b",
+2952 => x"74782e09",
+2953 => x"8106e638",
+2954 => x"8c150881",
+2955 => x"91f00b84",
+2956 => x"0508718c",
+2957 => x"1a0c7688",
+2958 => x"1a0c7888",
+2959 => x"73050c78",
+2960 => x"8c180c5d",
+2961 => x"5879530b",
+2962 => x"0b807a24",
+2963 => x"84983872",
+2964 => x"822c8171",
+2965 => x"2b5c530b",
+2966 => x"0b7a7c26",
+2967 => x"81ac387b",
+2968 => x"7b06530b",
+2969 => x"0b728398",
+2970 => x"3879fc06",
+2971 => x"84055a7a",
+2972 => x"10707d06",
+2973 => x"540b0b5b",
+2974 => x"72838538",
+2975 => x"841a5aef",
+2976 => x"3988178c",
+2977 => x"71050858",
+2978 => x"580b760b",
+2979 => x"782e0981",
+2980 => x"06fc8838",
+2981 => x"821a5afd",
+2982 => x"c6397817",
+2983 => x"79810784",
+2984 => x"190c7081",
+2985 => x"92840c70",
+2986 => x"8192800c",
+2987 => x"8191f80b",
+2988 => x"8c72050c",
+2989 => x"8c710508",
+2990 => x"8872050c",
+2991 => x"74810784",
+2992 => x"72050c74",
+2993 => x"71057571",
+2994 => x"0c51530b",
+2995 => x"0b7d518c",
+2996 => x"ec3f8817",
+2997 => x"540b0bfb",
+2998 => x"f1398191",
+2999 => x"f00b8405",
+3000 => x"087a540b",
+3001 => x"0b5c7980",
+3002 => x"25fee438",
+3003 => x"82f8397a",
+3004 => x"097c0670",
+3005 => x"8191f00b",
+3006 => x"84050c5c",
+3007 => x"7a105b0b",
+3008 => x"0b7a7c26",
+3009 => x"85387a85",
+3010 => x"f2388191",
+3011 => x"f00b8805",
+3012 => x"08708472",
+3013 => x"0508fc06",
+3014 => x"707c317c",
+3015 => x"72268f72",
+3016 => x"25075757",
+3017 => x"5c5d5572",
+3018 => x"802e80e3",
+3019 => x"38797a16",
+3020 => x"8191e808",
+3021 => x"1b907105",
+3022 => x"5a55575b",
+3023 => x"8191e408",
+3024 => x"ff2e8938",
+3025 => x"a08f7305",
+3026 => x"e0800657",
+3027 => x"0b0b7652",
+3028 => x"7d5194c7",
+3029 => x"3f800854",
+3030 => x"0b0b8008",
+3031 => x"ff2e9038",
+3032 => x"80087627",
+3033 => x"82b33874",
+3034 => x"8191f02e",
+3035 => x"82ab3881",
+3036 => x"91f00b88",
+3037 => x"05085584",
+3038 => x"1508fc06",
+3039 => x"707a317a",
+3040 => x"72268f72",
+3041 => x"25075255",
+3042 => x"530b0b72",
+3043 => x"84913874",
+3044 => x"79810784",
+3045 => x"170c7916",
+3046 => x"708191f0",
+3047 => x"0b88050c",
+3048 => x"75810784",
+3049 => x"72050c54",
+3050 => x"0b0b7e52",
+3051 => x"578b8e3f",
+3052 => x"8817540b",
+3053 => x"0bfa9339",
+3054 => x"75832a70",
+3055 => x"540b0b54",
+3056 => x"0b0b8074",
+3057 => x"2481a738",
+3058 => x"72822c81",
+3059 => x"712b8191",
+3060 => x"f4080770",
+3061 => x"8191f00b",
+3062 => x"84050c75",
+3063 => x"10101081",
+3064 => x"91f00588",
+3065 => x"71050858",
+3066 => x"5a5d530b",
+3067 => x"0b778c18",
+3068 => x"0c748818",
+3069 => x"0c768819",
+3070 => x"0c768c16",
+3071 => x"0cfcc639",
+3072 => x"797a1010",
+3073 => x"108191f0",
+3074 => x"05705759",
+3075 => x"5d8c1508",
+3076 => x"570b0b76",
+3077 => x"752ea638",
+3078 => x"841708fc",
+3079 => x"06707a31",
+3080 => x"55560b73",
+3081 => x"8f2483ef",
+3082 => x"38738025",
+3083 => x"84af388c",
+3084 => x"1708570b",
+3085 => x"0b76752e",
+3086 => x"098106dc",
+3087 => x"38881581",
+3088 => x"1b708306",
+3089 => x"555b5572",
+3090 => x"c4387c83",
+3091 => x"06530b0b",
+3092 => x"72802efd",
+3093 => x"9a38ff1d",
+3094 => x"f819595d",
+3095 => x"88180878",
+3096 => x"2ee838fd",
+3097 => x"9739831a",
+3098 => x"530b0bfb",
+3099 => x"e2398314",
+3100 => x"70822c81",
+3101 => x"712b8191",
+3102 => x"f4080770",
+3103 => x"8191f00b",
+3104 => x"84050c76",
+3105 => x"10101081",
+3106 => x"91f00588",
+3107 => x"71050859",
+3108 => x"5b5e5153",
+3109 => x"0b0bfed5",
+3110 => x"398191b4",
+3111 => x"08175880",
+3112 => x"08762e81",
+3113 => x"99388191",
+3114 => x"e408ff2e",
+3115 => x"849b3873",
+3116 => x"76311881",
+3117 => x"91b40c73",
+3118 => x"87067057",
+3119 => x"530b0b72",
+3120 => x"802e8838",
+3121 => x"88733170",
+3122 => x"15555676",
+3123 => x"149fff06",
+3124 => x"a0807131",
+3125 => x"1770540b",
+3126 => x"0b7f530b",
+3127 => x"0b57530b",
+3128 => x"0b91b83f",
+3129 => x"8008530b",
+3130 => x"0b8008ff",
+3131 => x"2e81a738",
+3132 => x"8191b408",
+3133 => x"16708191",
+3134 => x"b40c7475",
+3135 => x"8191f00b",
+3136 => x"88050c74",
+3137 => x"76311870",
+3138 => x"81075155",
+3139 => x"56587b81",
+3140 => x"91f02e83",
+3141 => x"c138798f",
+3142 => x"2682ee38",
+3143 => x"810b8415",
+3144 => x"0c841508",
+3145 => x"fc06707a",
+3146 => x"317a7226",
+3147 => x"8f722507",
+3148 => x"5255530b",
+3149 => x"0b72802e",
+3150 => x"fcd53880",
+3151 => x"e2398008",
+3152 => x"9fff0653",
+3153 => x"0b0b72fe",
+3154 => x"dd387781",
+3155 => x"91b40c81",
+3156 => x"91f00b88",
+3157 => x"05087b18",
+3158 => x"81078472",
+3159 => x"050c5581",
+3160 => x"91e00878",
+3161 => x"27863877",
+3162 => x"8191e00c",
+3163 => x"8191dc08",
+3164 => x"7827fc83",
+3165 => x"38778191",
+3166 => x"dc0c8415",
+3167 => x"08fc0670",
+3168 => x"7a317a72",
+3169 => x"268f7225",
+3170 => x"07525553",
+3171 => x"0b0b7280",
+3172 => x"2efbfc38",
+3173 => x"8a398074",
+3174 => x"540b0b56",
+3175 => x"fed2397d",
+3176 => x"51879a3f",
+3177 => x"800b800c",
+3178 => x"8f3d0d04",
+3179 => x"73530b0b",
+3180 => x"807424ab",
+3181 => x"3872822c",
+3182 => x"81712b81",
+3183 => x"91f40807",
+3184 => x"708191f0",
+3185 => x"0b84050c",
+3186 => x"5d530b0b",
+3187 => x"778c180c",
+3188 => x"7488180c",
+3189 => x"7688190c",
+3190 => x"768c160c",
+3191 => x"f8e73983",
+3192 => x"1470822c",
+3193 => x"81712b81",
+3194 => x"91f40807",
+3195 => x"708191f0",
+3196 => x"0b84050c",
+3197 => x"5e51530b",
+3198 => x"0bd2397b",
+3199 => x"7b06530b",
+3200 => x"0b72fbfc",
+3201 => x"38841a7b",
+3202 => x"105c5aef",
+3203 => x"39ff1a81",
+3204 => x"7105515a",
+3205 => x"f6c93978",
+3206 => x"17798107",
+3207 => x"84190c8c",
+3208 => x"18088819",
+3209 => x"08718c72",
+3210 => x"050c8872",
+3211 => x"050c5970",
+3212 => x"8192840c",
+3213 => x"70819280",
+3214 => x"0c8191f8",
+3215 => x"0b8c7205",
+3216 => x"0c8c7105",
+3217 => x"08887205",
+3218 => x"0c748107",
+3219 => x"8472050c",
+3220 => x"74710575",
+3221 => x"710c5153",
+3222 => x"0b0bf8f1",
+3223 => x"39751784",
+3224 => x"71050881",
+3225 => x"07847205",
+3226 => x"0c530b0b",
+3227 => x"8c170888",
+3228 => x"1808718c",
+3229 => x"72050c88",
+3230 => x"72050c58",
+3231 => x"7d5185bd",
+3232 => x"3f881754",
+3233 => x"0b0bf4c2",
+3234 => x"39728415",
+3235 => x"0cf41af8",
+3236 => x"0670841e",
+3237 => x"08810607",
+3238 => x"841e0c70",
+3239 => x"1d540b0b",
+3240 => x"5b850b84",
+3241 => x"140c850b",
+3242 => x"88140c8f",
+3243 => x"7b27fdaf",
+3244 => x"38881c52",
+3245 => x"7d51e3b8",
+3246 => x"3f8191f0",
+3247 => x"0b880508",
+3248 => x"8191b408",
+3249 => x"5955fd97",
+3250 => x"39778191",
+3251 => x"b40c7381",
+3252 => x"91e40cfb",
+3253 => x"e2397284",
+3254 => x"150cfd83",
+3255 => x"39fa3d0d",
+3256 => x"7a790288",
+3257 => x"05a70533",
+3258 => x"5652530b",
+3259 => x"0b837327",
+3260 => x"8c387083",
+3261 => x"06520b0b",
+3262 => x"71802eb1",
+3263 => x"38ff7305",
+3264 => x"530b0b72",
+3265 => x"ff2e9b38",
+3266 => x"70335273",
+3267 => x"0b722e94",
+3268 => x"38817105",
+3269 => x"ff14540b",
+3270 => x"0b5172ff",
+3271 => x"2e098106",
+3272 => x"e7388051",
+3273 => x"0b0b7080",
+3274 => x"0c883d0d",
+3275 => x"04707257",
+3276 => x"55835175",
+3277 => x"82802914",
+3278 => x"ff720552",
+3279 => x"560b7080",
+3280 => x"25f13883",
+3281 => x"732780cb",
+3282 => x"38740876",
+3283 => x"327009f7",
+3284 => x"fbfdff72",
+3285 => x"050670f8",
+3286 => x"84828180",
+3287 => x"06515151",
+3288 => x"0b0b7080",
+3289 => x"2e9e3874",
+3290 => x"51805270",
+3291 => x"3357730b",
+3292 => x"772effb0",
+3293 => x"38817105",
+3294 => x"81730553",
+3295 => x"0b0b5183",
+3296 => x"7227e838",
+3297 => x"fc730584",
+3298 => x"1656530b",
+3299 => x"0b728326",
+3300 => x"ffb73874",
+3301 => x"51fee639",
+3302 => x"fa3d0d78",
+3303 => x"7a7c7272",
+3304 => x"72575757",
+3305 => x"5956560b",
+3306 => x"740b7627",
+3307 => x"be387615",
+3308 => x"51750b71",
+3309 => x"27b53870",
+3310 => x"7717ff14",
+3311 => x"540b0b55",
+3312 => x"530b0b71",
+3313 => x"ff2e9d38",
+3314 => x"ff14ff14",
+3315 => x"540b0b54",
+3316 => x"0b0b7233",
+3317 => x"7434ff72",
+3318 => x"05520b0b",
+3319 => x"71ff2e09",
+3320 => x"8106e538",
+3321 => x"75800c88",
+3322 => x"3d0d0476",
+3323 => x"8f269c38",
+3324 => x"ff720552",
+3325 => x"0b0b71ff",
+3326 => x"2eea3872",
+3327 => x"70810554",
+3328 => x"0b0b3374",
+3329 => x"70810556",
+3330 => x"34e63974",
+3331 => x"76078306",
+3332 => x"510b0b70",
+3333 => x"db387575",
+3334 => x"540b0b51",
+3335 => x"72708405",
+3336 => x"540b0b08",
+3337 => x"71708405",
+3338 => x"530b0b0c",
+3339 => x"72708405",
+3340 => x"540b0b08",
+3341 => x"71708405",
+3342 => x"530b0b0c",
+3343 => x"72708405",
+3344 => x"540b0b08",
+3345 => x"71708405",
+3346 => x"530b0b0c",
+3347 => x"72708405",
+3348 => x"540b0b08",
+3349 => x"71708405",
+3350 => x"530b0b0c",
+3351 => x"f0720552",
+3352 => x"0b0b718f",
+3353 => x"26ffb538",
+3354 => x"8372279c",
+3355 => x"38727084",
+3356 => x"05540b0b",
+3357 => x"08717084",
+3358 => x"05530b0b",
+3359 => x"0cfc7205",
+3360 => x"520b0b71",
+3361 => x"8326e638",
+3362 => x"70540b0b",
+3363 => x"fee239fc",
+3364 => x"3d0d7679",
+3365 => x"71028c05",
+3366 => x"9f053357",
+3367 => x"55530b0b",
+3368 => x"55837227",
+3369 => x"8c387483",
+3370 => x"06510b0b",
+3371 => x"70802ea8",
+3372 => x"38ff7205",
+3373 => x"520b0b71",
+3374 => x"ff2e9638",
+3375 => x"73737081",
+3376 => x"055534ff",
+3377 => x"7205520b",
+3378 => x"0b71ff2e",
+3379 => x"098106ec",
+3380 => x"3874800c",
+3381 => x"863d0d04",
+3382 => x"7474882b",
+3383 => x"75077071",
+3384 => x"902b0751",
+3385 => x"540b0b51",
+3386 => x"8f7227b0",
+3387 => x"38727170",
+3388 => x"8405530b",
+3389 => x"0b0c7271",
+3390 => x"70840553",
+3391 => x"0b0b0c72",
+3392 => x"71708405",
+3393 => x"530b0b0c",
+3394 => x"72717084",
+3395 => x"05530b0b",
+3396 => x"0cf07205",
+3397 => x"520b0b71",
+3398 => x"8f26d238",
+3399 => x"83722795",
+3400 => x"38727170",
+3401 => x"8405530b",
+3402 => x"0b0cfc72",
+3403 => x"05520b0b",
+3404 => x"718326ed",
+3405 => x"3870530b",
+3406 => x"0bfef639",
+3407 => x"0404ef3d",
+3408 => x"0d636567",
+3409 => x"405d420b",
+3410 => x"7b802e85",
+3411 => x"ab386151",
+3412 => x"eb3ff81c",
+3413 => x"70847205",
+3414 => x"0870fc06",
+3415 => x"70628b05",
+3416 => x"70f80641",
+3417 => x"59455b5c",
+3418 => x"41579674",
+3419 => x"2782e238",
+3420 => x"807b247e",
+3421 => x"7c260759",
+3422 => x"80540b0b",
+3423 => x"78742e09",
+3424 => x"810682c6",
+3425 => x"38777b25",
+3426 => x"82913877",
+3427 => x"178191f0",
+3428 => x"0b880508",
+3429 => x"5e560b7c",
+3430 => x"0b762e84",
+3431 => x"ea388416",
+3432 => x"0870fe06",
+3433 => x"17847105",
+3434 => x"08810651",
+3435 => x"55550b73",
+3436 => x"82a43874",
+3437 => x"fc06597c",
+3438 => x"762e858f",
+3439 => x"3877195f",
+3440 => x"0b0b7e7b",
+3441 => x"25829438",
+3442 => x"79810654",
+3443 => x"0b0b7382",
+3444 => x"dc387677",
+3445 => x"08318471",
+3446 => x"0508fc06",
+3447 => x"565a7580",
+3448 => x"2e93387c",
+3449 => x"762e859c",
+3450 => x"38741918",
+3451 => x"590b0b78",
+3452 => x"7b2584b0",
+3453 => x"3879802e",
+3454 => x"82b33877",
+3455 => x"15567a0b",
+3456 => x"762482a9",
+3457 => x"388c1a08",
+3458 => x"881b0871",
+3459 => x"8c72050c",
+3460 => x"8872050c",
+3461 => x"55797659",
+3462 => x"57881761",
+3463 => x"fc055759",
+3464 => x"0b75a426",
+3465 => x"86ab387b",
+3466 => x"79555593",
+3467 => x"762780cf",
+3468 => x"387b7084",
+3469 => x"055d087c",
+3470 => x"56790c74",
+3471 => x"70840556",
+3472 => x"088c180c",
+3473 => x"9017540b",
+3474 => x"0b9b7627",
+3475 => x"b2387470",
+3476 => x"84055608",
+3477 => x"740c7470",
+3478 => x"84055608",
+3479 => x"94180c98",
+3480 => x"17540b0b",
+3481 => x"a3762797",
+3482 => x"38747084",
+3483 => x"05560874",
+3484 => x"0c747084",
+3485 => x"0556089c",
+3486 => x"180ca017",
+3487 => x"540b0b74",
+3488 => x"70840556",
+3489 => x"08747084",
+3490 => x"05560c74",
+3491 => x"70840556",
+3492 => x"08747084",
+3493 => x"05560c74",
+3494 => x"08740c77",
+3495 => x"7b31560b",
+3496 => x"0b758f26",
+3497 => x"80d13884",
+3498 => x"17088106",
+3499 => x"78078418",
+3500 => x"0c771784",
+3501 => x"71050881",
+3502 => x"07847205",
+3503 => x"0c540b0b",
+3504 => x"6151fcf9",
+3505 => x"3f881754",
+3506 => x"0b0b7380",
+3507 => x"0c933d0d",
+3508 => x"04905bfd",
+3509 => x"9b397856",
+3510 => x"fdee398c",
+3511 => x"16088817",
+3512 => x"08718c72",
+3513 => x"050c8872",
+3514 => x"050c557e",
+3515 => x"707c3157",
+3516 => x"588f7627",
+3517 => x"ffb1387a",
+3518 => x"17841808",
+3519 => x"81067c07",
+3520 => x"84190c76",
+3521 => x"81078472",
+3522 => x"050c7671",
+3523 => x"05847105",
+3524 => x"08810784",
+3525 => x"72050c55",
+3526 => x"88055261",
+3527 => x"51dad13f",
+3528 => x"6151fc99",
+3529 => x"3f881754",
+3530 => x"0b0bff9e",
+3531 => x"397d5261",
+3532 => x"51ea963f",
+3533 => x"80085980",
+3534 => x"08802e81",
+3535 => x"ab388008",
+3536 => x"f8056084",
+3537 => x"0508fe06",
+3538 => x"61055557",
+3539 => x"0b0b7674",
+3540 => x"2e848d38",
+3541 => x"fc18560b",
+3542 => x"0b75a426",
+3543 => x"81b0387b",
+3544 => x"80085555",
+3545 => x"93762780",
+3546 => x"dc387470",
+3547 => x"84055608",
+3548 => x"80087084",
+3549 => x"05800c0c",
+3550 => x"80087570",
+3551 => x"84055708",
+3552 => x"71708405",
+3553 => x"530b0b0c",
+3554 => x"540b0b9b",
+3555 => x"7627b638",
+3556 => x"74708405",
+3557 => x"56087470",
+3558 => x"8405560c",
+3559 => x"74708405",
+3560 => x"56087470",
+3561 => x"8405560c",
+3562 => x"a3762799",
+3563 => x"38747084",
+3564 => x"05560874",
+3565 => x"70840556",
+3566 => x"0c747084",
+3567 => x"05560874",
+3568 => x"70840556",
+3569 => x"0c747084",
+3570 => x"05560874",
+3571 => x"70840556",
+3572 => x"0c747084",
+3573 => x"05560874",
+3574 => x"70840556",
+3575 => x"0c740874",
+3576 => x"0c7b5261",
+3577 => x"51d9893f",
+3578 => x"6151fad1",
+3579 => x"3f78540b",
+3580 => x"0b73800c",
+3581 => x"933d0d04",
+3582 => x"7d526151",
+3583 => x"e8cb3f80",
+3584 => x"08800c93",
+3585 => x"3d0d0484",
+3586 => x"160855fb",
+3587 => x"a6397553",
+3588 => x"0b0b7b52",
+3589 => x"800851ff",
+3590 => x"a4a23f7b",
+3591 => x"526151d8",
+3592 => x"cf3fc539",
+3593 => x"8c160888",
+3594 => x"1708718c",
+3595 => x"72050c88",
+3596 => x"72050c55",
+3597 => x"8c1a0888",
+3598 => x"1b08718c",
+3599 => x"72050c88",
+3600 => x"72050c55",
+3601 => x"79795957",
+3602 => x"fbcf3977",
+3603 => x"19901c55",
+3604 => x"550b730b",
+3605 => x"7524faf0",
+3606 => x"387a1770",
+3607 => x"8191f00b",
+3608 => x"88050c75",
+3609 => x"7c318107",
+3610 => x"8472050c",
+3611 => x"5d841708",
+3612 => x"81067b07",
+3613 => x"84180c61",
+3614 => x"51f9c23f",
+3615 => x"8817540b",
+3616 => x"0bfcc739",
+3617 => x"74191890",
+3618 => x"1c555d0b",
+3619 => x"730b7d24",
+3620 => x"fae3388c",
+3621 => x"1a08881b",
+3622 => x"08718c72",
+3623 => x"050c8872",
+3624 => x"050c5588",
+3625 => x"1a61fc05",
+3626 => x"57590b75",
+3627 => x"a42681bc",
+3628 => x"387b7955",
+3629 => x"55937627",
+3630 => x"80cf387b",
+3631 => x"7084055d",
+3632 => x"087c5679",
+3633 => x"0c747084",
+3634 => x"0556088c",
+3635 => x"1b0c901a",
+3636 => x"540b0b9b",
+3637 => x"7627b238",
+3638 => x"74708405",
+3639 => x"5608740c",
+3640 => x"74708405",
+3641 => x"5608941b",
+3642 => x"0c981a54",
+3643 => x"0b0ba376",
+3644 => x"27973874",
+3645 => x"70840556",
+3646 => x"08740c74",
+3647 => x"70840556",
+3648 => x"089c1b0c",
+3649 => x"a01a540b",
+3650 => x"0b747084",
+3651 => x"05560874",
+3652 => x"70840556",
+3653 => x"0c747084",
+3654 => x"05560874",
+3655 => x"70840556",
+3656 => x"0c740874",
+3657 => x"0c7a1a70",
+3658 => x"8191f00b",
+3659 => x"88050c7d",
+3660 => x"7c318107",
+3661 => x"8472050c",
+3662 => x"540b0b84",
+3663 => x"1a088106",
+3664 => x"7b07841b",
+3665 => x"0c6151f7",
+3666 => x"f43f7854",
+3667 => x"0b0bfda1",
+3668 => x"3975530b",
+3669 => x"0b7b5278",
+3670 => x"51ffa1e0",
+3671 => x"3ffabc39",
+3672 => x"841708fc",
+3673 => x"06186058",
+3674 => x"58fab039",
+3675 => x"75530b0b",
+3676 => x"7b527851",
+3677 => x"ffa1c53f",
+3678 => x"7a1a7081",
+3679 => x"91f00b88",
+3680 => x"050c7d7c",
+3681 => x"31810784",
+3682 => x"72050c54",
+3683 => x"0b0b841a",
+3684 => x"0881067b",
+3685 => x"07841b0c",
+3686 => x"ffab3970",
+3687 => x"70707080",
+3688 => x"0b819ab8",
+3689 => x"0c765187",
+3690 => x"853f8008",
+3691 => x"530b0b80",
+3692 => x"08ff2e89",
+3693 => x"3872800c",
+3694 => x"50505050",
+3695 => x"04819ab8",
+3696 => x"08540b0b",
+3697 => x"73802eed",
+3698 => x"38757471",
+3699 => x"0c527280",
+3700 => x"0c505050",
+3701 => x"5004f93d",
+3702 => x"0d797c55",
+3703 => x"7b540b0b",
+3704 => x"8e710522",
+3705 => x"70902b70",
+3706 => x"902c5557",
+3707 => x"818a9408",
+3708 => x"530b0b58",
+3709 => x"5685e33f",
+3710 => x"80085780",
+3711 => x"0b800824",
+3712 => x"933880d0",
+3713 => x"16088008",
+3714 => x"0580d017",
+3715 => x"0c76800c",
+3716 => x"893d0d04",
+3717 => x"8c162283",
+3718 => x"dfff0655",
+3719 => x"0b0b748c",
+3720 => x"17237680",
+3721 => x"0c893d0d",
+3722 => x"04fa3d0d",
+3723 => x"788c7105",
+3724 => x"2270882a",
+3725 => x"70810651",
+3726 => x"57585674",
+3727 => x"b1388c16",
+3728 => x"2283dfff",
+3729 => x"06550b0b",
+3730 => x"748c1723",
+3731 => x"7a540b0b",
+3732 => x"79530b0b",
+3733 => x"8e162270",
+3734 => x"902b7090",
+3735 => x"2c540b0b",
+3736 => x"56818a94",
+3737 => x"08525682",
+3738 => x"fe3f883d",
+3739 => x"0d048254",
+3740 => x"0b0b8053",
+3741 => x"0b0b8e16",
+3742 => x"2270902b",
+3743 => x"70902c54",
+3744 => x"0b0b5681",
+3745 => x"8a940852",
+3746 => x"5784913f",
+3747 => x"8c162283",
+3748 => x"dfff0655",
+3749 => x"0b0b748c",
+3750 => x"17237a54",
+3751 => x"0b0b7953",
+3752 => x"0b0b8e16",
+3753 => x"2270902b",
+3754 => x"70902c54",
+3755 => x"0b0b5681",
+3756 => x"8a940852",
+3757 => x"5682b03f",
+3758 => x"883d0d04",
+3759 => x"f93d0d79",
+3760 => x"7c557b54",
+3761 => x"0b0b8e71",
+3762 => x"05227090",
+3763 => x"2b70902c",
+3764 => x"5557818a",
+3765 => x"9408530b",
+3766 => x"0b585683",
+3767 => x"bf3f8008",
+3768 => x"578008ff",
+3769 => x"2e9b388c",
+3770 => x"1622a080",
+3771 => x"07550b0b",
+3772 => x"748c1723",
+3773 => x"800880d0",
+3774 => x"170c7680",
+3775 => x"0c893d0d",
+3776 => x"048c1622",
+3777 => x"83dfff06",
+3778 => x"550b0b74",
+3779 => x"8c172376",
+3780 => x"800c893d",
+3781 => x"0d047070",
+3782 => x"70748e71",
+3783 => x"05227090",
+3784 => x"2b70902c",
+3785 => x"55515153",
+3786 => x"0b0b818a",
+3787 => x"94085181",
+3788 => x"f43f5050",
+3789 => x"5004fb3d",
+3790 => x"0d777970",
+3791 => x"72078306",
+3792 => x"530b0b54",
+3793 => x"0b0b5270",
+3794 => x"99387173",
+3795 => x"7308540b",
+3796 => x"0b56540b",
+3797 => x"0b717308",
+3798 => x"2e80d038",
+3799 => x"7375540b",
+3800 => x"0b520b0b",
+3801 => x"71337081",
+3802 => x"ff065254",
+3803 => x"0b0b7080",
+3804 => x"2ea33872",
+3805 => x"3355700b",
+3806 => x"752e0981",
+3807 => x"069a3881",
+3808 => x"72058114",
+3809 => x"71337081",
+3810 => x"ff06540b",
+3811 => x"0b56540b",
+3812 => x"0b5270df",
+3813 => x"38723355",
+3814 => x"7381ff06",
+3815 => x"7581ff06",
+3816 => x"71713180",
+3817 => x"0c525287",
+3818 => x"3d0d0471",
+3819 => x"0970f7fb",
+3820 => x"fdff1406",
+3821 => x"70f88482",
+3822 => x"81800651",
+3823 => x"51510b0b",
+3824 => x"709d3884",
+3825 => x"14841671",
+3826 => x"08540b0b",
+3827 => x"56540b0b",
+3828 => x"7175082e",
+3829 => x"d6387375",
+3830 => x"540b0b52",
+3831 => x"ff843980",
+3832 => x"0b800c87",
+3833 => x"3d0d04fb",
+3834 => x"3d0d800b",
+3835 => x"819ab80c",
+3836 => x"7a530b0b",
+3837 => x"79527851",
+3838 => x"83c33f80",
+3839 => x"08558008",
+3840 => x"ff2e8838",
+3841 => x"74800c87",
+3842 => x"3d0d0481",
+3843 => x"9ab80856",
+3844 => x"0b0b7580",
+3845 => x"2eee3877",
+3846 => x"76710c54",
+3847 => x"0b0b7480",
+3848 => x"0c873d0d",
+3849 => x"04707070",
+3850 => x"70800b81",
+3851 => x"9ab80c76",
+3852 => x"5185db3f",
+3853 => x"8008530b",
+3854 => x"0b8008ff",
+3855 => x"2e893872",
+3856 => x"800c5050",
+3857 => x"50500481",
+3858 => x"9ab80854",
+3859 => x"0b0b7380",
+3860 => x"2eed3875",
+3861 => x"74710c52",
+3862 => x"72800c50",
+3863 => x"50505004",
+3864 => x"fc3d0d80",
+3865 => x"0b819ab8",
+3866 => x"0c785277",
+3867 => x"51889c3f",
+3868 => x"8008540b",
+3869 => x"0b8008ff",
+3870 => x"2e883873",
+3871 => x"800c863d",
+3872 => x"0d04819a",
+3873 => x"b808550b",
+3874 => x"0b74802e",
+3875 => x"ee387675",
+3876 => x"710c530b",
+3877 => x"0b73800c",
+3878 => x"863d0d04",
+3879 => x"fb3d0d80",
+3880 => x"0b819ab8",
+3881 => x"0c7a530b",
+3882 => x"0b795278",
+3883 => x"5185e63f",
+3884 => x"80085580",
+3885 => x"08ff2e88",
+3886 => x"3874800c",
+3887 => x"873d0d04",
+3888 => x"819ab808",
+3889 => x"560b0b75",
+3890 => x"802eee38",
+3891 => x"7776710c",
+3892 => x"540b0b74",
+3893 => x"800c873d",
+3894 => x"0d04fb3d",
+3895 => x"0d800b81",
+3896 => x"9ab80c7a",
+3897 => x"530b0b79",
+3898 => x"52785182",
+3899 => x"cd3f8008",
+3900 => x"558008ff",
+3901 => x"2e883874",
+3902 => x"800c873d",
+3903 => x"0d04819a",
+3904 => x"b808560b",
+3905 => x"0b75802e",
+3906 => x"ee387776",
+3907 => x"710c540b",
+3908 => x"0b74800c",
+3909 => x"873d0d04",
+3910 => x"810b800c",
+3911 => x"04707281",
+3912 => x"2e873880",
+3913 => x"0b800c50",
+3914 => x"04735181",
+3915 => x"8a3f7070",
+3916 => x"70819abc",
+3917 => x"08510b0b",
+3918 => x"708a3881",
+3919 => x"9ac47081",
+3920 => x"9abc0c51",
+3921 => x"0b0b7075",
+3922 => x"72055252",
+3923 => x"ff530b0b",
+3924 => x"7087fb80",
+3925 => x"80268a38",
+3926 => x"70819abc",
+3927 => x"0c71530b",
+3928 => x"0b72800c",
+3929 => x"50505004",
+3930 => x"70707070",
+3931 => x"800b818a",
+3932 => x"8808540b",
+3933 => x"0b540b0b",
+3934 => x"72812e9e",
+3935 => x"3873819a",
+3936 => x"c00cff8e",
+3937 => x"863fff8c",
+3938 => x"f73f8199",
+3939 => x"f8528151",
+3940 => x"ff90e53f",
+3941 => x"80085187",
+3942 => x"d53f7281",
+3943 => x"9ac00cff",
+3944 => x"8de93fff",
+3945 => x"8cda3f81",
+3946 => x"99f85281",
+3947 => x"51ff90c8",
+3948 => x"3f800851",
+3949 => x"87b83f00",
+3950 => x"ff3900ff",
+3951 => x"39f53d0d",
+3952 => x"7e60819a",
+3953 => x"c008705b",
+3954 => x"585b5b75",
+3955 => x"80c63877",
+3956 => x"7a25a338",
+3957 => x"771b7033",
+3958 => x"7081ff06",
+3959 => x"58585975",
+3960 => x"8a2e9a38",
+3961 => x"7681ff06",
+3962 => x"51ff8cfc",
+3963 => x"3f811858",
+3964 => x"790b7824",
+3965 => x"df387980",
+3966 => x"0c8d3d0d",
+3967 => x"048d51ff",
+3968 => x"8ce63f78",
+3969 => x"337081ff",
+3970 => x"065257ff",
+3971 => x"8cda3f81",
+3972 => x"1858dd39",
+3973 => x"79557a54",
+3974 => x"0b0b7d53",
+3975 => x"0b0b8552",
+3976 => x"8d3dfc05",
+3977 => x"51ff8c9c",
+3978 => x"3f800856",
+3979 => x"86b93f7b",
+3980 => x"80080c75",
+3981 => x"800c8d3d",
+3982 => x"0d04f63d",
+3983 => x"0d7d7f81",
+3984 => x"9ac00870",
+3985 => x"5a585a5a",
+3986 => x"7580ca38",
+3987 => x"767925b6",
+3988 => x"38761a56",
+3989 => x"ff8bef3f",
+3990 => x"80087634",
+3991 => x"800b8008",
+3992 => x"81ff0657",
+3993 => x"580b758a",
+3994 => x"2ea73875",
+3995 => x"8d327030",
+3996 => x"7080257a",
+3997 => x"07515156",
+3998 => x"0b0b75bf",
+3999 => x"38811757",
+4000 => x"780b7724",
+4001 => x"cc387656",
+4002 => x"0b0b7580",
+4003 => x"0c8c3d0d",
+4004 => x"048158d7",
+4005 => x"39785579",
+4006 => x"540b0b7c",
+4007 => x"530b0b84",
+4008 => x"528c3dfc",
+4009 => x"0551ff8b",
+4010 => x"9b3f8008",
+4011 => x"5685b83f",
+4012 => x"7a80080c",
+4013 => x"75800c8c",
+4014 => x"3d0d0481",
+4015 => x"1756c939",
+4016 => x"f93d0d79",
+4017 => x"57819ac0",
+4018 => x"08802eb2",
+4019 => x"387651ff",
+4020 => x"9dc13f7b",
+4021 => x"567a5580",
+4022 => x"08810554",
+4023 => x"0b0b7653",
+4024 => x"0b0b8252",
+4025 => x"893dfc05",
+4026 => x"51ff8ad8",
+4027 => x"3f800857",
+4028 => x"84f53f77",
+4029 => x"80080c76",
+4030 => x"800c893d",
+4031 => x"0d0484e7",
+4032 => x"3f850b80",
+4033 => x"080cff0b",
+4034 => x"800c893d",
+4035 => x"0d04fb3d",
+4036 => x"0d819ac0",
+4037 => x"08705654",
+4038 => x"0b0b7388",
+4039 => x"3874800c",
+4040 => x"873d0d04",
+4041 => x"77530b0b",
+4042 => x"8352873d",
+4043 => x"fc0551ff",
+4044 => x"8a923f80",
+4045 => x"08540b0b",
+4046 => x"84ad3f75",
+4047 => x"80080c73",
+4048 => x"800c873d",
+4049 => x"0d04ff0b",
+4050 => x"800c04fb",
+4051 => x"3d0d7755",
+4052 => x"819ac008",
+4053 => x"802eae38",
+4054 => x"7451ff9c",
+4055 => x"b63f8008",
+4056 => x"8105540b",
+4057 => x"0b74530b",
+4058 => x"0b875287",
+4059 => x"3dfc0551",
+4060 => x"ff89d13f",
+4061 => x"80085583",
+4062 => x"ee3f7580",
+4063 => x"080c7480",
+4064 => x"0c873d0d",
+4065 => x"0483e03f",
+4066 => x"850b8008",
+4067 => x"0cff0b80",
+4068 => x"0c873d0d",
+4069 => x"04fa3d0d",
+4070 => x"819ac008",
+4071 => x"802ea738",
+4072 => x"7a557954",
+4073 => x"0b0b7853",
+4074 => x"0b0b8652",
+4075 => x"883dfc05",
+4076 => x"51ff8990",
+4077 => x"3f800856",
+4078 => x"83ad3f76",
+4079 => x"80080c75",
+4080 => x"800c883d",
+4081 => x"0d04839f",
+4082 => x"3f9d0b80",
+4083 => x"080cff0b",
+4084 => x"800c883d",
+4085 => x"0d04fb3d",
+4086 => x"0d777956",
+4087 => x"56807054",
+4088 => x"0b0b540b",
+4089 => x"0b737525",
+4090 => x"9f387410",
+4091 => x"1010f805",
+4092 => x"52721670",
+4093 => x"3370742b",
+4094 => x"76078116",
+4095 => x"f8165656",
+4096 => x"56515174",
+4097 => x"7324ea38",
+4098 => x"73800c87",
+4099 => x"3d0d04fc",
+4100 => x"3d0d7678",
+4101 => x"5555bc53",
+4102 => x"0b0b8052",
+4103 => x"7351e8ef",
+4104 => x"3f845274",
+4105 => x"51ffaf3f",
+4106 => x"80087423",
+4107 => x"84528415",
+4108 => x"51ffa33f",
+4109 => x"80088215",
+4110 => x"23845288",
+4111 => x"1551ff96",
+4112 => x"3f800884",
+4113 => x"150c8452",
+4114 => x"8c1551ff",
+4115 => x"893f8008",
+4116 => x"88152384",
+4117 => x"52901551",
+4118 => x"fefc3f80",
+4119 => x"088a1523",
+4120 => x"84529415",
+4121 => x"51feef3f",
+4122 => x"80088c15",
+4123 => x"23845298",
+4124 => x"1551fee2",
+4125 => x"3f80088e",
+4126 => x"15238852",
+4127 => x"9c1551fe",
+4128 => x"d53f8008",
+4129 => x"90150c86",
+4130 => x"3d0d04e9",
+4131 => x"3d0d6a81",
+4132 => x"9ac00857",
+4133 => x"570b7593",
+4134 => x"3880c080",
+4135 => x"0b84180c",
+4136 => x"75ac180c",
+4137 => x"75800c99",
+4138 => x"3d0d0489",
+4139 => x"3d70556a",
+4140 => x"540b0b55",
+4141 => x"8a52993d",
+4142 => x"ffbc0551",
+4143 => x"ff87853f",
+4144 => x"80087753",
+4145 => x"0b0b7552",
+4146 => x"56fec43f",
+4147 => x"81993f77",
+4148 => x"80080c75",
+4149 => x"800c993d",
+4150 => x"0d04e93d",
+4151 => x"0d695781",
+4152 => x"9ac00880",
+4153 => x"2ebb3876",
+4154 => x"51ff99a7",
+4155 => x"3f893d70",
+4156 => x"56800881",
+4157 => x"05557754",
+4158 => x"0b0b568f",
+4159 => x"52993dff",
+4160 => x"bc0551ff",
+4161 => x"86be3f80",
+4162 => x"086b530b",
+4163 => x"0b765257",
+4164 => x"fdfd3f80",
+4165 => x"d23f7780",
+4166 => x"080c7680",
+4167 => x"0c993d0d",
+4168 => x"0480c43f",
+4169 => x"850b8008",
+4170 => x"0cff0b80",
+4171 => x"0c993d0d",
+4172 => x"04fc3d0d",
+4173 => x"81540b0b",
+4174 => x"819ac008",
+4175 => x"88387380",
+4176 => x"0c863d0d",
+4177 => x"0476530b",
+4178 => x"0b97b952",
+4179 => x"863dfc05",
+4180 => x"51ff85f0",
+4181 => x"3f800854",
+4182 => x"0b0b8c3f",
+4183 => x"7480080c",
+4184 => x"73800c86",
+4185 => x"3d0d0481",
+4186 => x"8a940880",
+4187 => x"0c04f73d",
+4188 => x"0d7b818a",
+4189 => x"940882c8",
+4190 => x"7105085a",
+4191 => x"540b0b5a",
+4192 => x"77802e80",
+4193 => x"eb388188",
+4194 => x"18841908",
+4195 => x"ff058171",
+4196 => x"2b595559",
+4197 => x"80742481",
+4198 => x"80388074",
+4199 => x"2480c138",
+4200 => x"73822b78",
+4201 => x"71058805",
+4202 => x"56568180",
+4203 => x"19087706",
+4204 => x"530b0b72",
+4205 => x"802e80c3",
+4206 => x"38781670",
+4207 => x"08530b0b",
+4208 => x"530b0b79",
+4209 => x"51740853",
+4210 => x"0b0b722d",
+4211 => x"ff14fc17",
+4212 => x"fc177981",
+4213 => x"2c5a5757",
+4214 => x"540b0b73",
+4215 => x"8025cb38",
+4216 => x"7708580b",
+4217 => x"0b77ff9e",
+4218 => x"38818a94",
+4219 => x"08530b0b",
+4220 => x"bc730508",
+4221 => x"a9387951",
+4222 => x"f7bd3f74",
+4223 => x"08530b0b",
+4224 => x"722dff14",
+4225 => x"fc17fc17",
+4226 => x"79812c5a",
+4227 => x"5757540b",
+4228 => x"0b738025",
+4229 => x"ff9438c8",
+4230 => x"398057fe",
+4231 => x"fd397251",
+4232 => x"bc730508",
+4233 => x"530b0b72",
+4234 => x"2d7951f7",
+4235 => x"8a3f8c08",
+4236 => x"028c0c70",
+4237 => x"70707080",
+4238 => x"530b0b8c",
+4239 => x"088c0508",
+4240 => x"528c0888",
+4241 => x"050851ff",
+4242 => x"8dd23f80",
+4243 => x"0870800c",
+4244 => x"540b0b50",
+4245 => x"5050508c",
+4246 => x"0c048c08",
+4247 => x"028c0c70",
+4248 => x"70707081",
+4249 => x"530b0b8c",
+4250 => x"088c0508",
+4251 => x"528c0888",
+4252 => x"050851ff",
+4253 => x"8da63f80",
+4254 => x"0870800c",
+4255 => x"540b0b50",
+4256 => x"5050508c",
+4257 => x"0c047070",
+4258 => x"819a800b",
+4259 => x"fc057008",
+4260 => x"52520b70",
+4261 => x"ff2e9338",
+4262 => x"702dfc72",
+4263 => x"05700852",
+4264 => x"520b70ff",
+4265 => x"2e098106",
+4266 => x"ef385050",
+4267 => x"0404ff85",
+4268 => x"e53f0400",
+4269 => x"4379636c",
+4270 => x"65732025",
+4271 => x"640a0000",
+4272 => x"48656c6c",
+4273 => x"6f20776f",
+4274 => x"726c6420",
+4275 => x"310a0000",
+4276 => x"48656c6c",
+4277 => x"6f20776f",
+4278 => x"726c6420",
+4279 => x"320a0000",
+4280 => x"0a000000",
+4281 => x"20202020",
+4282 => x"20202020",
+4283 => x"20202020",
+4284 => x"20202020",
+4285 => x"30303030",
+4286 => x"30303030",
+4287 => x"30303030",
+4288 => x"30303030",
+4289 => x"000017e3",
+4290 => x"0000138d",
+4291 => x"0000138d",
+4292 => x"000017d9",
+4293 => x"0000138d",
+4294 => x"0000138d",
+4295 => x"0000138d",
+4296 => x"0000138d",
+4297 => x"0000138d",
+4298 => x"0000138d",
+4299 => x"00001364",
+4300 => x"0000177e",
+4301 => x"0000138d",
+4302 => x"00001376",
+4303 => x"000016ec",
+4304 => x"0000138d",
+4305 => x"000017af",
+4306 => x"0000178a",
+4307 => x"0000178a",
+4308 => x"0000178a",
+4309 => x"0000178a",
+4310 => x"0000178a",
+4311 => x"0000178a",
+4312 => x"0000178a",
+4313 => x"0000178a",
+4314 => x"0000178a",
+4315 => x"0000138d",
+4316 => x"0000138d",
+4317 => x"0000138d",
+4318 => x"0000138d",
+4319 => x"0000138d",
+4320 => x"0000138d",
+4321 => x"0000138d",
+4322 => x"0000138d",
+4323 => x"0000138d",
+4324 => x"00001699",
+4325 => x"00001326",
+4326 => x"0000138d",
+4327 => x"0000138d",
+4328 => x"0000138d",
+4329 => x"0000138d",
+4330 => x"0000138d",
+4331 => x"0000138d",
+4332 => x"0000138d",
+4333 => x"0000138d",
+4334 => x"0000138d",
+4335 => x"0000138d",
+4336 => x"000012ec",
+4337 => x"0000138d",
+4338 => x"0000138d",
+4339 => x"0000138d",
+4340 => x"00001553",
+4341 => x"0000138d",
+4342 => x"00001015",
+4343 => x"0000138d",
+4344 => x"0000138d",
+4345 => x"00001733",
+4346 => x"0000138d",
+4347 => x"0000138d",
+4348 => x"0000138d",
+4349 => x"0000138d",
+4350 => x"0000138d",
+4351 => x"0000138d",
+4352 => x"0000138d",
+4353 => x"0000138d",
+4354 => x"0000138d",
+4355 => x"0000138d",
+4356 => x"00001699",
+4357 => x"0000132a",
+4358 => x"0000138d",
+4359 => x"0000138d",
+4360 => x"0000138d",
+4361 => x"0000168e",
+4362 => x"0000132a",
+4363 => x"0000138d",
+4364 => x"0000138d",
+4365 => x"000015d8",
+4366 => x"0000138d",
+4367 => x"000015a8",
+4368 => x"000012f0",
+4369 => x"000015f7",
+4370 => x"00001383",
+4371 => x"0000138d",
+4372 => x"00001553",
+4373 => x"0000138d",
+4374 => x"00001019",
+4375 => x"0000138d",
+4376 => x"0000138d",
+4377 => x"000017ba",
+4378 => x"62756720",
+4379 => x"696e2076",
+4380 => x"66707269",
+4381 => x"6e74663a",
+4382 => x"20626164",
+4383 => x"20626173",
+4384 => x"65000000",
+4385 => x"30313233",
+4386 => x"34353637",
+4387 => x"38396162",
+4388 => x"63646566",
+4389 => x"00000000",
+4390 => x"30313233",
+4391 => x"34353637",
+4392 => x"38394142",
+4393 => x"43444546",
+4394 => x"00000000",
+4395 => x"286e756c",
+4396 => x"6c290000",
+4397 => x"432d5554",
+4398 => x"462d3800",
+4399 => x"432d534a",
+4400 => x"49530000",
+4401 => x"432d4555",
+4402 => x"434a5000",
+4403 => x"432d4a49",
+4404 => x"53000000",
+4405 => x"43000000",
+4406 => x"2e000000",
+4407 => x"49534f2d",
+4408 => x"38383539",
+4409 => x"2d310000",
+4410 => x"64756d6d",
+4411 => x"792e6578",
+4412 => x"65000000",
+4413 => x"00ffffff",
+4414 => x"ff00ffff",
+4415 => x"ffff00ff",
+4416 => x"ffffff00",
+4417 => x"00000000",
+4418 => x"00000000",
+4419 => x"00000000",
+4420 => x"00004d08",
+4421 => x"00004518",
+4422 => x"00000000",
+4423 => x"00004780",
+4424 => x"000047dc",
+4425 => x"00004838",
+4426 => x"00000000",
+4427 => x"00000000",
+4428 => x"00000000",
+4429 => x"00000000",
+4430 => x"00000000",
+4431 => x"00000000",
+4432 => x"00000000",
+4433 => x"00000000",
+4434 => x"00000000",
+4435 => x"000044d4",
+4436 => x"00000000",
+4437 => x"00000000",
+4438 => x"00000000",
+4439 => x"00000000",
+4440 => x"00000000",
+4441 => x"00000000",
+4442 => x"00000000",
+4443 => x"00000000",
+4444 => x"00000000",
+4445 => x"00000000",
+4446 => x"00000000",
+4447 => x"00000000",
+4448 => x"00000000",
+4449 => x"00000000",
+4450 => x"00000000",
+4451 => x"00000000",
+4452 => x"00000000",
+4453 => x"00000000",
+4454 => x"00000000",
+4455 => x"00000000",
+4456 => x"00000000",
+4457 => x"00000000",
+4458 => x"00000000",
+4459 => x"00000000",
+4460 => x"00000000",
+4461 => x"00000000",
+4462 => x"00000000",
+4463 => x"00000000",
+4464 => x"00000001",
+4465 => x"330eabcd",
+4466 => x"1234e66d",
+4467 => x"deec0005",
+4468 => x"000b0000",
+4469 => x"00000000",
+4470 => x"00000000",
+4471 => x"00000000",
+4472 => x"00000000",
+4473 => x"00000000",
+4474 => x"00000000",
+4475 => x"00000000",
+4476 => x"00000000",
+4477 => x"00000000",
+4478 => x"00000000",
+4479 => x"00000000",
+4480 => x"00000000",
+4481 => x"00000000",
+4482 => x"00000000",
+4483 => x"00000000",
+4484 => x"00000000",
+4485 => x"00000000",
+4486 => x"00000000",
+4487 => x"00000000",
+4488 => x"00000000",
+4489 => x"00000000",
+4490 => x"00000000",
+4491 => x"00000000",
+4492 => x"00000000",
+4493 => x"00000000",
+4494 => x"00000000",
+4495 => x"00000000",
+4496 => x"00000000",
+4497 => x"00000000",
+4498 => x"00000000",
+4499 => x"00000000",
+4500 => x"00000000",
+4501 => x"00000000",
+4502 => x"00000000",
+4503 => x"00000000",
+4504 => x"00000000",
+4505 => x"00000000",
+4506 => x"00000000",
+4507 => x"00000000",
+4508 => x"00000000",
+4509 => x"00000000",
+4510 => x"00000000",
+4511 => x"00000000",
+4512 => x"00000000",
+4513 => x"00000000",
+4514 => x"00000000",
+4515 => x"00000000",
+4516 => x"00000000",
+4517 => x"00000000",
+4518 => x"00000000",
+4519 => x"00000000",
+4520 => x"00000000",
+4521 => x"00000000",
+4522 => x"00000000",
+4523 => x"00000000",
+4524 => x"00000000",
+4525 => x"00000000",
+4526 => x"00000000",
+4527 => x"00000000",
+4528 => x"00000000",
+4529 => x"00000000",
+4530 => x"00000000",
+4531 => x"00000000",
+4532 => x"00000000",
+4533 => x"00000000",
+4534 => x"00000000",
+4535 => x"00000000",
+4536 => x"00000000",
+4537 => x"00000000",
+4538 => x"00000000",
+4539 => x"00000000",
+4540 => x"00000000",
+4541 => x"00000000",
+4542 => x"00000000",
+4543 => x"00000000",
+4544 => x"00000000",
+4545 => x"00000000",
+4546 => x"00000000",
+4547 => x"00000000",
+4548 => x"00000000",
+4549 => x"00000000",
+4550 => x"00000000",
+4551 => x"00000000",
+4552 => x"00000000",
+4553 => x"00000000",
+4554 => x"00000000",
+4555 => x"00000000",
+4556 => x"00000000",
+4557 => x"00000000",
+4558 => x"00000000",
+4559 => x"00000000",
+4560 => x"00000000",
+4561 => x"00000000",
+4562 => x"00000000",
+4563 => x"00000000",
+4564 => x"00000000",
+4565 => x"00000000",
+4566 => x"00000000",
+4567 => x"00000000",
+4568 => x"00000000",
+4569 => x"00000000",
+4570 => x"00000000",
+4571 => x"00000000",
+4572 => x"00000000",
+4573 => x"00000000",
+4574 => x"00000000",
+4575 => x"00000000",
+4576 => x"00000000",
+4577 => x"00000000",
+4578 => x"00000000",
+4579 => x"00000000",
+4580 => x"00000000",
+4581 => x"00000000",
+4582 => x"00000000",
+4583 => x"00000000",
+4584 => x"00000000",
+4585 => x"00000000",
+4586 => x"00000000",
+4587 => x"00000000",
+4588 => x"00000000",
+4589 => x"00000000",
+4590 => x"00000000",
+4591 => x"00000000",
+4592 => x"00000000",
+4593 => x"00000000",
+4594 => x"00000000",
+4595 => x"00000000",
+4596 => x"00000000",
+4597 => x"00000000",
+4598 => x"00000000",
+4599 => x"00000000",
+4600 => x"00000000",
+4601 => x"00000000",
+4602 => x"00000000",
+4603 => x"00000000",
+4604 => x"00000000",
+4605 => x"00000000",
+4606 => x"00000000",
+4607 => x"00000000",
+4608 => x"00000000",
+4609 => x"00000000",
+4610 => x"00000000",
+4611 => x"00000000",
+4612 => x"00000000",
+4613 => x"00000000",
+4614 => x"00000000",
+4615 => x"00000000",
+4616 => x"00000000",
+4617 => x"00000000",
+4618 => x"00000000",
+4619 => x"00000000",
+4620 => x"00000000",
+4621 => x"00000000",
+4622 => x"00000000",
+4623 => x"00000000",
+4624 => x"00000000",
+4625 => x"00000000",
+4626 => x"00000000",
+4627 => x"00000000",
+4628 => x"00000000",
+4629 => x"00000000",
+4630 => x"00000000",
+4631 => x"00000000",
+4632 => x"00000000",
+4633 => x"00000000",
+4634 => x"00000000",
+4635 => x"00000000",
+4636 => x"00000000",
+4637 => x"00000000",
+4638 => x"00000000",
+4639 => x"00000000",
+4640 => x"00000000",
+4641 => x"00000000",
+4642 => x"00000000",
+4643 => x"00000000",
+4644 => x"00000000",
+4645 => x"43000000",
+4646 => x"00000000",
+4647 => x"00000000",
+4648 => x"00000000",
+4649 => x"00000000",
+4650 => x"00000000",
+4651 => x"00000001",
+4652 => x"000044dc",
+4653 => x"00000000",
+4654 => x"00000000",
+4655 => x"00000000",
+4656 => x"00000000",
+4657 => x"00000000",
+4658 => x"00000000",
+4659 => x"00000000",
+4660 => x"00000000",
+4661 => x"00000000",
+4662 => x"00000000",
+4663 => x"00000000",
+4664 => x"00000000",
+4665 => x"ffffffff",
+4666 => x"00000000",
+4667 => x"00020000",
+4668 => x"00000000",
+4669 => x"00000000",
+4670 => x"000048f0",
+4671 => x"000048f0",
+4672 => x"000048f8",
+4673 => x"000048f8",
+4674 => x"00004900",
+4675 => x"00004900",
+4676 => x"00004908",
+4677 => x"00004908",
+4678 => x"00004910",
+4679 => x"00004910",
+4680 => x"00004918",
+4681 => x"00004918",
+4682 => x"00004920",
+4683 => x"00004920",
+4684 => x"00004928",
+4685 => x"00004928",
+4686 => x"00004930",
+4687 => x"00004930",
+4688 => x"00004938",
+4689 => x"00004938",
+4690 => x"00004940",
+4691 => x"00004940",
+4692 => x"00004948",
+4693 => x"00004948",
+4694 => x"00004950",
+4695 => x"00004950",
+4696 => x"00004958",
+4697 => x"00004958",
+4698 => x"00004960",
+4699 => x"00004960",
+4700 => x"00004968",
+4701 => x"00004968",
+4702 => x"00004970",
+4703 => x"00004970",
+4704 => x"00004978",
+4705 => x"00004978",
+4706 => x"00004980",
+4707 => x"00004980",
+4708 => x"00004988",
+4709 => x"00004988",
+4710 => x"00004990",
+4711 => x"00004990",
+4712 => x"00004998",
+4713 => x"00004998",
+4714 => x"000049a0",
+4715 => x"000049a0",
+4716 => x"000049a8",
+4717 => x"000049a8",
+4718 => x"000049b0",
+4719 => x"000049b0",
+4720 => x"000049b8",
+4721 => x"000049b8",
+4722 => x"000049c0",
+4723 => x"000049c0",
+4724 => x"000049c8",
+4725 => x"000049c8",
+4726 => x"000049d0",
+4727 => x"000049d0",
+4728 => x"000049d8",
+4729 => x"000049d8",
+4730 => x"000049e0",
+4731 => x"000049e0",
+4732 => x"000049e8",
+4733 => x"000049e8",
+4734 => x"000049f0",
+4735 => x"000049f0",
+4736 => x"000049f8",
+4737 => x"000049f8",
+4738 => x"00004a00",
+4739 => x"00004a00",
+4740 => x"00004a08",
+4741 => x"00004a08",
+4742 => x"00004a10",
+4743 => x"00004a10",
+4744 => x"00004a18",
+4745 => x"00004a18",
+4746 => x"00004a20",
+4747 => x"00004a20",
+4748 => x"00004a28",
+4749 => x"00004a28",
+4750 => x"00004a30",
+4751 => x"00004a30",
+4752 => x"00004a38",
+4753 => x"00004a38",
+4754 => x"00004a40",
+4755 => x"00004a40",
+4756 => x"00004a48",
+4757 => x"00004a48",
+4758 => x"00004a50",
+4759 => x"00004a50",
+4760 => x"00004a58",
+4761 => x"00004a58",
+4762 => x"00004a60",
+4763 => x"00004a60",
+4764 => x"00004a68",
+4765 => x"00004a68",
+4766 => x"00004a70",
+4767 => x"00004a70",
+4768 => x"00004a78",
+4769 => x"00004a78",
+4770 => x"00004a80",
+4771 => x"00004a80",
+4772 => x"00004a88",
+4773 => x"00004a88",
+4774 => x"00004a90",
+4775 => x"00004a90",
+4776 => x"00004a98",
+4777 => x"00004a98",
+4778 => x"00004aa0",
+4779 => x"00004aa0",
+4780 => x"00004aa8",
+4781 => x"00004aa8",
+4782 => x"00004ab0",
+4783 => x"00004ab0",
+4784 => x"00004ab8",
+4785 => x"00004ab8",
+4786 => x"00004ac0",
+4787 => x"00004ac0",
+4788 => x"00004ac8",
+4789 => x"00004ac8",
+4790 => x"00004ad0",
+4791 => x"00004ad0",
+4792 => x"00004ad8",
+4793 => x"00004ad8",
+4794 => x"00004ae0",
+4795 => x"00004ae0",
+4796 => x"00004ae8",
+4797 => x"00004ae8",
+4798 => x"00004af0",
+4799 => x"00004af0",
+4800 => x"00004af8",
+4801 => x"00004af8",
+4802 => x"00004b00",
+4803 => x"00004b00",
+4804 => x"00004b08",
+4805 => x"00004b08",
+4806 => x"00004b10",
+4807 => x"00004b10",
+4808 => x"00004b18",
+4809 => x"00004b18",
+4810 => x"00004b20",
+4811 => x"00004b20",
+4812 => x"00004b28",
+4813 => x"00004b28",
+4814 => x"00004b30",
+4815 => x"00004b30",
+4816 => x"00004b38",
+4817 => x"00004b38",
+4818 => x"00004b40",
+4819 => x"00004b40",
+4820 => x"00004b48",
+4821 => x"00004b48",
+4822 => x"00004b50",
+4823 => x"00004b50",
+4824 => x"00004b58",
+4825 => x"00004b58",
+4826 => x"00004b60",
+4827 => x"00004b60",
+4828 => x"00004b68",
+4829 => x"00004b68",
+4830 => x"00004b70",
+4831 => x"00004b70",
+4832 => x"00004b78",
+4833 => x"00004b78",
+4834 => x"00004b80",
+4835 => x"00004b80",
+4836 => x"00004b88",
+4837 => x"00004b88",
+4838 => x"00004b90",
+4839 => x"00004b90",
+4840 => x"00004b98",
+4841 => x"00004b98",
+4842 => x"00004ba0",
+4843 => x"00004ba0",
+4844 => x"00004ba8",
+4845 => x"00004ba8",
+4846 => x"00004bb0",
+4847 => x"00004bb0",
+4848 => x"00004bb8",
+4849 => x"00004bb8",
+4850 => x"00004bc0",
+4851 => x"00004bc0",
+4852 => x"00004bc8",
+4853 => x"00004bc8",
+4854 => x"00004bd0",
+4855 => x"00004bd0",
+4856 => x"00004bd8",
+4857 => x"00004bd8",
+4858 => x"00004be0",
+4859 => x"00004be0",
+4860 => x"00004be8",
+4861 => x"00004be8",
+4862 => x"00004bf0",
+4863 => x"00004bf0",
+4864 => x"00004bf8",
+4865 => x"00004bf8",
+4866 => x"00004c00",
+4867 => x"00004c00",
+4868 => x"00004c08",
+4869 => x"00004c08",
+4870 => x"00004c10",
+4871 => x"00004c10",
+4872 => x"00004c18",
+4873 => x"00004c18",
+4874 => x"00004c20",
+4875 => x"00004c20",
+4876 => x"00004c28",
+4877 => x"00004c28",
+4878 => x"00004c30",
+4879 => x"00004c30",
+4880 => x"00004c38",
+4881 => x"00004c38",
+4882 => x"00004c40",
+4883 => x"00004c40",
+4884 => x"00004c48",
+4885 => x"00004c48",
+4886 => x"00004c50",
+4887 => x"00004c50",
+4888 => x"00004c58",
+4889 => x"00004c58",
+4890 => x"00004c60",
+4891 => x"00004c60",
+4892 => x"00004c68",
+4893 => x"00004c68",
+4894 => x"00004c70",
+4895 => x"00004c70",
+4896 => x"00004c78",
+4897 => x"00004c78",
+4898 => x"00004c80",
+4899 => x"00004c80",
+4900 => x"00004c88",
+4901 => x"00004c88",
+4902 => x"00004c90",
+4903 => x"00004c90",
+4904 => x"00004c98",
+4905 => x"00004c98",
+4906 => x"00004ca0",
+4907 => x"00004ca0",
+4908 => x"00004ca8",
+4909 => x"00004ca8",
+4910 => x"00004cb0",
+4911 => x"00004cb0",
+4912 => x"00004cb8",
+4913 => x"00004cb8",
+4914 => x"00004cc0",
+4915 => x"00004cc0",
+4916 => x"00004cc8",
+4917 => x"00004cc8",
+4918 => x"00004cd0",
+4919 => x"00004cd0",
+4920 => x"00004cd8",
+4921 => x"00004cd8",
+4922 => x"00004ce0",
+4923 => x"00004ce0",
+4924 => x"00004ce8",
+4925 => x"00004ce8",
+4926 => x"000044e8",
+4927 => x"ffffffff",
+4928 => x"00000000",
+4929 => x"ffffffff",
+4930 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
+ report "write collision" severity failure;
+ end if;
+
+ if (memAWriteEnable = '1') then
+ ram(conv_integer(memAAddr)) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(conv_integer(memAAddr));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(conv_integer(memBAddr)) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(conv_integer(memBAddr));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd
new file mode 100644
index 0000000..83a7de2
--- /dev/null
+++ b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd
@@ -0,0 +1,5012 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+
+--shared variable ram : ram_type :=
+signal ram : ram_type :=
+(
+0 => x"800b0b0b",
+1 => x"0b0b8070",
+2 => x"0b0b818a",
+3 => x"dc0c3a0b",
+4 => x"0b80dab4",
+5 => x"04000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80db972d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b0b2a",
+20 => x"83ffff06",
+21 => x"52810504",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b0b2b09",
+29 => x"067383ff",
+30 => x"ff0b0b0b",
+31 => x"0b83a704",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53518105",
+38 => x"04000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51810504",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53518105",
+55 => x"04000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51810504",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"72ff0571",
+65 => x"81050673",
+66 => x"ff050972",
+67 => x"74058005",
+68 => x"06075350",
+69 => x"50040000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b8c",
+73 => x"f8040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535181",
+82 => x"05040000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"81050400",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71718105",
+105 => x"53510406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515181",
+111 => x"05040000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51810504",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53518105",
+125 => x"04000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52810504",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"81050409",
+139 => x"81058305",
+140 => x"1010102b",
+141 => x"0772fc06",
+142 => x"0c515181",
+143 => x"05040000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535181",
+147 => x"05040000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"81050400",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b818a",
+162 => x"88738306",
+163 => x"10100508",
+164 => x"067381ff",
+165 => x"06738306",
+166 => x"0b0b0b84",
+167 => x"ab040000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0bb3",
+171 => x"912d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c810551",
+175 => x"04000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0bb4",
+179 => x"8a2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c810551",
+183 => x"04000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547181",
+188 => x"05067309",
+189 => x"72740580",
+190 => x"05060753",
+191 => x"50500400",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"81050673",
+197 => x"09727405",
+198 => x"80050607",
+199 => x"53505004",
+200 => x"05800504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"818ad80c",
+210 => x"51810504",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"72830610",
+217 => x"10728306",
+218 => x"0710100b",
+219 => x"0b818a98",
+220 => x"05080400",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"81050400",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"71710571",
+249 => x"81055351",
+250 => x"04000000",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"8db33f80",
+257 => x"f39e3f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51810504",
+267 => x"72fc0608",
+268 => x"81ff0a06",
+269 => x"72fc0670",
+270 => x"5408fe80",
+271 => x"0a060772",
+272 => x"0c515181",
+273 => x"050472fc",
+274 => x"06080a10",
+275 => x"10101010",
+276 => x"1010100a",
+277 => x"87fc8080",
+278 => x"0672fc06",
+279 => x"08f883ff",
+280 => x"ff060772",
+281 => x"fc060c51",
+282 => x"51810504",
+283 => x"72fc0608",
+284 => x"0a101010",
+285 => x"10101010",
+286 => x"10101010",
+287 => x"10101010",
+288 => x"100a83fe",
+289 => x"800672fc",
+290 => x"0608fc81",
+291 => x"ff060772",
+292 => x"fc060c51",
+293 => x"51810504",
+294 => x"72fc0608",
+295 => x"0a101010",
+296 => x"10101010",
+297 => x"10101010",
+298 => x"10101010",
+299 => x"10101010",
+300 => x"10101010",
+301 => x"100a81ff",
+302 => x"0672fc06",
+303 => x"08fe8006",
+304 => x"0772fc06",
+305 => x"0c515181",
+306 => x"050472fc",
+307 => x"06081010",
+308 => x"10101010",
+309 => x"101081ff",
+310 => x"0a0672fc",
+311 => x"0608fe80",
+312 => x"0a060772",
+313 => x"fc060c51",
+314 => x"51810504",
+315 => x"72fc0608",
+316 => x"87fc8080",
+317 => x"0672fc06",
+318 => x"705408f8",
+319 => x"83ffff06",
+320 => x"07720c51",
+321 => x"51810504",
+322 => x"72fc0608",
+323 => x"0a101010",
+324 => x"10101010",
+325 => x"100a83fe",
+326 => x"800672fc",
+327 => x"0608fc81",
+328 => x"ff060772",
+329 => x"fc060c51",
+330 => x"51810504",
+331 => x"72fc0608",
+332 => x"0a101010",
+333 => x"10101010",
+334 => x"10101010",
+335 => x"10101010",
+336 => x"100a81ff",
+337 => x"0672fc06",
+338 => x"08fe8006",
+339 => x"0772fc06",
+340 => x"0c515181",
+341 => x"050472fc",
+342 => x"06081010",
+343 => x"10101010",
+344 => x"10101010",
+345 => x"10101010",
+346 => x"101081ff",
+347 => x"0a0672fc",
+348 => x"0608fe80",
+349 => x"0a060772",
+350 => x"fc060c51",
+351 => x"51810504",
+352 => x"72fc0608",
+353 => x"10101010",
+354 => x"10101010",
+355 => x"87fc8080",
+356 => x"0672fc06",
+357 => x"08f883ff",
+358 => x"ff060772",
+359 => x"fc060c51",
+360 => x"51810504",
+361 => x"72fc0608",
+362 => x"83fe8006",
+363 => x"72fc0670",
+364 => x"5408fc81",
+365 => x"ff060772",
+366 => x"0c515181",
+367 => x"050472fc",
+368 => x"06080a10",
+369 => x"10101010",
+370 => x"1010100a",
+371 => x"81ff0672",
+372 => x"fc0608fe",
+373 => x"80060772",
+374 => x"fc060c51",
+375 => x"51810504",
+376 => x"72fc0608",
+377 => x"10101010",
+378 => x"10101010",
+379 => x"10101010",
+380 => x"10101010",
+381 => x"10101010",
+382 => x"10101010",
+383 => x"81ff0a06",
+384 => x"72fc0608",
+385 => x"fe800a06",
+386 => x"0772fc06",
+387 => x"0c515181",
+388 => x"050472fc",
+389 => x"06081010",
+390 => x"10101010",
+391 => x"10101010",
+392 => x"10101010",
+393 => x"101087fc",
+394 => x"80800672",
+395 => x"fc0608f8",
+396 => x"83ffff06",
+397 => x"0772fc06",
+398 => x"0c515181",
+399 => x"050472fc",
+400 => x"06081010",
+401 => x"10101010",
+402 => x"101083fe",
+403 => x"800672fc",
+404 => x"0608fc81",
+405 => x"ff060772",
+406 => x"fc060c51",
+407 => x"51810504",
+408 => x"72fc0608",
+409 => x"81ff0672",
+410 => x"fc067054",
+411 => x"08fe8006",
+412 => x"07720c51",
+413 => x"51810504",
+414 => x"72728072",
+415 => x"8106ff05",
+416 => x"09720605",
+417 => x"71105272",
+418 => x"0a100a53",
+419 => x"728106ff",
+420 => x"05097206",
+421 => x"05711052",
+422 => x"720a100a",
+423 => x"53728106",
+424 => x"ff050972",
+425 => x"06057110",
+426 => x"52720a10",
+427 => x"0a537281",
+428 => x"06ff0509",
+429 => x"72060571",
+430 => x"1052720a",
+431 => x"100a5372",
+432 => x"8106ff05",
+433 => x"09720605",
+434 => x"71105272",
+435 => x"0a100a53",
+436 => x"728106ff",
+437 => x"05097206",
+438 => x"05711052",
+439 => x"720a100a",
+440 => x"53728106",
+441 => x"ff050972",
+442 => x"06057110",
+443 => x"52720a10",
+444 => x"0a537281",
+445 => x"06ff0509",
+446 => x"72060571",
+447 => x"1052720a",
+448 => x"100a5372",
+449 => x"83a13772",
+450 => x"8106ff05",
+451 => x"09720605",
+452 => x"71105272",
+453 => x"0a100a53",
+454 => x"728106ff",
+455 => x"05097206",
+456 => x"05711052",
+457 => x"720a100a",
+458 => x"53728106",
+459 => x"ff050972",
+460 => x"06057110",
+461 => x"52720a10",
+462 => x"0a537281",
+463 => x"06ff0509",
+464 => x"72060571",
+465 => x"1052720a",
+466 => x"100a5372",
+467 => x"8106ff05",
+468 => x"09720605",
+469 => x"71105272",
+470 => x"0a100a53",
+471 => x"728106ff",
+472 => x"05097206",
+473 => x"05711052",
+474 => x"720a100a",
+475 => x"53728106",
+476 => x"ff050972",
+477 => x"06057110",
+478 => x"52720a10",
+479 => x"0a537281",
+480 => x"06ff0509",
+481 => x"72060571",
+482 => x"1052720a",
+483 => x"100a5372",
+484 => x"82953772",
+485 => x"8106ff05",
+486 => x"09720605",
+487 => x"71105272",
+488 => x"0a100a53",
+489 => x"728106ff",
+490 => x"05097206",
+491 => x"05711052",
+492 => x"720a100a",
+493 => x"53728106",
+494 => x"ff050972",
+495 => x"06057110",
+496 => x"52720a10",
+497 => x"0a537281",
+498 => x"06ff0509",
+499 => x"72060571",
+500 => x"1052720a",
+501 => x"100a5372",
+502 => x"8106ff05",
+503 => x"09720605",
+504 => x"71105272",
+505 => x"0a100a53",
+506 => x"728106ff",
+507 => x"05097206",
+508 => x"05711052",
+509 => x"720a100a",
+510 => x"53728106",
+511 => x"ff050972",
+512 => x"06057110",
+513 => x"52720a10",
+514 => x"0a537281",
+515 => x"06ff0509",
+516 => x"72060571",
+517 => x"1052720a",
+518 => x"100a5372",
+519 => x"81893772",
+520 => x"8106ff05",
+521 => x"09720605",
+522 => x"71105272",
+523 => x"0a100a53",
+524 => x"728106ff",
+525 => x"05097206",
+526 => x"05711052",
+527 => x"720a100a",
+528 => x"53728106",
+529 => x"ff050972",
+530 => x"06057110",
+531 => x"52720a10",
+532 => x"0a537281",
+533 => x"06ff0509",
+534 => x"72060571",
+535 => x"1052720a",
+536 => x"100a5372",
+537 => x"8106ff05",
+538 => x"09720605",
+539 => x"71105272",
+540 => x"0a100a53",
+541 => x"728106ff",
+542 => x"05097206",
+543 => x"05711052",
+544 => x"720a100a",
+545 => x"53728106",
+546 => x"ff050972",
+547 => x"06057110",
+548 => x"52720a10",
+549 => x"0a537281",
+550 => x"06ff0509",
+551 => x"72060571",
+552 => x"1052720a",
+553 => x"100a5351",
+554 => x"51535181",
+555 => x"05043c04",
+556 => x"70700b0b",
+557 => x"819acc08",
+558 => x"52841208",
+559 => x"70810651",
+560 => x"51700970",
+561 => x"81050906",
+562 => x"0a098106",
+563 => x"ff0509e9",
+564 => x"0bf70506",
+565 => x"84010505",
+566 => x"04710881",
+567 => x"ff06800c",
+568 => x"50500470",
+569 => x"700b0b81",
+570 => x"9acc0852",
+571 => x"84120870",
+572 => x"0a100a70",
+573 => x"81065151",
+574 => x"51700970",
+575 => x"81050906",
+576 => x"0a098106",
+577 => x"ff0509e4",
+578 => x"0bf70506",
+579 => x"84010505",
+580 => x"0473720c",
+581 => x"50500481",
+582 => x"8ad80809",
+583 => x"70810509",
+584 => x"060a8106",
+585 => x"ff0509b0",
+586 => x"0bf70506",
+587 => x"84010505",
+588 => x"04838080",
+589 => x"0b0b0b81",
+590 => x"9acc0c82",
+591 => x"a0800b0b",
+592 => x"0b819ad0",
+593 => x"0c829080",
+594 => x"0b819ae0",
+595 => x"0c0b0b81",
+596 => x"9ad40b81",
+597 => x"9ae40c04",
+598 => x"f8808080",
+599 => x"a40b0b0b",
+600 => x"819acc0c",
+601 => x"f8808082",
+602 => x"800b0b0b",
+603 => x"819ad00c",
+604 => x"f8808084",
+605 => x"800b819a",
+606 => x"e00cf880",
+607 => x"8080940b",
+608 => x"819ae40c",
+609 => x"f8808080",
+610 => x"9c0b819a",
+611 => x"dc0cf880",
+612 => x"8080a00b",
+613 => x"819ae80c",
+614 => x"04f23d0d",
+615 => x"600b0b81",
+616 => x"9ad00856",
+617 => x"5d82750c",
+618 => x"8059805a",
+619 => x"800b8f3d",
+620 => x"71101017",
+621 => x"70085957",
+622 => x"5d5b8076",
+623 => x"81ff067c",
+624 => x"832b5658",
+625 => x"5276537b",
+626 => x"519ede3f",
+627 => x"7d7f7a72",
+628 => x"077c7207",
+629 => x"71716081",
+630 => x"05415f5d",
+631 => x"5b595755",
+632 => x"7a8724ff",
+633 => x"050980ce",
+634 => x"0bf70506",
+635 => x"84010505",
+636 => x"040b0b81",
+637 => x"9ad0087b",
+638 => x"10101170",
+639 => x"08585155",
+640 => x"807681ff",
+641 => x"067c832b",
+642 => x"56585276",
+643 => x"537b519e",
+644 => x"983f7d7f",
+645 => x"7a72077c",
+646 => x"72077171",
+647 => x"60810541",
+648 => x"5f5d5b59",
+649 => x"5755877b",
+650 => x"25ff0509",
+651 => x"c40bf705",
+652 => x"06840105",
+653 => x"0504767d",
+654 => x"0c77841e",
+655 => x"0c7c800c",
+656 => x"903d0d04",
+657 => x"7070819a",
+658 => x"d8335170",
+659 => x"09708105",
+660 => x"09060a09",
+661 => x"8106ff05",
+662 => x"0980d60b",
+663 => x"f7050684",
+664 => x"01050504",
+665 => x"818ae408",
+666 => x"70085252",
+667 => x"70097081",
+668 => x"0509060a",
+669 => x"8106ff05",
+670 => x"09b10bf7",
+671 => x"05068401",
+672 => x"05050484",
+673 => x"12818ae4",
+674 => x"0c702d81",
+675 => x"8ae40870",
+676 => x"08525270",
+677 => x"09708105",
+678 => x"09060a09",
+679 => x"8106ff05",
+680 => x"09e10bf7",
+681 => x"05068401",
+682 => x"05050481",
+683 => x"0b819ad8",
+684 => x"34505004",
+685 => x"04700b0b",
+686 => x"819ac808",
+687 => x"09708105",
+688 => x"09060a81",
+689 => x"06ff0509",
+690 => x"a50bf705",
+691 => x"06840105",
+692 => x"05040b0b",
+693 => x"0b0b8009",
+694 => x"70810509",
+695 => x"060a0981",
+696 => x"06ff0509",
+697 => x"8b0bf705",
+698 => x"06840105",
+699 => x"05045004",
+700 => x"0b0b819a",
+701 => x"c8510b0b",
+702 => x"0bea853f",
+703 => x"50040470",
+704 => x"70028f05",
+705 => x"33527109",
+706 => x"81058a05",
+707 => x"09708105",
+708 => x"09060a81",
+709 => x"06ff0509",
+710 => x"910bf705",
+711 => x"06840105",
+712 => x"05047151",
+713 => x"fbbd3f50",
+714 => x"50048d51",
+715 => x"fbb53f71",
+716 => x"51fbb03f",
+717 => x"505004cd",
+718 => x"3d0db63d",
+719 => x"70708405",
+720 => x"520895ff",
+721 => x"5d56a63d",
+722 => x"5f5d8075",
+723 => x"70810557",
+724 => x"33765c55",
+725 => x"59730981",
+726 => x"05790509",
+727 => x"70810509",
+728 => x"060a8106",
+729 => x"ff050981",
+730 => x"ad0bf705",
+731 => x"06840105",
+732 => x"05048f3d",
+733 => x"5c730981",
+734 => x"05a50509",
+735 => x"70810509",
+736 => x"060a0981",
+737 => x"06ff0509",
+738 => x"819c0bf7",
+739 => x"05068401",
+740 => x"05050479",
+741 => x"7081055b",
+742 => x"33547309",
+743 => x"810580e4",
+744 => x"05097081",
+745 => x"0509060a",
+746 => x"8106ff05",
+747 => x"0982ee0b",
+748 => x"f7050684",
+749 => x"01050504",
+750 => x"7380e424",
+751 => x"ff050981",
+752 => x"900bf705",
+753 => x"06840105",
+754 => x"05047309",
+755 => x"810580e3",
+756 => x"05097081",
+757 => x"0509060a",
+758 => x"8106ff05",
+759 => x"09bf0bf7",
+760 => x"05068401",
+761 => x"05050480",
+762 => x"52a5517a",
+763 => x"2d805273",
+764 => x"517a2d82",
+765 => x"19597970",
+766 => x"81055b33",
+767 => x"54730970",
+768 => x"81050906",
+769 => x"0a098106",
+770 => x"ff0509fe",
+771 => x"e80bf705",
+772 => x"06840105",
+773 => x"05047880",
+774 => x"0cb53d0d",
+775 => x"047c841e",
+776 => x"83123356",
+777 => x"5e578052",
+778 => x"73517a2d",
+779 => x"81197a70",
+780 => x"81055c33",
+781 => x"55597309",
+782 => x"70810509",
+783 => x"060a0981",
+784 => x"06ff0509",
+785 => x"feaf0bf7",
+786 => x"05068401",
+787 => x"050504c6",
+788 => x"39730981",
+789 => x"0580f305",
+790 => x"09708105",
+791 => x"09060a09",
+792 => x"8106ff05",
+793 => x"09ff800b",
+794 => x"f7050684",
+795 => x"01050504",
+796 => x"7c841e71",
+797 => x"08595e56",
+798 => x"80773356",
+799 => x"56740981",
+800 => x"05760509",
+801 => x"70810509",
+802 => x"060a8106",
+803 => x"ff0509aa",
+804 => x"0bf70506",
+805 => x"84010505",
+806 => x"04811670",
+807 => x"1870335a",
+808 => x"55567709",
+809 => x"70810509",
+810 => x"060a0981",
+811 => x"06ff0509",
+812 => x"e80bf705",
+813 => x"06840105",
+814 => x"0504ff16",
+815 => x"55807625",
+816 => x"ff0509fe",
+817 => x"b10bf705",
+818 => x"06840105",
+819 => x"05047670",
+820 => x"81055833",
+821 => x"58805277",
+822 => x"517a2d81",
+823 => x"1975ff17",
+824 => x"57575980",
+825 => x"7625ff05",
+826 => x"09fe8b0b",
+827 => x"f7050684",
+828 => x"01050504",
+829 => x"76708105",
+830 => x"58335880",
+831 => x"5277517a",
+832 => x"2d811975",
+833 => x"ff175757",
+834 => x"59758024",
+835 => x"ff0509ff",
+836 => x"bd0bf705",
+837 => x"06840105",
+838 => x"0504fdda",
+839 => x"397c841e",
+840 => x"71087071",
+841 => x"9f2c5953",
+842 => x"595e5680",
+843 => x"7524ff05",
+844 => x"0981f80b",
+845 => x"f7050684",
+846 => x"01050504",
+847 => x"757e7d58",
+848 => x"59558057",
+849 => x"74098105",
+850 => x"77050970",
+851 => x"81050906",
+852 => x"0a098106",
+853 => x"ff050980",
+854 => x"f40bf705",
+855 => x"06840105",
+856 => x"0504b07c",
+857 => x"3402b905",
+858 => x"567b0981",
+859 => x"05760509",
+860 => x"70810509",
+861 => x"060a8106",
+862 => x"ff0509b3",
+863 => x"0bf70506",
+864 => x"84010505",
+865 => x"04ff1656",
+866 => x"75787081",
+867 => x"055a3b81",
+868 => x"17577b09",
+869 => x"81057605",
+870 => x"09708105",
+871 => x"09060a09",
+872 => x"8106ff05",
+873 => x"09df0bf7",
+874 => x"05068401",
+875 => x"05050480",
+876 => x"7834767e",
+877 => x"ff125758",
+878 => x"56758024",
+879 => x"ff0509fe",
+880 => x"8d0bf705",
+881 => x"06840105",
+882 => x"0504fcaa",
+883 => x"398a7536",
+884 => x"0b0b80fb",
+885 => x"fc055473",
+886 => x"76708105",
+887 => x"583b8a75",
+888 => x"35557409",
+889 => x"70810509",
+890 => x"060a8106",
+891 => x"ff0509fe",
+892 => x"f80bf705",
+893 => x"06840105",
+894 => x"05048a75",
+895 => x"360b0b80",
+896 => x"fbfc0554",
+897 => x"73767081",
+898 => x"05583b8a",
+899 => x"75355574",
+900 => x"09708105",
+901 => x"09060a09",
+902 => x"8106ff05",
+903 => x"09ffae0b",
+904 => x"f7050684",
+905 => x"01050504",
+906 => x"febf3974",
+907 => x"527653b5",
+908 => x"3dffb805",
+909 => x"5195c73f",
+910 => x"a43d0856",
+911 => x"fdfe3970",
+912 => x"80c10b81",
+913 => x"e9983480",
+914 => x"0b81eaf0",
+915 => x"0c70800c",
+916 => x"50047070",
+917 => x"800b81e9",
+918 => x"98335252",
+919 => x"70098105",
+920 => x"80c10509",
+921 => x"70810509",
+922 => x"060a8106",
+923 => x"ff0509a0",
+924 => x"0bf70506",
+925 => x"84010505",
+926 => x"047181ea",
+927 => x"f0080781",
+928 => x"eaf00c80",
+929 => x"c20b81e9",
+930 => x"9c347080",
+931 => x"0c505004",
+932 => x"810b81ea",
+933 => x"f0080781",
+934 => x"eaf00c80",
+935 => x"c20b81e9",
+936 => x"9c347080",
+937 => x"0c505004",
+938 => x"70707070",
+939 => x"7570088a",
+940 => x"05535381",
+941 => x"e9983351",
+942 => x"70098105",
+943 => x"80c10509",
+944 => x"70810509",
+945 => x"060a8106",
+946 => x"ff0509a9",
+947 => x"0bf70506",
+948 => x"84010505",
+949 => x"04730970",
+950 => x"81050906",
+951 => x"0a098106",
+952 => x"ff0509cf",
+953 => x"0bf70506",
+954 => x"84010505",
+955 => x"0470800c",
+956 => x"50505050",
+957 => x"04ff1270",
+958 => x"81e99408",
+959 => x"31740c80",
+960 => x"0c505050",
+961 => x"5004fc3d",
+962 => x"0d81e9a0",
+963 => x"08557409",
+964 => x"70810509",
+965 => x"060a8106",
+966 => x"ff050994",
+967 => x"0bf70506",
+968 => x"84010505",
+969 => x"04767508",
+970 => x"710c81e9",
+971 => x"a0085654",
+972 => x"8c155381",
+973 => x"e9940852",
+974 => x"8a5190ac",
+975 => x"3f73800c",
+976 => x"863d0d04",
+977 => x"fb3d0d77",
+978 => x"70085656",
+979 => x"b05381e9",
+980 => x"a0085274",
+981 => x"51acb53f",
+982 => x"850b8c17",
+983 => x"0c850b8c",
+984 => x"160c7508",
+985 => x"750c81e9",
+986 => x"a0085473",
+987 => x"09708105",
+988 => x"09060a81",
+989 => x"06ff0509",
+990 => x"920bf705",
+991 => x"06840105",
+992 => x"05047308",
+993 => x"750c81e9",
+994 => x"a008548c",
+995 => x"145381e9",
+996 => x"9408528a",
+997 => x"518fd13f",
+998 => x"84150809",
+999 => x"70810509",
+1000 => x"060a0981",
+1001 => x"06ff0509",
+1002 => x"b50bf705",
+1003 => x"06840105",
+1004 => x"0504860b",
+1005 => x"8c160c88",
+1006 => x"15528816",
+1007 => x"08518dd3",
+1008 => x"3f81e9a0",
+1009 => x"08700876",
+1010 => x"0c548c15",
+1011 => x"7054548a",
+1012 => x"52730851",
+1013 => x"8f923f73",
+1014 => x"800c873d",
+1015 => x"0d047508",
+1016 => x"54b05373",
+1017 => x"527551ab",
+1018 => x"a33f7380",
+1019 => x"0c873d0d",
+1020 => x"04e13d0d",
+1021 => x"b05196c2",
+1022 => x"3f800881",
+1023 => x"e9900cb0",
+1024 => x"5196b73f",
+1025 => x"800881e9",
+1026 => x"a00c81e9",
+1027 => x"90088008",
+1028 => x"0c800b80",
+1029 => x"0884050c",
+1030 => x"820b8008",
+1031 => x"88050ca8",
+1032 => x"0b80088c",
+1033 => x"050c9f53",
+1034 => x"0b0b80fc",
+1035 => x"88528008",
+1036 => x"900551aa",
+1037 => x"d73f993d",
+1038 => x"5c9f530b",
+1039 => x"0b80fca8",
+1040 => x"527b51aa",
+1041 => x"c73f8a0b",
+1042 => x"81a7d80c",
+1043 => x"0b0b8186",
+1044 => x"cc51f5e3",
+1045 => x"3f0b0b80",
+1046 => x"fcc851f5",
+1047 => x"da3f0b0b",
+1048 => x"8186cc51",
+1049 => x"f5d13f81",
+1050 => x"8aec0809",
+1051 => x"70810509",
+1052 => x"060a8106",
+1053 => x"ff05098a",
+1054 => x"ef0bf705",
+1055 => x"06840105",
+1056 => x"05040b0b",
+1057 => x"80fcf851",
+1058 => x"f5ad3f0b",
+1059 => x"0b8186cc",
+1060 => x"51f5a43f",
+1061 => x"818ae808",
+1062 => x"520b0b80",
+1063 => x"fda451f5",
+1064 => x"963f8051",
+1065 => x"80c5a13f",
+1066 => x"8008819a",
+1067 => x"f80c810b",
+1068 => x"923d5c58",
+1069 => x"800b818a",
+1070 => x"e80825ff",
+1071 => x"05098492",
+1072 => x"0bf70506",
+1073 => x"84010505",
+1074 => x"048e3d5d",
+1075 => x"80c10b81",
+1076 => x"e9983481",
+1077 => x"0b81eaf0",
+1078 => x"0c80c20b",
+1079 => x"81e99c34",
+1080 => x"825e835a",
+1081 => x"9f530b0b",
+1082 => x"80fdd452",
+1083 => x"7a51a99c",
+1084 => x"3f815f80",
+1085 => x"7b537c52",
+1086 => x"558eba3f",
+1087 => x"80080981",
+1088 => x"05750509",
+1089 => x"70810509",
+1090 => x"060a0981",
+1091 => x"06ff0509",
+1092 => x"8b0bf705",
+1093 => x"06840105",
+1094 => x"05048155",
+1095 => x"7481eaf0",
+1096 => x"0c7d7057",
+1097 => x"55748325",
+1098 => x"ff0509b4",
+1099 => x"0bf70506",
+1100 => x"84010505",
+1101 => x"04741010",
+1102 => x"15fd0540",
+1103 => x"a13dffbc",
+1104 => x"05538352",
+1105 => x"75518ca0",
+1106 => x"3f811e70",
+1107 => x"5f705755",
+1108 => x"837524ff",
+1109 => x"0509de0b",
+1110 => x"f7050684",
+1111 => x"01050504",
+1112 => x"7f547453",
+1113 => x"819afc52",
+1114 => x"81e9a851",
+1115 => x"8c863f81",
+1116 => x"e9a00870",
+1117 => x"085757b0",
+1118 => x"53765275",
+1119 => x"51a88d3f",
+1120 => x"850b8c18",
+1121 => x"0c850b8c",
+1122 => x"170c7608",
+1123 => x"760c81e9",
+1124 => x"a0085574",
+1125 => x"09708105",
+1126 => x"09060a81",
+1127 => x"06ff0509",
+1128 => x"920bf705",
+1129 => x"06840105",
+1130 => x"05047408",
+1131 => x"760c81e9",
+1132 => x"a008558c",
+1133 => x"155381e9",
+1134 => x"9408528a",
+1135 => x"518ba93f",
+1136 => x"84160809",
+1137 => x"70810509",
+1138 => x"060a0981",
+1139 => x"06ff0509",
+1140 => x"889f0bf7",
+1141 => x"05068401",
+1142 => x"05050486",
+1143 => x"0b8c170c",
+1144 => x"88165288",
+1145 => x"17085189",
+1146 => x"aa3f81e9",
+1147 => x"a0087008",
+1148 => x"770c578c",
+1149 => x"16705455",
+1150 => x"8a527408",
+1151 => x"518ae93f",
+1152 => x"80c10b81",
+1153 => x"e99c3356",
+1154 => x"56757526",
+1155 => x"ff050980",
+1156 => x"cc0bf705",
+1157 => x"06840105",
+1158 => x"050480c3",
+1159 => x"5275518b",
+1160 => x"d33f8008",
+1161 => x"0981057f",
+1162 => x"05097081",
+1163 => x"0509060a",
+1164 => x"8106ff05",
+1165 => x"0987f50b",
+1166 => x"f7050684",
+1167 => x"01050504",
+1168 => x"81167081",
+1169 => x"ff0681e9",
+1170 => x"9c335257",
+1171 => x"55747627",
+1172 => x"ff0509c6",
+1173 => x"0bf70506",
+1174 => x"84010505",
+1175 => x"04797e29",
+1176 => x"60707235",
+1177 => x"70417272",
+1178 => x"31707011",
+1179 => x"11111111",
+1180 => x"11517231",
+1181 => x"5e538a05",
+1182 => x"81e99833",
+1183 => x"81e99408",
+1184 => x"5a525258",
+1185 => x"55760981",
+1186 => x"0580c105",
+1187 => x"09708105",
+1188 => x"09060a81",
+1189 => x"06ff0509",
+1190 => x"87c10bf7",
+1191 => x"05068401",
+1192 => x"05050478",
+1193 => x"09708105",
+1194 => x"09060a09",
+1195 => x"8106ff05",
+1196 => x"09d30bf7",
+1197 => x"05068401",
+1198 => x"05050481",
+1199 => x"1858818a",
+1200 => x"e8087825",
+1201 => x"ff0509fc",
+1202 => x"830bf705",
+1203 => x"06840105",
+1204 => x"05048051",
+1205 => x"80c0f13f",
+1206 => x"800881e9",
+1207 => x"8c0c0b0b",
+1208 => x"80fdf451",
+1209 => x"f0d13f0b",
+1210 => x"0b8186cc",
+1211 => x"51f0c83f",
+1212 => x"0b0b80fe",
+1213 => x"8451f0bf",
+1214 => x"3f0b0b81",
+1215 => x"86cc51f0",
+1216 => x"b63f81e9",
+1217 => x"9408520b",
+1218 => x"0b80febc",
+1219 => x"51f0a83f",
+1220 => x"85520b0b",
+1221 => x"80fed851",
+1222 => x"f09d3f81",
+1223 => x"eaf00852",
+1224 => x"0b0b80fe",
+1225 => x"f451f08f",
+1226 => x"3f81520b",
+1227 => x"0b80fed8",
+1228 => x"51f0843f",
+1229 => x"81e99833",
+1230 => x"520b0b80",
+1231 => x"ff9051ef",
+1232 => x"f63f80c1",
+1233 => x"520b0b80",
+1234 => x"ffac51ef",
+1235 => x"ea3f81e9",
+1236 => x"9c33520b",
+1237 => x"0b80ffc8",
+1238 => x"51efdc3f",
+1239 => x"80c2520b",
+1240 => x"0b80ffac",
+1241 => x"51efd03f",
+1242 => x"81e9c808",
+1243 => x"520b0b80",
+1244 => x"ffe451ef",
+1245 => x"c23f8752",
+1246 => x"0b0b80fe",
+1247 => x"d851efb7",
+1248 => x"3f81a7d8",
+1249 => x"08520b0b",
+1250 => x"81808051",
+1251 => x"efa93f0b",
+1252 => x"0b81809c",
+1253 => x"51efa03f",
+1254 => x"0b0b8180",
+1255 => x"c851ef97",
+1256 => x"3f81e9a0",
+1257 => x"08700853",
+1258 => x"560b0b81",
+1259 => x"80d451ef",
+1260 => x"863f0b0b",
+1261 => x"8180f051",
+1262 => x"eefd3f81",
+1263 => x"e9a00884",
+1264 => x"1108535d",
+1265 => x"0b0b8181",
+1266 => x"a451eeeb",
+1267 => x"3f80520b",
+1268 => x"0b80fed8",
+1269 => x"51eee03f",
+1270 => x"81e9a008",
+1271 => x"88110853",
+1272 => x"580b0b81",
+1273 => x"81c051ee",
+1274 => x"ce3f8252",
+1275 => x"0b0b80fe",
+1276 => x"d851eec3",
+1277 => x"3f81e9a0",
+1278 => x"088c1108",
+1279 => x"53590b0b",
+1280 => x"8181dc51",
+1281 => x"eeb13f91",
+1282 => x"520b0b80",
+1283 => x"fed851ee",
+1284 => x"a63f81e9",
+1285 => x"a0089005",
+1286 => x"520b0b81",
+1287 => x"81f851ee",
+1288 => x"963f0b0b",
+1289 => x"81829451",
+1290 => x"ee8d3f0b",
+1291 => x"0b8182cc",
+1292 => x"51ee843f",
+1293 => x"81e99008",
+1294 => x"70085357",
+1295 => x"0b0b8180",
+1296 => x"d451edf3",
+1297 => x"3f0b0b81",
+1298 => x"82e051ed",
+1299 => x"ea3f81e9",
+1300 => x"90088411",
+1301 => x"0853550b",
+1302 => x"0b8181a4",
+1303 => x"51edd83f",
+1304 => x"80520b0b",
+1305 => x"80fed851",
+1306 => x"edcd3f81",
+1307 => x"e9900888",
+1308 => x"11085356",
+1309 => x"0b0b8181",
+1310 => x"c051edbb",
+1311 => x"3f81520b",
+1312 => x"0b80fed8",
+1313 => x"51edb03f",
+1314 => x"81e99008",
+1315 => x"8c110853",
+1316 => x"5d0b0b81",
+1317 => x"81dc51ed",
+1318 => x"9e3f9252",
+1319 => x"0b0b80fe",
+1320 => x"d851ed93",
+1321 => x"3f81e990",
+1322 => x"08900552",
+1323 => x"0b0b8181",
+1324 => x"f851ed83",
+1325 => x"3f0b0b81",
+1326 => x"829451ec",
+1327 => x"fa3f7d52",
+1328 => x"0b0b8183",
+1329 => x"a051ecef",
+1330 => x"3f85520b",
+1331 => x"0b80fed8",
+1332 => x"51ece43f",
+1333 => x"79520b0b",
+1334 => x"8183bc51",
+1335 => x"ecd93f8d",
+1336 => x"520b0b80",
+1337 => x"fed851ec",
+1338 => x"ce3f7f52",
+1339 => x"0b0b8183",
+1340 => x"d851ecc3",
+1341 => x"3f87520b",
+1342 => x"0b80fed8",
+1343 => x"51ecb83f",
+1344 => x"7e520b0b",
+1345 => x"8183f451",
+1346 => x"ecad3f81",
+1347 => x"520b0b80",
+1348 => x"fed851ec",
+1349 => x"a23f7b52",
+1350 => x"0b0b8184",
+1351 => x"9051ec97",
+1352 => x"3f0b0b81",
+1353 => x"84ac51ec",
+1354 => x"8e3f7a52",
+1355 => x"0b0b8184",
+1356 => x"e451ec83",
+1357 => x"3f0b0b81",
+1358 => x"858051eb",
+1359 => x"fa3f0b0b",
+1360 => x"8186cc51",
+1361 => x"ebf13f81",
+1362 => x"e98c0881",
+1363 => x"9af80831",
+1364 => x"70819af4",
+1365 => x"0c520b0b",
+1366 => x"8185b851",
+1367 => x"ebd93f81",
+1368 => x"9af40856",
+1369 => x"817625ff",
+1370 => x"0509819d",
+1371 => x"0bf70506",
+1372 => x"84010505",
+1373 => x"04818ae8",
+1374 => x"087077bd",
+1375 => x"84c0290b",
+1376 => x"35819aec",
+1377 => x"0c767135",
+1378 => x"819af00c",
+1379 => x"768ddd29",
+1380 => x"7187e829",
+1381 => x"0b3581e9",
+1382 => x"a40c5b0b",
+1383 => x"0b8185c8",
+1384 => x"51eb943f",
+1385 => x"819aec08",
+1386 => x"520b0b81",
+1387 => x"85f851eb",
+1388 => x"863f0b0b",
+1389 => x"81868051",
+1390 => x"eafd3f81",
+1391 => x"9af00852",
+1392 => x"0b0b8185",
+1393 => x"f851eaef",
+1394 => x"3f81e9a4",
+1395 => x"08520b0b",
+1396 => x"8186b051",
+1397 => x"eae13f0b",
+1398 => x"0b8186cc",
+1399 => x"51ead83f",
+1400 => x"800b800c",
+1401 => x"a13d0d04",
+1402 => x"0b0b8186",
+1403 => x"d051f598",
+1404 => x"39760856",
+1405 => x"b0537552",
+1406 => x"76519f90",
+1407 => x"3f80c10b",
+1408 => x"81e99c33",
+1409 => x"5656f881",
+1410 => x"390b0b81",
+1411 => x"878051ea",
+1412 => x"a63f0b0b",
+1413 => x"8187b851",
+1414 => x"ea9d3f0b",
+1415 => x"0b8186cc",
+1416 => x"51ea943f",
+1417 => x"800b800c",
+1418 => x"a13d0d04",
+1419 => x"a13dffb8",
+1420 => x"05528051",
+1421 => x"80dd3f9f",
+1422 => x"530b0b81",
+1423 => x"87d8527a",
+1424 => x"519ec93f",
+1425 => x"777881e9",
+1426 => x"940c8117",
+1427 => x"7081ff06",
+1428 => x"81e99c33",
+1429 => x"5258565a",
+1430 => x"f7f339ff",
+1431 => x"15707731",
+1432 => x"7e0c5980",
+1433 => x"0b811959",
+1434 => x"59818ae8",
+1435 => x"087825ff",
+1436 => x"0509f4d8",
+1437 => x"0bf70506",
+1438 => x"84010505",
+1439 => x"04f8d339",
+1440 => x"70707382",
+1441 => x"32703070",
+1442 => x"72078025",
+1443 => x"800c5252",
+1444 => x"50500470",
+1445 => x"70707476",
+1446 => x"71535452",
+1447 => x"71098105",
+1448 => x"82050970",
+1449 => x"81050906",
+1450 => x"0a8106ff",
+1451 => x"05098b0b",
+1452 => x"f7050684",
+1453 => x"01050504",
+1454 => x"83517109",
+1455 => x"81058105",
+1456 => x"09708105",
+1457 => x"09060a81",
+1458 => x"06ff0509",
+1459 => x"80dd0bf7",
+1460 => x"05068401",
+1461 => x"05050481",
+1462 => x"7226ff05",
+1463 => x"0980e10b",
+1464 => x"f7050684",
+1465 => x"01050504",
+1466 => x"71098105",
+1467 => x"82050970",
+1468 => x"81050906",
+1469 => x"0a8106ff",
+1470 => x"050980e2",
+1471 => x"0bf70506",
+1472 => x"84010505",
+1473 => x"04710981",
+1474 => x"05840509",
+1475 => x"70810509",
+1476 => x"060a8106",
+1477 => x"ff0509bc",
+1478 => x"0bf70506",
+1479 => x"84010505",
+1480 => x"0470730c",
+1481 => x"70800c50",
+1482 => x"50500480",
+1483 => x"e40b81e9",
+1484 => x"940825ff",
+1485 => x"0509930b",
+1486 => x"f7050684",
+1487 => x"01050504",
+1488 => x"80730c70",
+1489 => x"800c5050",
+1490 => x"50048373",
+1491 => x"0c70800c",
+1492 => x"50505004",
+1493 => x"82730c70",
+1494 => x"800c5050",
+1495 => x"50048173",
+1496 => x"0c70800c",
+1497 => x"50505004",
+1498 => x"70747414",
+1499 => x"8205710c",
+1500 => x"800c5004",
+1501 => x"f73d0d7b",
+1502 => x"7d7f6185",
+1503 => x"1270822b",
+1504 => x"75117074",
+1505 => x"71708405",
+1506 => x"530c5a5a",
+1507 => x"5d5b760c",
+1508 => x"7980f818",
+1509 => x"0c798612",
+1510 => x"5257585a",
+1511 => x"5a767624",
+1512 => x"ff0509ac",
+1513 => x"0bf70506",
+1514 => x"84010505",
+1515 => x"0476b329",
+1516 => x"822b7911",
+1517 => x"51537673",
+1518 => x"70840555",
+1519 => x"0c811454",
+1520 => x"757425ff",
+1521 => x"0509ef0b",
+1522 => x"f7050684",
+1523 => x"01050504",
+1524 => x"7681cc29",
+1525 => x"19fc1108",
+1526 => x"8105fc12",
+1527 => x"0c7a1970",
+1528 => x"089fa013",
+1529 => x"0c585685",
+1530 => x"0b81e994",
+1531 => x"0c75800c",
+1532 => x"8b3d0d04",
+1533 => x"70707002",
+1534 => x"93053351",
+1535 => x"80028405",
+1536 => x"97053354",
+1537 => x"52700981",
+1538 => x"05730509",
+1539 => x"70810509",
+1540 => x"060a8106",
+1541 => x"ff050990",
+1542 => x"0bf70506",
+1543 => x"84010505",
+1544 => x"0471800c",
+1545 => x"50505004",
+1546 => x"7081e998",
+1547 => x"34810b80",
+1548 => x"0c505050",
+1549 => x"04f83d0d",
+1550 => x"7a7c5956",
+1551 => x"820b8319",
+1552 => x"55557416",
+1553 => x"70337533",
+1554 => x"5b515372",
+1555 => x"09810579",
+1556 => x"05097081",
+1557 => x"0509060a",
+1558 => x"8106ff05",
+1559 => x"0981860b",
+1560 => x"f7050684",
+1561 => x"01050504",
+1562 => x"80c10b81",
+1563 => x"16811656",
+1564 => x"56578275",
+1565 => x"25ff0509",
+1566 => x"c90bf705",
+1567 => x"06840105",
+1568 => x"0504ffa9",
+1569 => x"177081ff",
+1570 => x"06555973",
+1571 => x"8226ff05",
+1572 => x"098b0bf7",
+1573 => x"05068401",
+1574 => x"05050487",
+1575 => x"55815376",
+1576 => x"09810580",
+1577 => x"d2050970",
+1578 => x"81050906",
+1579 => x"0a8106ff",
+1580 => x"0509ab0b",
+1581 => x"f7050684",
+1582 => x"01050504",
+1583 => x"77527551",
+1584 => x"9cb43f80",
+1585 => x"53728008",
+1586 => x"25ff0509",
+1587 => x"910bf705",
+1588 => x"06840105",
+1589 => x"05048715",
+1590 => x"81e9940c",
+1591 => x"81537280",
+1592 => x"0c8a3d0d",
+1593 => x"047281e9",
+1594 => x"98348275",
+1595 => x"25ff0509",
+1596 => x"fed00bf7",
+1597 => x"05068401",
+1598 => x"050504ff",
+1599 => x"8539f93d",
+1600 => x"0d797b7d",
+1601 => x"54587259",
+1602 => x"77307970",
+1603 => x"30707207",
+1604 => x"9f2a7371",
+1605 => x"315a5259",
+1606 => x"77795673",
+1607 => x"0c537384",
+1608 => x"130c5480",
+1609 => x"0c893d0d",
+1610 => x"04f93d0d",
+1611 => x"797b7d7f",
+1612 => x"56545254",
+1613 => x"72097081",
+1614 => x"0509060a",
+1615 => x"8106ff05",
+1616 => x"09b30bf7",
+1617 => x"05068401",
+1618 => x"05050470",
+1619 => x"577158a0",
+1620 => x"73315280",
+1621 => x"7225ff05",
+1622 => x"09a90bf7",
+1623 => x"05068401",
+1624 => x"05050477",
+1625 => x"70742b57",
+1626 => x"70732a78",
+1627 => x"752b0756",
+1628 => x"51747653",
+1629 => x"5170740c",
+1630 => x"7184150c",
+1631 => x"73800c89",
+1632 => x"3d0d0480",
+1633 => x"56777230",
+1634 => x"0b2b5574",
+1635 => x"765351e5",
+1636 => x"39fb3d0d",
+1637 => x"77795555",
+1638 => x"80567575",
+1639 => x"24ff0509",
+1640 => x"80d00bf7",
+1641 => x"05068401",
+1642 => x"05050480",
+1643 => x"7424ff05",
+1644 => x"09b70bf7",
+1645 => x"05068401",
+1646 => x"05050480",
+1647 => x"53735274",
+1648 => x"51819c3f",
+1649 => x"80085475",
+1650 => x"09708105",
+1651 => x"09060a81",
+1652 => x"06ff0509",
+1653 => x"8d0bf705",
+1654 => x"06840105",
+1655 => x"05048008",
+1656 => x"30547380",
+1657 => x"0c873d0d",
+1658 => x"04733076",
+1659 => x"81325754",
+1660 => x"ca397430",
+1661 => x"55815673",
+1662 => x"8025ff05",
+1663 => x"09ffbc0b",
+1664 => x"f7050684",
+1665 => x"01050504",
+1666 => x"e039fa3d",
+1667 => x"0d787a57",
+1668 => x"55805776",
+1669 => x"7524ff05",
+1670 => x"09be0bf7",
+1671 => x"05068401",
+1672 => x"05050475",
+1673 => x"9f2c5481",
+1674 => x"53757432",
+1675 => x"74315274",
+1676 => x"51ad3f80",
+1677 => x"08547609",
+1678 => x"70810509",
+1679 => x"060a8106",
+1680 => x"ff05098d",
+1681 => x"0bf70506",
+1682 => x"84010505",
+1683 => x"04800830",
+1684 => x"5473800c",
+1685 => x"883d0d04",
+1686 => x"74305581",
+1687 => x"57c539fc",
+1688 => x"3d0d7678",
+1689 => x"53548153",
+1690 => x"80747326",
+1691 => x"52557209",
+1692 => x"70810509",
+1693 => x"060a8106",
+1694 => x"ff050980",
+1695 => x"d50bf705",
+1696 => x"06840105",
+1697 => x"05047009",
+1698 => x"70810509",
+1699 => x"060a8106",
+1700 => x"ff050980",
+1701 => x"ea0bf705",
+1702 => x"06840105",
+1703 => x"05048072",
+1704 => x"24ff0509",
+1705 => x"80d90bf7",
+1706 => x"05068401",
+1707 => x"05050471",
+1708 => x"10731075",
+1709 => x"72265354",
+1710 => x"52720970",
+1711 => x"81050906",
+1712 => x"0a098106",
+1713 => x"ff0509ff",
+1714 => x"bd0bf705",
+1715 => x"06840105",
+1716 => x"05047351",
+1717 => x"78097081",
+1718 => x"0509060a",
+1719 => x"098106ff",
+1720 => x"05098b0b",
+1721 => x"f7050684",
+1722 => x"01050504",
+1723 => x"74517080",
+1724 => x"0c863d0d",
+1725 => x"04720a10",
+1726 => x"0a720a10",
+1727 => x"0a535372",
+1728 => x"09708105",
+1729 => x"09060a81",
+1730 => x"06ff0509",
+1731 => x"c50bf705",
+1732 => x"06840105",
+1733 => x"05047174",
+1734 => x"26ff0509",
+1735 => x"d80bf705",
+1736 => x"06840105",
+1737 => x"05047372",
+1738 => x"31757407",
+1739 => x"740a100a",
+1740 => x"740a100a",
+1741 => x"55555654",
+1742 => x"c6397070",
+1743 => x"73528193",
+1744 => x"b4085193",
+1745 => x"3f505004",
+1746 => x"70707352",
+1747 => x"8193b408",
+1748 => x"519bc43f",
+1749 => x"505004f4",
+1750 => x"3d0d7e60",
+1751 => x"8b1170f8",
+1752 => x"065b5555",
+1753 => x"5d729626",
+1754 => x"ff05098b",
+1755 => x"0bf70506",
+1756 => x"84010505",
+1757 => x"04905880",
+1758 => x"78247479",
+1759 => x"26075580",
+1760 => x"54740981",
+1761 => x"05740509",
+1762 => x"70810509",
+1763 => x"060a0981",
+1764 => x"06ff0509",
+1765 => x"80f40bf7",
+1766 => x"05068401",
+1767 => x"0505047c",
+1768 => x"5195f13f",
+1769 => x"7783f726",
+1770 => x"ff050980",
+1771 => x"e40bf705",
+1772 => x"06840105",
+1773 => x"05047783",
+1774 => x"2a701010",
+1775 => x"10818bac",
+1776 => x"058c1108",
+1777 => x"58585475",
+1778 => x"09810577",
+1779 => x"05097081",
+1780 => x"0509060a",
+1781 => x"8106ff05",
+1782 => x"0983b60b",
+1783 => x"f7050684",
+1784 => x"01050504",
+1785 => x"841608fc",
+1786 => x"068c1708",
+1787 => x"88180871",
+1788 => x"8c120c88",
+1789 => x"120c5b76",
+1790 => x"05841108",
+1791 => x"81078412",
+1792 => x"0c537c51",
+1793 => x"958f3f88",
+1794 => x"16547380",
+1795 => x"0c8e3d0d",
+1796 => x"0477892a",
+1797 => x"78832a58",
+1798 => x"54730970",
+1799 => x"81050906",
+1800 => x"0a8106ff",
+1801 => x"05098180",
+1802 => x"0bf70506",
+1803 => x"84010505",
+1804 => x"0477862a",
+1805 => x"b8055784",
+1806 => x"7427ff05",
+1807 => x"0980e90b",
+1808 => x"f7050684",
+1809 => x"01050504",
+1810 => x"80db1457",
+1811 => x"947427ff",
+1812 => x"050980d4",
+1813 => x"0bf70506",
+1814 => x"84010505",
+1815 => x"04778c2a",
+1816 => x"80ee0557",
+1817 => x"80d47427",
+1818 => x"ff0509bc",
+1819 => x"0bf70506",
+1820 => x"84010505",
+1821 => x"04778f2a",
+1822 => x"80f70557",
+1823 => x"82d47427",
+1824 => x"ff0509a4",
+1825 => x"0bf70506",
+1826 => x"84010505",
+1827 => x"0477922a",
+1828 => x"80fc0557",
+1829 => x"8ad47427",
+1830 => x"ff05098c",
+1831 => x"0bf70506",
+1832 => x"84010505",
+1833 => x"0480fe57",
+1834 => x"76101010",
+1835 => x"818bac05",
+1836 => x"8c110856",
+1837 => x"53740981",
+1838 => x"05730509",
+1839 => x"70810509",
+1840 => x"060a8106",
+1841 => x"ff050980",
+1842 => x"d70bf705",
+1843 => x"06840105",
+1844 => x"05048415",
+1845 => x"08fc0670",
+1846 => x"79315556",
+1847 => x"738f24ff",
+1848 => x"05098fb7",
+1849 => x"0bf70506",
+1850 => x"84010505",
+1851 => x"04738025",
+1852 => x"ff05098f",
+1853 => x"ae0bf705",
+1854 => x"06840105",
+1855 => x"05048c15",
+1856 => x"08557409",
+1857 => x"81057305",
+1858 => x"09708105",
+1859 => x"09060a09",
+1860 => x"8106ff05",
+1861 => x"09ffbb0b",
+1862 => x"f7050684",
+1863 => x"01050504",
+1864 => x"81175981",
+1865 => x"8bbc0856",
+1866 => x"75098105",
+1867 => x"818bb405",
+1868 => x"09708105",
+1869 => x"09060a81",
+1870 => x"06ff0509",
+1871 => x"84ce0bf7",
+1872 => x"05068401",
+1873 => x"05050484",
+1874 => x"1608fc06",
+1875 => x"70793155",
+1876 => x"55738f24",
+1877 => x"ff050980",
+1878 => x"e30bf705",
+1879 => x"06840105",
+1880 => x"0504818b",
+1881 => x"b40b818b",
+1882 => x"c00c818b",
+1883 => x"b40b818b",
+1884 => x"bc0c8074",
+1885 => x"24ff0509",
+1886 => x"80f80bf7",
+1887 => x"05068401",
+1888 => x"05050474",
+1889 => x"16841108",
+1890 => x"81078412",
+1891 => x"0c53fcf2",
+1892 => x"3988168c",
+1893 => x"11085759",
+1894 => x"75098105",
+1895 => x"79050970",
+1896 => x"81050906",
+1897 => x"0a098106",
+1898 => x"ff0509fc",
+1899 => x"b70bf705",
+1900 => x"06840105",
+1901 => x"05048214",
+1902 => x"59fee839",
+1903 => x"77167881",
+1904 => x"0784180c",
+1905 => x"70818bc0",
+1906 => x"0c70818b",
+1907 => x"bc0c818b",
+1908 => x"b40b8c12",
+1909 => x"0c8c1108",
+1910 => x"88120c74",
+1911 => x"81078412",
+1912 => x"0c740574",
+1913 => x"710c5b7c",
+1914 => x"5191aa3f",
+1915 => x"881654fc",
+1916 => x"993983ff",
+1917 => x"7527ff05",
+1918 => x"0985ff0b",
+1919 => x"f7050684",
+1920 => x"01050504",
+1921 => x"74892a75",
+1922 => x"832a5454",
+1923 => x"73097081",
+1924 => x"0509060a",
+1925 => x"8106ff05",
+1926 => x"0981800b",
+1927 => x"f7050684",
+1928 => x"01050504",
+1929 => x"74862ab8",
+1930 => x"05538474",
+1931 => x"27ff0509",
+1932 => x"80e90bf7",
+1933 => x"05068401",
+1934 => x"05050480",
+1935 => x"db145394",
+1936 => x"7427ff05",
+1937 => x"0980d40b",
+1938 => x"f7050684",
+1939 => x"01050504",
+1940 => x"748c2a80",
+1941 => x"ee055380",
+1942 => x"d47427ff",
+1943 => x"0509bc0b",
+1944 => x"f7050684",
+1945 => x"01050504",
+1946 => x"748f2a80",
+1947 => x"f7055382",
+1948 => x"d47427ff",
+1949 => x"0509a40b",
+1950 => x"f7050684",
+1951 => x"01050504",
+1952 => x"74922a80",
+1953 => x"fc05538a",
+1954 => x"d47427ff",
+1955 => x"05098c0b",
+1956 => x"f7050684",
+1957 => x"01050504",
+1958 => x"80fe5372",
+1959 => x"10101081",
+1960 => x"8bac0588",
+1961 => x"11085557",
+1962 => x"73098105",
+1963 => x"77050970",
+1964 => x"81050906",
+1965 => x"0a8106ff",
+1966 => x"05098aec",
+1967 => x"0bf70506",
+1968 => x"84010505",
+1969 => x"04841408",
+1970 => x"fc065b74",
+1971 => x"7b27ff05",
+1972 => x"09aa0bf7",
+1973 => x"05068401",
+1974 => x"05050488",
+1975 => x"14085473",
+1976 => x"09810577",
+1977 => x"05097081",
+1978 => x"0509060a",
+1979 => x"098106ff",
+1980 => x"0509d20b",
+1981 => x"f7050684",
+1982 => x"01050504",
+1983 => x"8c140881",
+1984 => x"8bac0b84",
+1985 => x"0508718c",
+1986 => x"190c7588",
+1987 => x"190c7788",
+1988 => x"130c5c57",
+1989 => x"758c150c",
+1990 => x"78538079",
+1991 => x"24ff0509",
+1992 => x"86860bf7",
+1993 => x"05068401",
+1994 => x"05050472",
+1995 => x"822c8171",
+1996 => x"2b565674",
+1997 => x"7b26ff05",
+1998 => x"0981a80b",
+1999 => x"f7050684",
+2000 => x"01050504",
+2001 => x"7a750657",
+2002 => x"76097081",
+2003 => x"0509060a",
+2004 => x"098106ff",
+2005 => x"050983ee",
+2006 => x"0bf70506",
+2007 => x"84010505",
+2008 => x"0478fc06",
+2009 => x"84055974",
+2010 => x"10707c06",
+2011 => x"55557309",
+2012 => x"70810509",
+2013 => x"060a0981",
+2014 => x"06ff0509",
+2015 => x"83c80bf7",
+2016 => x"05068401",
+2017 => x"05050484",
+2018 => x"1959dc39",
+2019 => x"818bac0b",
+2020 => x"84050879",
+2021 => x"545b7880",
+2022 => x"25ff0509",
+2023 => x"ff8d0bf7",
+2024 => x"05068401",
+2025 => x"05050484",
+2026 => x"ff397409",
+2027 => x"7b067081",
+2028 => x"8bac0b84",
+2029 => x"050c5b74",
+2030 => x"1055747b",
+2031 => x"26ff0509",
+2032 => x"a20bf705",
+2033 => x"06840105",
+2034 => x"05047409",
+2035 => x"70810509",
+2036 => x"060a0981",
+2037 => x"06ff0509",
+2038 => x"899c0bf7",
+2039 => x"05068401",
+2040 => x"05050481",
+2041 => x"8bac0b88",
+2042 => x"05087084",
+2043 => x"1208fc06",
+2044 => x"707b317b",
+2045 => x"72268f72",
+2046 => x"25075d57",
+2047 => x"5c5c5578",
+2048 => x"09708105",
+2049 => x"09060a81",
+2050 => x"06ff0509",
+2051 => x"81c60bf7",
+2052 => x"05068401",
+2053 => x"05050479",
+2054 => x"15818ba4",
+2055 => x"08199011",
+2056 => x"59545681",
+2057 => x"8ba00809",
+2058 => x"8105ff05",
+2059 => x"09708105",
+2060 => x"09060a81",
+2061 => x"06ff0509",
+2062 => x"900bf705",
+2063 => x"06840105",
+2064 => x"0504a08f",
+2065 => x"13e08006",
+2066 => x"5776527c",
+2067 => x"518cc73f",
+2068 => x"80085480",
+2069 => x"08098105",
+2070 => x"ff050970",
+2071 => x"81050906",
+2072 => x"0a8106ff",
+2073 => x"0509ba0b",
+2074 => x"f7050684",
+2075 => x"01050504",
+2076 => x"80087627",
+2077 => x"ff050983",
+2078 => x"e90bf705",
+2079 => x"06840105",
+2080 => x"05047409",
+2081 => x"8105818b",
+2082 => x"ac050970",
+2083 => x"81050906",
+2084 => x"0a8106ff",
+2085 => x"050983ca",
+2086 => x"0bf70506",
+2087 => x"84010505",
+2088 => x"04818bac",
+2089 => x"0b880508",
+2090 => x"55841508",
+2091 => x"fc067079",
+2092 => x"31797226",
+2093 => x"8f722507",
+2094 => x"5d555a7a",
+2095 => x"09708105",
+2096 => x"09060a09",
+2097 => x"8106ff05",
+2098 => x"0986d00b",
+2099 => x"f7050684",
+2100 => x"01050504",
+2101 => x"77810784",
+2102 => x"160c7715",
+2103 => x"70818bac",
+2104 => x"0b88050c",
+2105 => x"74810784",
+2106 => x"120c567c",
+2107 => x"518ba63f",
+2108 => x"88155473",
+2109 => x"800c8e3d",
+2110 => x"0d047483",
+2111 => x"2a705454",
+2112 => x"807424ff",
+2113 => x"050982a6",
+2114 => x"0bf70506",
+2115 => x"84010505",
+2116 => x"0472822c",
+2117 => x"81712b81",
+2118 => x"8bb00807",
+2119 => x"70818bac",
+2120 => x"0b84050c",
+2121 => x"75101010",
+2122 => x"818bac05",
+2123 => x"88110871",
+2124 => x"8c1b0c70",
+2125 => x"881b0c79",
+2126 => x"88130c57",
+2127 => x"555c5575",
+2128 => x"8c150cfb",
+2129 => x"d3397879",
+2130 => x"10101081",
+2131 => x"8bac0570",
+2132 => x"565b5c8c",
+2133 => x"14085675",
+2134 => x"09810574",
+2135 => x"05097081",
+2136 => x"0509060a",
+2137 => x"8106ff05",
+2138 => x"0980d70b",
+2139 => x"f7050684",
+2140 => x"01050504",
+2141 => x"841608fc",
+2142 => x"06707931",
+2143 => x"5853768f",
+2144 => x"24ff0509",
+2145 => x"86c10bf7",
+2146 => x"05068401",
+2147 => x"05050476",
+2148 => x"8025ff05",
+2149 => x"0986f40b",
+2150 => x"f7050684",
+2151 => x"01050504",
+2152 => x"8c160856",
+2153 => x"75098105",
+2154 => x"74050970",
+2155 => x"81050906",
+2156 => x"0a098106",
+2157 => x"ff0509ff",
+2158 => x"bb0bf705",
+2159 => x"06840105",
+2160 => x"05048814",
+2161 => x"811a7083",
+2162 => x"06555a54",
+2163 => x"72097081",
+2164 => x"0509060a",
+2165 => x"098106ff",
+2166 => x"0509fef7",
+2167 => x"0bf70506",
+2168 => x"84010505",
+2169 => x"047b8306",
+2170 => x"56750970",
+2171 => x"81050906",
+2172 => x"0a8106ff",
+2173 => x"0509fbb2",
+2174 => x"0bf70506",
+2175 => x"84010505",
+2176 => x"04ff1cf8",
+2177 => x"1b5b5c88",
+2178 => x"1a080981",
+2179 => x"057a0509",
+2180 => x"70810509",
+2181 => x"060a8106",
+2182 => x"ff0509c9",
+2183 => x"0bf70506",
+2184 => x"84010505",
+2185 => x"04fb9039",
+2186 => x"831953f9",
+2187 => x"fe398314",
+2188 => x"70822c81",
+2189 => x"712b818b",
+2190 => x"b0080770",
+2191 => x"818bac0b",
+2192 => x"84050c76",
+2193 => x"10101081",
+2194 => x"8bac0588",
+2195 => x"1108718c",
+2196 => x"1c0c7088",
+2197 => x"1c0c7a88",
+2198 => x"130c5853",
+2199 => x"5d5653fd",
+2200 => x"de39818a",
+2201 => x"f0081759",
+2202 => x"80080981",
+2203 => x"05760509",
+2204 => x"70810509",
+2205 => x"060a8106",
+2206 => x"ff050982",
+2207 => x"870bf705",
+2208 => x"06840105",
+2209 => x"0504818b",
+2210 => x"a0080981",
+2211 => x"05ff0509",
+2212 => x"70810509",
+2213 => x"060a8106",
+2214 => x"ff050985",
+2215 => x"db0bf705",
+2216 => x"06840105",
+2217 => x"05047376",
+2218 => x"3119818a",
+2219 => x"f00c7387",
+2220 => x"06705653",
+2221 => x"72097081",
+2222 => x"0509060a",
+2223 => x"8106ff05",
+2224 => x"09900bf7",
+2225 => x"05068401",
+2226 => x"05050488",
+2227 => x"73317015",
+2228 => x"55557614",
+2229 => x"9fff06a0",
+2230 => x"80713116",
+2231 => x"70547e53",
+2232 => x"515387b2",
+2233 => x"3f800856",
+2234 => x"80080981",
+2235 => x"05ff0509",
+2236 => x"70810509",
+2237 => x"060a8106",
+2238 => x"ff050982",
+2239 => x"970bf705",
+2240 => x"06840105",
+2241 => x"0504818a",
+2242 => x"f0081370",
+2243 => x"818af00c",
+2244 => x"7475818b",
+2245 => x"ac0b8805",
+2246 => x"0c777631",
+2247 => x"15810755",
+2248 => x"56597a09",
+2249 => x"8105818b",
+2250 => x"ac050970",
+2251 => x"81050906",
+2252 => x"0a8106ff",
+2253 => x"050984cd",
+2254 => x"0bf70506",
+2255 => x"84010505",
+2256 => x"04798f26",
+2257 => x"ff050983",
+2258 => x"e60bf705",
+2259 => x"06840105",
+2260 => x"0504810b",
+2261 => x"84150c84",
+2262 => x"1508fc06",
+2263 => x"70793179",
+2264 => x"72268f72",
+2265 => x"25075d55",
+2266 => x"5a7a0970",
+2267 => x"81050906",
+2268 => x"0a8106ff",
+2269 => x"0509fadc",
+2270 => x"0bf70506",
+2271 => x"84010505",
+2272 => x"04819839",
+2273 => x"80089fff",
+2274 => x"06557409",
+2275 => x"70810509",
+2276 => x"060a0981",
+2277 => x"06ff0509",
+2278 => x"fdec0bf7",
+2279 => x"05068401",
+2280 => x"05050478",
+2281 => x"818af00c",
+2282 => x"818bac0b",
+2283 => x"8805087a",
+2284 => x"18810784",
+2285 => x"120c5581",
+2286 => x"8b9c0879",
+2287 => x"27ff0509",
+2288 => x"8e0bf705",
+2289 => x"06840105",
+2290 => x"05047881",
+2291 => x"8b9c0c81",
+2292 => x"8b980879",
+2293 => x"27ff0509",
+2294 => x"f9cf0bf7",
+2295 => x"05068401",
+2296 => x"05050478",
+2297 => x"818b980c",
+2298 => x"841508fc",
+2299 => x"06707931",
+2300 => x"7972268f",
+2301 => x"7225075d",
+2302 => x"555a7a09",
+2303 => x"70810509",
+2304 => x"060a8106",
+2305 => x"ff0509f9",
+2306 => x"cb0bf705",
+2307 => x"06840105",
+2308 => x"05048839",
+2309 => x"80745753",
+2310 => x"fdec397c",
+2311 => x"5184f63f",
+2312 => x"800b800c",
+2313 => x"8e3d0d04",
+2314 => x"807324ff",
+2315 => x"0509ad0b",
+2316 => x"f7050684",
+2317 => x"01050504",
+2318 => x"72822c81",
+2319 => x"712b818b",
+2320 => x"b0080770",
+2321 => x"818bac0b",
+2322 => x"84050c5c",
+2323 => x"5a768c17",
+2324 => x"0c738817",
+2325 => x"0c758818",
+2326 => x"0cf5b939",
+2327 => x"83137082",
+2328 => x"2c81712b",
+2329 => x"818bb008",
+2330 => x"0770818b",
+2331 => x"ac0b8405",
+2332 => x"0c5d5b53",
+2333 => x"d8397a75",
+2334 => x"065c7b09",
+2335 => x"70810509",
+2336 => x"060a0981",
+2337 => x"06ff0509",
+2338 => x"f9bc0bf7",
+2339 => x"05068401",
+2340 => x"05050484",
+2341 => x"19751056",
+2342 => x"59dc39ff",
+2343 => x"17810559",
+2344 => x"f181398c",
+2345 => x"15088816",
+2346 => x"08718c12",
+2347 => x"0c88120c",
+2348 => x"59751584",
+2349 => x"11088107",
+2350 => x"84120c58",
+2351 => x"7c5183d5",
+2352 => x"3f881554",
+2353 => x"f8ad3977",
+2354 => x"16788107",
+2355 => x"84180c8c",
+2356 => x"17088818",
+2357 => x"08718c12",
+2358 => x"0c88120c",
+2359 => x"5c70818b",
+2360 => x"c00c7081",
+2361 => x"8bbc0c81",
+2362 => x"8bb40b8c",
+2363 => x"120c8c11",
+2364 => x"0888120c",
+2365 => x"77810784",
+2366 => x"120c7705",
+2367 => x"77710c55",
+2368 => x"7c518391",
+2369 => x"3f881654",
+2370 => x"ee803972",
+2371 => x"16841108",
+2372 => x"81078412",
+2373 => x"0c588c16",
+2374 => x"08881708",
+2375 => x"718c120c",
+2376 => x"88120c57",
+2377 => x"7c5182ed",
+2378 => x"3f881654",
+2379 => x"eddc3972",
+2380 => x"84150cf4",
+2381 => x"1af80670",
+2382 => x"841d0881",
+2383 => x"0607841d",
+2384 => x"0c701c55",
+2385 => x"56850b84",
+2386 => x"150c850b",
+2387 => x"88150c8f",
+2388 => x"7627ff05",
+2389 => x"09fce00b",
+2390 => x"f7050684",
+2391 => x"01050504",
+2392 => x"881b527c",
+2393 => x"5187b03f",
+2394 => x"818bac0b",
+2395 => x"88050881",
+2396 => x"8af0085a",
+2397 => x"55fcc039",
+2398 => x"78818af0",
+2399 => x"0c73818b",
+2400 => x"a00cfaaa",
+2401 => x"39728415",
+2402 => x"0cfcac39",
+2403 => x"fb3d0d77",
+2404 => x"707a7c58",
+2405 => x"5553568f",
+2406 => x"7527ff05",
+2407 => x"0981a40b",
+2408 => x"f7050684",
+2409 => x"01050504",
+2410 => x"72760783",
+2411 => x"06517009",
+2412 => x"70810509",
+2413 => x"060a0981",
+2414 => x"06ff0509",
+2415 => x"81850bf7",
+2416 => x"05068401",
+2417 => x"05050475",
+2418 => x"73525470",
+2419 => x"70840552",
+2420 => x"08747084",
+2421 => x"05560c73",
+2422 => x"71708405",
+2423 => x"53087170",
+2424 => x"8405530c",
+2425 => x"71708405",
+2426 => x"53087170",
+2427 => x"8405530c",
+2428 => x"71708405",
+2429 => x"53087170",
+2430 => x"8405530c",
+2431 => x"f0165654",
+2432 => x"748f26ff",
+2433 => x"0509c40b",
+2434 => x"f7050684",
+2435 => x"01050504",
+2436 => x"837527ff",
+2437 => x"0509a80b",
+2438 => x"f7050684",
+2439 => x"01050504",
+2440 => x"70708405",
+2441 => x"52087470",
+2442 => x"8405560c",
+2443 => x"fc155574",
+2444 => x"8326ff05",
+2445 => x"09ea0bf7",
+2446 => x"05068401",
+2447 => x"05050473",
+2448 => x"715452ff",
+2449 => x"15517009",
+2450 => x"8105ff05",
+2451 => x"09708105",
+2452 => x"09060a81",
+2453 => x"06ff0509",
+2454 => x"b40bf705",
+2455 => x"06840105",
+2456 => x"05047270",
+2457 => x"81055472",
+2458 => x"70810554",
+2459 => x"3bff1151",
+2460 => x"70098105",
+2461 => x"ff050970",
+2462 => x"81050906",
+2463 => x"0a098106",
+2464 => x"ff0509de",
+2465 => x"0bf70506",
+2466 => x"84010505",
+2467 => x"0475800c",
+2468 => x"873d0d04",
+2469 => x"04047070",
+2470 => x"7070800b",
+2471 => x"81eaf40c",
+2472 => x"76518cc1",
+2473 => x"3f800853",
+2474 => x"80080981",
+2475 => x"05ff0509",
+2476 => x"70810509",
+2477 => x"060a8106",
+2478 => x"ff050991",
+2479 => x"0bf70506",
+2480 => x"84010505",
+2481 => x"0472800c",
+2482 => x"50505050",
+2483 => x"0481eaf4",
+2484 => x"08547309",
+2485 => x"70810509",
+2486 => x"060a8106",
+2487 => x"ff0509e5",
+2488 => x"0bf70506",
+2489 => x"84010505",
+2490 => x"04757471",
+2491 => x"0c527280",
+2492 => x"0c505050",
+2493 => x"5004fb3d",
+2494 => x"0d777970",
+2495 => x"72078306",
+2496 => x"53545270",
+2497 => x"09708105",
+2498 => x"09060a09",
+2499 => x"8106ff05",
+2500 => x"09b20bf7",
+2501 => x"05068401",
+2502 => x"05050471",
+2503 => x"73730854",
+2504 => x"56547109",
+2505 => x"81057308",
+2506 => x"05097081",
+2507 => x"0509060a",
+2508 => x"8106ff05",
+2509 => x"0981890b",
+2510 => x"f7050684",
+2511 => x"01050504",
+2512 => x"73755452",
+2513 => x"71337081",
+2514 => x"ff065254",
+2515 => x"70097081",
+2516 => x"0509060a",
+2517 => x"8106ff05",
+2518 => x"0980cf0b",
+2519 => x"f7050684",
+2520 => x"01050504",
+2521 => x"72335570",
+2522 => x"09810575",
+2523 => x"05097081",
+2524 => x"0509060a",
+2525 => x"098106ff",
+2526 => x"0509b20b",
+2527 => x"f7050684",
+2528 => x"01050504",
+2529 => x"81128114",
+2530 => x"71337081",
+2531 => x"ff065456",
+2532 => x"54527009",
+2533 => x"70810509",
+2534 => x"060a0981",
+2535 => x"06ff0509",
+2536 => x"c30bf705",
+2537 => x"06840105",
+2538 => x"05047233",
+2539 => x"557381ff",
+2540 => x"067581ff",
+2541 => x"06717131",
+2542 => x"800c5552",
+2543 => x"873d0d04",
+2544 => x"7109f7fb",
+2545 => x"fdff1306",
+2546 => x"f8848281",
+2547 => x"80065271",
+2548 => x"09708105",
+2549 => x"09060a09",
+2550 => x"8106ff05",
+2551 => x"09b70bf7",
+2552 => x"05068401",
+2553 => x"05050484",
+2554 => x"14841671",
+2555 => x"08545654",
+2556 => x"71098105",
+2557 => x"75080509",
+2558 => x"70810509",
+2559 => x"060a8106",
+2560 => x"ff0509ff",
+2561 => x"bb0bf705",
+2562 => x"06840105",
+2563 => x"05047375",
+2564 => x"5452feb0",
+2565 => x"39800b80",
+2566 => x"0c873d0d",
+2567 => x"04fb3d0d",
+2568 => x"77705256",
+2569 => x"fcee3f81",
+2570 => x"8bac0b88",
+2571 => x"05088411",
+2572 => x"08fc0670",
+2573 => x"7b319fef",
+2574 => x"05e08006",
+2575 => x"e0800552",
+2576 => x"5555a080",
+2577 => x"7524ff05",
+2578 => x"09b30bf7",
+2579 => x"05068401",
+2580 => x"05050480",
+2581 => x"527551fc",
+2582 => x"bd3f818b",
+2583 => x"b4081453",
+2584 => x"72098105",
+2585 => x"80080509",
+2586 => x"70810509",
+2587 => x"060a8106",
+2588 => x"ff050997",
+2589 => x"0bf70506",
+2590 => x"84010505",
+2591 => x"047551fc",
+2592 => x"943f8053",
+2593 => x"72800c87",
+2594 => x"3d0d0474",
+2595 => x"30527551",
+2596 => x"fc843f80",
+2597 => x"08098105",
+2598 => x"ff050970",
+2599 => x"81050906",
+2600 => x"0a8106ff",
+2601 => x"0509b00b",
+2602 => x"f7050684",
+2603 => x"01050504",
+2604 => x"818bac0b",
+2605 => x"88050874",
+2606 => x"76318107",
+2607 => x"84120c53",
+2608 => x"818af008",
+2609 => x"7531818a",
+2610 => x"f00c7551",
+2611 => x"fbc73f81",
+2612 => x"0b800c87",
+2613 => x"3d0d0480",
+2614 => x"527551fb",
+2615 => x"b93f818b",
+2616 => x"ac0b8805",
+2617 => x"08800871",
+2618 => x"3154548f",
+2619 => x"7325ff05",
+2620 => x"09ff8a0b",
+2621 => x"f7050684",
+2622 => x"01050504",
+2623 => x"8008818b",
+2624 => x"a0083181",
+2625 => x"8af00c72",
+2626 => x"81078415",
+2627 => x"0c7551fb",
+2628 => x"843f8053",
+2629 => x"feee39f7",
+2630 => x"3d0d7b7d",
+2631 => x"545a7209",
+2632 => x"70810509",
+2633 => x"060a8106",
+2634 => x"ff050984",
+2635 => x"9e0bf705",
+2636 => x"06840105",
+2637 => x"05047951",
+2638 => x"fada3ff8",
+2639 => x"13841108",
+2640 => x"70fe0670",
+2641 => x"13841108",
+2642 => x"fc065c57",
+2643 => x"58545781",
+2644 => x"8bb40809",
+2645 => x"81057405",
+2646 => x"09708105",
+2647 => x"09060a81",
+2648 => x"06ff0509",
+2649 => x"85840bf7",
+2650 => x"05068401",
+2651 => x"05050477",
+2652 => x"84150c80",
+2653 => x"73810656",
+2654 => x"59740981",
+2655 => x"05790509",
+2656 => x"70810509",
+2657 => x"060a8106",
+2658 => x"ff050983",
+2659 => x"c20bf705",
+2660 => x"06840105",
+2661 => x"05047714",
+2662 => x"84110881",
+2663 => x"06565374",
+2664 => x"09708105",
+2665 => x"09060a09",
+2666 => x"8106ff05",
+2667 => x"0980d40b",
+2668 => x"f7050684",
+2669 => x"01050504",
+2670 => x"77165678",
+2671 => x"09708105",
+2672 => x"09060a09",
+2673 => x"8106ff05",
+2674 => x"0983bf0b",
+2675 => x"f7050684",
+2676 => x"01050504",
+2677 => x"88140855",
+2678 => x"74098105",
+2679 => x"818bb405",
+2680 => x"09708105",
+2681 => x"09060a81",
+2682 => x"06ff0509",
+2683 => x"84e60bf7",
+2684 => x"05068401",
+2685 => x"0505048c",
+2686 => x"1408708c",
+2687 => x"170c7588",
+2688 => x"120c5875",
+2689 => x"81078418",
+2690 => x"0c751776",
+2691 => x"710c5478",
+2692 => x"09708105",
+2693 => x"09060a09",
+2694 => x"8106ff05",
+2695 => x"0982a70b",
+2696 => x"f7050684",
+2697 => x"01050504",
+2698 => x"83ff7627",
+2699 => x"ff050982",
+2700 => x"ea0bf705",
+2701 => x"06840105",
+2702 => x"05047589",
+2703 => x"2a76832a",
+2704 => x"54547309",
+2705 => x"70810509",
+2706 => x"060a8106",
+2707 => x"ff050981",
+2708 => x"800bf705",
+2709 => x"06840105",
+2710 => x"05047586",
+2711 => x"2ab80553",
+2712 => x"847427ff",
+2713 => x"050980e9",
+2714 => x"0bf70506",
+2715 => x"84010505",
+2716 => x"0480db14",
+2717 => x"53947427",
+2718 => x"ff050980",
+2719 => x"d40bf705",
+2720 => x"06840105",
+2721 => x"0504758c",
+2722 => x"2a80ee05",
+2723 => x"5380d474",
+2724 => x"27ff0509",
+2725 => x"bc0bf705",
+2726 => x"06840105",
+2727 => x"0504758f",
+2728 => x"2a80f705",
+2729 => x"5382d474",
+2730 => x"27ff0509",
+2731 => x"a40bf705",
+2732 => x"06840105",
+2733 => x"05047592",
+2734 => x"2a80fc05",
+2735 => x"538ad474",
+2736 => x"27ff0509",
+2737 => x"8c0bf705",
+2738 => x"06840105",
+2739 => x"050480fe",
+2740 => x"53721010",
+2741 => x"10818bac",
+2742 => x"05881108",
+2743 => x"55557309",
+2744 => x"81057505",
+2745 => x"09708105",
+2746 => x"09060a81",
+2747 => x"06ff0509",
+2748 => x"83a90bf7",
+2749 => x"05068401",
+2750 => x"05050484",
+2751 => x"1408fc06",
+2752 => x"59757927",
+2753 => x"ff0509aa",
+2754 => x"0bf70506",
+2755 => x"84010505",
+2756 => x"04881408",
+2757 => x"54730981",
+2758 => x"05750509",
+2759 => x"70810509",
+2760 => x"060a0981",
+2761 => x"06ff0509",
+2762 => x"d20bf705",
+2763 => x"06840105",
+2764 => x"05048c14",
+2765 => x"08708c19",
+2766 => x"0c748819",
+2767 => x"0c778812",
+2768 => x"0c55768c",
+2769 => x"150c7951",
+2770 => x"f6cb3f8b",
+2771 => x"3d0d0476",
+2772 => x"08777131",
+2773 => x"58760588",
+2774 => x"18085656",
+2775 => x"74098105",
+2776 => x"818bb405",
+2777 => x"09708105",
+2778 => x"09060a81",
+2779 => x"06ff0509",
+2780 => x"80f30bf7",
+2781 => x"05068401",
+2782 => x"0505048c",
+2783 => x"1708708c",
+2784 => x"170c7588",
+2785 => x"120c53fc",
+2786 => x"8d398814",
+2787 => x"088c1508",
+2788 => x"708c130c",
+2789 => x"5988190c",
+2790 => x"fce93975",
+2791 => x"832a7054",
+2792 => x"54807424",
+2793 => x"ff050981",
+2794 => x"c00bf705",
+2795 => x"06840105",
+2796 => x"05047282",
+2797 => x"2c81712b",
+2798 => x"818bb008",
+2799 => x"07818bac",
+2800 => x"0b84050c",
+2801 => x"74101010",
+2802 => x"818bac05",
+2803 => x"88110871",
+2804 => x"8c1b0c70",
+2805 => x"881b0c79",
+2806 => x"88130c56",
+2807 => x"5a55768c",
+2808 => x"150cfee2",
+2809 => x"398159fb",
+2810 => x"ad397716",
+2811 => x"73810654",
+2812 => x"55720970",
+2813 => x"81050906",
+2814 => x"0a098106",
+2815 => x"ff0509a0",
+2816 => x"0bf70506",
+2817 => x"84010505",
+2818 => x"04760877",
+2819 => x"71315875",
+2820 => x"058c1808",
+2821 => x"88190871",
+2822 => x"8c120c88",
+2823 => x"120c5555",
+2824 => x"74810784",
+2825 => x"180c7681",
+2826 => x"8bac0b88",
+2827 => x"050c818b",
+2828 => x"a8087526",
+2829 => x"ff0509fe",
+2830 => x"8d0bf705",
+2831 => x"06840105",
+2832 => x"0504818b",
+2833 => x"a4085279",
+2834 => x"51f7d23f",
+2835 => x"7951f4c5",
+2836 => x"3ffdf839",
+2837 => x"81778c17",
+2838 => x"0c778817",
+2839 => x"0c758c19",
+2840 => x"0c758819",
+2841 => x"0c59fb9b",
+2842 => x"39831470",
+2843 => x"822c8171",
+2844 => x"2b818bb0",
+2845 => x"0807818b",
+2846 => x"ac0b8405",
+2847 => x"0c751010",
+2848 => x"10818bac",
+2849 => x"05881108",
+2850 => x"718c1c0c",
+2851 => x"70881c0c",
+2852 => x"7a88130c",
+2853 => x"575b5653",
+2854 => x"fec43980",
+2855 => x"7324ff05",
+2856 => x"09ab0bf7",
+2857 => x"05068401",
+2858 => x"05050472",
+2859 => x"822c8171",
+2860 => x"2b818bb0",
+2861 => x"0807818b",
+2862 => x"ac0b8405",
+2863 => x"0c58748c",
+2864 => x"180c7388",
+2865 => x"180c7688",
+2866 => x"160cfcf6",
+2867 => x"39831370",
+2868 => x"822c8171",
+2869 => x"2b818bb0",
+2870 => x"0807818b",
+2871 => x"ac0b8405",
+2872 => x"0c5953da",
+2873 => x"39707070",
+2874 => x"81eaf808",
+2875 => x"51700970",
+2876 => x"81050906",
+2877 => x"0a098106",
+2878 => x"ff050992",
+2879 => x"0bf70506",
+2880 => x"84010505",
+2881 => x"0481eb80",
+2882 => x"7081eaf8",
+2883 => x"0c517411",
+2884 => x"52ff5371",
+2885 => x"87fb8080",
+2886 => x"26ff0509",
+2887 => x"900bf705",
+2888 => x"06840105",
+2889 => x"05047181",
+2890 => x"eaf80c70",
+2891 => x"5372800c",
+2892 => x"50505004",
+2893 => x"70707070",
+2894 => x"800b818a",
+2895 => x"dc085454",
+2896 => x"72098105",
+2897 => x"81050970",
+2898 => x"81050906",
+2899 => x"0a8106ff",
+2900 => x"0509a50b",
+2901 => x"f7050684",
+2902 => x"01050504",
+2903 => x"7381eafc",
+2904 => x"0cffb7b3",
+2905 => x"3fffad98",
+2906 => x"3f819ab4",
+2907 => x"528151c5",
+2908 => x"803f8008",
+2909 => x"518cbe3f",
+2910 => x"7281eafc",
+2911 => x"0cffb797",
+2912 => x"3fffacfc",
+2913 => x"3f819ab4",
+2914 => x"528151c4",
+2915 => x"e43f8008",
+2916 => x"518ca23f",
+2917 => x"00ff3900",
+2918 => x"ff39f53d",
+2919 => x"0d7e6081",
+2920 => x"eafc0870",
+2921 => x"5b585b5b",
+2922 => x"75097081",
+2923 => x"0509060a",
+2924 => x"098106ff",
+2925 => x"050980fb",
+2926 => x"0bf70506",
+2927 => x"84010505",
+2928 => x"04777a25",
+2929 => x"ff050980",
+2930 => x"cc0bf705",
+2931 => x"06840105",
+2932 => x"0504771b",
+2933 => x"70337081",
+2934 => x"ff065858",
+2935 => x"59750981",
+2936 => x"058a0509",
+2937 => x"70810509",
+2938 => x"060a8106",
+2939 => x"ff0509ac",
+2940 => x"0bf70506",
+2941 => x"84010505",
+2942 => x"047681ff",
+2943 => x"0651ffb5",
+2944 => x"e23f8118",
+2945 => x"58797824",
+2946 => x"ff0509c6",
+2947 => x"0bf70506",
+2948 => x"84010505",
+2949 => x"0479800c",
+2950 => x"8d3d0d04",
+2951 => x"8d51ffb5",
+2952 => x"c23f7833",
+2953 => x"7081ff06",
+2954 => x"5257ffb5",
+2955 => x"b63f8118",
+2956 => x"58d33979",
+2957 => x"557a547d",
+2958 => x"5385528d",
+2959 => x"3dfc0551",
+2960 => x"ffb4eb3f",
+2961 => x"8008568a",
+2962 => x"e53f7b80",
+2963 => x"080c7580",
+2964 => x"0c8d3d0d",
+2965 => x"04f63d0d",
+2966 => x"7d7f81ea",
+2967 => x"fc08705a",
+2968 => x"585a5a75",
+2969 => x"09708105",
+2970 => x"09060a09",
+2971 => x"8106ff05",
+2972 => x"0981930b",
+2973 => x"f7050684",
+2974 => x"01050504",
+2975 => x"767925ff",
+2976 => x"050980f4",
+2977 => x"0bf70506",
+2978 => x"84010505",
+2979 => x"04761a58",
+2980 => x"ffb49d3f",
+2981 => x"80087834",
+2982 => x"800b8008",
+2983 => x"81ff0657",
+2984 => x"58750981",
+2985 => x"058a0509",
+2986 => x"70810509",
+2987 => x"060a8106",
+2988 => x"ff050980",
+2989 => x"cc0bf705",
+2990 => x"06840105",
+2991 => x"0504758d",
+2992 => x"32703070",
+2993 => x"80257a07",
+2994 => x"51515675",
+2995 => x"09708105",
+2996 => x"09060a09",
+2997 => x"8106ff05",
+2998 => x"0980cd0b",
+2999 => x"f7050684",
+3000 => x"01050504",
+3001 => x"81175778",
+3002 => x"7724ff05",
+3003 => x"09ff9e0b",
+3004 => x"f7050684",
+3005 => x"01050504",
+3006 => x"76567580",
+3007 => x"0c8c3d0d",
+3008 => x"048158ff",
+3009 => x"b9397855",
+3010 => x"79547c53",
+3011 => x"84528c3d",
+3012 => x"fc0551ff",
+3013 => x"b3983f80",
+3014 => x"08568992",
+3015 => x"3f7a8008",
+3016 => x"0c75800c",
+3017 => x"8c3d0d04",
+3018 => x"811756ce",
+3019 => x"39f93d0d",
+3020 => x"795781ea",
+3021 => x"fc080970",
+3022 => x"81050906",
+3023 => x"0a8106ff",
+3024 => x"0509b50b",
+3025 => x"f7050684",
+3026 => x"01050504",
+3027 => x"76518d88",
+3028 => x"3f7b567a",
+3029 => x"55800881",
+3030 => x"05547653",
+3031 => x"8252893d",
+3032 => x"fc0551ff",
+3033 => x"b2c83f80",
+3034 => x"085788c2",
+3035 => x"3f778008",
+3036 => x"0c76800c",
+3037 => x"893d0d04",
+3038 => x"88b43f85",
+3039 => x"0b80080c",
+3040 => x"ff0b800c",
+3041 => x"893d0d04",
+3042 => x"fb3d0d81",
+3043 => x"eafc0870",
+3044 => x"56547309",
+3045 => x"70810509",
+3046 => x"060a0981",
+3047 => x"06ff0509",
+3048 => x"900bf705",
+3049 => x"06840105",
+3050 => x"05047480",
+3051 => x"0c873d0d",
+3052 => x"04775383",
+3053 => x"52873dfc",
+3054 => x"0551ffb1",
+3055 => x"f13f8008",
+3056 => x"5487eb3f",
+3057 => x"7580080c",
+3058 => x"73800c87",
+3059 => x"3d0d04ff",
+3060 => x"0b800c04",
+3061 => x"fb3d0d77",
+3062 => x"5581eafc",
+3063 => x"08097081",
+3064 => x"0509060a",
+3065 => x"8106ff05",
+3066 => x"09b10bf7",
+3067 => x"05068401",
+3068 => x"05050474",
+3069 => x"518be13f",
+3070 => x"80088105",
+3071 => x"54745387",
+3072 => x"52873dfc",
+3073 => x"0551ffb1",
+3074 => x"a53f8008",
+3075 => x"55879f3f",
+3076 => x"7580080c",
+3077 => x"74800c87",
+3078 => x"3d0d0487",
+3079 => x"913f850b",
+3080 => x"80080cff",
+3081 => x"0b800c87",
+3082 => x"3d0d04fa",
+3083 => x"3d0d81ea",
+3084 => x"fc080970",
+3085 => x"81050906",
+3086 => x"0a8106ff",
+3087 => x"0509ab0b",
+3088 => x"f7050684",
+3089 => x"01050504",
+3090 => x"7a557954",
+3091 => x"78538652",
+3092 => x"883dfc05",
+3093 => x"51ffb0d6",
+3094 => x"3f800856",
+3095 => x"86d03f76",
+3096 => x"80080c75",
+3097 => x"800c883d",
+3098 => x"0d0486c2",
+3099 => x"3f9d0b80",
+3100 => x"080cff0b",
+3101 => x"800c883d",
+3102 => x"0d04f73d",
+3103 => x"0d7b7d5b",
+3104 => x"59bc5380",
+3105 => x"52795188",
+3106 => x"cd3f8070",
+3107 => x"56579856",
+3108 => x"74197033",
+3109 => x"70782b79",
+3110 => x"078118f8",
+3111 => x"1a5a5859",
+3112 => x"55588475",
+3113 => x"24ff0509",
+3114 => x"e70bf705",
+3115 => x"06840105",
+3116 => x"0504767a",
+3117 => x"23841958",
+3118 => x"80705657",
+3119 => x"98567418",
+3120 => x"70337078",
+3121 => x"2b790781",
+3122 => x"18f81a5a",
+3123 => x"58595154",
+3124 => x"847524ff",
+3125 => x"0509e70b",
+3126 => x"f7050684",
+3127 => x"01050504",
+3128 => x"76821b23",
+3129 => x"88195880",
+3130 => x"70565798",
+3131 => x"56741870",
+3132 => x"3370782b",
+3133 => x"79078118",
+3134 => x"f81a5a58",
+3135 => x"59515484",
+3136 => x"7524ff05",
+3137 => x"09e70bf7",
+3138 => x"05068401",
+3139 => x"05050476",
+3140 => x"841b0c8c",
+3141 => x"19588070",
+3142 => x"56579856",
+3143 => x"74187033",
+3144 => x"70782b79",
+3145 => x"078118f8",
+3146 => x"1a5a5859",
+3147 => x"51548475",
+3148 => x"24ff0509",
+3149 => x"e70bf705",
+3150 => x"06840105",
+3151 => x"05047688",
+3152 => x"1b239019",
+3153 => x"58807056",
+3154 => x"57985674",
+3155 => x"18703370",
+3156 => x"782b7907",
+3157 => x"8118f81a",
+3158 => x"5a585951",
+3159 => x"54847524",
+3160 => x"ff0509e7",
+3161 => x"0bf70506",
+3162 => x"84010505",
+3163 => x"04768a1b",
+3164 => x"23941958",
+3165 => x"80705657",
+3166 => x"98567418",
+3167 => x"70337078",
+3168 => x"2b790781",
+3169 => x"18f81a5a",
+3170 => x"58595154",
+3171 => x"847524ff",
+3172 => x"0509e70b",
+3173 => x"f7050684",
+3174 => x"01050504",
+3175 => x"768c1b23",
+3176 => x"98195880",
+3177 => x"70565798",
+3178 => x"56741870",
+3179 => x"3370782b",
+3180 => x"79078118",
+3181 => x"f81a5a58",
+3182 => x"59515484",
+3183 => x"7524ff05",
+3184 => x"09e70bf7",
+3185 => x"05068401",
+3186 => x"05050476",
+3187 => x"8e1b239c",
+3188 => x"19588070",
+3189 => x"5657b856",
+3190 => x"74187033",
+3191 => x"70782b79",
+3192 => x"078118f8",
+3193 => x"1a5a5859",
+3194 => x"5a548875",
+3195 => x"24ff0509",
+3196 => x"e70bf705",
+3197 => x"06840105",
+3198 => x"05047690",
+3199 => x"1b0c8b3d",
+3200 => x"0d04e93d",
+3201 => x"0d6a81ea",
+3202 => x"fc085757",
+3203 => x"75097081",
+3204 => x"0509060a",
+3205 => x"098106ff",
+3206 => x"05099b0b",
+3207 => x"f7050684",
+3208 => x"01050504",
+3209 => x"80c0800b",
+3210 => x"84180c75",
+3211 => x"ac180c75",
+3212 => x"800c993d",
+3213 => x"0d04893d",
+3214 => x"70556a54",
+3215 => x"558a5299",
+3216 => x"3dffbc05",
+3217 => x"51fface6",
+3218 => x"3f800877",
+3219 => x"53755256",
+3220 => x"fca83f82",
+3221 => x"d93f7780",
+3222 => x"080c7580",
+3223 => x"0c993d0d",
+3224 => x"04e93d0d",
+3225 => x"695781ea",
+3226 => x"fc080970",
+3227 => x"81050906",
+3228 => x"0a8106ff",
+3229 => x"0509be0b",
+3230 => x"f7050684",
+3231 => x"01050504",
+3232 => x"765186d4",
+3233 => x"3f893d70",
+3234 => x"56800881",
+3235 => x"05557754",
+3236 => x"568f5299",
+3237 => x"3dffbc05",
+3238 => x"51ffac92",
+3239 => x"3f80086b",
+3240 => x"53765257",
+3241 => x"fbd43f82",
+3242 => x"853f7780",
+3243 => x"080c7680",
+3244 => x"0c993d0d",
+3245 => x"0481f73f",
+3246 => x"850b8008",
+3247 => x"0cff0b80",
+3248 => x"0c993d0d",
+3249 => x"04fc3d0d",
+3250 => x"815481ea",
+3251 => x"fc080970",
+3252 => x"81050906",
+3253 => x"0a098106",
+3254 => x"ff050990",
+3255 => x"0bf70506",
+3256 => x"84010505",
+3257 => x"0473800c",
+3258 => x"863d0d04",
+3259 => x"765397b9",
+3260 => x"52863dfc",
+3261 => x"0551ffab",
+3262 => x"b53f8008",
+3263 => x"5481af3f",
+3264 => x"7480080c",
+3265 => x"73800c86",
+3266 => x"3d0d04f4",
+3267 => x"3d0d7e81",
+3268 => x"9ae00870",
+3269 => x"0881ff06",
+3270 => x"913df805",
+3271 => x"54515959",
+3272 => x"ffacf63f",
+3273 => x"77578054",
+3274 => x"76557b7d",
+3275 => x"58527653",
+3276 => x"8e3df005",
+3277 => x"5186e23f",
+3278 => x"797b5879",
+3279 => x"0c76841a",
+3280 => x"0c78800c",
+3281 => x"8e3d0d04",
+3282 => x"f43d0d7e",
+3283 => x"819ae008",
+3284 => x"70087081",
+3285 => x"ff06923d",
+3286 => x"f8055551",
+3287 => x"5a5759ff",
+3288 => x"acb73f77",
+3289 => x"57800b8b",
+3290 => x"3d595476",
+3291 => x"557b7d58",
+3292 => x"52765377",
+3293 => x"5186a23f",
+3294 => x"8056bd84",
+3295 => x"c0765555",
+3296 => x"797b5852",
+3297 => x"76537751",
+3298 => x"868f3f7a",
+3299 => x"57780970",
+3300 => x"81050906",
+3301 => x"0a8106ff",
+3302 => x"05098c0b",
+3303 => x"f7050684",
+3304 => x"01050504",
+3305 => x"76790c76",
+3306 => x"800c8e3d",
+3307 => x"0d048193",
+3308 => x"b408800c",
+3309 => x"04f73d0d",
+3310 => x"7b8193b4",
+3311 => x"0882c811",
+3312 => x"085a545a",
+3313 => x"77097081",
+3314 => x"0509060a",
+3315 => x"8106ff05",
+3316 => x"0981ac0b",
+3317 => x"f7050684",
+3318 => x"01050504",
+3319 => x"81881884",
+3320 => x"1908ff05",
+3321 => x"81712b59",
+3322 => x"55598074",
+3323 => x"24ff0509",
+3324 => x"81d20bf7",
+3325 => x"05068401",
+3326 => x"05050480",
+3327 => x"7424ff05",
+3328 => x"0980db0b",
+3329 => x"f7050684",
+3330 => x"01050504",
+3331 => x"73822b78",
+3332 => x"11880556",
+3333 => x"56818019",
+3334 => x"08770653",
+3335 => x"72097081",
+3336 => x"0509060a",
+3337 => x"8106ff05",
+3338 => x"0980f30b",
+3339 => x"f7050684",
+3340 => x"01050504",
+3341 => x"78167008",
+3342 => x"53537951",
+3343 => x"74085372",
+3344 => x"2dff14fc",
+3345 => x"17fc1779",
+3346 => x"812c5a57",
+3347 => x"57547380",
+3348 => x"25ff0509",
+3349 => x"c00bf705",
+3350 => x"06840105",
+3351 => x"05047708",
+3352 => x"58770970",
+3353 => x"81050906",
+3354 => x"0a098106",
+3355 => x"ff0509fe",
+3356 => x"eb0bf705",
+3357 => x"06840105",
+3358 => x"05048193",
+3359 => x"b40853bc",
+3360 => x"13080970",
+3361 => x"81050906",
+3362 => x"0a098106",
+3363 => x"ff0509b9",
+3364 => x"0bf70506",
+3365 => x"84010505",
+3366 => x"047951f1",
+3367 => x"f73f7408",
+3368 => x"53722dff",
+3369 => x"14fc17fc",
+3370 => x"1779812c",
+3371 => x"5a575754",
+3372 => x"738025ff",
+3373 => x"0509fedd",
+3374 => x"0bf70506",
+3375 => x"84010505",
+3376 => x"04ff9b39",
+3377 => x"8057feb3",
+3378 => x"397251bc",
+3379 => x"13085473",
+3380 => x"2d7951f1",
+3381 => x"bf3ffb3d",
+3382 => x"0d777a71",
+3383 => x"028c05a3",
+3384 => x"05335854",
+3385 => x"54568373",
+3386 => x"27ff0509",
+3387 => x"819d0bf7",
+3388 => x"05068401",
+3389 => x"05050475",
+3390 => x"83065170",
+3391 => x"09708105",
+3392 => x"09060a09",
+3393 => x"8106ff05",
+3394 => x"0981800b",
+3395 => x"f7050684",
+3396 => x"01050504",
+3397 => x"74882b75",
+3398 => x"07707190",
+3399 => x"2b075551",
+3400 => x"8f7327ff",
+3401 => x"0509ba0b",
+3402 => x"f7050684",
+3403 => x"01050504",
+3404 => x"73727084",
+3405 => x"05540c71",
+3406 => x"74717084",
+3407 => x"05530c74",
+3408 => x"71708405",
+3409 => x"530c7471",
+3410 => x"70840553",
+3411 => x"0cf01454",
+3412 => x"52728f26",
+3413 => x"ff0509d8",
+3414 => x"0bf70506",
+3415 => x"84010505",
+3416 => x"04837327",
+3417 => x"ff0509a3",
+3418 => x"0bf70506",
+3419 => x"84010505",
+3420 => x"04737270",
+3421 => x"8405540c",
+3422 => x"fc135372",
+3423 => x"8326ff05",
+3424 => x"09ef0bf7",
+3425 => x"05068401",
+3426 => x"050504ff",
+3427 => x"13517009",
+3428 => x"8105ff05",
+3429 => x"09708105",
+3430 => x"09060a81",
+3431 => x"06ff0509",
+3432 => x"b00bf705",
+3433 => x"06840105",
+3434 => x"05047472",
+3435 => x"70810554",
+3436 => x"34ff1151",
+3437 => x"70098105",
+3438 => x"ff050970",
+3439 => x"81050906",
+3440 => x"0a098106",
+3441 => x"ff0509e2",
+3442 => x"0bf70506",
+3443 => x"84010505",
+3444 => x"0475800c",
+3445 => x"873d0d04",
+3446 => x"70707070",
+3447 => x"75707183",
+3448 => x"06535552",
+3449 => x"70097081",
+3450 => x"0509060a",
+3451 => x"098106ff",
+3452 => x"050980e3",
+3453 => x"0bf70506",
+3454 => x"84010505",
+3455 => x"04717008",
+3456 => x"7009f7fb",
+3457 => x"fdff1206",
+3458 => x"f8848281",
+3459 => x"80065452",
+3460 => x"53710970",
+3461 => x"81050906",
+3462 => x"0a098106",
+3463 => x"ff0509b5",
+3464 => x"0bf70506",
+3465 => x"84010505",
+3466 => x"04841370",
+3467 => x"087009f7",
+3468 => x"fbfdff12",
+3469 => x"06f88482",
+3470 => x"81800654",
+3471 => x"52537109",
+3472 => x"70810509",
+3473 => x"060a8106",
+3474 => x"ff0509dd",
+3475 => x"0bf70506",
+3476 => x"84010505",
+3477 => x"04725271",
+3478 => x"33537209",
+3479 => x"70810509",
+3480 => x"060a8106",
+3481 => x"ff0509a7",
+3482 => x"0bf70506",
+3483 => x"84010505",
+3484 => x"04811270",
+3485 => x"33545272",
+3486 => x"09708105",
+3487 => x"09060a09",
+3488 => x"8106ff05",
+3489 => x"09eb0bf7",
+3490 => x"05068401",
+3491 => x"05050471",
+3492 => x"7431800c",
+3493 => x"50505050",
+3494 => x"04e43d0d",
+3495 => x"6ea13d08",
+3496 => x"a33d0859",
+3497 => x"575f8076",
+3498 => x"4d774ea3",
+3499 => x"3d08a53d",
+3500 => x"08574b75",
+3501 => x"4c5e7d6c",
+3502 => x"24ff0509",
+3503 => x"8b860bf7",
+3504 => x"05068401",
+3505 => x"05050480",
+3506 => x"6a24ff05",
+3507 => x"098b9b0b",
+3508 => x"f7050684",
+3509 => x"01050504",
+3510 => x"696b5856",
+3511 => x"6b6d5d46",
+3512 => x"7b477544",
+3513 => x"76456464",
+3514 => x"68685c5c",
+3515 => x"56567409",
+3516 => x"70810509",
+3517 => x"060a0981",
+3518 => x"06ff0509",
+3519 => x"82ee0bf7",
+3520 => x"05068401",
+3521 => x"05050478",
+3522 => x"7627ff05",
+3523 => x"09848f0b",
+3524 => x"f7050684",
+3525 => x"01050504",
+3526 => x"7581ff26",
+3527 => x"832b5583",
+3528 => x"ffff7627",
+3529 => x"ff05099f",
+3530 => x"0bf70506",
+3531 => x"84010505",
+3532 => x"049055fe",
+3533 => x"800a7627",
+3534 => x"ff05098b",
+3535 => x"0bf70506",
+3536 => x"84010505",
+3537 => x"04985575",
+3538 => x"752a8188",
+3539 => x"88057033",
+3540 => x"a0773171",
+3541 => x"31575557",
+3542 => x"74097081",
+3543 => x"0509060a",
+3544 => x"8106ff05",
+3545 => x"099d0bf7",
+3546 => x"05068401",
+3547 => x"05050475",
+3548 => x"752ba076",
+3549 => x"317a772b",
+3550 => x"7c722a07",
+3551 => x"7c782b5d",
+3552 => x"5b595675",
+3553 => x"902a7683",
+3554 => x"ffff0671",
+3555 => x"547a5359",
+3556 => x"578c803f",
+3557 => x"80085b8b",
+3558 => x"e93f8008",
+3559 => x"80087929",
+3560 => x"7c902b7c",
+3561 => x"902a0756",
+3562 => x"56597375",
+3563 => x"27ff0509",
+3564 => x"b20bf705",
+3565 => x"06840105",
+3566 => x"05048008",
+3567 => x"ff057615",
+3568 => x"55597574",
+3569 => x"26ff0509",
+3570 => x"9a0bf705",
+3571 => x"06840105",
+3572 => x"05047474",
+3573 => x"26ff0509",
+3574 => x"8b9f0bf7",
+3575 => x"05068401",
+3576 => x"05050476",
+3577 => x"52737531",
+3578 => x"518ba83f",
+3579 => x"8008558b",
+3580 => x"913f8008",
+3581 => x"80087929",
+3582 => x"7b83ffff",
+3583 => x"0677902b",
+3584 => x"07565957",
+3585 => x"737827ff",
+3586 => x"0509a90b",
+3587 => x"f7050684",
+3588 => x"01050504",
+3589 => x"8008ff05",
+3590 => x"76155557",
+3591 => x"757426ff",
+3592 => x"0509910b",
+3593 => x"f7050684",
+3594 => x"01050504",
+3595 => x"77742677",
+3596 => x"71315856",
+3597 => x"78902b77",
+3598 => x"0758805b",
+3599 => x"7a407741",
+3600 => x"7f615654",
+3601 => x"7d097081",
+3602 => x"0509060a",
+3603 => x"098106ff",
+3604 => x"050981ac",
+3605 => x"0bf70506",
+3606 => x"84010505",
+3607 => x"04737f0c",
+3608 => x"747f8405",
+3609 => x"0c7e800c",
+3610 => x"9e3d0d04",
+3611 => x"80705c58",
+3612 => x"747926ff",
+3613 => x"0509c50b",
+3614 => x"f7050684",
+3615 => x"01050504",
+3616 => x"7481ff26",
+3617 => x"832b5774",
+3618 => x"83ffff26",
+3619 => x"ff050983",
+3620 => x"e90bf705",
+3621 => x"06840105",
+3622 => x"05047477",
+3623 => x"2a818888",
+3624 => x"057033a0",
+3625 => x"79317131",
+3626 => x"595c5d76",
+3627 => x"09708105",
+3628 => x"09060a09",
+3629 => x"8106ff05",
+3630 => x"0983ff0b",
+3631 => x"f7050684",
+3632 => x"01050504",
+3633 => x"76547479",
+3634 => x"27ff0509",
+3635 => x"8b0bf705",
+3636 => x"06840105",
+3637 => x"05048154",
+3638 => x"79762774",
+3639 => x"07598158",
+3640 => x"78097081",
+3641 => x"0509060a",
+3642 => x"098106ff",
+3643 => x"0509feca",
+3644 => x"0bf70506",
+3645 => x"84010505",
+3646 => x"04765880",
+3647 => x"5bfebd39",
+3648 => x"73527453",
+3649 => x"9e3de805",
+3650 => x"51ffbff2",
+3651 => x"3f676956",
+3652 => x"7f0c747f",
+3653 => x"84050c7e",
+3654 => x"800c9e3d",
+3655 => x"0d047509",
+3656 => x"70810509",
+3657 => x"060a8106",
+3658 => x"ff050982",
+3659 => x"c00bf705",
+3660 => x"06840105",
+3661 => x"05047581",
+3662 => x"ff26832b",
+3663 => x"5583ffff",
+3664 => x"7627ff05",
+3665 => x"099f0bf7",
+3666 => x"05068401",
+3667 => x"05050490",
+3668 => x"55fe800a",
+3669 => x"7627ff05",
+3670 => x"098b0bf7",
+3671 => x"05068401",
+3672 => x"05050498",
+3673 => x"5575752a",
+3674 => x"81888805",
+3675 => x"7033a077",
+3676 => x"31713157",
+3677 => x"5e547409",
+3678 => x"70810509",
+3679 => x"060a0981",
+3680 => x"06ff0509",
+3681 => x"86810bf7",
+3682 => x"05068401",
+3683 => x"05050478",
+3684 => x"76315481",
+3685 => x"76902a77",
+3686 => x"83ffff06",
+3687 => x"5f5d5b7b",
+3688 => x"52735187",
+3689 => x"ee3f8008",
+3690 => x"5787d73f",
+3691 => x"80088008",
+3692 => x"7e297890",
+3693 => x"2b7c902a",
+3694 => x"07565659",
+3695 => x"737527ff",
+3696 => x"0509b20b",
+3697 => x"f7050684",
+3698 => x"01050504",
+3699 => x"8008ff05",
+3700 => x"76155559",
+3701 => x"757426ff",
+3702 => x"05099a0b",
+3703 => x"f7050684",
+3704 => x"01050504",
+3705 => x"747426ff",
+3706 => x"05098784",
+3707 => x"0bf70506",
+3708 => x"84010505",
+3709 => x"047b5273",
+3710 => x"75315187",
+3711 => x"963f8008",
+3712 => x"5586ff3f",
+3713 => x"80088008",
+3714 => x"7e297b83",
+3715 => x"ffff0677",
+3716 => x"902b0756",
+3717 => x"59577378",
+3718 => x"27ff0509",
+3719 => x"a90bf705",
+3720 => x"06840105",
+3721 => x"05048008",
+3722 => x"ff057615",
+3723 => x"55577574",
+3724 => x"26ff0509",
+3725 => x"910bf705",
+3726 => x"06840105",
+3727 => x"05047774",
+3728 => x"26777131",
+3729 => x"585a7890",
+3730 => x"2b77077b",
+3731 => x"41417f61",
+3732 => x"56547d09",
+3733 => x"70810509",
+3734 => x"060a8106",
+3735 => x"ff0509fb",
+3736 => x"fc0bf705",
+3737 => x"06840105",
+3738 => x"0504fd94",
+3739 => x"39755281",
+3740 => x"51868f3f",
+3741 => x"800856fd",
+3742 => x"bd399057",
+3743 => x"fe800a75",
+3744 => x"27ff0509",
+3745 => x"fc940bf7",
+3746 => x"05068401",
+3747 => x"05050498",
+3748 => x"75712a81",
+3749 => x"88880570",
+3750 => x"33a07331",
+3751 => x"7131535d",
+3752 => x"5e577609",
+3753 => x"70810509",
+3754 => x"060a8106",
+3755 => x"ff0509fc",
+3756 => x"930bf705",
+3757 => x"06840105",
+3758 => x"0504a077",
+3759 => x"3175782b",
+3760 => x"77722a07",
+3761 => x"77792b7b",
+3762 => x"7a2b7d74",
+3763 => x"2a077d7b",
+3764 => x"2b73902a",
+3765 => x"7483ffff",
+3766 => x"0671597f",
+3767 => x"772a585e",
+3768 => x"5c415f58",
+3769 => x"5c5485ab",
+3770 => x"3f800854",
+3771 => x"85943f80",
+3772 => x"08800879",
+3773 => x"2975902b",
+3774 => x"7e902a07",
+3775 => x"56565973",
+3776 => x"7527ff05",
+3777 => x"09b70bf7",
+3778 => x"05068401",
+3779 => x"05050480",
+3780 => x"08ff057b",
+3781 => x"1555597a",
+3782 => x"7426ff05",
+3783 => x"099f0bf7",
+3784 => x"05068401",
+3785 => x"05050473",
+3786 => x"7527ff05",
+3787 => x"098f0bf7",
+3788 => x"05068401",
+3789 => x"050504ff",
+3790 => x"197b1555",
+3791 => x"59765273",
+3792 => x"75315184",
+3793 => x"ce3f8008",
+3794 => x"5584b73f",
+3795 => x"80088008",
+3796 => x"79297d83",
+3797 => x"ffff0677",
+3798 => x"902b0756",
+3799 => x"59577378",
+3800 => x"27ff0509",
+3801 => x"b70bf705",
+3802 => x"06840105",
+3803 => x"05048008",
+3804 => x"ff057b15",
+3805 => x"55577a74",
+3806 => x"26ff0509",
+3807 => x"9f0bf705",
+3808 => x"06840105",
+3809 => x"05047378",
+3810 => x"27ff0509",
+3811 => x"8f0bf705",
+3812 => x"06840105",
+3813 => x"0504ff17",
+3814 => x"7b155557",
+3815 => x"73783179",
+3816 => x"902b7807",
+3817 => x"7083ffff",
+3818 => x"0671902a",
+3819 => x"7983ffff",
+3820 => x"067a902a",
+3821 => x"73722973",
+3822 => x"73297473",
+3823 => x"29767429",
+3824 => x"73902a05",
+3825 => x"72055755",
+3826 => x"435f5b58",
+3827 => x"5a57595a",
+3828 => x"747c27ff",
+3829 => x"05098e0b",
+3830 => x"f7050684",
+3831 => x"01050504",
+3832 => x"84808017",
+3833 => x"5774902a",
+3834 => x"177983ff",
+3835 => x"ff067684",
+3836 => x"80802905",
+3837 => x"5757767a",
+3838 => x"26ff0509",
+3839 => x"bf0bf705",
+3840 => x"06840105",
+3841 => x"0504767a",
+3842 => x"32703070",
+3843 => x"72078025",
+3844 => x"565a5b7c",
+3845 => x"7627ff05",
+3846 => x"09f89f0b",
+3847 => x"f7050684",
+3848 => x"01050504",
+3849 => x"73097081",
+3850 => x"0509060a",
+3851 => x"8106ff05",
+3852 => x"09f8870b",
+3853 => x"f7050684",
+3854 => x"01050504",
+3855 => x"ff185880",
+3856 => x"5bf7f939",
+3857 => x"ff765377",
+3858 => x"549f3de8",
+3859 => x"05525eff",
+3860 => x"b9ac3f67",
+3861 => x"69574c75",
+3862 => x"4d698025",
+3863 => x"ff0509f4",
+3864 => x"f70bf705",
+3865 => x"06840105",
+3866 => x"05047d09",
+3867 => x"6a6c5c53",
+3868 => x"7a549f3d",
+3869 => x"e805525e",
+3870 => x"ffb9833f",
+3871 => x"6769714c",
+3872 => x"704d5856",
+3873 => x"f4d639a0",
+3874 => x"75317676",
+3875 => x"2b7a772b",
+3876 => x"7c732a07",
+3877 => x"7c782b72",
+3878 => x"902a7383",
+3879 => x"ffff0671",
+3880 => x"587e762a",
+3881 => x"5742405d",
+3882 => x"5d575881",
+3883 => x"e63f8008",
+3884 => x"5781cf3f",
+3885 => x"80088008",
+3886 => x"7e297890",
+3887 => x"2b7d902a",
+3888 => x"07565659",
+3889 => x"737527ff",
+3890 => x"0509b70b",
+3891 => x"f7050684",
+3892 => x"01050504",
+3893 => x"8008ff05",
+3894 => x"76155559",
+3895 => x"757426ff",
+3896 => x"05099f0b",
+3897 => x"f7050684",
+3898 => x"01050504",
+3899 => x"737527ff",
+3900 => x"05098f0b",
+3901 => x"f7050684",
+3902 => x"01050504",
+3903 => x"ff197615",
+3904 => x"55597b52",
+3905 => x"73753151",
+3906 => x"81893f80",
+3907 => x"085580f2",
+3908 => x"3f800880",
+3909 => x"087e297c",
+3910 => x"83ffff06",
+3911 => x"7078902b",
+3912 => x"07515658",
+3913 => x"58737727",
+3914 => x"ff0509b7",
+3915 => x"0bf70506",
+3916 => x"84010505",
+3917 => x"048008ff",
+3918 => x"05761555",
+3919 => x"58757426",
+3920 => x"ff05099f",
+3921 => x"0bf70506",
+3922 => x"84010505",
+3923 => x"04737727",
+3924 => x"ff05098f",
+3925 => x"0bf70506",
+3926 => x"84010505",
+3927 => x"04ff1876",
+3928 => x"15555878",
+3929 => x"902b7807",
+3930 => x"74783155",
+3931 => x"5bf8b039",
+3932 => x"ff197615",
+3933 => x"5559f8fd",
+3934 => x"39ff1976",
+3935 => x"155559f4",
+3936 => x"e2397070",
+3937 => x"70805375",
+3938 => x"527451ff",
+3939 => x"b9d13f50",
+3940 => x"50500470",
+3941 => x"70708153",
+3942 => x"75527451",
+3943 => x"ffb9c03f",
+3944 => x"50505004",
+3945 => x"7070819a",
+3946 => x"bc0bfc05",
+3947 => x"70085252",
+3948 => x"70098105",
+3949 => x"ff050970",
+3950 => x"81050906",
+3951 => x"0a8106ff",
+3952 => x"0509ae0b",
+3953 => x"f7050684",
+3954 => x"01050504",
+3955 => x"702dfc12",
+3956 => x"70085252",
+3957 => x"70098105",
+3958 => x"ff050970",
+3959 => x"81050906",
+3960 => x"0a098106",
+3961 => x"ff0509e4",
+3962 => x"0bf70506",
+3963 => x"84010505",
+3964 => x"04505004",
+3965 => x"04ff98cc",
+3966 => x"3f040000",
+3967 => x"30313233",
+3968 => x"34353637",
+3969 => x"38390000",
+3970 => x"44485259",
+3971 => x"53544f4e",
+3972 => x"45205052",
+3973 => x"4f475241",
+3974 => x"4d2c2053",
+3975 => x"4f4d4520",
+3976 => x"53545249",
+3977 => x"4e470000",
+3978 => x"44485259",
+3979 => x"53544f4e",
+3980 => x"45205052",
+3981 => x"4f475241",
+3982 => x"4d2c2031",
+3983 => x"27535420",
+3984 => x"53545249",
+3985 => x"4e470000",
+3986 => x"44687279",
+3987 => x"73746f6e",
+3988 => x"65204265",
+3989 => x"6e63686d",
+3990 => x"61726b2c",
+3991 => x"20566572",
+3992 => x"73696f6e",
+3993 => x"20322e31",
+3994 => x"20284c61",
+3995 => x"6e677561",
+3996 => x"67653a20",
+3997 => x"43290a00",
+3998 => x"50726f67",
+3999 => x"72616d20",
+4000 => x"636f6d70",
+4001 => x"696c6564",
+4002 => x"20776974",
+4003 => x"68202772",
+4004 => x"65676973",
+4005 => x"74657227",
+4006 => x"20617474",
+4007 => x"72696275",
+4008 => x"74650a00",
+4009 => x"45786563",
+4010 => x"7574696f",
+4011 => x"6e207374",
+4012 => x"61727473",
+4013 => x"2c202564",
+4014 => x"2072756e",
+4015 => x"73207468",
+4016 => x"726f7567",
+4017 => x"68204468",
+4018 => x"72797374",
+4019 => x"6f6e650a",
+4020 => x"00000000",
+4021 => x"44485259",
+4022 => x"53544f4e",
+4023 => x"45205052",
+4024 => x"4f475241",
+4025 => x"4d2c2032",
+4026 => x"274e4420",
+4027 => x"53545249",
+4028 => x"4e470000",
+4029 => x"45786563",
+4030 => x"7574696f",
+4031 => x"6e20656e",
+4032 => x"64730a00",
+4033 => x"46696e61",
+4034 => x"6c207661",
+4035 => x"6c756573",
+4036 => x"206f6620",
+4037 => x"74686520",
+4038 => x"76617269",
+4039 => x"61626c65",
+4040 => x"73207573",
+4041 => x"65642069",
+4042 => x"6e207468",
+4043 => x"65206265",
+4044 => x"6e63686d",
+4045 => x"61726b3a",
+4046 => x"0a000000",
+4047 => x"496e745f",
+4048 => x"476c6f62",
+4049 => x"3a202020",
+4050 => x"20202020",
+4051 => x"20202020",
+4052 => x"2025640a",
+4053 => x"00000000",
+4054 => x"20202020",
+4055 => x"20202020",
+4056 => x"73686f75",
+4057 => x"6c642062",
+4058 => x"653a2020",
+4059 => x"2025640a",
+4060 => x"00000000",
+4061 => x"426f6f6c",
+4062 => x"5f476c6f",
+4063 => x"623a2020",
+4064 => x"20202020",
+4065 => x"20202020",
+4066 => x"2025640a",
+4067 => x"00000000",
+4068 => x"43685f31",
+4069 => x"5f476c6f",
+4070 => x"623a2020",
+4071 => x"20202020",
+4072 => x"20202020",
+4073 => x"2025630a",
+4074 => x"00000000",
+4075 => x"20202020",
+4076 => x"20202020",
+4077 => x"73686f75",
+4078 => x"6c642062",
+4079 => x"653a2020",
+4080 => x"2025630a",
+4081 => x"00000000",
+4082 => x"43685f32",
+4083 => x"5f476c6f",
+4084 => x"623a2020",
+4085 => x"20202020",
+4086 => x"20202020",
+4087 => x"2025630a",
+4088 => x"00000000",
+4089 => x"4172725f",
+4090 => x"315f476c",
+4091 => x"6f625b38",
+4092 => x"5d3a2020",
+4093 => x"20202020",
+4094 => x"2025640a",
+4095 => x"00000000",
+4096 => x"4172725f",
+4097 => x"325f476c",
+4098 => x"6f625b38",
+4099 => x"5d5b375d",
+4100 => x"3a202020",
+4101 => x"2025640a",
+4102 => x"00000000",
+4103 => x"20202020",
+4104 => x"20202020",
+4105 => x"73686f75",
+4106 => x"6c642062",
+4107 => x"653a2020",
+4108 => x"204e756d",
+4109 => x"6265725f",
+4110 => x"4f665f52",
+4111 => x"756e7320",
+4112 => x"2b203130",
+4113 => x"0a000000",
+4114 => x"5074725f",
+4115 => x"476c6f62",
+4116 => x"2d3e0a00",
+4117 => x"20205074",
+4118 => x"725f436f",
+4119 => x"6d703a20",
+4120 => x"20202020",
+4121 => x"20202020",
+4122 => x"2025640a",
+4123 => x"00000000",
+4124 => x"20202020",
+4125 => x"20202020",
+4126 => x"73686f75",
+4127 => x"6c642062",
+4128 => x"653a2020",
+4129 => x"2028696d",
+4130 => x"706c656d",
+4131 => x"656e7461",
+4132 => x"74696f6e",
+4133 => x"2d646570",
+4134 => x"656e6465",
+4135 => x"6e74290a",
+4136 => x"00000000",
+4137 => x"20204469",
+4138 => x"7363723a",
+4139 => x"20202020",
+4140 => x"20202020",
+4141 => x"20202020",
+4142 => x"2025640a",
+4143 => x"00000000",
+4144 => x"2020456e",
+4145 => x"756d5f43",
+4146 => x"6f6d703a",
+4147 => x"20202020",
+4148 => x"20202020",
+4149 => x"2025640a",
+4150 => x"00000000",
+4151 => x"2020496e",
+4152 => x"745f436f",
+4153 => x"6d703a20",
+4154 => x"20202020",
+4155 => x"20202020",
+4156 => x"2025640a",
+4157 => x"00000000",
+4158 => x"20205374",
+4159 => x"725f436f",
+4160 => x"6d703a20",
+4161 => x"20202020",
+4162 => x"20202020",
+4163 => x"2025730a",
+4164 => x"00000000",
+4165 => x"20202020",
+4166 => x"20202020",
+4167 => x"73686f75",
+4168 => x"6c642062",
+4169 => x"653a2020",
+4170 => x"20444852",
+4171 => x"5953544f",
+4172 => x"4e452050",
+4173 => x"524f4752",
+4174 => x"414d2c20",
+4175 => x"534f4d45",
+4176 => x"20535452",
+4177 => x"494e470a",
+4178 => x"00000000",
+4179 => x"4e657874",
+4180 => x"5f507472",
+4181 => x"5f476c6f",
+4182 => x"622d3e0a",
+4183 => x"00000000",
+4184 => x"20202020",
+4185 => x"20202020",
+4186 => x"73686f75",
+4187 => x"6c642062",
+4188 => x"653a2020",
+4189 => x"2028696d",
+4190 => x"706c656d",
+4191 => x"656e7461",
+4192 => x"74696f6e",
+4193 => x"2d646570",
+4194 => x"656e6465",
+4195 => x"6e74292c",
+4196 => x"2073616d",
+4197 => x"65206173",
+4198 => x"2061626f",
+4199 => x"76650a00",
+4200 => x"496e745f",
+4201 => x"315f4c6f",
+4202 => x"633a2020",
+4203 => x"20202020",
+4204 => x"20202020",
+4205 => x"2025640a",
+4206 => x"00000000",
+4207 => x"496e745f",
+4208 => x"325f4c6f",
+4209 => x"633a2020",
+4210 => x"20202020",
+4211 => x"20202020",
+4212 => x"2025640a",
+4213 => x"00000000",
+4214 => x"496e745f",
+4215 => x"335f4c6f",
+4216 => x"633a2020",
+4217 => x"20202020",
+4218 => x"20202020",
+4219 => x"2025640a",
+4220 => x"00000000",
+4221 => x"456e756d",
+4222 => x"5f4c6f63",
+4223 => x"3a202020",
+4224 => x"20202020",
+4225 => x"20202020",
+4226 => x"2025640a",
+4227 => x"00000000",
+4228 => x"5374725f",
+4229 => x"315f4c6f",
+4230 => x"633a2020",
+4231 => x"20202020",
+4232 => x"20202020",
+4233 => x"2025730a",
+4234 => x"00000000",
+4235 => x"20202020",
+4236 => x"20202020",
+4237 => x"73686f75",
+4238 => x"6c642062",
+4239 => x"653a2020",
+4240 => x"20444852",
+4241 => x"5953544f",
+4242 => x"4e452050",
+4243 => x"524f4752",
+4244 => x"414d2c20",
+4245 => x"31275354",
+4246 => x"20535452",
+4247 => x"494e470a",
+4248 => x"00000000",
+4249 => x"5374725f",
+4250 => x"325f4c6f",
+4251 => x"633a2020",
+4252 => x"20202020",
+4253 => x"20202020",
+4254 => x"2025730a",
+4255 => x"00000000",
+4256 => x"20202020",
+4257 => x"20202020",
+4258 => x"73686f75",
+4259 => x"6c642062",
+4260 => x"653a2020",
+4261 => x"20444852",
+4262 => x"5953544f",
+4263 => x"4e452050",
+4264 => x"524f4752",
+4265 => x"414d2c20",
+4266 => x"32274e44",
+4267 => x"20535452",
+4268 => x"494e470a",
+4269 => x"00000000",
+4270 => x"55736572",
+4271 => x"2074696d",
+4272 => x"653a2025",
+4273 => x"640a0000",
+4274 => x"4d696372",
+4275 => x"6f736563",
+4276 => x"6f6e6473",
+4277 => x"20666f72",
+4278 => x"206f6e65",
+4279 => x"2072756e",
+4280 => x"20746872",
+4281 => x"6f756768",
+4282 => x"20446872",
+4283 => x"7973746f",
+4284 => x"6e653a20",
+4285 => x"00000000",
+4286 => x"2564200a",
+4287 => x"00000000",
+4288 => x"44687279",
+4289 => x"73746f6e",
+4290 => x"65732070",
+4291 => x"65722053",
+4292 => x"65636f6e",
+4293 => x"643a2020",
+4294 => x"20202020",
+4295 => x"20202020",
+4296 => x"20202020",
+4297 => x"20202020",
+4298 => x"20202020",
+4299 => x"00000000",
+4300 => x"56415820",
+4301 => x"4d495053",
+4302 => x"20726174",
+4303 => x"696e6720",
+4304 => x"2a203130",
+4305 => x"3030203d",
+4306 => x"20256420",
+4307 => x"0a000000",
+4308 => x"50726f67",
+4309 => x"72616d20",
+4310 => x"636f6d70",
+4311 => x"696c6564",
+4312 => x"20776974",
+4313 => x"686f7574",
+4314 => x"20277265",
+4315 => x"67697374",
+4316 => x"65722720",
+4317 => x"61747472",
+4318 => x"69627574",
+4319 => x"650a0000",
+4320 => x"4d656173",
+4321 => x"75726564",
+4322 => x"2074696d",
+4323 => x"6520746f",
+4324 => x"6f20736d",
+4325 => x"616c6c20",
+4326 => x"746f206f",
+4327 => x"62746169",
+4328 => x"6e206d65",
+4329 => x"616e696e",
+4330 => x"6766756c",
+4331 => x"20726573",
+4332 => x"756c7473",
+4333 => x"0a000000",
+4334 => x"506c6561",
+4335 => x"73652069",
+4336 => x"6e637265",
+4337 => x"61736520",
+4338 => x"6e756d62",
+4339 => x"6572206f",
+4340 => x"66207275",
+4341 => x"6e730a00",
+4342 => x"44485259",
+4343 => x"53544f4e",
+4344 => x"45205052",
+4345 => x"4f475241",
+4346 => x"4d2c2033",
+4347 => x"27524420",
+4348 => x"53545249",
+4349 => x"4e470000",
+4350 => x"43000000",
+4351 => x"64756d6d",
+4352 => x"792e6578",
+4353 => x"65000000",
+4354 => x"00010202",
+4355 => x"03030303",
+4356 => x"04040404",
+4357 => x"04040404",
+4358 => x"05050505",
+4359 => x"05050505",
+4360 => x"05050505",
+4361 => x"05050505",
+4362 => x"06060606",
+4363 => x"06060606",
+4364 => x"06060606",
+4365 => x"06060606",
+4366 => x"06060606",
+4367 => x"06060606",
+4368 => x"06060606",
+4369 => x"06060606",
+4370 => x"07070707",
+4371 => x"07070707",
+4372 => x"07070707",
+4373 => x"07070707",
+4374 => x"07070707",
+4375 => x"07070707",
+4376 => x"07070707",
+4377 => x"07070707",
+4378 => x"07070707",
+4379 => x"07070707",
+4380 => x"07070707",
+4381 => x"07070707",
+4382 => x"07070707",
+4383 => x"07070707",
+4384 => x"07070707",
+4385 => x"07070707",
+4386 => x"08080808",
+4387 => x"08080808",
+4388 => x"08080808",
+4389 => x"08080808",
+4390 => x"08080808",
+4391 => x"08080808",
+4392 => x"08080808",
+4393 => x"08080808",
+4394 => x"08080808",
+4395 => x"08080808",
+4396 => x"08080808",
+4397 => x"08080808",
+4398 => x"08080808",
+4399 => x"08080808",
+4400 => x"08080808",
+4401 => x"08080808",
+4402 => x"08080808",
+4403 => x"08080808",
+4404 => x"08080808",
+4405 => x"08080808",
+4406 => x"08080808",
+4407 => x"08080808",
+4408 => x"08080808",
+4409 => x"08080808",
+4410 => x"08080808",
+4411 => x"08080808",
+4412 => x"08080808",
+4413 => x"08080808",
+4414 => x"08080808",
+4415 => x"08080808",
+4416 => x"08080808",
+4417 => x"08080808",
+4418 => x"00ffffff",
+4419 => x"ff00ffff",
+4420 => x"ffff00ff",
+4421 => x"ffffff00",
+4422 => x"0000042c",
+4423 => x"00000446",
+4424 => x"0000046c",
+4425 => x"00000498",
+4426 => x"000004ca",
+4427 => x"000004ec",
+4428 => x"00000508",
+4429 => x"0000052c",
+4430 => x"00000556",
+4431 => x"00000580",
+4432 => x"000005a4",
+4433 => x"000005be",
+4434 => x"000005e0",
+4435 => x"00000612",
+4436 => x"0000063e",
+4437 => x"00000660",
+4438 => x"00000000",
+4439 => x"00000000",
+4440 => x"00000000",
+4441 => x"00004d44",
+4442 => x"0000c350",
+4443 => x"00000000",
+4444 => x"00000000",
+4445 => x"00000000",
+4446 => x"00000000",
+4447 => x"00000000",
+4448 => x"00000000",
+4449 => x"00000000",
+4450 => x"00000000",
+4451 => x"00000000",
+4452 => x"00000000",
+4453 => x"00000000",
+4454 => x"00000000",
+4455 => x"00000000",
+4456 => x"ffffffff",
+4457 => x"00000000",
+4458 => x"00020000",
+4459 => x"00000000",
+4460 => x"00000000",
+4461 => x"000045ac",
+4462 => x"000045ac",
+4463 => x"000045b4",
+4464 => x"000045b4",
+4465 => x"000045bc",
+4466 => x"000045bc",
+4467 => x"000045c4",
+4468 => x"000045c4",
+4469 => x"000045cc",
+4470 => x"000045cc",
+4471 => x"000045d4",
+4472 => x"000045d4",
+4473 => x"000045dc",
+4474 => x"000045dc",
+4475 => x"000045e4",
+4476 => x"000045e4",
+4477 => x"000045ec",
+4478 => x"000045ec",
+4479 => x"000045f4",
+4480 => x"000045f4",
+4481 => x"000045fc",
+4482 => x"000045fc",
+4483 => x"00004604",
+4484 => x"00004604",
+4485 => x"0000460c",
+4486 => x"0000460c",
+4487 => x"00004614",
+4488 => x"00004614",
+4489 => x"0000461c",
+4490 => x"0000461c",
+4491 => x"00004624",
+4492 => x"00004624",
+4493 => x"0000462c",
+4494 => x"0000462c",
+4495 => x"00004634",
+4496 => x"00004634",
+4497 => x"0000463c",
+4498 => x"0000463c",
+4499 => x"00004644",
+4500 => x"00004644",
+4501 => x"0000464c",
+4502 => x"0000464c",
+4503 => x"00004654",
+4504 => x"00004654",
+4505 => x"0000465c",
+4506 => x"0000465c",
+4507 => x"00004664",
+4508 => x"00004664",
+4509 => x"0000466c",
+4510 => x"0000466c",
+4511 => x"00004674",
+4512 => x"00004674",
+4513 => x"0000467c",
+4514 => x"0000467c",
+4515 => x"00004684",
+4516 => x"00004684",
+4517 => x"0000468c",
+4518 => x"0000468c",
+4519 => x"00004694",
+4520 => x"00004694",
+4521 => x"0000469c",
+4522 => x"0000469c",
+4523 => x"000046a4",
+4524 => x"000046a4",
+4525 => x"000046ac",
+4526 => x"000046ac",
+4527 => x"000046b4",
+4528 => x"000046b4",
+4529 => x"000046bc",
+4530 => x"000046bc",
+4531 => x"000046c4",
+4532 => x"000046c4",
+4533 => x"000046cc",
+4534 => x"000046cc",
+4535 => x"000046d4",
+4536 => x"000046d4",
+4537 => x"000046dc",
+4538 => x"000046dc",
+4539 => x"000046e4",
+4540 => x"000046e4",
+4541 => x"000046ec",
+4542 => x"000046ec",
+4543 => x"000046f4",
+4544 => x"000046f4",
+4545 => x"000046fc",
+4546 => x"000046fc",
+4547 => x"00004704",
+4548 => x"00004704",
+4549 => x"0000470c",
+4550 => x"0000470c",
+4551 => x"00004714",
+4552 => x"00004714",
+4553 => x"0000471c",
+4554 => x"0000471c",
+4555 => x"00004724",
+4556 => x"00004724",
+4557 => x"0000472c",
+4558 => x"0000472c",
+4559 => x"00004734",
+4560 => x"00004734",
+4561 => x"0000473c",
+4562 => x"0000473c",
+4563 => x"00004744",
+4564 => x"00004744",
+4565 => x"0000474c",
+4566 => x"0000474c",
+4567 => x"00004754",
+4568 => x"00004754",
+4569 => x"0000475c",
+4570 => x"0000475c",
+4571 => x"00004764",
+4572 => x"00004764",
+4573 => x"0000476c",
+4574 => x"0000476c",
+4575 => x"00004774",
+4576 => x"00004774",
+4577 => x"0000477c",
+4578 => x"0000477c",
+4579 => x"00004784",
+4580 => x"00004784",
+4581 => x"0000478c",
+4582 => x"0000478c",
+4583 => x"00004794",
+4584 => x"00004794",
+4585 => x"0000479c",
+4586 => x"0000479c",
+4587 => x"000047a4",
+4588 => x"000047a4",
+4589 => x"000047ac",
+4590 => x"000047ac",
+4591 => x"000047b4",
+4592 => x"000047b4",
+4593 => x"000047bc",
+4594 => x"000047bc",
+4595 => x"000047c4",
+4596 => x"000047c4",
+4597 => x"000047cc",
+4598 => x"000047cc",
+4599 => x"000047d4",
+4600 => x"000047d4",
+4601 => x"000047dc",
+4602 => x"000047dc",
+4603 => x"000047e4",
+4604 => x"000047e4",
+4605 => x"000047ec",
+4606 => x"000047ec",
+4607 => x"000047f4",
+4608 => x"000047f4",
+4609 => x"000047fc",
+4610 => x"000047fc",
+4611 => x"00004804",
+4612 => x"00004804",
+4613 => x"0000480c",
+4614 => x"0000480c",
+4615 => x"00004814",
+4616 => x"00004814",
+4617 => x"0000481c",
+4618 => x"0000481c",
+4619 => x"00004824",
+4620 => x"00004824",
+4621 => x"0000482c",
+4622 => x"0000482c",
+4623 => x"00004834",
+4624 => x"00004834",
+4625 => x"0000483c",
+4626 => x"0000483c",
+4627 => x"00004844",
+4628 => x"00004844",
+4629 => x"0000484c",
+4630 => x"0000484c",
+4631 => x"00004854",
+4632 => x"00004854",
+4633 => x"0000485c",
+4634 => x"0000485c",
+4635 => x"00004864",
+4636 => x"00004864",
+4637 => x"0000486c",
+4638 => x"0000486c",
+4639 => x"00004874",
+4640 => x"00004874",
+4641 => x"0000487c",
+4642 => x"0000487c",
+4643 => x"00004884",
+4644 => x"00004884",
+4645 => x"0000488c",
+4646 => x"0000488c",
+4647 => x"00004894",
+4648 => x"00004894",
+4649 => x"0000489c",
+4650 => x"0000489c",
+4651 => x"000048a4",
+4652 => x"000048a4",
+4653 => x"000048ac",
+4654 => x"000048ac",
+4655 => x"000048b4",
+4656 => x"000048b4",
+4657 => x"000048bc",
+4658 => x"000048bc",
+4659 => x"000048c4",
+4660 => x"000048c4",
+4661 => x"000048cc",
+4662 => x"000048cc",
+4663 => x"000048d4",
+4664 => x"000048d4",
+4665 => x"000048dc",
+4666 => x"000048dc",
+4667 => x"000048e4",
+4668 => x"000048e4",
+4669 => x"000048ec",
+4670 => x"000048ec",
+4671 => x"000048f4",
+4672 => x"000048f4",
+4673 => x"000048fc",
+4674 => x"000048fc",
+4675 => x"00004904",
+4676 => x"00004904",
+4677 => x"0000490c",
+4678 => x"0000490c",
+4679 => x"00004914",
+4680 => x"00004914",
+4681 => x"0000491c",
+4682 => x"0000491c",
+4683 => x"00004924",
+4684 => x"00004924",
+4685 => x"0000492c",
+4686 => x"0000492c",
+4687 => x"00004934",
+4688 => x"00004934",
+4689 => x"0000493c",
+4690 => x"0000493c",
+4691 => x"00004944",
+4692 => x"00004944",
+4693 => x"0000494c",
+4694 => x"0000494c",
+4695 => x"00004954",
+4696 => x"00004954",
+4697 => x"0000495c",
+4698 => x"0000495c",
+4699 => x"00004964",
+4700 => x"00004964",
+4701 => x"0000496c",
+4702 => x"0000496c",
+4703 => x"00004974",
+4704 => x"00004974",
+4705 => x"0000497c",
+4706 => x"0000497c",
+4707 => x"00004984",
+4708 => x"00004984",
+4709 => x"0000498c",
+4710 => x"0000498c",
+4711 => x"00004994",
+4712 => x"00004994",
+4713 => x"0000499c",
+4714 => x"0000499c",
+4715 => x"000049a4",
+4716 => x"000049a4",
+4717 => x"000049b8",
+4718 => x"00000000",
+4719 => x"00004c20",
+4720 => x"00004c7c",
+4721 => x"00004cd8",
+4722 => x"00000000",
+4723 => x"00000000",
+4724 => x"00000000",
+4725 => x"00000000",
+4726 => x"00000000",
+4727 => x"00000000",
+4728 => x"00000000",
+4729 => x"00000000",
+4730 => x"00000000",
+4731 => x"000043f8",
+4732 => x"00000000",
+4733 => x"00000000",
+4734 => x"00000000",
+4735 => x"00000000",
+4736 => x"00000000",
+4737 => x"00000000",
+4738 => x"00000000",
+4739 => x"00000000",
+4740 => x"00000000",
+4741 => x"00000000",
+4742 => x"00000000",
+4743 => x"00000000",
+4744 => x"00000000",
+4745 => x"00000000",
+4746 => x"00000000",
+4747 => x"00000000",
+4748 => x"00000000",
+4749 => x"00000000",
+4750 => x"00000000",
+4751 => x"00000000",
+4752 => x"00000000",
+4753 => x"00000000",
+4754 => x"00000000",
+4755 => x"00000000",
+4756 => x"00000000",
+4757 => x"00000000",
+4758 => x"00000000",
+4759 => x"00000000",
+4760 => x"00000001",
+4761 => x"330eabcd",
+4762 => x"1234e66d",
+4763 => x"deec0005",
+4764 => x"000b0000",
+4765 => x"00000000",
+4766 => x"00000000",
+4767 => x"00000000",
+4768 => x"00000000",
+4769 => x"00000000",
+4770 => x"00000000",
+4771 => x"00000000",
+4772 => x"00000000",
+4773 => x"00000000",
+4774 => x"00000000",
+4775 => x"00000000",
+4776 => x"00000000",
+4777 => x"00000000",
+4778 => x"00000000",
+4779 => x"00000000",
+4780 => x"00000000",
+4781 => x"00000000",
+4782 => x"00000000",
+4783 => x"00000000",
+4784 => x"00000000",
+4785 => x"00000000",
+4786 => x"00000000",
+4787 => x"00000000",
+4788 => x"00000000",
+4789 => x"00000000",
+4790 => x"00000000",
+4791 => x"00000000",
+4792 => x"00000000",
+4793 => x"00000000",
+4794 => x"00000000",
+4795 => x"00000000",
+4796 => x"00000000",
+4797 => x"00000000",
+4798 => x"00000000",
+4799 => x"00000000",
+4800 => x"00000000",
+4801 => x"00000000",
+4802 => x"00000000",
+4803 => x"00000000",
+4804 => x"00000000",
+4805 => x"00000000",
+4806 => x"00000000",
+4807 => x"00000000",
+4808 => x"00000000",
+4809 => x"00000000",
+4810 => x"00000000",
+4811 => x"00000000",
+4812 => x"00000000",
+4813 => x"00000000",
+4814 => x"00000000",
+4815 => x"00000000",
+4816 => x"00000000",
+4817 => x"00000000",
+4818 => x"00000000",
+4819 => x"00000000",
+4820 => x"00000000",
+4821 => x"00000000",
+4822 => x"00000000",
+4823 => x"00000000",
+4824 => x"00000000",
+4825 => x"00000000",
+4826 => x"00000000",
+4827 => x"00000000",
+4828 => x"00000000",
+4829 => x"00000000",
+4830 => x"00000000",
+4831 => x"00000000",
+4832 => x"00000000",
+4833 => x"00000000",
+4834 => x"00000000",
+4835 => x"00000000",
+4836 => x"00000000",
+4837 => x"00000000",
+4838 => x"00000000",
+4839 => x"00000000",
+4840 => x"00000000",
+4841 => x"00000000",
+4842 => x"00000000",
+4843 => x"00000000",
+4844 => x"00000000",
+4845 => x"00000000",
+4846 => x"00000000",
+4847 => x"00000000",
+4848 => x"00000000",
+4849 => x"00000000",
+4850 => x"00000000",
+4851 => x"00000000",
+4852 => x"00000000",
+4853 => x"00000000",
+4854 => x"00000000",
+4855 => x"00000000",
+4856 => x"00000000",
+4857 => x"00000000",
+4858 => x"00000000",
+4859 => x"00000000",
+4860 => x"00000000",
+4861 => x"00000000",
+4862 => x"00000000",
+4863 => x"00000000",
+4864 => x"00000000",
+4865 => x"00000000",
+4866 => x"00000000",
+4867 => x"00000000",
+4868 => x"00000000",
+4869 => x"00000000",
+4870 => x"00000000",
+4871 => x"00000000",
+4872 => x"00000000",
+4873 => x"00000000",
+4874 => x"00000000",
+4875 => x"00000000",
+4876 => x"00000000",
+4877 => x"00000000",
+4878 => x"00000000",
+4879 => x"00000000",
+4880 => x"00000000",
+4881 => x"00000000",
+4882 => x"00000000",
+4883 => x"00000000",
+4884 => x"00000000",
+4885 => x"00000000",
+4886 => x"00000000",
+4887 => x"00000000",
+4888 => x"00000000",
+4889 => x"00000000",
+4890 => x"00000000",
+4891 => x"00000000",
+4892 => x"00000000",
+4893 => x"00000000",
+4894 => x"00000000",
+4895 => x"00000000",
+4896 => x"00000000",
+4897 => x"00000000",
+4898 => x"00000000",
+4899 => x"00000000",
+4900 => x"00000000",
+4901 => x"00000000",
+4902 => x"00000000",
+4903 => x"00000000",
+4904 => x"00000000",
+4905 => x"00000000",
+4906 => x"00000000",
+4907 => x"00000000",
+4908 => x"00000000",
+4909 => x"00000000",
+4910 => x"00000000",
+4911 => x"00000000",
+4912 => x"00000000",
+4913 => x"00000000",
+4914 => x"00000000",
+4915 => x"00000000",
+4916 => x"00000000",
+4917 => x"00000000",
+4918 => x"00000000",
+4919 => x"00000000",
+4920 => x"00000000",
+4921 => x"00000000",
+4922 => x"00000000",
+4923 => x"00000000",
+4924 => x"00000000",
+4925 => x"00000000",
+4926 => x"00000000",
+4927 => x"00000000",
+4928 => x"00000000",
+4929 => x"00000000",
+4930 => x"00000000",
+4931 => x"00000000",
+4932 => x"00000000",
+4933 => x"00000000",
+4934 => x"00000000",
+4935 => x"00000000",
+4936 => x"00000000",
+4937 => x"00000000",
+4938 => x"00000000",
+4939 => x"00000000",
+4940 => x"00000000",
+4941 => x"000043fc",
+4942 => x"ffffffff",
+4943 => x"00000000",
+4944 => x"ffffffff",
+4945 => x"00000000",
+ others => x"00000000"
+);
+
+attribute syn_ramstyle : string;
+attribute syn_ramstyle of ram : signal is "no_rw_check" ;
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') then
+ ram(conv_integer(memAAddr)) <= memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(conv_integer(memAAddr));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(conv_integer(memBAddr)) <= memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(conv_integer(memBAddr));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/zpu3/src/helloworld_ram.vhd b/zpu/hdl/zpu3/src/helloworld_ram.vhd
new file mode 100644
index 0000000..2e1d35d
--- /dev/null
+++ b/zpu/hdl/zpu3/src/helloworld_ram.vhd
@@ -0,0 +1,3345 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"800b0b0b",
+1 => x"0b0b8070",
+2 => x"0b0b80d6",
+3 => x"f00c3a0b",
+4 => x"0b80cd92",
+5 => x"04000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80cde02d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b0b2a",
+20 => x"83ffff06",
+21 => x"52040000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b0b2b09",
+29 => x"067383ff",
+30 => x"ff0b0b0b",
+31 => x"0b83a504",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"72728072",
+73 => x"8106ff05",
+74 => x"09720605",
+75 => x"71105272",
+76 => x"0a100a53",
+77 => x"72ed3851",
+78 => x"51535104",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"04067383",
+106 => x"06098105",
+107 => x"8205832b",
+108 => x"0b2b0772",
+109 => x"fc060c51",
+110 => x"51040000",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04098105",
+139 => x"83051010",
+140 => x"102b0772",
+141 => x"fc060c51",
+142 => x"51040000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80d6",
+162 => x"dc738306",
+163 => x"10100508",
+164 => x"067381ff",
+165 => x"06738306",
+166 => x"0b0b0b84",
+167 => x"a9040000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0b8e",
+171 => x"fd2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0b90",
+179 => x"af2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07535050",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075350",
+199 => x"50040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80d6ec0c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"04000000",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"839f3f80",
+257 => x"cdf83f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51043c04",
+267 => x"70700b0b",
+268 => x"80e6d808",
+269 => x"52841208",
+270 => x"70810651",
+271 => x"5170f638",
+272 => x"710881ff",
+273 => x"06800c50",
+274 => x"50047070",
+275 => x"0b0b80e6",
+276 => x"d8085284",
+277 => x"1208700a",
+278 => x"100a7081",
+279 => x"06515151",
+280 => x"70f13873",
+281 => x"720c5050",
+282 => x"0480d6ec",
+283 => x"08802ea8",
+284 => x"38838080",
+285 => x"0b0b0b80",
+286 => x"e6d80c82",
+287 => x"a0800b0b",
+288 => x"0b80e6dc",
+289 => x"0c829080",
+290 => x"0b80e6ec",
+291 => x"0c0b0b80",
+292 => x"e6e00b80",
+293 => x"e6f00c04",
+294 => x"f8808080",
+295 => x"a40b0b0b",
+296 => x"80e6d80c",
+297 => x"f8808082",
+298 => x"800b0b0b",
+299 => x"80e6dc0c",
+300 => x"f8808084",
+301 => x"800b80e6",
+302 => x"ec0cf880",
+303 => x"8080940b",
+304 => x"80e6f00c",
+305 => x"f8808080",
+306 => x"9c0b80e6",
+307 => x"e80cf880",
+308 => x"8080a00b",
+309 => x"80e6f40c",
+310 => x"04f23d0d",
+311 => x"600b0b80",
+312 => x"e6dc0856",
+313 => x"5d82750c",
+314 => x"8059805a",
+315 => x"800b8f3d",
+316 => x"71101017",
+317 => x"70085a57",
+318 => x"5d5b8077",
+319 => x"81ff067c",
+320 => x"832b5658",
+321 => x"5276537b",
+322 => x"5182fc3f",
+323 => x"7d7f7a72",
+324 => x"077c7207",
+325 => x"71716081",
+326 => x"05415f5d",
+327 => x"5b595755",
+328 => x"7a8724bb",
+329 => x"380b0b80",
+330 => x"e6dc087b",
+331 => x"10101170",
+332 => x"08595155",
+333 => x"807781ff",
+334 => x"067c832b",
+335 => x"56585276",
+336 => x"537b5182",
+337 => x"c23f7d7f",
+338 => x"7a72077c",
+339 => x"72077171",
+340 => x"60810541",
+341 => x"5f5d5b59",
+342 => x"5755877b",
+343 => x"25c73876",
+344 => x"7d0c7784",
+345 => x"1e0c7c80",
+346 => x"0c903d0d",
+347 => x"04707080",
+348 => x"e6e43351",
+349 => x"70a73880",
+350 => x"d6f80870",
+351 => x"08525270",
+352 => x"802e9438",
+353 => x"841280d6",
+354 => x"f80c702d",
+355 => x"80d6f808",
+356 => x"70085252",
+357 => x"70ee3881",
+358 => x"0b80e6e4",
+359 => x"34505004",
+360 => x"04700b0b",
+361 => x"80e6d408",
+362 => x"802e8e38",
+363 => x"0b0b0b0b",
+364 => x"800b802e",
+365 => x"09810683",
+366 => x"3850040b",
+367 => x"0b80e6d4",
+368 => x"510b0b0b",
+369 => x"f4ba3f50",
+370 => x"04048c08",
+371 => x"028c0c70",
+372 => x"70707080",
+373 => x"0b8c08fc",
+374 => x"050c8c08",
+375 => x"fc050889",
+376 => x"24818e38",
+377 => x"0b0b80d6",
+378 => x"a85188f3",
+379 => x"3f0b0b80",
+380 => x"d6b85188",
+381 => x"ea3ffc0b",
+382 => x"80e6f80c",
+383 => x"80e6f808",
+384 => x"812c5372",
+385 => x"fe2e8438",
+386 => x"86f13f8a",
+387 => x"0b80e6fc",
+388 => x"0c80e6fc",
+389 => x"0880e6f8",
+390 => x"08295372",
+391 => x"d82e8438",
+392 => x"86d93f8a",
+393 => x"0b80e6f8",
+394 => x"0c84e2ad",
+395 => x"800b80e6",
+396 => x"fc0c80e6",
+397 => x"fc0880e6",
+398 => x"f8082953",
+399 => x"72afd7c2",
+400 => x"802e8438",
+401 => x"86b53f81",
+402 => x"0a0b80e6",
+403 => x"f80cff0b",
+404 => x"80e6fc0c",
+405 => x"80e6fc08",
+406 => x"80e6f808",
+407 => x"25843886",
+408 => x"9a3f8c08",
+409 => x"fc050881",
+410 => x"058c08fc",
+411 => x"050cfeea",
+412 => x"398c08fc",
+413 => x"05088a2e",
+414 => x"843885ff",
+415 => x"3f72800c",
+416 => x"50505050",
+417 => x"8c0c048c",
+418 => x"08028c0c",
+419 => x"f53d0d8c",
+420 => x"08940508",
+421 => x"9d388c08",
+422 => x"8c05088c",
+423 => x"08900508",
+424 => x"8c088805",
+425 => x"08585654",
+426 => x"73760c74",
+427 => x"84170c81",
+428 => x"bf39800b",
+429 => x"8c08f005",
+430 => x"0c800b8c",
+431 => x"08f4050c",
+432 => x"8c088c05",
+433 => x"088c0890",
+434 => x"05085654",
+435 => x"738c08f0",
+436 => x"050c748c",
+437 => x"08f4050c",
+438 => x"8c08f805",
+439 => x"8c08f005",
+440 => x"56568870",
+441 => x"54755376",
+442 => x"5254859a",
+443 => x"3fa00b8c",
+444 => x"08940508",
+445 => x"318c08ec",
+446 => x"050c8c08",
+447 => x"ec050880",
+448 => x"249d3880",
+449 => x"0b8c08f4",
+450 => x"050c8c08",
+451 => x"ec050830",
+452 => x"8c08fc05",
+453 => x"08712b8c",
+454 => x"08f0050c",
+455 => x"54b9398c",
+456 => x"08fc0508",
+457 => x"8c08ec05",
+458 => x"082a8c08",
+459 => x"e8050c8c",
+460 => x"08fc0508",
+461 => x"8c089405",
+462 => x"082b8c08",
+463 => x"f4050c8c",
+464 => x"08f80508",
+465 => x"8c089405",
+466 => x"082b708c",
+467 => x"08e80508",
+468 => x"078c08f0",
+469 => x"050c548c",
+470 => x"08f00508",
+471 => x"8c08f405",
+472 => x"088c0888",
+473 => x"05085856",
+474 => x"5473760c",
+475 => x"7484170c",
+476 => x"8c088805",
+477 => x"08800c8d",
+478 => x"3d0d8c0c",
+479 => x"048c0802",
+480 => x"8c0cf93d",
+481 => x"0d800b8c",
+482 => x"08fc050c",
+483 => x"8c088805",
+484 => x"088025ab",
+485 => x"388c0888",
+486 => x"0508308c",
+487 => x"0888050c",
+488 => x"800b8c08",
+489 => x"f4050c8c",
+490 => x"08fc0508",
+491 => x"8838810b",
+492 => x"8c08f405",
+493 => x"0c8c08f4",
+494 => x"05088c08",
+495 => x"fc050c8c",
+496 => x"088c0508",
+497 => x"8025ab38",
+498 => x"8c088c05",
+499 => x"08308c08",
+500 => x"8c050c80",
+501 => x"0b8c08f0",
+502 => x"050c8c08",
+503 => x"fc050888",
+504 => x"38810b8c",
+505 => x"08f0050c",
+506 => x"8c08f005",
+507 => x"088c08fc",
+508 => x"050c8053",
+509 => x"8c088c05",
+510 => x"08528c08",
+511 => x"88050851",
+512 => x"81a73f80",
+513 => x"08708c08",
+514 => x"f8050c54",
+515 => x"8c08fc05",
+516 => x"08802e8c",
+517 => x"388c08f8",
+518 => x"0508308c",
+519 => x"08f8050c",
+520 => x"8c08f805",
+521 => x"0870800c",
+522 => x"54893d0d",
+523 => x"8c0c048c",
+524 => x"08028c0c",
+525 => x"fb3d0d80",
+526 => x"0b8c08fc",
+527 => x"050c8c08",
+528 => x"88050880",
+529 => x"2593388c",
+530 => x"08880508",
+531 => x"308c0888",
+532 => x"050c810b",
+533 => x"8c08fc05",
+534 => x"0c8c088c",
+535 => x"05088025",
+536 => x"8c388c08",
+537 => x"8c050830",
+538 => x"8c088c05",
+539 => x"0c81538c",
+540 => x"088c0508",
+541 => x"528c0888",
+542 => x"050851ad",
+543 => x"3f800870",
+544 => x"8c08f805",
+545 => x"0c548c08",
+546 => x"fc050880",
+547 => x"2e8c388c",
+548 => x"08f80508",
+549 => x"308c08f8",
+550 => x"050c8c08",
+551 => x"f8050870",
+552 => x"800c5487",
+553 => x"3d0d8c0c",
+554 => x"048c0802",
+555 => x"8c0c7070",
+556 => x"7070810b",
+557 => x"8c08fc05",
+558 => x"0c800b8c",
+559 => x"08f8050c",
+560 => x"8c088c05",
+561 => x"088c0888",
+562 => x"050827ac",
+563 => x"388c08fc",
+564 => x"0508802e",
+565 => x"a338800b",
+566 => x"8c088c05",
+567 => x"08249938",
+568 => x"8c088c05",
+569 => x"08108c08",
+570 => x"8c050c8c",
+571 => x"08fc0508",
+572 => x"108c08fc",
+573 => x"050cc939",
+574 => x"8c08fc05",
+575 => x"08802e80",
+576 => x"c9388c08",
+577 => x"8c05088c",
+578 => x"08880508",
+579 => x"26a1388c",
+580 => x"08880508",
+581 => x"8c088c05",
+582 => x"08318c08",
+583 => x"88050c8c",
+584 => x"08f80508",
+585 => x"8c08fc05",
+586 => x"08078c08",
+587 => x"f8050c8c",
+588 => x"08fc0508",
+589 => x"812a8c08",
+590 => x"fc050c8c",
+591 => x"088c0508",
+592 => x"812a8c08",
+593 => x"8c050cff",
+594 => x"af398c08",
+595 => x"90050880",
+596 => x"2e8f388c",
+597 => x"08880508",
+598 => x"708c08f4",
+599 => x"050c518d",
+600 => x"398c08f8",
+601 => x"0508708c",
+602 => x"08f4050c",
+603 => x"518c08f4",
+604 => x"0508800c",
+605 => x"50505050",
+606 => x"8c0c0470",
+607 => x"865184ea",
+608 => x"3f8151ba",
+609 => x"d83ffc3d",
+610 => x"0d767079",
+611 => x"7b555555",
+612 => x"558f7227",
+613 => x"8c387275",
+614 => x"07830651",
+615 => x"70802ea7",
+616 => x"38ff1252",
+617 => x"71ff2e98",
+618 => x"38727081",
+619 => x"05543374",
+620 => x"70810556",
+621 => x"34ff1252",
+622 => x"71ff2e09",
+623 => x"8106ea38",
+624 => x"74800c86",
+625 => x"3d0d0474",
+626 => x"51727084",
+627 => x"05540871",
+628 => x"70840553",
+629 => x"0c727084",
+630 => x"05540871",
+631 => x"70840553",
+632 => x"0c727084",
+633 => x"05540871",
+634 => x"70840553",
+635 => x"0c727084",
+636 => x"05540871",
+637 => x"70840553",
+638 => x"0cf01252",
+639 => x"718f26c9",
+640 => x"38837227",
+641 => x"95387270",
+642 => x"84055408",
+643 => x"71708405",
+644 => x"530cfc12",
+645 => x"52718326",
+646 => x"ed387054",
+647 => x"ff8339f7",
+648 => x"3d0d7c70",
+649 => x"525384b8",
+650 => x"3f725480",
+651 => x"085580d6",
+652 => x"c8568157",
+653 => x"80088105",
+654 => x"5a8b3de4",
+655 => x"11595382",
+656 => x"59f41352",
+657 => x"7b881108",
+658 => x"525384f5",
+659 => x"3f800830",
+660 => x"70800807",
+661 => x"9f2c8a07",
+662 => x"800c538b",
+663 => x"3d0d0470",
+664 => x"70735280",
+665 => x"d6fc0851",
+666 => x"ffb53f50",
+667 => x"50047070",
+668 => x"70707553",
+669 => x"84d81308",
+670 => x"802e8b38",
+671 => x"80537280",
+672 => x"0c505050",
+673 => x"50048180",
+674 => x"5272518a",
+675 => x"9b3f8008",
+676 => x"84d8140c",
+677 => x"ff538008",
+678 => x"802ee338",
+679 => x"8008549f",
+680 => x"53807470",
+681 => x"8405560c",
+682 => x"ff135380",
+683 => x"7324cd38",
+684 => x"80747084",
+685 => x"05560cff",
+686 => x"13537280",
+687 => x"25e338ff",
+688 => x"bb397070",
+689 => x"70707577",
+690 => x"55539f74",
+691 => x"278e3896",
+692 => x"730cff52",
+693 => x"71800c50",
+694 => x"50505004",
+695 => x"84d81308",
+696 => x"5271802e",
+697 => x"94387310",
+698 => x"10127008",
+699 => x"79720c51",
+700 => x"5271800c",
+701 => x"50505050",
+702 => x"047251fe",
+703 => x"f13fff52",
+704 => x"8008d138",
+705 => x"84d81308",
+706 => x"74101011",
+707 => x"70087a72",
+708 => x"0c515152",
+709 => x"dc39f93d",
+710 => x"0d797b58",
+711 => x"56769f26",
+712 => x"80e83884",
+713 => x"d8160854",
+714 => x"73802eaa",
+715 => x"38761010",
+716 => x"14700855",
+717 => x"5573802e",
+718 => x"ba388058",
+719 => x"73812e8f",
+720 => x"3873ff2e",
+721 => x"a3388075",
+722 => x"0c765173",
+723 => x"2d805877",
+724 => x"800c893d",
+725 => x"0d047551",
+726 => x"fe943fff",
+727 => x"588008ef",
+728 => x"3884d816",
+729 => x"0854c639",
+730 => x"96760c81",
+731 => x"0b800c89",
+732 => x"3d0d0475",
+733 => x"5181e53f",
+734 => x"76538008",
+735 => x"52755181",
+736 => x"a53f8008",
+737 => x"800c893d",
+738 => x"0d049676",
+739 => x"0cff0b80",
+740 => x"0c893d0d",
+741 => x"04fc3d0d",
+742 => x"76785653",
+743 => x"ff54749f",
+744 => x"26b13884",
+745 => x"d8130852",
+746 => x"71802eae",
+747 => x"38741010",
+748 => x"12700853",
+749 => x"53815471",
+750 => x"802e9838",
+751 => x"825471ff",
+752 => x"2e913883",
+753 => x"5471812e",
+754 => x"8a388073",
+755 => x"0c745171",
+756 => x"2d805473",
+757 => x"800c863d",
+758 => x"0d047251",
+759 => x"fd903f80",
+760 => x"08f13884",
+761 => x"d8130852",
+762 => x"c4397070",
+763 => x"735280d6",
+764 => x"fc0851fe",
+765 => x"a13f5050",
+766 => x"04707070",
+767 => x"75537452",
+768 => x"80d6fc08",
+769 => x"51fdbb3f",
+770 => x"50505004",
+771 => x"7080d6fc",
+772 => x"0851fcda",
+773 => x"3f500470",
+774 => x"70735280",
+775 => x"d6fc0851",
+776 => x"fef33f50",
+777 => x"5004fc3d",
+778 => x"0d800b80",
+779 => x"e7800c78",
+780 => x"527751b4",
+781 => x"9b3f8008",
+782 => x"548008ff",
+783 => x"2e883873",
+784 => x"800c863d",
+785 => x"0d0480e7",
+786 => x"80085574",
+787 => x"802ef038",
+788 => x"7675710c",
+789 => x"5373800c",
+790 => x"863d0d04",
+791 => x"b3ed3f04",
+792 => x"70707070",
+793 => x"75707183",
+794 => x"06535552",
+795 => x"70b83871",
+796 => x"70087009",
+797 => x"f7fbfdff",
+798 => x"120670f8",
+799 => x"84828180",
+800 => x"06515152",
+801 => x"53709d38",
+802 => x"84137008",
+803 => x"7009f7fb",
+804 => x"fdff1206",
+805 => x"70f88482",
+806 => x"81800651",
+807 => x"51525370",
+808 => x"802ee538",
+809 => x"72527133",
+810 => x"5170802e",
+811 => x"8a388112",
+812 => x"70335252",
+813 => x"70f83871",
+814 => x"7431800c",
+815 => x"50505050",
+816 => x"04f23d0d",
+817 => x"60628811",
+818 => x"08705757",
+819 => x"5f5a7480",
+820 => x"2e819038",
+821 => x"8c1a2270",
+822 => x"832a8132",
+823 => x"70810651",
+824 => x"55587386",
+825 => x"38901a08",
+826 => x"91387951",
+827 => x"9cd03fff",
+828 => x"54800880",
+829 => x"ee388c1a",
+830 => x"22587d08",
+831 => x"57807883",
+832 => x"ffff0670",
+833 => x"0a100a70",
+834 => x"81065156",
+835 => x"57557375",
+836 => x"2e80d738",
+837 => x"74903876",
+838 => x"08841808",
+839 => x"88195956",
+840 => x"5974802e",
+841 => x"f2387454",
+842 => x"88807527",
+843 => x"84388880",
+844 => x"54735378",
+845 => x"529c1a08",
+846 => x"51a41a08",
+847 => x"54732d80",
+848 => x"0b800825",
+849 => x"82e63880",
+850 => x"08197580",
+851 => x"08317f88",
+852 => x"05088008",
+853 => x"31706188",
+854 => x"050c5656",
+855 => x"5973ffb4",
+856 => x"38805473",
+857 => x"800c903d",
+858 => x"0d047581",
+859 => x"32708106",
+860 => x"76415154",
+861 => x"73802e81",
+862 => x"c1387490",
+863 => x"38760884",
+864 => x"18088819",
+865 => x"59565974",
+866 => x"802ef238",
+867 => x"881a0878",
+868 => x"83ffff06",
+869 => x"70892a70",
+870 => x"81065156",
+871 => x"59567380",
+872 => x"2e82fa38",
+873 => x"7575278d",
+874 => x"3877872a",
+875 => x"70810651",
+876 => x"547382b5",
+877 => x"38747627",
+878 => x"83387456",
+879 => x"75537852",
+880 => x"79085190",
+881 => x"f83f881a",
+882 => x"08763188",
+883 => x"1b0c7908",
+884 => x"167a0c74",
+885 => x"56751975",
+886 => x"77317f88",
+887 => x"05087831",
+888 => x"70618805",
+889 => x"0c565659",
+890 => x"73802efe",
+891 => x"f4388c1a",
+892 => x"2258ff86",
+893 => x"39777854",
+894 => x"79537b52",
+895 => x"5690be3f",
+896 => x"881a0878",
+897 => x"31881b0c",
+898 => x"7908187a",
+899 => x"0c7c7631",
+900 => x"5d7c8e38",
+901 => x"79519c8a",
+902 => x"3f800881",
+903 => x"8f388008",
+904 => x"5f751975",
+905 => x"77317f88",
+906 => x"05087831",
+907 => x"70618805",
+908 => x"0c565659",
+909 => x"73802efe",
+910 => x"a8387481",
+911 => x"83387608",
+912 => x"84180888",
+913 => x"19595659",
+914 => x"74802ef2",
+915 => x"3874538a",
+916 => x"5278518e",
+917 => x"c93f8008",
+918 => x"79318105",
+919 => x"5d800884",
+920 => x"3881155d",
+921 => x"815f7c58",
+922 => x"747d2783",
+923 => x"38745894",
+924 => x"1a08881b",
+925 => x"0811575c",
+926 => x"807a085c",
+927 => x"54901a08",
+928 => x"7b278338",
+929 => x"81547578",
+930 => x"25843873",
+931 => x"ba387b78",
+932 => x"24fee238",
+933 => x"7b537852",
+934 => x"9c1a0851",
+935 => x"a41a0854",
+936 => x"732d8008",
+937 => x"56800880",
+938 => x"24fee238",
+939 => x"8c1a2280",
+940 => x"c0075473",
+941 => x"8c1b23ff",
+942 => x"5473800c",
+943 => x"903d0d04",
+944 => x"7effa338",
+945 => x"ff873975",
+946 => x"5378527a",
+947 => x"518eee3f",
+948 => x"7908167a",
+949 => x"0c79519a",
+950 => x"c93f8008",
+951 => x"cf387c76",
+952 => x"315d7cfe",
+953 => x"bc38feac",
+954 => x"39901a08",
+955 => x"7a087131",
+956 => x"76117056",
+957 => x"5a575280",
+958 => x"d6fc0851",
+959 => x"90843f80",
+960 => x"08802eff",
+961 => x"a7388008",
+962 => x"901b0c80",
+963 => x"08167a0c",
+964 => x"77941b0c",
+965 => x"74881b0c",
+966 => x"7456fd99",
+967 => x"39790858",
+968 => x"901a0878",
+969 => x"27833881",
+970 => x"54757527",
+971 => x"843873b3",
+972 => x"38941a08",
+973 => x"56757526",
+974 => x"80d33875",
+975 => x"5378529c",
+976 => x"1a0851a4",
+977 => x"1a085473",
+978 => x"2d800856",
+979 => x"80088024",
+980 => x"fd83388c",
+981 => x"1a2280c0",
+982 => x"0754738c",
+983 => x"1b23ff54",
+984 => x"fed73975",
+985 => x"53785277",
+986 => x"518dd23f",
+987 => x"7908167a",
+988 => x"0c795199",
+989 => x"ad3f8008",
+990 => x"802efcd9",
+991 => x"388c1a22",
+992 => x"80c00754",
+993 => x"738c1b23",
+994 => x"ff54fead",
+995 => x"39747554",
+996 => x"79537852",
+997 => x"568da63f",
+998 => x"881a0875",
+999 => x"31881b0c",
+1000 => x"7908157a",
+1001 => x"0cfcae39",
+1002 => x"f33d0d7f",
+1003 => x"618b1170",
+1004 => x"f8065c55",
+1005 => x"555e7296",
+1006 => x"26833890",
+1007 => x"59807924",
+1008 => x"747a2607",
+1009 => x"53805472",
+1010 => x"742e0981",
+1011 => x"0680cb38",
+1012 => x"7d518eac",
+1013 => x"3f7883f7",
+1014 => x"2680c638",
+1015 => x"78832a70",
+1016 => x"10101080",
+1017 => x"deb8058c",
+1018 => x"11085959",
+1019 => x"5a76782e",
+1020 => x"83b03884",
+1021 => x"1708fc06",
+1022 => x"568c1708",
+1023 => x"88180871",
+1024 => x"8c120c88",
+1025 => x"120c5875",
+1026 => x"17841108",
+1027 => x"81078412",
+1028 => x"0c537d51",
+1029 => x"8deb3f88",
+1030 => x"17547380",
+1031 => x"0c8f3d0d",
+1032 => x"0478892a",
+1033 => x"79832a5b",
+1034 => x"5372802e",
+1035 => x"bf387886",
+1036 => x"2ab8055a",
+1037 => x"847327b4",
+1038 => x"3880db13",
+1039 => x"5a947327",
+1040 => x"ab38788c",
+1041 => x"2a80ee05",
+1042 => x"5a80d473",
+1043 => x"279e3878",
+1044 => x"8f2a80f7",
+1045 => x"055a82d4",
+1046 => x"73279138",
+1047 => x"78922a80",
+1048 => x"fc055a8a",
+1049 => x"d4732784",
+1050 => x"3880fe5a",
+1051 => x"79101010",
+1052 => x"80deb805",
+1053 => x"8c110858",
+1054 => x"5576752e",
+1055 => x"a3388417",
+1056 => x"08fc0670",
+1057 => x"7a315556",
+1058 => x"738f2488",
+1059 => x"d5387380",
+1060 => x"25fee638",
+1061 => x"8c170857",
+1062 => x"76752e09",
+1063 => x"8106df38",
+1064 => x"811a5a80",
+1065 => x"dec80857",
+1066 => x"7680dec0",
+1067 => x"2e82c038",
+1068 => x"841708fc",
+1069 => x"06707a31",
+1070 => x"5556738f",
+1071 => x"2481f938",
+1072 => x"80dec00b",
+1073 => x"80decc0c",
+1074 => x"80dec00b",
+1075 => x"80dec80c",
+1076 => x"738025fe",
+1077 => x"b23883ff",
+1078 => x"762783df",
+1079 => x"3875892a",
+1080 => x"76832a55",
+1081 => x"5372802e",
+1082 => x"bf387586",
+1083 => x"2ab80554",
+1084 => x"847327b4",
+1085 => x"3880db13",
+1086 => x"54947327",
+1087 => x"ab38758c",
+1088 => x"2a80ee05",
+1089 => x"5480d473",
+1090 => x"279e3875",
+1091 => x"8f2a80f7",
+1092 => x"055482d4",
+1093 => x"73279138",
+1094 => x"75922a80",
+1095 => x"fc05548a",
+1096 => x"d4732784",
+1097 => x"3880fe54",
+1098 => x"73101010",
+1099 => x"80deb805",
+1100 => x"88110856",
+1101 => x"5874782e",
+1102 => x"86cf3884",
+1103 => x"1508fc06",
+1104 => x"53757327",
+1105 => x"8d388815",
+1106 => x"08557478",
+1107 => x"2e098106",
+1108 => x"ea388c15",
+1109 => x"0880deb8",
+1110 => x"0b840508",
+1111 => x"718c1a0c",
+1112 => x"76881a0c",
+1113 => x"7888130c",
+1114 => x"788c180c",
+1115 => x"5d587953",
+1116 => x"807a2483",
+1117 => x"e6387282",
+1118 => x"2c81712b",
+1119 => x"5c537a7c",
+1120 => x"26819838",
+1121 => x"7b7b0653",
+1122 => x"7282f138",
+1123 => x"79fc0684",
+1124 => x"055a7a10",
+1125 => x"707d0654",
+1126 => x"5b7282e0",
+1127 => x"38841a5a",
+1128 => x"f1398817",
+1129 => x"8c110858",
+1130 => x"5876782e",
+1131 => x"098106fc",
+1132 => x"c238821a",
+1133 => x"5afdec39",
+1134 => x"78177981",
+1135 => x"0784190c",
+1136 => x"7080decc",
+1137 => x"0c7080de",
+1138 => x"c80c80de",
+1139 => x"c00b8c12",
+1140 => x"0c8c1108",
+1141 => x"88120c74",
+1142 => x"81078412",
+1143 => x"0c741175",
+1144 => x"710c5153",
+1145 => x"7d518a99",
+1146 => x"3f881754",
+1147 => x"fcac3980",
+1148 => x"deb80b84",
+1149 => x"05087a54",
+1150 => x"5c798025",
+1151 => x"fef83882",
+1152 => x"da397a09",
+1153 => x"7c067080",
+1154 => x"deb80b84",
+1155 => x"050c5c7a",
+1156 => x"105b7a7c",
+1157 => x"2685387a",
+1158 => x"85b83880",
+1159 => x"deb80b88",
+1160 => x"05087084",
+1161 => x"1208fc06",
+1162 => x"707c317c",
+1163 => x"72268f72",
+1164 => x"25075757",
+1165 => x"5c5d5572",
+1166 => x"802e80db",
+1167 => x"38797a16",
+1168 => x"80deb008",
+1169 => x"1b90115a",
+1170 => x"55575b80",
+1171 => x"deac08ff",
+1172 => x"2e8838a0",
+1173 => x"8f13e080",
+1174 => x"06577652",
+1175 => x"7d5191a7",
+1176 => x"3f800854",
+1177 => x"8008ff2e",
+1178 => x"90388008",
+1179 => x"76278299",
+1180 => x"387480de",
+1181 => x"b82e8291",
+1182 => x"3880deb8",
+1183 => x"0b880508",
+1184 => x"55841508",
+1185 => x"fc06707a",
+1186 => x"317a7226",
+1187 => x"8f722507",
+1188 => x"52555372",
+1189 => x"83e63874",
+1190 => x"79810784",
+1191 => x"170c7916",
+1192 => x"7080deb8",
+1193 => x"0b88050c",
+1194 => x"75810784",
+1195 => x"120c547e",
+1196 => x"525788cd",
+1197 => x"3f881754",
+1198 => x"fae03975",
+1199 => x"832a7054",
+1200 => x"54807424",
+1201 => x"819b3872",
+1202 => x"822c8171",
+1203 => x"2b80debc",
+1204 => x"08077080",
+1205 => x"deb80b84",
+1206 => x"050c7510",
+1207 => x"101080de",
+1208 => x"b8058811",
+1209 => x"08585a5d",
+1210 => x"53778c18",
+1211 => x"0c748818",
+1212 => x"0c768819",
+1213 => x"0c768c16",
+1214 => x"0cfcf339",
+1215 => x"797a1010",
+1216 => x"1080deb8",
+1217 => x"05705759",
+1218 => x"5d8c1508",
+1219 => x"5776752e",
+1220 => x"a3388417",
+1221 => x"08fc0670",
+1222 => x"7a315556",
+1223 => x"738f2483",
+1224 => x"ca387380",
+1225 => x"25848138",
+1226 => x"8c170857",
+1227 => x"76752e09",
+1228 => x"8106df38",
+1229 => x"8815811b",
+1230 => x"70830655",
+1231 => x"5b5572c9",
+1232 => x"387c8306",
+1233 => x"5372802e",
+1234 => x"fdb838ff",
+1235 => x"1df81959",
+1236 => x"5d881808",
+1237 => x"782eea38",
+1238 => x"fdb53983",
+1239 => x"1a53fc96",
+1240 => x"39831470",
+1241 => x"822c8171",
+1242 => x"2b80debc",
+1243 => x"08077080",
+1244 => x"deb80b84",
+1245 => x"050c7610",
+1246 => x"101080de",
+1247 => x"b8058811",
+1248 => x"08595b5e",
+1249 => x"5153fee1",
+1250 => x"3980ddfc",
+1251 => x"08175880",
+1252 => x"08762e81",
+1253 => x"8d3880de",
+1254 => x"ac08ff2e",
+1255 => x"83ec3873",
+1256 => x"76311880",
+1257 => x"ddfc0c73",
+1258 => x"87067057",
+1259 => x"5372802e",
+1260 => x"88388873",
+1261 => x"31701555",
+1262 => x"5676149f",
+1263 => x"ff06a080",
+1264 => x"71311770",
+1265 => x"547f5357",
+1266 => x"538ebc3f",
+1267 => x"80085380",
+1268 => x"08ff2e81",
+1269 => x"a03880dd",
+1270 => x"fc081670",
+1271 => x"80ddfc0c",
+1272 => x"747580de",
+1273 => x"b80b8805",
+1274 => x"0c747631",
+1275 => x"18708107",
+1276 => x"51555658",
+1277 => x"7b80deb8",
+1278 => x"2e839c38",
+1279 => x"798f2682",
+1280 => x"cb38810b",
+1281 => x"84150c84",
+1282 => x"1508fc06",
+1283 => x"707a317a",
+1284 => x"72268f72",
+1285 => x"25075255",
+1286 => x"5372802e",
+1287 => x"fcf93880",
+1288 => x"db398008",
+1289 => x"9fff0653",
+1290 => x"72feeb38",
+1291 => x"7780ddfc",
+1292 => x"0c80deb8",
+1293 => x"0b880508",
+1294 => x"7b188107",
+1295 => x"84120c55",
+1296 => x"80dea808",
+1297 => x"78278638",
+1298 => x"7780dea8",
+1299 => x"0c80dea4",
+1300 => x"087827fc",
+1301 => x"ac387780",
+1302 => x"dea40c84",
+1303 => x"1508fc06",
+1304 => x"707a317a",
+1305 => x"72268f72",
+1306 => x"25075255",
+1307 => x"5372802e",
+1308 => x"fca53888",
+1309 => x"39807454",
+1310 => x"56fedb39",
+1311 => x"7d518581",
+1312 => x"3f800b80",
+1313 => x"0c8f3d0d",
+1314 => x"04735380",
+1315 => x"7424a938",
+1316 => x"72822c81",
+1317 => x"712b80de",
+1318 => x"bc080770",
+1319 => x"80deb80b",
+1320 => x"84050c5d",
+1321 => x"53778c18",
+1322 => x"0c748818",
+1323 => x"0c768819",
+1324 => x"0c768c16",
+1325 => x"0cf9b739",
+1326 => x"83147082",
+1327 => x"2c81712b",
+1328 => x"80debc08",
+1329 => x"077080de",
+1330 => x"b80b8405",
+1331 => x"0c5e5153",
+1332 => x"d4397b7b",
+1333 => x"065372fc",
+1334 => x"a338841a",
+1335 => x"7b105c5a",
+1336 => x"f139ff1a",
+1337 => x"8111515a",
+1338 => x"f7b93978",
+1339 => x"17798107",
+1340 => x"84190c8c",
+1341 => x"18088819",
+1342 => x"08718c12",
+1343 => x"0c88120c",
+1344 => x"597080de",
+1345 => x"cc0c7080",
+1346 => x"dec80c80",
+1347 => x"dec00b8c",
+1348 => x"120c8c11",
+1349 => x"0888120c",
+1350 => x"74810784",
+1351 => x"120c7411",
+1352 => x"75710c51",
+1353 => x"53f9bd39",
+1354 => x"75178411",
+1355 => x"08810784",
+1356 => x"120c538c",
+1357 => x"17088818",
+1358 => x"08718c12",
+1359 => x"0c88120c",
+1360 => x"587d5183",
+1361 => x"bc3f8817",
+1362 => x"54f5cf39",
+1363 => x"7284150c",
+1364 => x"f41af806",
+1365 => x"70841e08",
+1366 => x"81060784",
+1367 => x"1e0c701d",
+1368 => x"545b850b",
+1369 => x"84140c85",
+1370 => x"0b88140c",
+1371 => x"8f7b27fd",
+1372 => x"cf38881c",
+1373 => x"527d5193",
+1374 => x"e73f80de",
+1375 => x"b80b8805",
+1376 => x"0880ddfc",
+1377 => x"085955fd",
+1378 => x"b7397780",
+1379 => x"ddfc0c73",
+1380 => x"80deac0c",
+1381 => x"fc913972",
+1382 => x"84150cfd",
+1383 => x"a339fa3d",
+1384 => x"0d7a7902",
+1385 => x"8805a705",
+1386 => x"33565253",
+1387 => x"8373278a",
+1388 => x"38708306",
+1389 => x"5271802e",
+1390 => x"a838ff13",
+1391 => x"5372ff2e",
+1392 => x"97387033",
+1393 => x"5273722e",
+1394 => x"91388111",
+1395 => x"ff145451",
+1396 => x"72ff2e09",
+1397 => x"8106eb38",
+1398 => x"80517080",
+1399 => x"0c883d0d",
+1400 => x"04707257",
+1401 => x"55835175",
+1402 => x"82802914",
+1403 => x"ff125256",
+1404 => x"708025f3",
+1405 => x"38837327",
+1406 => x"bf387408",
+1407 => x"76327009",
+1408 => x"f7fbfdff",
+1409 => x"120670f8",
+1410 => x"84828180",
+1411 => x"06515151",
+1412 => x"70802e99",
+1413 => x"38745180",
+1414 => x"52703357",
+1415 => x"73772eff",
+1416 => x"b9388111",
+1417 => x"81135351",
+1418 => x"837227ed",
+1419 => x"38fc1384",
+1420 => x"16565372",
+1421 => x"8326c338",
+1422 => x"7451fefe",
+1423 => x"39fa3d0d",
+1424 => x"787a7c72",
+1425 => x"72725757",
+1426 => x"57595656",
+1427 => x"747627b2",
+1428 => x"38761551",
+1429 => x"757127aa",
+1430 => x"38707717",
+1431 => x"ff145455",
+1432 => x"5371ff2e",
+1433 => x"9638ff14",
+1434 => x"ff145454",
+1435 => x"72337434",
+1436 => x"ff125271",
+1437 => x"ff2e0981",
+1438 => x"06ec3875",
+1439 => x"800c883d",
+1440 => x"0d04768f",
+1441 => x"269738ff",
+1442 => x"125271ff",
+1443 => x"2eed3872",
+1444 => x"70810554",
+1445 => x"33747081",
+1446 => x"055634eb",
+1447 => x"39747607",
+1448 => x"83065170",
+1449 => x"e2387575",
+1450 => x"54517270",
+1451 => x"84055408",
+1452 => x"71708405",
+1453 => x"530c7270",
+1454 => x"84055408",
+1455 => x"71708405",
+1456 => x"530c7270",
+1457 => x"84055408",
+1458 => x"71708405",
+1459 => x"530c7270",
+1460 => x"84055408",
+1461 => x"71708405",
+1462 => x"530cf012",
+1463 => x"52718f26",
+1464 => x"c9388372",
+1465 => x"27953872",
+1466 => x"70840554",
+1467 => x"08717084",
+1468 => x"05530cfc",
+1469 => x"12527183",
+1470 => x"26ed3870",
+1471 => x"54ff8839",
+1472 => x"0404ef3d",
+1473 => x"0d636567",
+1474 => x"405d427b",
+1475 => x"802e84f9",
+1476 => x"386151ec",
+1477 => x"3ff81c70",
+1478 => x"84120870",
+1479 => x"fc067062",
+1480 => x"8b0570f8",
+1481 => x"06415945",
+1482 => x"5b5c4157",
+1483 => x"96742782",
+1484 => x"c338807b",
+1485 => x"247e7c26",
+1486 => x"07598054",
+1487 => x"78742e09",
+1488 => x"810682a9",
+1489 => x"38777b25",
+1490 => x"81fc3877",
+1491 => x"1780deb8",
+1492 => x"0b880508",
+1493 => x"5e567c76",
+1494 => x"2e84bd38",
+1495 => x"84160870",
+1496 => x"fe061784",
+1497 => x"11088106",
+1498 => x"51555573",
+1499 => x"828b3874",
+1500 => x"fc06597c",
+1501 => x"762e84dd",
+1502 => x"3877195f",
+1503 => x"7e7b2581",
+1504 => x"fd387981",
+1505 => x"06547382",
+1506 => x"bf387677",
+1507 => x"08318411",
+1508 => x"08fc0656",
+1509 => x"5a75802e",
+1510 => x"91387c76",
+1511 => x"2e84ea38",
+1512 => x"74191859",
+1513 => x"787b2584",
+1514 => x"89387980",
+1515 => x"2e829938",
+1516 => x"7715567a",
+1517 => x"76248290",
+1518 => x"388c1a08",
+1519 => x"881b0871",
+1520 => x"8c120c88",
+1521 => x"120c5579",
+1522 => x"76595788",
+1523 => x"1761fc05",
+1524 => x"575975a4",
+1525 => x"2685ef38",
+1526 => x"7b795555",
+1527 => x"93762780",
+1528 => x"c9387b70",
+1529 => x"84055d08",
+1530 => x"7c56790c",
+1531 => x"74708405",
+1532 => x"56088c18",
+1533 => x"0c901754",
+1534 => x"9b7627ae",
+1535 => x"38747084",
+1536 => x"05560874",
+1537 => x"0c747084",
+1538 => x"05560894",
+1539 => x"180c9817",
+1540 => x"54a37627",
+1541 => x"95387470",
+1542 => x"84055608",
+1543 => x"740c7470",
+1544 => x"84055608",
+1545 => x"9c180ca0",
+1546 => x"17547470",
+1547 => x"84055608",
+1548 => x"74708405",
+1549 => x"560c7470",
+1550 => x"84055608",
+1551 => x"74708405",
+1552 => x"560c7408",
+1553 => x"740c777b",
+1554 => x"3156758f",
+1555 => x"2680c938",
+1556 => x"84170881",
+1557 => x"06780784",
+1558 => x"180c7717",
+1559 => x"84110881",
+1560 => x"0784120c",
+1561 => x"546151fd",
+1562 => x"983f8817",
+1563 => x"5473800c",
+1564 => x"933d0d04",
+1565 => x"905bfdba",
+1566 => x"397856fe",
+1567 => x"85398c16",
+1568 => x"08881708",
+1569 => x"718c120c",
+1570 => x"88120c55",
+1571 => x"7e707c31",
+1572 => x"57588f76",
+1573 => x"27ffb938",
+1574 => x"7a178418",
+1575 => x"0881067c",
+1576 => x"0784190c",
+1577 => x"76810784",
+1578 => x"120c7611",
+1579 => x"84110881",
+1580 => x"0784120c",
+1581 => x"55880552",
+1582 => x"61518da4",
+1583 => x"3f6151fc",
+1584 => x"c03f8817",
+1585 => x"54ffa639",
+1586 => x"7d526151",
+1587 => x"edda3f80",
+1588 => x"08598008",
+1589 => x"802e81a3",
+1590 => x"388008f8",
+1591 => x"05608405",
+1592 => x"08fe0661",
+1593 => x"05555776",
+1594 => x"742e83e6",
+1595 => x"38fc1856",
+1596 => x"75a42681",
+1597 => x"aa387b80",
+1598 => x"08555593",
+1599 => x"762780d8",
+1600 => x"38747084",
+1601 => x"05560880",
+1602 => x"08708405",
+1603 => x"800c0c80",
+1604 => x"08757084",
+1605 => x"05570871",
+1606 => x"70840553",
+1607 => x"0c549b76",
+1608 => x"27b63874",
+1609 => x"70840556",
+1610 => x"08747084",
+1611 => x"05560c74",
+1612 => x"70840556",
+1613 => x"08747084",
+1614 => x"05560ca3",
+1615 => x"76279938",
+1616 => x"74708405",
+1617 => x"56087470",
+1618 => x"8405560c",
+1619 => x"74708405",
+1620 => x"56087470",
+1621 => x"8405560c",
+1622 => x"74708405",
+1623 => x"56087470",
+1624 => x"8405560c",
+1625 => x"74708405",
+1626 => x"56087470",
+1627 => x"8405560c",
+1628 => x"7408740c",
+1629 => x"7b526151",
+1630 => x"8be63f61",
+1631 => x"51fb823f",
+1632 => x"78547380",
+1633 => x"0c933d0d",
+1634 => x"047d5261",
+1635 => x"51ec993f",
+1636 => x"8008800c",
+1637 => x"933d0d04",
+1638 => x"84160855",
+1639 => x"fbd13975",
+1640 => x"537b5280",
+1641 => x"0851dfde",
+1642 => x"3f7b5261",
+1643 => x"518bb13f",
+1644 => x"ca398c16",
+1645 => x"08881708",
+1646 => x"718c120c",
+1647 => x"88120c55",
+1648 => x"8c1a0888",
+1649 => x"1b08718c",
+1650 => x"120c8812",
+1651 => x"0c557979",
+1652 => x"5957fbf7",
+1653 => x"39771990",
+1654 => x"1c555573",
+1655 => x"7524fba2",
+1656 => x"387a1770",
+1657 => x"80deb80b",
+1658 => x"88050c75",
+1659 => x"7c318107",
+1660 => x"84120c5d",
+1661 => x"84170881",
+1662 => x"067b0784",
+1663 => x"180c6151",
+1664 => x"f9ff3f88",
+1665 => x"1754fce5",
+1666 => x"39741918",
+1667 => x"901c555d",
+1668 => x"737d24fb",
+1669 => x"95388c1a",
+1670 => x"08881b08",
+1671 => x"718c120c",
+1672 => x"88120c55",
+1673 => x"881a61fc",
+1674 => x"05575975",
+1675 => x"a42681ae",
+1676 => x"387b7955",
+1677 => x"55937627",
+1678 => x"80c9387b",
+1679 => x"7084055d",
+1680 => x"087c5679",
+1681 => x"0c747084",
+1682 => x"0556088c",
+1683 => x"1b0c901a",
+1684 => x"549b7627",
+1685 => x"ae387470",
+1686 => x"84055608",
+1687 => x"740c7470",
+1688 => x"84055608",
+1689 => x"941b0c98",
+1690 => x"1a54a376",
+1691 => x"27953874",
+1692 => x"70840556",
+1693 => x"08740c74",
+1694 => x"70840556",
+1695 => x"089c1b0c",
+1696 => x"a01a5474",
+1697 => x"70840556",
+1698 => x"08747084",
+1699 => x"05560c74",
+1700 => x"70840556",
+1701 => x"08747084",
+1702 => x"05560c74",
+1703 => x"08740c7a",
+1704 => x"1a7080de",
+1705 => x"b80b8805",
+1706 => x"0c7d7c31",
+1707 => x"81078412",
+1708 => x"0c54841a",
+1709 => x"0881067b",
+1710 => x"07841b0c",
+1711 => x"6151f8c1",
+1712 => x"3f7854fd",
+1713 => x"bd397553",
+1714 => x"7b527851",
+1715 => x"ddb83ffa",
+1716 => x"f5398417",
+1717 => x"08fc0618",
+1718 => x"605858fa",
+1719 => x"e9397553",
+1720 => x"7b527851",
+1721 => x"dda03f7a",
+1722 => x"1a7080de",
+1723 => x"b80b8805",
+1724 => x"0c7d7c31",
+1725 => x"81078412",
+1726 => x"0c54841a",
+1727 => x"0881067b",
+1728 => x"07841b0c",
+1729 => x"ffb63970",
+1730 => x"70707080",
+1731 => x"0b80e780",
+1732 => x"0c765196",
+1733 => x"cc3f8008",
+1734 => x"538008ff",
+1735 => x"2e893872",
+1736 => x"800c5050",
+1737 => x"50500480",
+1738 => x"e7800854",
+1739 => x"73802eef",
+1740 => x"38757471",
+1741 => x"0c527280",
+1742 => x"0c505050",
+1743 => x"5004fa3d",
+1744 => x"0d7880d6",
+1745 => x"fc085455",
+1746 => x"b8130880",
+1747 => x"2e81b638",
+1748 => x"8c152270",
+1749 => x"83ffff06",
+1750 => x"70832a81",
+1751 => x"32708106",
+1752 => x"51555556",
+1753 => x"72802e80",
+1754 => x"dc387384",
+1755 => x"2a813281",
+1756 => x"0657ff53",
+1757 => x"7680f738",
+1758 => x"73822a70",
+1759 => x"81065153",
+1760 => x"72802eb9",
+1761 => x"38b01508",
+1762 => x"5473802e",
+1763 => x"9c3880c0",
+1764 => x"15537373",
+1765 => x"2e8f3873",
+1766 => x"5280d6fc",
+1767 => x"085187c0",
+1768 => x"3f8c1522",
+1769 => x"5676b016",
+1770 => x"0c75db06",
+1771 => x"53728c16",
+1772 => x"23800b84",
+1773 => x"160c9015",
+1774 => x"08750c72",
+1775 => x"56758807",
+1776 => x"53728c16",
+1777 => x"23901508",
+1778 => x"802e80c1",
+1779 => x"388c1522",
+1780 => x"70810655",
+1781 => x"53739e38",
+1782 => x"720a100a",
+1783 => x"70810651",
+1784 => x"53728538",
+1785 => x"94150854",
+1786 => x"7388160c",
+1787 => x"80537280",
+1788 => x"0c883d0d",
+1789 => x"04800b88",
+1790 => x"160c9415",
+1791 => x"08309816",
+1792 => x"0c8053ea",
+1793 => x"39725182",
+1794 => x"f73ffec4",
+1795 => x"3974518c",
+1796 => x"de3f8c15",
+1797 => x"22708106",
+1798 => x"55537380",
+1799 => x"2effb938",
+1800 => x"d439f83d",
+1801 => x"0d7a5877",
+1802 => x"802e8199",
+1803 => x"3880d6fc",
+1804 => x"0854b814",
+1805 => x"08802e80",
+1806 => x"ed388c18",
+1807 => x"2270902b",
+1808 => x"70902c70",
+1809 => x"832a8132",
+1810 => x"81065c51",
+1811 => x"57547880",
+1812 => x"cd389018",
+1813 => x"08577680",
+1814 => x"2e80c338",
+1815 => x"77087731",
+1816 => x"77790c76",
+1817 => x"83067a58",
+1818 => x"55557385",
+1819 => x"38941808",
+1820 => x"56758819",
+1821 => x"0c807525",
+1822 => x"a5387453",
+1823 => x"76529c18",
+1824 => x"0851a418",
+1825 => x"0854732d",
+1826 => x"800b8008",
+1827 => x"2580c938",
+1828 => x"80081775",
+1829 => x"80083156",
+1830 => x"57748024",
+1831 => x"dd38800b",
+1832 => x"800c8a3d",
+1833 => x"0d047351",
+1834 => x"81d63f8c",
+1835 => x"18227090",
+1836 => x"2b70902c",
+1837 => x"70832a81",
+1838 => x"3281065c",
+1839 => x"51575478",
+1840 => x"dd38ff8e",
+1841 => x"39b8a252",
+1842 => x"80d6fc08",
+1843 => x"5189e73f",
+1844 => x"8008800c",
+1845 => x"8a3d0d04",
+1846 => x"8c182280",
+1847 => x"c0075473",
+1848 => x"8c1923ff",
+1849 => x"0b800c8a",
+1850 => x"3d0d0470",
+1851 => x"72518071",
+1852 => x"0c800b84",
+1853 => x"120c800b",
+1854 => x"88120c02",
+1855 => x"8e05228c",
+1856 => x"12230292",
+1857 => x"05228e12",
+1858 => x"23800b90",
+1859 => x"120c800b",
+1860 => x"94120c80",
+1861 => x"0b98120c",
+1862 => x"709c120c",
+1863 => x"80c8810b",
+1864 => x"a0120c80",
+1865 => x"c8cd0ba4",
+1866 => x"120c80c9",
+1867 => x"c90ba812",
+1868 => x"0c80ca9a",
+1869 => x"0bac120c",
+1870 => x"5004fa3d",
+1871 => x"0d797080",
+1872 => x"dc298c11",
+1873 => x"547a5356",
+1874 => x"57e4dd3f",
+1875 => x"80088008",
+1876 => x"55568008",
+1877 => x"802ea238",
+1878 => x"80088c05",
+1879 => x"54800b80",
+1880 => x"080c7680",
+1881 => x"0884050c",
+1882 => x"73800888",
+1883 => x"050c7453",
+1884 => x"80527351",
+1885 => x"8bfc3f75",
+1886 => x"5473800c",
+1887 => x"883d0d04",
+1888 => x"fc3d0d76",
+1889 => x"bd930bbc",
+1890 => x"120c5581",
+1891 => x"0bb8160c",
+1892 => x"800b84dc",
+1893 => x"160c830b",
+1894 => x"84e0160c",
+1895 => x"84e81584",
+1896 => x"e4160c74",
+1897 => x"54805384",
+1898 => x"52841508",
+1899 => x"51febc3f",
+1900 => x"74548153",
+1901 => x"89528815",
+1902 => x"0851feaf",
+1903 => x"3f745482",
+1904 => x"538a528c",
+1905 => x"150851fe",
+1906 => x"a23f863d",
+1907 => x"0d04f93d",
+1908 => x"0d7980d6",
+1909 => x"fc085457",
+1910 => x"b8130880",
+1911 => x"2e80c838",
+1912 => x"84dc1356",
+1913 => x"88160884",
+1914 => x"1708ff05",
+1915 => x"55558074",
+1916 => x"249f388c",
+1917 => x"15227090",
+1918 => x"2b70902c",
+1919 => x"51545872",
+1920 => x"802e80ca",
+1921 => x"3880dc15",
+1922 => x"ff155555",
+1923 => x"738025e3",
+1924 => x"38750853",
+1925 => x"72802e9f",
+1926 => x"38725688",
+1927 => x"16088417",
+1928 => x"08ff0555",
+1929 => x"55c83972",
+1930 => x"51fed53f",
+1931 => x"80d6fc08",
+1932 => x"84dc0556",
+1933 => x"ffae3984",
+1934 => x"527651fd",
+1935 => x"fd3f8008",
+1936 => x"760c8008",
+1937 => x"802e80c0",
+1938 => x"38800856",
+1939 => x"ce39810b",
+1940 => x"8c162372",
+1941 => x"750c7288",
+1942 => x"160c7284",
+1943 => x"160c7290",
+1944 => x"160c7294",
+1945 => x"160c7298",
+1946 => x"160cff0b",
+1947 => x"8e162372",
+1948 => x"b0160c72",
+1949 => x"b4160c72",
+1950 => x"80c4160c",
+1951 => x"7280c816",
+1952 => x"0c74800c",
+1953 => x"893d0d04",
+1954 => x"8c770c80",
+1955 => x"0b800c89",
+1956 => x"3d0d0470",
+1957 => x"70b8a252",
+1958 => x"7351869a",
+1959 => x"3f505004",
+1960 => x"7080d6fc",
+1961 => x"0851ec3f",
+1962 => x"5004fb3d",
+1963 => x"0d777052",
+1964 => x"56f0cd3f",
+1965 => x"80deb80b",
+1966 => x"88050884",
+1967 => x"1108fc06",
+1968 => x"707b319f",
+1969 => x"ef05e080",
+1970 => x"06e08005",
+1971 => x"565653a0",
+1972 => x"80742494",
+1973 => x"38805275",
+1974 => x"51f8ac3f",
+1975 => x"80dec008",
+1976 => x"15537280",
+1977 => x"082e8f38",
+1978 => x"7551f095",
+1979 => x"3f805372",
+1980 => x"800c873d",
+1981 => x"0d047330",
+1982 => x"527551f8",
+1983 => x"8a3f8008",
+1984 => x"ff2ea838",
+1985 => x"80deb80b",
+1986 => x"88050875",
+1987 => x"75318107",
+1988 => x"84120c53",
+1989 => x"80ddfc08",
+1990 => x"743180dd",
+1991 => x"fc0c7551",
+1992 => x"efdf3f81",
+1993 => x"0b800c87",
+1994 => x"3d0d0480",
+1995 => x"527551f7",
+1996 => x"d63f80de",
+1997 => x"b80b8805",
+1998 => x"08800871",
+1999 => x"3156538f",
+2000 => x"7525ffa4",
+2001 => x"38800880",
+2002 => x"deac0831",
+2003 => x"80ddfc0c",
+2004 => x"74810784",
+2005 => x"140c7551",
+2006 => x"efa73f80",
+2007 => x"53ff9039",
+2008 => x"f63d0d7c",
+2009 => x"7e545b72",
+2010 => x"802e8283",
+2011 => x"387a51ef",
+2012 => x"8f3ff813",
+2013 => x"84110870",
+2014 => x"fe067013",
+2015 => x"841108fc",
+2016 => x"065d5859",
+2017 => x"545880de",
+2018 => x"c008752e",
+2019 => x"82de3878",
+2020 => x"84160c80",
+2021 => x"73810654",
+2022 => x"5a727a2e",
+2023 => x"81d53878",
+2024 => x"15841108",
+2025 => x"81065153",
+2026 => x"72a03878",
+2027 => x"17577981",
+2028 => x"e6388815",
+2029 => x"08537280",
+2030 => x"dec02e82",
+2031 => x"f9388c15",
+2032 => x"08708c15",
+2033 => x"0c738812",
+2034 => x"0c567681",
+2035 => x"0784190c",
+2036 => x"76187771",
+2037 => x"0c537981",
+2038 => x"913883ff",
+2039 => x"772781c8",
+2040 => x"3876892a",
+2041 => x"77832a56",
+2042 => x"5372802e",
+2043 => x"bf387686",
+2044 => x"2ab80555",
+2045 => x"847327b4",
+2046 => x"3880db13",
+2047 => x"55947327",
+2048 => x"ab38768c",
+2049 => x"2a80ee05",
+2050 => x"5580d473",
+2051 => x"279e3876",
+2052 => x"8f2a80f7",
+2053 => x"055582d4",
+2054 => x"73279138",
+2055 => x"76922a80",
+2056 => x"fc05558a",
+2057 => x"d4732784",
+2058 => x"3880fe55",
+2059 => x"74101010",
+2060 => x"80deb805",
+2061 => x"88110855",
+2062 => x"5673762e",
+2063 => x"82b33884",
+2064 => x"1408fc06",
+2065 => x"53767327",
+2066 => x"8d388814",
+2067 => x"08547376",
+2068 => x"2e098106",
+2069 => x"ea388c14",
+2070 => x"08708c1a",
+2071 => x"0c74881a",
+2072 => x"0c788812",
+2073 => x"0c56778c",
+2074 => x"150c7a51",
+2075 => x"ed933f8c",
+2076 => x"3d0d0477",
+2077 => x"08787131",
+2078 => x"59770588",
+2079 => x"19085457",
+2080 => x"7280dec0",
+2081 => x"2e80e038",
+2082 => x"8c180870",
+2083 => x"8c150c73",
+2084 => x"88120c56",
+2085 => x"fe893988",
+2086 => x"15088c16",
+2087 => x"08708c13",
+2088 => x"0c578817",
+2089 => x"0cfea339",
+2090 => x"76832a70",
+2091 => x"54558075",
+2092 => x"24819838",
+2093 => x"72822c81",
+2094 => x"712b80de",
+2095 => x"bc080780",
+2096 => x"deb80b84",
+2097 => x"050c5374",
+2098 => x"10101080",
+2099 => x"deb80588",
+2100 => x"11085556",
+2101 => x"758c190c",
+2102 => x"7388190c",
+2103 => x"7788170c",
+2104 => x"778c150c",
+2105 => x"ff843981",
+2106 => x"5afdb439",
+2107 => x"78177381",
+2108 => x"06545772",
+2109 => x"98387708",
+2110 => x"78713159",
+2111 => x"77058c19",
+2112 => x"08881a08",
+2113 => x"718c120c",
+2114 => x"88120c57",
+2115 => x"57768107",
+2116 => x"84190c77",
+2117 => x"80deb80b",
+2118 => x"88050c80",
+2119 => x"deb40877",
+2120 => x"26fec738",
+2121 => x"80deb008",
+2122 => x"527a51fa",
+2123 => x"fd3f7a51",
+2124 => x"ebcf3ffe",
+2125 => x"ba398178",
+2126 => x"8c150c78",
+2127 => x"88150c73",
+2128 => x"8c1a0c73",
+2129 => x"881a0c5a",
+2130 => x"fd803983",
+2131 => x"1570822c",
+2132 => x"81712b80",
+2133 => x"debc0807",
+2134 => x"80deb80b",
+2135 => x"84050c51",
+2136 => x"53741010",
+2137 => x"1080deb8",
+2138 => x"05881108",
+2139 => x"5556fee4",
+2140 => x"39745380",
+2141 => x"7524a738",
+2142 => x"72822c81",
+2143 => x"712b80de",
+2144 => x"bc080780",
+2145 => x"deb80b84",
+2146 => x"050c5375",
+2147 => x"8c190c73",
+2148 => x"88190c77",
+2149 => x"88170c77",
+2150 => x"8c150cfd",
+2151 => x"cd398315",
+2152 => x"70822c81",
+2153 => x"712b80de",
+2154 => x"bc080780",
+2155 => x"deb80b84",
+2156 => x"050c5153",
+2157 => x"d639f93d",
+2158 => x"0d797b58",
+2159 => x"53800b80",
+2160 => x"d6fc0853",
+2161 => x"5672722e",
+2162 => x"80c03884",
+2163 => x"dc135574",
+2164 => x"762eb738",
+2165 => x"88150884",
+2166 => x"1608ff05",
+2167 => x"54548073",
+2168 => x"249d388c",
+2169 => x"14227090",
+2170 => x"2b70902c",
+2171 => x"51535871",
+2172 => x"80d83880",
+2173 => x"dc14ff14",
+2174 => x"54547280",
+2175 => x"25e53874",
+2176 => x"085574d0",
+2177 => x"3880d6fc",
+2178 => x"085284dc",
+2179 => x"12557480",
+2180 => x"2eb13888",
+2181 => x"15088416",
+2182 => x"08ff0554",
+2183 => x"54807324",
+2184 => x"9c388c14",
+2185 => x"2270902b",
+2186 => x"70902c51",
+2187 => x"535871ad",
+2188 => x"3880dc14",
+2189 => x"ff145454",
+2190 => x"728025e6",
+2191 => x"38740855",
+2192 => x"74d13875",
+2193 => x"800c893d",
+2194 => x"0d047351",
+2195 => x"762d7580",
+2196 => x"080780dc",
+2197 => x"15ff1555",
+2198 => x"5556ff9e",
+2199 => x"39735176",
+2200 => x"2d758008",
+2201 => x"0780dc15",
+2202 => x"ff155555",
+2203 => x"56ca39ea",
+2204 => x"3d0d688c",
+2205 => x"1122700a",
+2206 => x"100a8106",
+2207 => x"57585674",
+2208 => x"80e4388e",
+2209 => x"16227090",
+2210 => x"2b70902c",
+2211 => x"51555880",
+2212 => x"7424b138",
+2213 => x"983dc405",
+2214 => x"53735280",
+2215 => x"d6fc0851",
+2216 => x"86833f80",
+2217 => x"0b800824",
+2218 => x"97387983",
+2219 => x"e0800654",
+2220 => x"7380c080",
+2221 => x"2e818f38",
+2222 => x"73828080",
+2223 => x"2e819138",
+2224 => x"8c162257",
+2225 => x"76908007",
+2226 => x"54738c17",
+2227 => x"23888052",
+2228 => x"80d6fc08",
+2229 => x"51d9d13f",
+2230 => x"80089d38",
+2231 => x"8c162282",
+2232 => x"0754738c",
+2233 => x"172380c3",
+2234 => x"1670770c",
+2235 => x"90170c81",
+2236 => x"0b94170c",
+2237 => x"983d0d04",
+2238 => x"80d6fc08",
+2239 => x"bd930bbc",
+2240 => x"120c548c",
+2241 => x"16228180",
+2242 => x"0754738c",
+2243 => x"17238008",
+2244 => x"760c8008",
+2245 => x"90170c88",
+2246 => x"800b9417",
+2247 => x"0c74802e",
+2248 => x"d3388e16",
+2249 => x"2270902b",
+2250 => x"70902c53",
+2251 => x"55588df3",
+2252 => x"3f800880",
+2253 => x"2effbd38",
+2254 => x"8c162281",
+2255 => x"0754738c",
+2256 => x"1723983d",
+2257 => x"0d04810b",
+2258 => x"8c172258",
+2259 => x"55fef539",
+2260 => x"a8160880",
+2261 => x"c9c92e09",
+2262 => x"8106fee4",
+2263 => x"388c1622",
+2264 => x"88800754",
+2265 => x"738c1723",
+2266 => x"88800b80",
+2267 => x"cc170cfe",
+2268 => x"dc39fc3d",
+2269 => x"0d767971",
+2270 => x"028c059f",
+2271 => x"05335755",
+2272 => x"53558372",
+2273 => x"278a3874",
+2274 => x"83065170",
+2275 => x"802ea238",
+2276 => x"ff125271",
+2277 => x"ff2e9338",
+2278 => x"73737081",
+2279 => x"055534ff",
+2280 => x"125271ff",
+2281 => x"2e098106",
+2282 => x"ef387480",
+2283 => x"0c863d0d",
+2284 => x"04747488",
+2285 => x"2b750770",
+2286 => x"71902b07",
+2287 => x"5154518f",
+2288 => x"7227a538",
+2289 => x"72717084",
+2290 => x"05530c72",
+2291 => x"71708405",
+2292 => x"530c7271",
+2293 => x"70840553",
+2294 => x"0c727170",
+2295 => x"8405530c",
+2296 => x"f0125271",
+2297 => x"8f26dd38",
+2298 => x"83722790",
+2299 => x"38727170",
+2300 => x"8405530c",
+2301 => x"fc125271",
+2302 => x"8326f238",
+2303 => x"7053ff90",
+2304 => x"39f93d0d",
+2305 => x"797c557b",
+2306 => x"548e1122",
+2307 => x"70902b70",
+2308 => x"902c5557",
+2309 => x"80d6fc08",
+2310 => x"53585683",
+2311 => x"f63f8008",
+2312 => x"57800b80",
+2313 => x"08249338",
+2314 => x"80d01608",
+2315 => x"80080580",
+2316 => x"d0170c76",
+2317 => x"800c893d",
+2318 => x"0d048c16",
+2319 => x"2283dfff",
+2320 => x"0655748c",
+2321 => x"17237680",
+2322 => x"0c893d0d",
+2323 => x"04fa3d0d",
+2324 => x"788c1122",
+2325 => x"70882a70",
+2326 => x"81065157",
+2327 => x"585674a9",
+2328 => x"388c1622",
+2329 => x"83dfff06",
+2330 => x"55748c17",
+2331 => x"237a5479",
+2332 => x"538e1622",
+2333 => x"70902b70",
+2334 => x"902c5456",
+2335 => x"80d6fc08",
+2336 => x"525681b2",
+2337 => x"3f883d0d",
+2338 => x"04825480",
+2339 => x"538e1622",
+2340 => x"70902b70",
+2341 => x"902c5456",
+2342 => x"80d6fc08",
+2343 => x"525782bb",
+2344 => x"3f8c1622",
+2345 => x"83dfff06",
+2346 => x"55748c17",
+2347 => x"237a5479",
+2348 => x"538e1622",
+2349 => x"70902b70",
+2350 => x"902c5456",
+2351 => x"80d6fc08",
+2352 => x"525680f2",
+2353 => x"3f883d0d",
+2354 => x"04f93d0d",
+2355 => x"797c557b",
+2356 => x"548e1122",
+2357 => x"70902b70",
+2358 => x"902c5557",
+2359 => x"80d6fc08",
+2360 => x"53585681",
+2361 => x"f63f8008",
+2362 => x"578008ff",
+2363 => x"2e99388c",
+2364 => x"1622a080",
+2365 => x"0755748c",
+2366 => x"17238008",
+2367 => x"80d0170c",
+2368 => x"76800c89",
+2369 => x"3d0d048c",
+2370 => x"162283df",
+2371 => x"ff065574",
+2372 => x"8c172376",
+2373 => x"800c893d",
+2374 => x"0d047070",
+2375 => x"70748e11",
+2376 => x"2270902b",
+2377 => x"70902c55",
+2378 => x"51515380",
+2379 => x"d6fc0851",
+2380 => x"bd3f5050",
+2381 => x"5004fb3d",
+2382 => x"0d800b80",
+2383 => x"e7800c7a",
+2384 => x"53795278",
+2385 => x"51839c3f",
+2386 => x"80085580",
+2387 => x"08ff2e88",
+2388 => x"3874800c",
+2389 => x"873d0d04",
+2390 => x"80e78008",
+2391 => x"5675802e",
+2392 => x"f0387776",
+2393 => x"710c5474",
+2394 => x"800c873d",
+2395 => x"0d047070",
+2396 => x"7070800b",
+2397 => x"80e7800c",
+2398 => x"765185a4",
+2399 => x"3f800853",
+2400 => x"8008ff2e",
+2401 => x"89387280",
+2402 => x"0c505050",
+2403 => x"500480e7",
+2404 => x"80085473",
+2405 => x"802eef38",
+2406 => x"7574710c",
+2407 => x"5272800c",
+2408 => x"50505050",
+2409 => x"04fc3d0d",
+2410 => x"800b80e7",
+2411 => x"800c7852",
+2412 => x"775187d4",
+2413 => x"3f800854",
+2414 => x"8008ff2e",
+2415 => x"88387380",
+2416 => x"0c863d0d",
+2417 => x"0480e780",
+2418 => x"08557480",
+2419 => x"2ef03876",
+2420 => x"75710c53",
+2421 => x"73800c86",
+2422 => x"3d0d04fb",
+2423 => x"3d0d800b",
+2424 => x"80e7800c",
+2425 => x"7a537952",
+2426 => x"785185b0",
+2427 => x"3f800855",
+2428 => x"8008ff2e",
+2429 => x"88387480",
+2430 => x"0c873d0d",
+2431 => x"0480e780",
+2432 => x"08567580",
+2433 => x"2ef03877",
+2434 => x"76710c54",
+2435 => x"74800c87",
+2436 => x"3d0d04fb",
+2437 => x"3d0d800b",
+2438 => x"80e7800c",
+2439 => x"7a537952",
+2440 => x"785182b7",
+2441 => x"3f800855",
+2442 => x"8008ff2e",
+2443 => x"88387480",
+2444 => x"0c873d0d",
+2445 => x"0480e780",
+2446 => x"08567580",
+2447 => x"2ef03877",
+2448 => x"76710c54",
+2449 => x"74800c87",
+2450 => x"3d0d0481",
+2451 => x"0b800c04",
+2452 => x"7072812e",
+2453 => x"8738800b",
+2454 => x"800c5004",
+2455 => x"735180fd",
+2456 => x"3f707070",
+2457 => x"80e78408",
+2458 => x"51708a38",
+2459 => x"80e78c70",
+2460 => x"80e7840c",
+2461 => x"51707512",
+2462 => x"5252ff53",
+2463 => x"7087fb80",
+2464 => x"80268838",
+2465 => x"7080e784",
+2466 => x"0c715372",
+2467 => x"800c5050",
+2468 => x"50047070",
+2469 => x"7070800b",
+2470 => x"80d6f008",
+2471 => x"54547281",
+2472 => x"2e9e3873",
+2473 => x"80e7880c",
+2474 => x"ffbbbe3f",
+2475 => x"ffbad13f",
+2476 => x"80e6c052",
+2477 => x"8151ffbe",
+2478 => x"913f8008",
+2479 => x"51879b3f",
+2480 => x"7280e788",
+2481 => x"0cffbba1",
+2482 => x"3fffbab4",
+2483 => x"3f80e6c0",
+2484 => x"528151ff",
+2485 => x"bdf43f80",
+2486 => x"085186fe",
+2487 => x"3f00ff39",
+2488 => x"00ff39f5",
+2489 => x"3d0d7e60",
+2490 => x"80e78808",
+2491 => x"705b585b",
+2492 => x"5b7580c5",
+2493 => x"38777a25",
+2494 => x"a238771b",
+2495 => x"70337081",
+2496 => x"ff065858",
+2497 => x"59758a2e",
+2498 => x"99387681",
+2499 => x"ff0651ff",
+2500 => x"bab83f81",
+2501 => x"18587978",
+2502 => x"24e03879",
+2503 => x"800c8d3d",
+2504 => x"0d048d51",
+2505 => x"ffbaa33f",
+2506 => x"78337081",
+2507 => x"ff065257",
+2508 => x"ffba973f",
+2509 => x"811858de",
+2510 => x"3979557a",
+2511 => x"547d5385",
+2512 => x"528d3dfc",
+2513 => x"0551ffb9",
+2514 => x"e13f8008",
+2515 => x"5686843f",
+2516 => x"7b80080c",
+2517 => x"75800c8d",
+2518 => x"3d0d04f6",
+2519 => x"3d0d7d7f",
+2520 => x"80e78808",
+2521 => x"705a585a",
+2522 => x"5a7580c4",
+2523 => x"38767925",
+2524 => x"b238761a",
+2525 => x"56ffb9b4",
+2526 => x"3f800876",
+2527 => x"34800b80",
+2528 => x"0881ff06",
+2529 => x"5758758a",
+2530 => x"2ea23875",
+2531 => x"8d327030",
+2532 => x"7080257a",
+2533 => x"07515156",
+2534 => x"75b83881",
+2535 => x"17577877",
+2536 => x"24d03876",
+2537 => x"5675800c",
+2538 => x"8c3d0d04",
+2539 => x"8158dc39",
+2540 => x"78557954",
+2541 => x"7c538452",
+2542 => x"8c3dfc05",
+2543 => x"51ffb8ea",
+2544 => x"3f800856",
+2545 => x"858d3f7a",
+2546 => x"80080c75",
+2547 => x"800c8c3d",
+2548 => x"0d048117",
+2549 => x"56cf39f9",
+2550 => x"3d0d7957",
+2551 => x"80e78808",
+2552 => x"802ead38",
+2553 => x"7651c8f8",
+2554 => x"3f7b567a",
+2555 => x"55800881",
+2556 => x"05547653",
+2557 => x"8252893d",
+2558 => x"fc0551ff",
+2559 => x"b8ac3f80",
+2560 => x"085784cf",
+2561 => x"3f778008",
+2562 => x"0c76800c",
+2563 => x"893d0d04",
+2564 => x"84c13f85",
+2565 => x"0b80080c",
+2566 => x"ff0b800c",
+2567 => x"893d0d04",
+2568 => x"fb3d0d80",
+2569 => x"e7880870",
+2570 => x"56547388",
+2571 => x"3874800c",
+2572 => x"873d0d04",
+2573 => x"77538352",
+2574 => x"873dfc05",
+2575 => x"51ffb7ea",
+2576 => x"3f800854",
+2577 => x"848d3f75",
+2578 => x"80080c73",
+2579 => x"800c873d",
+2580 => x"0d04ff0b",
+2581 => x"800c04fb",
+2582 => x"3d0d7755",
+2583 => x"80e78808",
+2584 => x"802ea938",
+2585 => x"7451c7f8",
+2586 => x"3f800881",
+2587 => x"05547453",
+2588 => x"8752873d",
+2589 => x"fc0551ff",
+2590 => x"b7b03f80",
+2591 => x"085583d3",
+2592 => x"3f758008",
+2593 => x"0c74800c",
+2594 => x"873d0d04",
+2595 => x"83c53f85",
+2596 => x"0b80080c",
+2597 => x"ff0b800c",
+2598 => x"873d0d04",
+2599 => x"fa3d0d80",
+2600 => x"e7880880",
+2601 => x"2ea3387a",
+2602 => x"55795478",
+2603 => x"53865288",
+2604 => x"3dfc0551",
+2605 => x"ffb6f33f",
+2606 => x"80085683",
+2607 => x"963f7680",
+2608 => x"080c7580",
+2609 => x"0c883d0d",
+2610 => x"0483883f",
+2611 => x"9d0b8008",
+2612 => x"0cff0b80",
+2613 => x"0c883d0d",
+2614 => x"04fb3d0d",
+2615 => x"77795656",
+2616 => x"80705454",
+2617 => x"7375259f",
+2618 => x"38741010",
+2619 => x"10f80552",
+2620 => x"72167033",
+2621 => x"70742b76",
+2622 => x"078116f8",
+2623 => x"16565656",
+2624 => x"51517473",
+2625 => x"24ea3873",
+2626 => x"800c873d",
+2627 => x"0d04fc3d",
+2628 => x"0d767855",
+2629 => x"55bc5380",
+2630 => x"527351f4",
+2631 => x"d53f8452",
+2632 => x"7451ffb5",
+2633 => x"3f800874",
+2634 => x"23845284",
+2635 => x"1551ffa9",
+2636 => x"3f800882",
+2637 => x"15238452",
+2638 => x"881551ff",
+2639 => x"9c3f8008",
+2640 => x"84150c84",
+2641 => x"528c1551",
+2642 => x"ff8f3f80",
+2643 => x"08881523",
+2644 => x"84529015",
+2645 => x"51ff823f",
+2646 => x"80088a15",
+2647 => x"23845294",
+2648 => x"1551fef5",
+2649 => x"3f80088c",
+2650 => x"15238452",
+2651 => x"981551fe",
+2652 => x"e83f8008",
+2653 => x"8e152388",
+2654 => x"529c1551",
+2655 => x"fedb3f80",
+2656 => x"0890150c",
+2657 => x"863d0d04",
+2658 => x"e93d0d6a",
+2659 => x"80e78808",
+2660 => x"57577593",
+2661 => x"3880c080",
+2662 => x"0b84180c",
+2663 => x"75ac180c",
+2664 => x"75800c99",
+2665 => x"3d0d0489",
+2666 => x"3d70556a",
+2667 => x"54558a52",
+2668 => x"993dffbc",
+2669 => x"0551ffb4",
+2670 => x"f13f8008",
+2671 => x"77537552",
+2672 => x"56fecb3f",
+2673 => x"818d3f77",
+2674 => x"80080c75",
+2675 => x"800c993d",
+2676 => x"0d04e93d",
+2677 => x"0d695780",
+2678 => x"e7880880",
+2679 => x"2eb63876",
+2680 => x"51c4fd3f",
+2681 => x"893d7056",
+2682 => x"80088105",
+2683 => x"55775456",
+2684 => x"8f52993d",
+2685 => x"ffbc0551",
+2686 => x"ffb4af3f",
+2687 => x"80086b53",
+2688 => x"765257fe",
+2689 => x"893f80cb",
+2690 => x"3f778008",
+2691 => x"0c76800c",
+2692 => x"993d0d04",
+2693 => x"be3f850b",
+2694 => x"80080cff",
+2695 => x"0b800c99",
+2696 => x"3d0d04fc",
+2697 => x"3d0d8154",
+2698 => x"80e78808",
+2699 => x"88387380",
+2700 => x"0c863d0d",
+2701 => x"04765397",
+2702 => x"b952863d",
+2703 => x"fc0551ff",
+2704 => x"b3e83f80",
+2705 => x"08548c3f",
+2706 => x"7480080c",
+2707 => x"73800c86",
+2708 => x"3d0d0480",
+2709 => x"d6fc0880",
+2710 => x"0c04f73d",
+2711 => x"0d7b80d6",
+2712 => x"fc0882c8",
+2713 => x"11085a54",
+2714 => x"5a77802e",
+2715 => x"80da3881",
+2716 => x"88188419",
+2717 => x"08ff0581",
+2718 => x"712b5955",
+2719 => x"59807424",
+2720 => x"80ea3880",
+2721 => x"7424b538",
+2722 => x"73822b78",
+2723 => x"11880556",
+2724 => x"56818019",
+2725 => x"08770653",
+2726 => x"72802eb6",
+2727 => x"38781670",
+2728 => x"08535379",
+2729 => x"51740853",
+2730 => x"722dff14",
+2731 => x"fc17fc17",
+2732 => x"79812c5a",
+2733 => x"57575473",
+2734 => x"8025d638",
+2735 => x"77085877",
+2736 => x"ffad3880",
+2737 => x"d6fc0853",
+2738 => x"bc1308a5",
+2739 => x"387951f8",
+2740 => x"8c3f7408",
+2741 => x"53722dff",
+2742 => x"14fc17fc",
+2743 => x"1779812c",
+2744 => x"5a575754",
+2745 => x"738025ff",
+2746 => x"a838d139",
+2747 => x"8057ff93",
+2748 => x"397251bc",
+2749 => x"13085372",
+2750 => x"2d7951f7",
+2751 => x"e03f7070",
+2752 => x"80e6c80b",
+2753 => x"fc057008",
+2754 => x"525270ff",
+2755 => x"2e913870",
+2756 => x"2dfc1270",
+2757 => x"08525270",
+2758 => x"ff2e0981",
+2759 => x"06f13850",
+2760 => x"500404ff",
+2761 => x"b4c73f04",
+2762 => x"48656c6c",
+2763 => x"6f20776f",
+2764 => x"726c6420",
+2765 => x"310a0000",
+2766 => x"48656c6c",
+2767 => x"6f20776f",
+2768 => x"726c6420",
+2769 => x"320a0000",
+2770 => x"0a000000",
+2771 => x"43000000",
+2772 => x"64756d6d",
+2773 => x"792e6578",
+2774 => x"65000000",
+2775 => x"00ffffff",
+2776 => x"ff00ffff",
+2777 => x"ffff00ff",
+2778 => x"ffffff00",
+2779 => x"00000000",
+2780 => x"00000000",
+2781 => x"00000000",
+2782 => x"00003350",
+2783 => x"00002b80",
+2784 => x"00000000",
+2785 => x"00002de8",
+2786 => x"00002e44",
+2787 => x"00002ea0",
+2788 => x"00000000",
+2789 => x"00000000",
+2790 => x"00000000",
+2791 => x"00000000",
+2792 => x"00000000",
+2793 => x"00000000",
+2794 => x"00000000",
+2795 => x"00000000",
+2796 => x"00000000",
+2797 => x"00002b4c",
+2798 => x"00000000",
+2799 => x"00000000",
+2800 => x"00000000",
+2801 => x"00000000",
+2802 => x"00000000",
+2803 => x"00000000",
+2804 => x"00000000",
+2805 => x"00000000",
+2806 => x"00000000",
+2807 => x"00000000",
+2808 => x"00000000",
+2809 => x"00000000",
+2810 => x"00000000",
+2811 => x"00000000",
+2812 => x"00000000",
+2813 => x"00000000",
+2814 => x"00000000",
+2815 => x"00000000",
+2816 => x"00000000",
+2817 => x"00000000",
+2818 => x"00000000",
+2819 => x"00000000",
+2820 => x"00000000",
+2821 => x"00000000",
+2822 => x"00000000",
+2823 => x"00000000",
+2824 => x"00000000",
+2825 => x"00000000",
+2826 => x"00000001",
+2827 => x"330eabcd",
+2828 => x"1234e66d",
+2829 => x"deec0005",
+2830 => x"000b0000",
+2831 => x"00000000",
+2832 => x"00000000",
+2833 => x"00000000",
+2834 => x"00000000",
+2835 => x"00000000",
+2836 => x"00000000",
+2837 => x"00000000",
+2838 => x"00000000",
+2839 => x"00000000",
+2840 => x"00000000",
+2841 => x"00000000",
+2842 => x"00000000",
+2843 => x"00000000",
+2844 => x"00000000",
+2845 => x"00000000",
+2846 => x"00000000",
+2847 => x"00000000",
+2848 => x"00000000",
+2849 => x"00000000",
+2850 => x"00000000",
+2851 => x"00000000",
+2852 => x"00000000",
+2853 => x"00000000",
+2854 => x"00000000",
+2855 => x"00000000",
+2856 => x"00000000",
+2857 => x"00000000",
+2858 => x"00000000",
+2859 => x"00000000",
+2860 => x"00000000",
+2861 => x"00000000",
+2862 => x"00000000",
+2863 => x"00000000",
+2864 => x"00000000",
+2865 => x"00000000",
+2866 => x"00000000",
+2867 => x"00000000",
+2868 => x"00000000",
+2869 => x"00000000",
+2870 => x"00000000",
+2871 => x"00000000",
+2872 => x"00000000",
+2873 => x"00000000",
+2874 => x"00000000",
+2875 => x"00000000",
+2876 => x"00000000",
+2877 => x"00000000",
+2878 => x"00000000",
+2879 => x"00000000",
+2880 => x"00000000",
+2881 => x"00000000",
+2882 => x"00000000",
+2883 => x"00000000",
+2884 => x"00000000",
+2885 => x"00000000",
+2886 => x"00000000",
+2887 => x"00000000",
+2888 => x"00000000",
+2889 => x"00000000",
+2890 => x"00000000",
+2891 => x"00000000",
+2892 => x"00000000",
+2893 => x"00000000",
+2894 => x"00000000",
+2895 => x"00000000",
+2896 => x"00000000",
+2897 => x"00000000",
+2898 => x"00000000",
+2899 => x"00000000",
+2900 => x"00000000",
+2901 => x"00000000",
+2902 => x"00000000",
+2903 => x"00000000",
+2904 => x"00000000",
+2905 => x"00000000",
+2906 => x"00000000",
+2907 => x"00000000",
+2908 => x"00000000",
+2909 => x"00000000",
+2910 => x"00000000",
+2911 => x"00000000",
+2912 => x"00000000",
+2913 => x"00000000",
+2914 => x"00000000",
+2915 => x"00000000",
+2916 => x"00000000",
+2917 => x"00000000",
+2918 => x"00000000",
+2919 => x"00000000",
+2920 => x"00000000",
+2921 => x"00000000",
+2922 => x"00000000",
+2923 => x"00000000",
+2924 => x"00000000",
+2925 => x"00000000",
+2926 => x"00000000",
+2927 => x"00000000",
+2928 => x"00000000",
+2929 => x"00000000",
+2930 => x"00000000",
+2931 => x"00000000",
+2932 => x"00000000",
+2933 => x"00000000",
+2934 => x"00000000",
+2935 => x"00000000",
+2936 => x"00000000",
+2937 => x"00000000",
+2938 => x"00000000",
+2939 => x"00000000",
+2940 => x"00000000",
+2941 => x"00000000",
+2942 => x"00000000",
+2943 => x"00000000",
+2944 => x"00000000",
+2945 => x"00000000",
+2946 => x"00000000",
+2947 => x"00000000",
+2948 => x"00000000",
+2949 => x"00000000",
+2950 => x"00000000",
+2951 => x"00000000",
+2952 => x"00000000",
+2953 => x"00000000",
+2954 => x"00000000",
+2955 => x"00000000",
+2956 => x"00000000",
+2957 => x"00000000",
+2958 => x"00000000",
+2959 => x"00000000",
+2960 => x"00000000",
+2961 => x"00000000",
+2962 => x"00000000",
+2963 => x"00000000",
+2964 => x"00000000",
+2965 => x"00000000",
+2966 => x"00000000",
+2967 => x"00000000",
+2968 => x"00000000",
+2969 => x"00000000",
+2970 => x"00000000",
+2971 => x"00000000",
+2972 => x"00000000",
+2973 => x"00000000",
+2974 => x"00000000",
+2975 => x"00000000",
+2976 => x"00000000",
+2977 => x"00000000",
+2978 => x"00000000",
+2979 => x"00000000",
+2980 => x"00000000",
+2981 => x"00000000",
+2982 => x"00000000",
+2983 => x"00000000",
+2984 => x"00000000",
+2985 => x"00000000",
+2986 => x"00000000",
+2987 => x"00000000",
+2988 => x"00000000",
+2989 => x"00000000",
+2990 => x"00000000",
+2991 => x"00000000",
+2992 => x"00000000",
+2993 => x"00000000",
+2994 => x"00000000",
+2995 => x"00000000",
+2996 => x"00000000",
+2997 => x"00000000",
+2998 => x"00000000",
+2999 => x"00000000",
+3000 => x"00000000",
+3001 => x"00000000",
+3002 => x"00000000",
+3003 => x"00000000",
+3004 => x"00000000",
+3005 => x"00000000",
+3006 => x"00000000",
+3007 => x"00000000",
+3008 => x"00000000",
+3009 => x"00000000",
+3010 => x"00000000",
+3011 => x"00000000",
+3012 => x"00000000",
+3013 => x"00000000",
+3014 => x"00000000",
+3015 => x"00000000",
+3016 => x"00000000",
+3017 => x"00000000",
+3018 => x"00000000",
+3019 => x"ffffffff",
+3020 => x"00000000",
+3021 => x"00020000",
+3022 => x"00000000",
+3023 => x"00000000",
+3024 => x"00002f38",
+3025 => x"00002f38",
+3026 => x"00002f40",
+3027 => x"00002f40",
+3028 => x"00002f48",
+3029 => x"00002f48",
+3030 => x"00002f50",
+3031 => x"00002f50",
+3032 => x"00002f58",
+3033 => x"00002f58",
+3034 => x"00002f60",
+3035 => x"00002f60",
+3036 => x"00002f68",
+3037 => x"00002f68",
+3038 => x"00002f70",
+3039 => x"00002f70",
+3040 => x"00002f78",
+3041 => x"00002f78",
+3042 => x"00002f80",
+3043 => x"00002f80",
+3044 => x"00002f88",
+3045 => x"00002f88",
+3046 => x"00002f90",
+3047 => x"00002f90",
+3048 => x"00002f98",
+3049 => x"00002f98",
+3050 => x"00002fa0",
+3051 => x"00002fa0",
+3052 => x"00002fa8",
+3053 => x"00002fa8",
+3054 => x"00002fb0",
+3055 => x"00002fb0",
+3056 => x"00002fb8",
+3057 => x"00002fb8",
+3058 => x"00002fc0",
+3059 => x"00002fc0",
+3060 => x"00002fc8",
+3061 => x"00002fc8",
+3062 => x"00002fd0",
+3063 => x"00002fd0",
+3064 => x"00002fd8",
+3065 => x"00002fd8",
+3066 => x"00002fe0",
+3067 => x"00002fe0",
+3068 => x"00002fe8",
+3069 => x"00002fe8",
+3070 => x"00002ff0",
+3071 => x"00002ff0",
+3072 => x"00002ff8",
+3073 => x"00002ff8",
+3074 => x"00003000",
+3075 => x"00003000",
+3076 => x"00003008",
+3077 => x"00003008",
+3078 => x"00003010",
+3079 => x"00003010",
+3080 => x"00003018",
+3081 => x"00003018",
+3082 => x"00003020",
+3083 => x"00003020",
+3084 => x"00003028",
+3085 => x"00003028",
+3086 => x"00003030",
+3087 => x"00003030",
+3088 => x"00003038",
+3089 => x"00003038",
+3090 => x"00003040",
+3091 => x"00003040",
+3092 => x"00003048",
+3093 => x"00003048",
+3094 => x"00003050",
+3095 => x"00003050",
+3096 => x"00003058",
+3097 => x"00003058",
+3098 => x"00003060",
+3099 => x"00003060",
+3100 => x"00003068",
+3101 => x"00003068",
+3102 => x"00003070",
+3103 => x"00003070",
+3104 => x"00003078",
+3105 => x"00003078",
+3106 => x"00003080",
+3107 => x"00003080",
+3108 => x"00003088",
+3109 => x"00003088",
+3110 => x"00003090",
+3111 => x"00003090",
+3112 => x"00003098",
+3113 => x"00003098",
+3114 => x"000030a0",
+3115 => x"000030a0",
+3116 => x"000030a8",
+3117 => x"000030a8",
+3118 => x"000030b0",
+3119 => x"000030b0",
+3120 => x"000030b8",
+3121 => x"000030b8",
+3122 => x"000030c0",
+3123 => x"000030c0",
+3124 => x"000030c8",
+3125 => x"000030c8",
+3126 => x"000030d0",
+3127 => x"000030d0",
+3128 => x"000030d8",
+3129 => x"000030d8",
+3130 => x"000030e0",
+3131 => x"000030e0",
+3132 => x"000030e8",
+3133 => x"000030e8",
+3134 => x"000030f0",
+3135 => x"000030f0",
+3136 => x"000030f8",
+3137 => x"000030f8",
+3138 => x"00003100",
+3139 => x"00003100",
+3140 => x"00003108",
+3141 => x"00003108",
+3142 => x"00003110",
+3143 => x"00003110",
+3144 => x"00003118",
+3145 => x"00003118",
+3146 => x"00003120",
+3147 => x"00003120",
+3148 => x"00003128",
+3149 => x"00003128",
+3150 => x"00003130",
+3151 => x"00003130",
+3152 => x"00003138",
+3153 => x"00003138",
+3154 => x"00003140",
+3155 => x"00003140",
+3156 => x"00003148",
+3157 => x"00003148",
+3158 => x"00003150",
+3159 => x"00003150",
+3160 => x"00003158",
+3161 => x"00003158",
+3162 => x"00003160",
+3163 => x"00003160",
+3164 => x"00003168",
+3165 => x"00003168",
+3166 => x"00003170",
+3167 => x"00003170",
+3168 => x"00003178",
+3169 => x"00003178",
+3170 => x"00003180",
+3171 => x"00003180",
+3172 => x"00003188",
+3173 => x"00003188",
+3174 => x"00003190",
+3175 => x"00003190",
+3176 => x"00003198",
+3177 => x"00003198",
+3178 => x"000031a0",
+3179 => x"000031a0",
+3180 => x"000031a8",
+3181 => x"000031a8",
+3182 => x"000031b0",
+3183 => x"000031b0",
+3184 => x"000031b8",
+3185 => x"000031b8",
+3186 => x"000031c0",
+3187 => x"000031c0",
+3188 => x"000031c8",
+3189 => x"000031c8",
+3190 => x"000031d0",
+3191 => x"000031d0",
+3192 => x"000031d8",
+3193 => x"000031d8",
+3194 => x"000031e0",
+3195 => x"000031e0",
+3196 => x"000031e8",
+3197 => x"000031e8",
+3198 => x"000031f0",
+3199 => x"000031f0",
+3200 => x"000031f8",
+3201 => x"000031f8",
+3202 => x"00003200",
+3203 => x"00003200",
+3204 => x"00003208",
+3205 => x"00003208",
+3206 => x"00003210",
+3207 => x"00003210",
+3208 => x"00003218",
+3209 => x"00003218",
+3210 => x"00003220",
+3211 => x"00003220",
+3212 => x"00003228",
+3213 => x"00003228",
+3214 => x"00003230",
+3215 => x"00003230",
+3216 => x"00003238",
+3217 => x"00003238",
+3218 => x"00003240",
+3219 => x"00003240",
+3220 => x"00003248",
+3221 => x"00003248",
+3222 => x"00003250",
+3223 => x"00003250",
+3224 => x"00003258",
+3225 => x"00003258",
+3226 => x"00003260",
+3227 => x"00003260",
+3228 => x"00003268",
+3229 => x"00003268",
+3230 => x"00003270",
+3231 => x"00003270",
+3232 => x"00003278",
+3233 => x"00003278",
+3234 => x"00003280",
+3235 => x"00003280",
+3236 => x"00003288",
+3237 => x"00003288",
+3238 => x"00003290",
+3239 => x"00003290",
+3240 => x"00003298",
+3241 => x"00003298",
+3242 => x"000032a0",
+3243 => x"000032a0",
+3244 => x"000032a8",
+3245 => x"000032a8",
+3246 => x"000032b0",
+3247 => x"000032b0",
+3248 => x"000032b8",
+3249 => x"000032b8",
+3250 => x"000032c0",
+3251 => x"000032c0",
+3252 => x"000032c8",
+3253 => x"000032c8",
+3254 => x"000032d0",
+3255 => x"000032d0",
+3256 => x"000032d8",
+3257 => x"000032d8",
+3258 => x"000032e0",
+3259 => x"000032e0",
+3260 => x"000032e8",
+3261 => x"000032e8",
+3262 => x"000032f0",
+3263 => x"000032f0",
+3264 => x"000032f8",
+3265 => x"000032f8",
+3266 => x"00003300",
+3267 => x"00003300",
+3268 => x"00003308",
+3269 => x"00003308",
+3270 => x"00003310",
+3271 => x"00003310",
+3272 => x"00003318",
+3273 => x"00003318",
+3274 => x"00003320",
+3275 => x"00003320",
+3276 => x"00003328",
+3277 => x"00003328",
+3278 => x"00003330",
+3279 => x"00003330",
+3280 => x"00002b50",
+3281 => x"ffffffff",
+3282 => x"00000000",
+3283 => x"ffffffff",
+3284 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') then
+ ram(conv_integer(memAAddr)) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(conv_integer(memAAddr));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(conv_integer(memBAddr)) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(conv_integer(memBAddr));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/zpu3/src/ic300.bitgen b/zpu/hdl/zpu3/src/ic300.bitgen
new file mode 100644
index 0000000..1095099
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ic300.bitgen
@@ -0,0 +1,27 @@
+-g DebugBitstream:No
+-g Binary:yes
+-g CRC:Enable
+-g ConfigRate:50
+-g CclkPin:Pullnone
+-g M0Pin:Pullnone
+-g M1Pin:Pullnone
+-g M2Pin:Pullnone
+-g ProgPin:PullUp
+-g DonePin:Pullnone
+-g TckPin:Pullnone
+-g TdiPin:Pullnone
+-g TdoPin:Pullnone
+-g TmsPin:Pullnone
+-g UnusedPin:Pullnone
+-g UserID:0xFFFFFFFF
+-g DCMShutDown:Disable
+-g DCIUpdateMode:AsRequired
+-g StartUpClk:CClk
+-g DONE_cycle:4
+-g GTS_cycle:5
+-g GWE_cycle:6
+-g LCK_cycle:NoWait
+-g Security:Level1
+-g DonePipe:No
+-g DriveDone:Yes
+
diff --git a/zpu/hdl/zpu3/src/ic300.lso b/zpu/hdl/zpu3/src/ic300.lso
new file mode 100644
index 0000000..22de730
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ic300.lso
@@ -0,0 +1 @@
+work
diff --git a/zpu/hdl/zpu3/src/ic300.ucf b/zpu/hdl/zpu3/src/ic300.ucf
new file mode 100644
index 0000000..e11357f
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ic300.ucf
@@ -0,0 +1,146 @@
+# clock inputs
+net "cpu_clk_p" loc = "R9" | iostandard=LVTTL;
+
+# input pins
+net "cpu_a_p(0)" loc = "N15" | iostandard=LVTTL;
+net "cpu_a_p(1)" loc = "P16" | iostandard=LVTTL;
+net "cpu_a_p(2)" loc = "P13" | iostandard=LVTTL;
+net "cpu_a_p(3)" loc = "N16" | iostandard=LVTTL;
+net "cpu_a_p(4)" loc = "P15" | iostandard=LVTTL;
+net "cpu_a_p(5)" loc = "R11" | iostandard=LVTTL;
+net "cpu_a_p(6)" loc = "T14" | iostandard=LVTTL;
+net "cpu_a_p(7)" loc = "R16" | iostandard=LVTTL;
+net "cpu_a_p(8)" loc = "P14" | iostandard=LVTTL;
+net "cpu_a_p(9)" loc = "T13" | iostandard=LVTTL;
+net "cpu_a_p(10)" loc = "R13" | iostandard=LVTTL;
+net "cpu_a_p(11)" loc = "P7" | iostandard=LVTTL;
+net "cpu_a_p(12)" loc = "N12" | iostandard=LVTTL;
+net "cpu_a_p(13)" loc = "R12" | iostandard=LVTTL;
+net "cpu_a_p(14)" loc = "L13" | iostandard=LVTTL;
+net "cpu_a_p(15)" loc = "K12" | iostandard=LVTTL;
+net "cpu_a_p(16)" loc = "K15" | iostandard=LVTTL;
+net "cpu_a_p(17)" loc = "T10" | iostandard=LVTTL;
+net "cpu_a_p(18)" loc = "T9" | iostandard=LVTTL;
+net "cpu_a_p(19)" loc = "N10" | iostandard=LVTTL;
+net "cpu_a_p(20)" loc = "T8" | iostandard=LVTTL;
+net "cpu_wr_n_p(0)" loc = "L15" | iostandard=LVTTL;
+net "cpu_wr_n_p(1)" loc = "N14" | iostandard=LVTTL;
+net "cpu_oe_n_p" loc = "T12" | iostandard=LVTTL;
+net "cpu_cs_n_p(1)" loc = "R3" | iostandard=LVTTL;
+net "cpu_cs_n_p(2)" loc = "M16" | iostandard=LVTTL;
+net "cpu_cs_n_p(3)" loc = "P11" | iostandard=LVTTL;
+
+#net "sdr_clk_fb_p" loc = "B8" | iostandard=SSTL2_I;
+
+# output pins
+net "cpu_fiq_p" loc = "K16" | iostandard=LVTTL;
+net "cpu_irq_p(0)" loc = "M14" | iostandard=LVTTL;
+net "cpu_irq_p(1)" loc = "J16" | iostandard=LVTTL;
+net "cpu_wait_n_p" loc = "M15" | iostandard=LVTTL;
+
+#net "sdr_clk_p" loc = "D8" | iostandard=SSTL2_I | FAST;
+#net "sdr_clk_n_p" loc = "F5" | iostandard=SSTL2_I | FAST;
+#net "cke_q_p" loc = "F4" | iostandard=SSTL2_I | FAST;
+#net "cs_qn_p" loc = "M2" | iostandard=SSTL2_I | FAST | PULLUP;
+#net "ras_qn_p" loc = "J2" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY;
+#net "cas_qn_p" loc = "M3" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY;
+#net "we_qn_p" loc = "K4" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY;
+#net "dm_q_p(0)" loc = "L4" | iostandard=SSTL2_I | FAST;
+#net "dm_q_p(1)" loc = "E4" | iostandard=SSTL2_I | FAST;
+#net "dqs_q_p(0)" loc = "L3" | iostandard=SSTL2_I | FAST;
+#net "dqs_q_p(1)" loc = "D3" | iostandard=SSTL2_I | FAST;
+#net "ba_q_p(0)" loc = "M1" | iostandard=SSTL2_I | FAST;
+#net "ba_q_p(1)" loc = "J3" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(0)" loc = "J4" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(1)" loc = "N2" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(2)" loc = "H4" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(3)" loc = "P2" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(4)" loc = "E7" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(5)" loc = "G4" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(6)" loc = "D7" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(7)" loc = "G5" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(8)" loc = "C7" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(9)" loc = "F3" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(10)" loc = "N3" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(11)" loc = "E6" | iostandard=SSTL2_I | FAST;
+#net "sdr_a_p(12)" loc = "D6" | iostandard=SSTL2_I | FAST;
+
+# bidirectional pins
+net "cpu_d_p(0)" loc = "M11" | iostandard=LVTTL;
+net "cpu_d_p(1)" loc = "N11" | iostandard=LVTTL;
+net "cpu_d_p(2)" loc = "P10" | iostandard=LVTTL;
+net "cpu_d_p(3)" loc = "R10" | iostandard=LVTTL;
+net "cpu_d_p(4)" loc = "T7" | iostandard=LVTTL;
+net "cpu_d_p(5)" loc = "R7" | iostandard=LVTTL;
+net "cpu_d_p(6)" loc = "N6" | iostandard=LVTTL;
+net "cpu_d_p(7)" loc = "M6" | iostandard=LVTTL;
+net "cpu_d_p(8)" loc = "K13" | iostandard=LVTTL;
+net "cpu_d_p(9)" loc = "M10" | iostandard=LVTTL;
+net "cpu_d_p(10)" loc = "L12" | iostandard=LVTTL;
+net "cpu_d_p(11)" loc = "M13" | iostandard=LVTTL;
+net "cpu_d_p(12)" loc = "K14" | iostandard=LVTTL;
+net "cpu_d_p(13)" loc = "L14" | iostandard=LVTTL;
+net "cpu_d_p(14)" loc = "J13" | iostandard=LVTTL;
+net "cpu_d_p(15)" loc = "J14" | iostandard=LVTTL;
+
+#net "sdr_d_p(0)" loc = "G1" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(1)" loc = "H3" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(2)" loc = "G3" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(3)" loc = "K2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(4)" loc = "F2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(5)" loc = "L2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(6)" loc = "E1" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(7)" loc = "M4" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(8)" loc = "C6" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(9)" loc = "E2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(10)" loc = "C2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(11)" loc = "D1" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(12)" loc = "B7" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(13)" loc = "D2" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(14)" loc = "B6" | iostandard=SSTL2_I | NODELAY | FAST;
+#net "sdr_d_p(15)" loc = "B5" | iostandard=SSTL2_I | NODELAY | FAST;
+
+# TIMING
+# Create timing names
+NET "cpu_clk_p" TNM_NET = "cpu_clk_p";
+NET "sdr_clk_fb_p" TNM_NET = "sdr_clk_fb_p";
+#NET "cpu_clk" TNM_NET = "cpu_clk";
+#NET "cpu_clk_2x" TNM_NET = "cpu_clk_2x";
+#NET "cpu_clk_4x" TNM_NET = "cpu_clk_4x";
+#NET "ddr_in_clk" TNM_NET = "ddr_in_clk";
+#NET "ddr_in_clk_2x" TNM_NET = "ddr_in_clk_2x";
+
+## Create timing
+
+# Periode timing
+TIMESPEC "TS_cpu_clk" = PERIOD "cpu_clk_p" 15.6 ns HIGH 50 %;
+#TIMESPEC "TS_sdr_clk_fb_p" = PERIOD "sdr_clk_fb_p" 7.8 ns HIGH 50 %;
+
+# Clock domain crossing timing
+#TIMESPEC "TS_cpu1_to_cpu2" = FROM "cpu_clk" TO "cpu_clk_2x" 7.8 ns;
+#TIMESPEC "TS_cpu1_to_cpu4" = FROM "cpu_clk" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_cpu1_to_ddr2" = FROM "cpu_clk" TO "ddr_in_clk" 7.8 ns;
+#TIMESPEC "TS_cpu1_to_ddr2_2x" = FROM "cpu_clk" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_cpu2_to_cpu1" = FROM "cpu_clk_2x" TO "cpu_clk" 7.8 ns;
+#TIMESPEC "TS_cpu2_to_cpu4" = FROM "cpu_clk_2x" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_cpu2_to_ddr2" = FROM "cpu_clk_2x" TO "ddr_in_clk" 7.8 ns;
+#TIMESPEC "TS_cpu2_to_ddr_2x" = FROM "cpu_clk_2x" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_cpu4_to_cpu1" = FROM "cpu_clk_4x" TO "cpu_clk" 3.9 ns;
+#TIMESPEC "TS_cpu4_to_cpu2" = FROM "cpu_clk_4x" TO "cpu_clk_2x" 3.9 ns;
+#TIMESPEC "TS_cpu4_to_ddr2" = FROM "cpu_clk_4x" TO "ddr_in_clk" 3.9 ns;
+#TIMESPEC "TS_cpu4_to_ddr2_2x" = FROM "cpu_clk_4x" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_ddr2_to_cpu1" = FROM "ddr_in_clk" TO "cpu_clk" 7.8 ns;
+#TIMESPEC "TS_ddr2_to_cpu2" = FROM "ddr_in_clk" TO "cpu_clk_2x" 7.8 ns;
+#TIMESPEC "TS_ddr2_to_cpu4" = FROM "ddr_in_clk" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_ddr2_to_ddr2_2x" = FROM "ddr_in_clk" TO "ddr_in_clk_2x" 3.9 ns;
+
+#TIMESPEC "TS_ddr2_2x_to_cpu1" = FROM "ddr_in_clk_2x" TO "cpu_clk" 3.9 ns;
+#TIMESPEC "TS_ddr2_2x_to_cpu2" = FROM "ddr_in_clk_2x" TO "cpu_clk_2x" 3.9 ns;
+#TIMESPEC "TS_ddr2_2x_to_cpu4" = FROM "ddr_in_clk_2x" TO "cpu_clk_4x" 3.9 ns;
+#TIMESPEC "TS_ddr2_2x_to_ddr2" = FROM "ddr_in_clk_2x" TO "ddr_in_clk" 3.9 ns;
+
+
+
diff --git a/zpu/hdl/zpu3/src/ic300.vhd b/zpu/hdl/zpu3/src/ic300.vhd
new file mode 100644
index 0000000..a1b4f41
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ic300.vhd
@@ -0,0 +1,144 @@
+--------------------------------------------------------------------------------
+-- Company: Zylin AS
+-- Engineer: Tore Ramsland
+--
+-- Create Date: 21:47:41 07/03/05
+-- Design Name: ic300
+-- Module Name: ic300 - behave
+-- Project Name: eCosBoard
+-- Target Device: XC3S400400-FG256
+-- Tool versions: 7.1i
+-- Description: Top level
+--
+-- Dependencies:
+--
+-- Revision:
+-- 2005-07-11 Updated to test FPGA
+--
+--------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.VComponents.all;
+
+library zylin;
+use zylin.arm7.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+library work;
+use work.phi_config.all;
+use work.ic300pkg.all;
+
+entity ic300 is
+ generic(
+ simulate_io_time : boolean := false);
+ port ( -- Clock inputs
+ cpu_clk_p : in std_logic;
+
+ -- CPU interface signals
+ cpu_a_p : in std_logic_vector(20 downto 0);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : inout std_logic_vector(15 downto 0);
+ cpu_irq_p : out std_logic_vector(1 downto 0);
+ cpu_fiq_p : out std_logic;
+ cpu_wait_n_p : out std_logic;
+
+ -- DDR SDRAM Signals
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus
+ sdr_clk_fb_p : in std_logic -- DDR clock feedback
+ );
+end ic300;
+
+architecture behave of ic300 is
+
+signal cpu_we : std_logic_vector(1 downto 0); -- Write signal for lower(0) and upper(1) 8 data bits
+signal cpu_re : std_logic; -- Read enable signal for all 16 bits
+signal areset : std_logic; -- Asyncronous active high reset (for initialization)
+signal areset_dummy : std_logic;
+
+-- Clock module signals
+signal clk_status : std_logic_vector(2 downto 0); -- DLL lock status (from 3 DLL's)
+signal cpu_clk : std_logic; -- 64 MHz CPU clk
+signal cpu_clk_2x : std_logic; -- 128 MHz CPU clk (in phase with 64 MHz)
+signal cpu_clk_4x : std_logic; -- 256 MHz CPU clk (in phase with 64 MHz)
+signal ddr_in_clk : std_logic; -- 128 MHz clock from DDR SDRAM
+signal ddr_in_clk_2x : std_logic; -- 256 MHz clock from DDR SDRAM
+ -- NOTE! Phase relation to 64 MHz clock unknown
+
+-- Internal CPU interface signals
+signal cpu_din : std_logic_vector(15 downto 0); -- 16-bit data from CPU
+signal cpu_dout : std_logic_vector(15 downto 0); -- 16-bit data to CPU
+signal cpu_a : std_logic_vector(20 downto 0); -- 21-bit address from CPU
+
+begin
+
+-- areset <= '0';
+ areset_dummy <= '0';
+
+ global_init_reset:
+ rocbuf port map(I=>areset_dummy,O=>areset);
+
+ allclocks:
+ clocks port map(
+ areset => areset,
+ cpu_clk_p => cpu_clk_p,
+ cpu_clk => cpu_clk,
+ cpu_clk_2x => cpu_clk_2x,
+ cpu_clk_4x => cpu_clk_4x,
+ sdr_clk_fb_p => sdr_clk_fb_p,
+ ddr_in_clk => ddr_in_clk,
+ ddr_in_clk_2x => ddr_in_clk_2x,
+ locked => clk_status);
+
+ arm7cpu:
+ arm7wb generic map (simulate_io_time => simulate_io_time)
+ port map(
+ areset => areset,
+ cpu_clk => cpu_clk,
+ cpu_clk_2x => cpu_clk_2x,
+ cpu_a_p => cpu_a_p,
+ cpu_wr_n_p => cpu_wr_n_p,
+ cpu_cs_n_p => cpu_cs_n_p,
+ cpu_oe_n_p => cpu_oe_n_p,
+ cpu_d_p => cpu_d_p,
+ cpu_irq_p => cpu_irq_p,
+ cpu_fiq_p => cpu_fiq_p,
+ cpu_wait_n_p => cpu_wait_n_p,
+ cpu_din => cpu_din,
+ cpu_a => cpu_a,
+ cpu_we => cpu_we,
+ cpu_re => cpu_re,
+ cpu_dout => cpu_dout);
+
+
+ cpu_fpga_regs:
+ zpuio port map(
+ areset => areset,
+ cpu_clk => cpu_clk,
+ clk_status => clk_status,
+ cpu_din => cpu_din,
+ cpu_a => cpu_a,
+ cpu_we => cpu_we,
+ cpu_re => cpu_re,
+ cpu_dout => cpu_dout);
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/ic300_config.vhd b/zpu/hdl/zpu3/src/ic300_config.vhd
new file mode 100644
index 0000000..9d3f939
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ic300_config.vhd
@@ -0,0 +1,20 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+
+package phi_config is
+
+ constant Fpga_Global_Base : std_logic_vector(19 downto 17) := "000"; -- 0x0280....
+ constant Clock_Stat_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000
+ constant Testreg32_Lower_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C
+ constant Testreg32_Upper_Addr : std_logic_vector(3 downto 1) := "111"; -- 0x....000E
+
+ constant Fpga_DDR_Ctrl_Base : std_logic_vector(19 downto 17) := "111"; -- 0x028E....
+ constant DDR_Ctrl_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000
+ constant DDR_Mode_Reg_Addr : std_logic_vector(3 downto 1) := "001"; -- 0x....0002
+
+ -- These are temporary test registers only!
+ constant DDR_Data_Reg_Addr : std_logic_vector(3 downto 1) := "100"; -- 0x....0008
+ constant DDR_Addr_Reg_Addr : std_logic_vector(3 downto 1) := "101"; -- 0x....000A
+ constant DDR_Req_Reg_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C
+
+end phi_config;
diff --git a/zpu/hdl/zpu3/src/ic300pkg.vhd b/zpu/hdl/zpu3/src/ic300pkg.vhd
new file mode 100644
index 0000000..13da306
--- /dev/null
+++ b/zpu/hdl/zpu3/src/ic300pkg.vhd
@@ -0,0 +1,88 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+
+package ic300pkg is
+
+ component ic300 is
+ port ( -- Clock inputs
+ cpu_clk_p : in std_logic;
+
+ -- CPU interface signals
+ cpu_a_p : in std_logic_vector(20 downto 0);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : inout std_logic_vector(15 downto 0);
+ cpu_irq_p : out std_logic_vector(1 downto 0);
+ cpu_fiq_p : out std_logic;
+ cpu_wait_n_p : out std_logic;
+
+ -- DDR SDRAM Signals
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus
+ sdr_clk_fb_p : in std_logic -- DDR clock feedback
+ );
+ end component;
+
+ component clocks is
+ port ( areset : in std_logic;
+ cpu_clk_p : in std_logic;
+ sdr_clk_fb_p : in std_logic;
+ cpu_clk : out std_logic;
+ cpu_clk_2x : out std_logic;
+ cpu_clk_4x : out std_logic;
+ ddr_in_clk : out std_logic;
+ ddr_in_clk_2x : out std_logic;
+ locked : out std_logic_vector(2 downto 0));
+ end component;
+
+ component cpu_regs is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+ end component;
+
+ component ddr_bridge is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_clk_4x : in std_logic;
+ ddr_in_clk : in std_logic;
+ ddr_in_clk_2x : in std_logic;
+
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_dout : inout std_logic_vector(15 downto 0);
+
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
+ end component;
+
+end ic300pkg;
diff --git a/zpu/hdl/zpu3/src/io.vhd b/zpu/hdl/zpu3/src/io.vhd
new file mode 100644
index 0000000..6b50ca1
--- /dev/null
+++ b/zpu/hdl/zpu3/src/io.vhd
@@ -0,0 +1,95 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+use zylin.txt_util.all;
+
+entity zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(7 downto 0);
+ read : out std_logic_vector(7 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end zpu_io;
+
+
+architecture behave of zpu_io is
+
+
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+file l_file : TEXT open write_mode is log_file;
+
+begin
+
+
+ timerinst: timer port map (
+ clk => clk,
+ areset => areset,
+ we => timer_we,
+ din => write,
+ adr => addr(4 downto 2),
+ dout => timer_read);
+
+
+ process(areset, clk)
+ begin
+ if (areset = '1') then
+ timer_we <= '0';
+ busy <= '1';
+ elsif (clk'event and clk = '1') then
+ busy <= '1';
+ timer_we <= '0';
+ if writeEnable = '1' then
+ -- external interface
+ if addr=x"1000" then
+ -- Write to UART
+ -- report "" & character'image(conv_integer(memBint)) severity note;
+ print(l_file, character'val(conv_integer(write)));
+ busy <= '0';
+ elsif addr(12)='1' then
+ timer_we <= '1';
+ busy <= '0';
+ else
+ report "Illegal IO write" severity failure;
+ end if;
+
+ end if;
+ if (readEnable = '1') then
+ if addr=x"1001" then
+ read <= (0=>'1', others => '0'); -- recieve empty
+ busy <= '0';
+ elsif addr(12)='1' then
+ read <= timer_read;
+ busy <= '0';
+ elsif addr(11)='1' then
+ read <= ZPU_Frequency;
+ busy <= '0';
+ else
+ report "Illegal IO read" severity failure;
+ end if;
+ else
+ read <= (others => '1');
+ end if;
+ end if;
+ end process;
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu3/src/log.txt b/zpu/hdl/zpu3/src/log.txt
new file mode 100644
index 0000000..5557b06
--- /dev/null
+++ b/zpu/hdl/zpu3/src/log.txt
@@ -0,0 +1,156 @@
+
+
+
+D
+h
+r
+y
+s
+t
+o
+n
+e
+
+B
+e
+n
+c
+h
+m
+a
+r
+k
+,
+
+V
+e
+r
+s
+i
+o
+n
+
+2
+.
+1
+
+(
+L
+a
+n
+g
+u
+a
+g
+e
+:
+
+C
+)
+
+
+
+
+
+
+P
+r
+o
+g
+r
+a
+m
+
+c
+o
+m
+p
+i
+l
+e
+d
+
+w
+i
+t
+h
+o
+u
+t
+
+'
+r
+e
+g
+i
+s
+t
+e
+r
+'
+
+a
+t
+t
+r
+i
+b
+u
+t
+e
+
+
+
+
+
+
+E
+x
+e
+c
+u
+t
+i
+o
+n
+
+s
+t
+a
+r
+t
+s
+,
+
+2
+0
+0
+0
+0
+0
+
+r
+u
+n
+s
+
+t
+h
+r
+o
+u
+g
+h
+
+D
+h
+r
+y
+s
+t
+o
+n
+e
+
+
+
diff --git a/zpu/hdl/zpu3/src/niltrace.vhd b/zpu/hdl/zpu3/src/niltrace.vhd
new file mode 100644
index 0000000..40fc1ca
--- /dev/null
+++ b/zpu/hdl/zpu3/src/niltrace.vhd
@@ -0,0 +1,26 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+use work.zpu_config.all;
+
+
+entity trace is
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBit downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBit downto 2);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic);
+end trace;
+
+
+architecture behave of trace is
+
+begin
+
+end behave;
+
diff --git a/zpu/hdl/zpu3/src/sim_fpga_top.vhd b/zpu/hdl/zpu3/src/sim_fpga_top.vhd
new file mode 100644
index 0000000..3044606
--- /dev/null
+++ b/zpu/hdl/zpu3/src/sim_fpga_top.vhd
@@ -0,0 +1,127 @@
+--------------------------------------------------------------------------------
+-- Company:
+-- Engineer:
+--
+-- Create Date: 20:15:31 04/14/05
+-- Design Name:
+-- Module Name: fpga_top - behave
+-- Project Name:
+-- Target Device:
+-- Tool versions:
+-- Description:
+--
+-- Dependencies:
+--
+-- Revision:
+-- Revision 0.01 - File Created
+-- Additional Comments:
+--
+--------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_ARITH.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+---- Uncomment the following library declaration if instantiating
+---- any Xilinx primitives in this code.
+library UNISIM;
+use UNISIM.VComponents.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity fpga_top is
+end fpga_top;
+
+architecture behave of fpga_top is
+
+
+signal clk : std_logic;
+
+signal areset : std_logic;
+
+
+component zpu_top is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ io_busy : in std_logic;
+ io_read : in std_logic_vector(7 downto 0);
+ io_write : out std_logic_vector(7 downto 0);
+ io_addr : out std_logic_vector(maxAddrBit downto minAddrBit);
+ io_writeEnable : out std_logic;
+ io_readEnable : out std_logic;
+ interrupt : in std_logic;
+ break : out std_logic);
+end component;
+
+
+component zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(7 downto 0);
+ read : out std_logic_vector(7 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end component;
+
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal io_readEnable : std_logic;
+
+signal break : std_logic;
+
+begin
+ poweronreset: roc port map (O => areset);
+
+
+
+ zpu: zpu_top port map (
+ clk => clk ,
+ areset => areset,
+ io_busy => io_busy,
+ io_read => io_read,
+ io_write => io_write,
+ io_addr => io_addr,
+ io_writeEnable => io_writeEnable,
+ io_readEnable => io_readEnable,
+ interrupt => '0',
+ break => break);
+
+
+ ioMap: zpu_io port map (
+ clk => clk,
+ areset => areset,
+ busy => io_busy,
+ writeEnable => io_writeEnable,
+ readEnable => io_readEnable,
+ write => io_write,
+ read => io_read,
+ addr => io_addr
+ );
+
+
+
+ -- wiggle the clock @ 100MHz
+ clock : PROCESS
+ begin
+ clk <= '0';
+ wait for 5 ns;
+ clk <= '1';
+ wait for 5 ns;
+ end PROCESS clock;
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/status.txt b/zpu/hdl/zpu3/src/status.txt
new file mode 100644
index 0000000..df8773a
--- /dev/null
+++ b/zpu/hdl/zpu3/src/status.txt
@@ -0,0 +1,67 @@
+- Make LOADSP/STORESP/ADDSP/PUSHPC & OR emulated => From 444 => 428 LUT.
+ A pitiful saving in return for destroying performance.
+- If I reduce datapath to 8(which is useless) => 197 LUT.
+
+Bare bones version of ZPU3:
+
+- remove NOP, PUSHPC, STORESP, LOADSP, ADDSP and OR instructions. This requires
+ modification to the GCC toolchain and will result in a fairly significant
+ code increase. We should still do better than ARM though.
+- reduce datapath to 16 bits. This will reduce stack usage, which is good.
+- 4kBytes of RAM.
+
+ [exec] =========================================================================
+ [exec] Device utilization summary:
+ [exec] ---------------------------
+ [exec] Selected Device : 3s400ft256-4
+ [exec] Number of Slices: 167 out of 3584 4%
+ [exec] Number of Slice Flip Flops: 126 out of 7168 1%
+ [exec] Number of 4 input LUTs: 288 out of 7168 4%
+ [exec] Number of bonded IOBs: 49 out of 173 28%
+ [exec] Number of BRAMs: 1 out of 16 6%
+ [exec] Number of GCLKs: 1 out of 8 12%
+ [exec] =========================================================================
+
+
+
+
+Measurements:
+
+- Removing PUSHPC(which is possible) reduces usage by 2 LUT's.
+- I tried to introduce the instructions as seperate states at the top level,
+ but did not succeed in reducing LUT count. This might be an avenue to
+ pursue if asynchronous(?) ROM's could replace logic.
+- 550 LUT @ 76MHz. 32 bit datapath & 8 bit instructions. Added seperate decode
+ stage.
+- Tried to move memAControl into decoded opcode. Usage went up to 594 from 550.
+
+- using 16 bit opcodes to encode signals directly. 466 LUT's.
+- w/2kBytes 32 RAM & 32 bit opcodes. 415 LUT's.
+- 16 bit opcode, 16 bit datapath and 1kbyte RAM. 292 LUT's.
+
+- 725 LUT's @ 63MHz
+ Minimum period: 15.909ns{1} (Maximum frequency: 62.858MHz)
+- removed addsp, loadsp & storesp. => 670 LUT's.
+- removed all pushes & pops to sp. => 638 LUT's.
+- removed OR instruction. => 672 LUT's.
+- on the second cycle an ADD is done regardless => 713 LUT's.
+- using others => 'x' for e.g. pushsp. 713 => 703.
+- switching from lots of prioritized if() for decoding instruction to a case
+ statement. 713 => 631.
+- Using ZPU1's memory scheme instead of inferred memory. 713 => 715, i.e. no
+ difference.
+- Removing AddSP. 715 => 704 LUT's.
+- Add COMPARE. 715 => 743 LUT's.
+- Slight reorganization of binary operand & NOP 715 => 704.
+- STORE only pops 1 (which can be fixed in the assembler). 704 => 701.
+- Remove NOP. NOP is only used to clear idim_flag. Use NOT instead.
+- Removing FLIP. 681 => 646. Using a different way to generate the FLIP,
+ 681 => 679.
+- Add a seperate memory system for code?
+- Use IDIM_FLAG to cache value before IM and make add single cycle.
+
+- by expanding the opcode to 32 bits, encoding everything in the opcode &
+ using case statements. 713 => 433 LUT.
+- 32 bit opcode w/encoded state & 16 bit datapath. => 325 LUT
+- by using 512 byte RAM, 16 bit datapath and 32 bit instructions => 285.
+
diff --git a/zpu/hdl/zpu3/src/testlut.vhd b/zpu/hdl/zpu3/src/testlut.vhd
new file mode 100644
index 0000000..fcc8fde
--- /dev/null
+++ b/zpu/hdl/zpu3/src/testlut.vhd
@@ -0,0 +1,106 @@
+-- Company: Zylin AS
+--
+-- Hooks up the ZPU to physical pads to ensure that it is not optimized to
+-- oblivion. This is purely to have something to measure LUT usage against.
+--
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity ic300 is
+ port ( -- Clock inputs
+ cpu_clk_p : in std_logic;
+
+ -- CPU interface signals
+ cpu_a_p : in std_logic_vector(20 downto 0);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : out std_logic_vector(15 downto 0);
+ cpu_irq_p : out std_logic_vector(1 downto 0);
+ cpu_fiq_p : out std_logic;
+ cpu_wait_n_p : out std_logic;
+
+ sdr_clk_fb_p : in std_logic -- DDR clock feedback
+ );
+end ic300;
+
+architecture behave of ic300 is
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal io_readEnable : std_logic;
+
+
+signal cpu_we : std_logic_vector(1 downto 0);
+signal cpu_re : std_logic;
+signal areset : std_logic;
+
+-- Clock module signals
+signal clk_status : std_logic_vector(2 downto 0);
+signal cpu_clk : std_logic;
+signal cpu_clk_2x : std_logic;
+signal cpu_clk_4x : std_logic;
+signal ddr_in_clk : std_logic;
+
+
+-- Internal CPU interface signals
+signal cpu_din : std_logic_vector(15 downto 0);
+signal cpu_dout : std_logic_vector(15 downto 0);
+signal cpu_a : std_logic_vector(20 downto 0);
+
+signal dummy : std_logic_vector(maxAddrBit downto minAddrBit+5);
+
+begin
+
+ areset <= '0'; -- MUST BE CHANGED TO SOMETHING CORRECT
+
+-- cpu_d_p <= (others => '0');
+ cpu_irq_p <= (others => '0');
+ cpu_fiq_p <= '0';
+ cpu_wait_n_p <= '0';
+
+ cpu_d_p(15 downto 15) <= (others => '0');
+
+ -- delay signals going out/in w/1 clk so the
+ -- ZPU does not have to drive those pins.
+ --
+ -- these registers can be placed close to the ZPU and these
+ -- registers then have a full clock to drive the pins.
+ process(cpu_clk_p, areset)
+ begin
+ if (cpu_clk_p'event and cpu_clk_p = '1') then
+ cpu_d_p(0) <= io_writeEnable;
+ cpu_d_p(1) <= io_readEnable;
+ cpu_d_p(9 downto 2) <= io_write;
+ io_read <= cpu_a_p(7 downto 0);
+ -- 32 read/write registers is plenty realisitic for a minimal size
+ -- soft-CPU
+ cpu_d_p(14 downto 10) <= io_addr(minAddrBit+4 downto minAddrBit);
+ end if;
+ end process;
+
+
+ zpu: zpu_top port map (
+ clk => cpu_clk_p ,
+ areset => areset,
+ io_busy => '0',
+ io_writeEnable => io_writeEnable,
+ io_readEnable => io_readEnable,
+ io_write => io_write,
+ io_read => io_read,
+ io_addr => io_addr,
+ interrupt => '0'
+ );
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/timer.vhd b/zpu/hdl/zpu3/src/timer.vhd
new file mode 100644
index 0000000..65836f0
--- /dev/null
+++ b/zpu/hdl/zpu3/src/timer.vhd
@@ -0,0 +1,157 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+entity timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ we : in std_logic;
+ din : in std_logic_vector(7 downto 0);
+ adr : in std_logic_vector(2 downto 0);
+ dout : out std_logic_vector(7 downto 0));
+end timer;
+
+
+architecture behave of timer is
+
+signal sample : std_logic;
+signal reset : std_logic;
+
+signal c : std_logic_vector(1 to 7);
+
+signal cnt : std_logic_vector(63 downto 0);
+signal cnt_smp : std_logic_vector(63 downto 0);
+
+begin
+
+ reset <= '1' when (we = '1' and din(0) = '1') else '0';
+ sample <= '1' when (we = '1' and din(1) = '1') else '0';
+
+ process(clk, areset) -- Carry generation
+ begin
+ if areset = '1' then
+ c <= "0000000";
+ elsif (clk'event and clk = '1') then
+ if reset = '1' then
+ c <= "0000000";
+ else
+ if cnt(7 downto 0) = "11111110" then
+ c(1) <= '1';
+ else
+ c(1) <= '0';
+ end if;
+ if cnt(15 downto 8) = "11111111" then
+ c(2) <= '1';
+ else
+ c(2) <= '0';
+ end if;
+ if cnt(23 downto 16) = "11111111" and c(2) = '1' then
+ c(3) <= '1';
+ else
+ c(3) <= '0';
+ end if;
+ if cnt(31 downto 24) = "11111111" and c(3) = '1' then
+ c(4) <= '1';
+ else
+ c(4) <= '0';
+ end if;
+ if cnt(39 downto 32) = "11111111" and c(4) = '1' then
+ c(5) <= '1';
+ else
+ c(5) <= '0';
+ end if;
+ if cnt(47 downto 40) = "11111111" and c(5) = '1' then
+ c(6) <= '1';
+ else
+ c(6) <= '0';
+ end if;
+ if cnt(55 downto 48) = "11111111" and c(6) = '1' then
+ c(7) <= '1';
+ else
+ c(7) <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ cnt <= (others=>'0');
+ elsif (clk'event and clk = '1') then
+ if reset = '1' then
+ cnt <= (others=>'0');
+ else
+ cnt(7 downto 0) <= cnt(7 downto 0) + '1';
+ if c(1) = '1' then
+ cnt(15 downto 8) <= cnt(15 downto 8) + '1';
+ else
+ cnt(15 downto 8) <= cnt(15 downto 8);
+ end if;
+ if c(2) = '1' and c(1) = '1' then
+ cnt(23 downto 16) <= cnt(23 downto 16) + '1';
+ else
+ cnt(23 downto 16) <= cnt(23 downto 16);
+ end if;
+ if c(3) = '1' and c(1) = '1' then
+ cnt(31 downto 24) <= cnt(31 downto 24) + '1';
+ else
+ cnt(31 downto 24) <= cnt(31 downto 24);
+ end if;
+ if c(4) = '1' and c(1) = '1' then
+ cnt(39 downto 32) <= cnt(39 downto 32) + '1';
+ else
+ cnt(39 downto 32) <= cnt(39 downto 32);
+ end if;
+ if c(5) = '1' and c(1) = '1' then
+ cnt(47 downto 40) <= cnt(47 downto 40) + '1';
+ else
+ cnt(47 downto 40) <= cnt(47 downto 40);
+ end if;
+ if c(6) = '1' and c(1) = '1' then
+ cnt(55 downto 48) <= cnt(55 downto 48) + '1';
+ else
+ cnt(55 downto 48) <= cnt(55 downto 48);
+ end if;
+ if c(7) = '1' and c(1) = '1' then
+ cnt(63 downto 56) <= cnt(63 downto 56) + '1';
+ else
+ cnt(63 downto 56) <= cnt(63 downto 56);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ cnt_smp <= (others=>'0');
+ elsif (clk'event and clk = '1') then
+ if reset = '1' then
+ cnt_smp <= (others=>'0');
+ elsif sample = '1' then
+ cnt_smp <= cnt;
+ else
+ cnt_smp <= cnt_smp;
+ end if;
+ end if;
+ end process;
+
+ process(cnt_smp, adr)
+ begin
+ case adr is
+ when "000" => dout <= cnt_smp(7 downto 0);
+ when "001" => dout <= cnt_smp(15 downto 8);
+ when "010" => dout <= cnt_smp(23 downto 16);
+ when "011" => dout <= cnt_smp(31 downto 24);
+ when "100" => dout <= cnt_smp(39 downto 32);
+ when "101" => dout <= cnt_smp(47 downto 40);
+ when "110" => dout <= cnt_smp(55 downto 48);
+ when others => dout <= cnt_smp(63 downto 56);
+ end case;
+ end process;
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu3/src/trace.vhd b/zpu/hdl/zpu3/src/trace.vhd
new file mode 100644
index 0000000..81eb448
--- /dev/null
+++ b/zpu/hdl/zpu3/src/trace.vhd
@@ -0,0 +1,80 @@
+library ieee;
+use ieee.std_logic_1164.all;
+--use IEEE.STD_LOGIC_ARITH.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+use zylin.txt_util.all;
+
+
+entity trace is
+ generic (
+ log_file: string := "trace.txt"
+ );
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBit downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBit downto 2);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic
+ );
+end trace;
+
+
+architecture behave of trace is
+
+
+file l_file : TEXT open write_mode is log_file;
+
+
+begin
+
+
+-- write data and control information to a file
+
+receive_data: process
+
+variable l: line;
+variable t : std_logic_vector(wordSize-1 downto 0);
+variable t2 : std_logic_vector(maxAddrBit downto 0);
+
+
+
+begin
+
+ t:= (others => '0');
+ t2:= (others => '0');
+
+ -- print header for the logfile
+ print(l_file, "#pc,opcode,sp,top_of_stack ");
+ print(l_file, "#----------");
+ print(l_file, " ");
+
+ wait until clk = '1';
+ wait until clk = '0';
+
+ while true loop
+
+ if begin_inst = '1' then
+ t(maxAddrBit downto 2):=sp;
+ t2:=pc;
+ print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB));
+ end if;
+
+ wait until clk = '0';
+
+ end loop;
+
+ end process receive_data;
+
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu3/src/txt_util.vhd b/zpu/hdl/zpu3/src/txt_util.vhd
new file mode 100644
index 0000000..d42303b
--- /dev/null
+++ b/zpu/hdl/zpu3/src/txt_util.vhd
@@ -0,0 +1,586 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use std.textio.all;
+
+
+package txt_util is
+
+ -- prints a message to the screen
+ procedure print(text: string);
+
+ -- prints the message when active
+ -- useful for debug switches
+ procedure print(active: boolean; text: string);
+
+ -- converts std_logic into a character
+ function chr(sl: std_logic) return character;
+
+ -- converts std_logic into a string (1 to 1)
+ function str(sl: std_logic) return string;
+
+ -- converts std_logic_vector into a string (binary base)
+ function str(slv: std_logic_vector) return string;
+
+ -- converts boolean into a string
+ function str(b: boolean) return string;
+
+ -- converts an integer into a single character
+ -- (can also be used for hex conversion and other bases)
+ function chr(int: integer) return character;
+
+ -- converts integer into string using specified base
+ function str(int: integer; base: integer) return string;
+
+ -- converts integer to string, using base 10
+ function str(int: integer) return string;
+
+ -- convert std_logic_vector into a string in hex format
+ function hstr(slv: std_logic_vector) return string;
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+ -- convert a character to upper case
+ function to_upper(c: character) return character;
+
+ -- convert a character to lower case
+ function to_lower(c: character) return character;
+
+ -- convert a string to upper case
+ function to_upper(s: string) return string;
+
+ -- convert a string to lower case
+ function to_lower(s: string) return string;
+
+
+
+ -- functions to convert strings into other formats
+ --------------------------------------------------
+
+ -- converts a character into std_logic
+ function to_std_logic(c: character) return std_logic;
+
+ -- converts a string into std_logic_vector
+ function to_std_logic_vector(s: string) return std_logic_vector;
+
+
+
+ -- file I/O
+ -----------
+
+ -- read variable length string from input file
+ procedure str_read(file in_file: TEXT;
+ res_string: out string);
+
+ -- print string to a file and start new line
+ procedure print(file out_file: TEXT;
+ new_string: in string);
+
+ -- print character to a file and start new line
+ procedure print(file out_file: TEXT;
+ char: in character);
+
+end txt_util;
+
+
+
+
+package body txt_util is
+
+
+
+
+ -- prints text to the screen
+
+ procedure print(text: string) is
+ variable msg_line: line;
+ begin
+ write(msg_line, text);
+ writeline(output, msg_line);
+ end print;
+
+
+
+
+ -- prints text to the screen when active
+
+ procedure print(active: boolean; text: string) is
+ begin
+ if active then
+ print(text);
+ end if;
+ end print;
+
+
+ -- converts std_logic into a character
+
+ function chr(sl: std_logic) return character is
+ variable c: character;
+ begin
+ case sl is
+ when 'U' => c:= 'U';
+ when 'X' => c:= 'X';
+ when '0' => c:= '0';
+ when '1' => c:= '1';
+ when 'Z' => c:= 'Z';
+ when 'W' => c:= 'W';
+ when 'L' => c:= 'L';
+ when 'H' => c:= 'H';
+ when '-' => c:= '-';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- converts std_logic into a string (1 to 1)
+
+ function str(sl: std_logic) return string is
+ variable s: string(1 to 1);
+ begin
+ s(1) := chr(sl);
+ return s;
+ end str;
+
+
+
+ -- converts std_logic_vector into a string (binary base)
+ -- (this also takes care of the fact that the range of
+ -- a string is natural while a std_logic_vector may
+ -- have an integer range)
+
+ function str(slv: std_logic_vector) return string is
+ variable result : string (1 to slv'length);
+ variable r : integer;
+ begin
+ r := 1;
+ for i in slv'range loop
+ result(r) := chr(slv(i));
+ r := r + 1;
+ end loop;
+ return result;
+ end str;
+
+
+ function str(b: boolean) return string is
+
+ begin
+ if b then
+ return "true";
+ else
+ return "false";
+ end if;
+ end str;
+
+
+ -- converts an integer into a character
+ -- for 0 to 9 the obvious mapping is used, higher
+ -- values are mapped to the characters A-Z
+ -- (this is usefull for systems with base > 10)
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function chr(int: integer) return character is
+ variable c: character;
+ begin
+ case int is
+ when 0 => c := '0';
+ when 1 => c := '1';
+ when 2 => c := '2';
+ when 3 => c := '3';
+ when 4 => c := '4';
+ when 5 => c := '5';
+ when 6 => c := '6';
+ when 7 => c := '7';
+ when 8 => c := '8';
+ when 9 => c := '9';
+ when 10 => c := 'A';
+ when 11 => c := 'B';
+ when 12 => c := 'C';
+ when 13 => c := 'D';
+ when 14 => c := 'E';
+ when 15 => c := 'F';
+ when 16 => c := 'G';
+ when 17 => c := 'H';
+ when 18 => c := 'I';
+ when 19 => c := 'J';
+ when 20 => c := 'K';
+ when 21 => c := 'L';
+ when 22 => c := 'M';
+ when 23 => c := 'N';
+ when 24 => c := 'O';
+ when 25 => c := 'P';
+ when 26 => c := 'Q';
+ when 27 => c := 'R';
+ when 28 => c := 'S';
+ when 29 => c := 'T';
+ when 30 => c := 'U';
+ when 31 => c := 'V';
+ when 32 => c := 'W';
+ when 33 => c := 'X';
+ when 34 => c := 'Y';
+ when 35 => c := 'Z';
+ when others => c := '?';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- convert integer to string using specified base
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function str(int: integer; base: integer) return string is
+
+ variable temp: string(1 to 10);
+ variable num: integer;
+ variable abs_int: integer;
+ variable len: integer := 1;
+ variable power: integer := 1;
+
+ begin
+
+ -- bug fix for negative numbers
+ abs_int := abs(int);
+
+ num := abs_int;
+
+ while num >= base loop -- Determine how many
+ len := len + 1; -- characters required
+ num := num / base; -- to represent the
+ end loop ; -- number.
+
+ for i in len downto 1 loop -- Convert the number to
+ temp(i) := chr(abs_int/power mod base); -- a string starting
+ power := power * base; -- with the right hand
+ end loop ; -- side.
+
+ -- return result and add sign if required
+ if int < 0 then
+ return '-'& temp(1 to len);
+ else
+ return temp(1 to len);
+ end if;
+
+ end str;
+
+
+ -- convert integer to string, using base 10
+ function str(int: integer) return string is
+
+ begin
+
+ return str(int, 10) ;
+
+ end str;
+
+
+
+ -- converts a std_logic_vector into a hex string.
+ function hstr(slv: std_logic_vector) return string is
+ variable hexlen: integer;
+ variable longslv : std_logic_vector(67 downto 0) := (others => '0');
+ variable hex : string(1 to 16);
+ variable fourbit : std_logic_vector(3 downto 0);
+ begin
+ hexlen := (slv'left+1)/4;
+ if (slv'left+1) mod 4 /= 0 then
+ hexlen := hexlen + 1;
+ end if;
+ longslv(slv'left downto 0) := slv;
+ for i in (hexlen -1) downto 0 loop
+ fourbit := longslv(((i*4)+3) downto (i*4));
+ case fourbit is
+ when "0000" => hex(hexlen -I) := '0';
+ when "0001" => hex(hexlen -I) := '1';
+ when "0010" => hex(hexlen -I) := '2';
+ when "0011" => hex(hexlen -I) := '3';
+ when "0100" => hex(hexlen -I) := '4';
+ when "0101" => hex(hexlen -I) := '5';
+ when "0110" => hex(hexlen -I) := '6';
+ when "0111" => hex(hexlen -I) := '7';
+ when "1000" => hex(hexlen -I) := '8';
+ when "1001" => hex(hexlen -I) := '9';
+ when "1010" => hex(hexlen -I) := 'A';
+ when "1011" => hex(hexlen -I) := 'B';
+ when "1100" => hex(hexlen -I) := 'C';
+ when "1101" => hex(hexlen -I) := 'D';
+ when "1110" => hex(hexlen -I) := 'E';
+ when "1111" => hex(hexlen -I) := 'F';
+ when "ZZZZ" => hex(hexlen -I) := 'z';
+ when "UUUU" => hex(hexlen -I) := 'u';
+ when "XXXX" => hex(hexlen -I) := 'x';
+ when others => hex(hexlen -I) := '?';
+ end case;
+ end loop;
+ return hex(1 to hexlen);
+ end hstr;
+
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+
+ -- convert a character to upper case
+
+ function to_upper(c: character) return character is
+
+ variable u: character;
+
+ begin
+
+ case c is
+ when 'a' => u := 'A';
+ when 'b' => u := 'B';
+ when 'c' => u := 'C';
+ when 'd' => u := 'D';
+ when 'e' => u := 'E';
+ when 'f' => u := 'F';
+ when 'g' => u := 'G';
+ when 'h' => u := 'H';
+ when 'i' => u := 'I';
+ when 'j' => u := 'J';
+ when 'k' => u := 'K';
+ when 'l' => u := 'L';
+ when 'm' => u := 'M';
+ when 'n' => u := 'N';
+ when 'o' => u := 'O';
+ when 'p' => u := 'P';
+ when 'q' => u := 'Q';
+ when 'r' => u := 'R';
+ when 's' => u := 'S';
+ when 't' => u := 'T';
+ when 'u' => u := 'U';
+ when 'v' => u := 'V';
+ when 'w' => u := 'W';
+ when 'x' => u := 'X';
+ when 'y' => u := 'Y';
+ when 'z' => u := 'Z';
+ when others => u := c;
+ end case;
+
+ return u;
+
+ end to_upper;
+
+
+ -- convert a character to lower case
+
+ function to_lower(c: character) return character is
+
+ variable l: character;
+
+ begin
+
+ case c is
+ when 'A' => l := 'a';
+ when 'B' => l := 'b';
+ when 'C' => l := 'c';
+ when 'D' => l := 'd';
+ when 'E' => l := 'e';
+ when 'F' => l := 'f';
+ when 'G' => l := 'g';
+ when 'H' => l := 'h';
+ when 'I' => l := 'i';
+ when 'J' => l := 'j';
+ when 'K' => l := 'k';
+ when 'L' => l := 'l';
+ when 'M' => l := 'm';
+ when 'N' => l := 'n';
+ when 'O' => l := 'o';
+ when 'P' => l := 'p';
+ when 'Q' => l := 'q';
+ when 'R' => l := 'r';
+ when 'S' => l := 's';
+ when 'T' => l := 't';
+ when 'U' => l := 'u';
+ when 'V' => l := 'v';
+ when 'W' => l := 'w';
+ when 'X' => l := 'x';
+ when 'Y' => l := 'y';
+ when 'Z' => l := 'z';
+ when others => l := c;
+ end case;
+
+ return l;
+
+ end to_lower;
+
+
+
+ -- convert a string to upper case
+
+ function to_upper(s: string) return string is
+
+ variable uppercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ uppercase(i):= to_upper(s(i));
+ end loop;
+ return uppercase;
+
+ end to_upper;
+
+
+
+ -- convert a string to lower case
+
+ function to_lower(s: string) return string is
+
+ variable lowercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ lowercase(i):= to_lower(s(i));
+ end loop;
+ return lowercase;
+
+ end to_lower;
+
+
+
+-- functions to convert strings into other types
+
+
+-- converts a character into a std_logic
+
+function to_std_logic(c: character) return std_logic is
+ variable sl: std_logic;
+ begin
+ case c is
+ when 'U' =>
+ sl := 'U';
+ when 'X' =>
+ sl := 'X';
+ when '0' =>
+ sl := '0';
+ when '1' =>
+ sl := '1';
+ when 'Z' =>
+ sl := 'Z';
+ when 'W' =>
+ sl := 'W';
+ when 'L' =>
+ sl := 'L';
+ when 'H' =>
+ sl := 'H';
+ when '-' =>
+ sl := '-';
+ when others =>
+ sl := 'X';
+ end case;
+ return sl;
+ end to_std_logic;
+
+
+-- converts a string into std_logic_vector
+
+function to_std_logic_vector(s: string) return std_logic_vector is
+ variable slv: std_logic_vector(s'high-s'low downto 0);
+ variable k: integer;
+begin
+ k := s'high-s'low;
+ for i in s'range loop
+ slv(k) := to_std_logic(s(i));
+ k := k - 1;
+ end loop;
+ return slv;
+end to_std_logic_vector;
+
+
+
+
+
+
+----------------
+-- file I/O --
+----------------
+
+
+
+-- read variable length string from input file
+
+procedure str_read(file in_file: TEXT;
+ res_string: out string) is
+
+ variable l: line;
+ variable c: character;
+ variable is_string: boolean;
+
+ begin
+
+ readline(in_file, l);
+ -- clear the contents of the result string
+ for i in res_string'range loop
+ res_string(i) := ' ';
+ end loop;
+ -- read all characters of the line, up to the length
+ -- of the results string
+ for i in res_string'range loop
+ read(l, c, is_string);
+ res_string(i) := c;
+ if not is_string then -- found end of line
+ exit;
+ end if;
+ end loop;
+
+end str_read;
+
+
+-- print string to a file
+procedure print(file out_file: TEXT;
+ new_string: in string) is
+
+ variable l: line;
+
+ begin
+
+ write(l, new_string);
+ writeline(out_file, l);
+
+end print;
+
+
+-- print character to a file and start new line
+procedure print(file out_file: TEXT;
+ char: in character) is
+
+ variable l: line;
+
+ begin
+
+ write(l, char);
+ writeline(out_file, l);
+
+end print;
+
+
+
+-- appends contents of a string to a file until line feed occurs
+-- (LF is considered to be the end of the string)
+
+procedure str_write(file out_file: TEXT;
+ new_string: in string) is
+ begin
+
+ for i in new_string'range loop
+ print(out_file, new_string(i));
+ if new_string(i) = LF then -- end of string
+ exit;
+ end if;
+ end loop;
+
+end str_write;
+
+
+
+
+end txt_util;
+
+
+
+
diff --git a/zpu/hdl/zpu3/src/xilinx_dualport.vhd b/zpu/hdl/zpu3/src/xilinx_dualport.vhd
new file mode 100644
index 0000000..0e6edc9
--- /dev/null
+++ b/zpu/hdl/zpu3/src/xilinx_dualport.vhd
@@ -0,0 +1,1482 @@
+--------------------------------------------------------------------------------
+-- Company:
+-- Engineer:
+--
+-- Create Date: 11:47:36 03/22/05
+-- Design Name:
+-- Module Name: mem_sys - behave
+-- Project Name:
+-- Target Device:
+-- Tool versions:
+-- Description:
+--
+-- Dependencies:
+--
+-- Revision:
+-- Revision 0.01 - File Created
+-- Additional Comments:
+--
+--------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_ARITH.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+---- Uncomment the following library declaration if instantiating
+---- any Xilinx primitives in this code.
+library UNISIM;
+use UNISIM.VComponents.all;
+library zylin;
+use zylin.zpu_config.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+signal low : std_logic;
+signal high : std_logic;
+signal re : std_logic;
+
+begin
+
+ high <= '1';
+ low <= '0';
+ re <= '1';
+
+
+ ZPU_RAM0 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"01A100E100010001003600770002006D000F0000000F06AD000302940008003C",
+ INIT_01 => X"7D4000000741F68100C800030000377935990003000300030003002A00150001",
+ INIT_02 => X"0007584101010C3D55555555370000000092800000001490000000066A594EBB",
+ INIT_03 => X"0009015555932D564C093A4024055555564CB555593C1569EA90C00000007000",
+ INIT_04 => X"BF8AA55961BE2A956586C40A4CB00932C00024A80000024C9569C893C0024E90",
+ INIT_05 => X"18A1251E2A956586F8AA55961BF8AA55961BE2A956586FE2A956586F8AA55961",
+ INIT_06 => X"51349D53764E258A2043E21BE5645DE5C4FC00E0100430C140E4665595558750",
+ INIT_07 => X"47B1656A855555D435575A815D077558E475559E755715A1C364945042425555",
+ INIT_08 => X"5555F123348C17657C405070D5E745A518B58DD5555F55551D5506F00D707B15",
+ INIT_09 => X"C141C74DD5137120D51C0715094CC4F01006A8131DD91531B913118944815155",
+ INIT_0A => X"5E559655003D3549550D458C5994A04D476568D05B0F45451D143E53D0F2CD6B",
+ INIT_0B => X"4D1E1C5D3474C5C5A1E1C5D34787171C44DC7844D3451D37974D164DD55DD555",
+ INIT_0C => X"2074532E4C3A5074DE129D074D1137134477D546C01D374DD348774DE15D3717",
+ INIT_0D => X"875650117671948CB05545A5A2615074889149341D04D4956F843575543E1A19",
+ INIT_0E => X"F804036D9753106651D5140E6905C158D8979404C7459123540DD9955A43F563",
+ INIT_0F => X"7958D037C3557056405549520F96E88622775767141BA3755D1418E1BE234480",
+ INIT_10 => X"294A1C405ACCC3705D5599D55037776149584D8F98F98F98FDD00D904D205421",
+ INIT_11 => X"74710D5C26798346751441DD555BE179544D8F98F98F98FDD00D910DC3D357C3",
+ INIT_12 => X"605D5570051840119D04C0DC3755B61D7951D9A9522D995D51D5BB106B90F7C0",
+ INIT_13 => X"D81BC3646611D695A02D1A9419695D695422C40110C0F85D6F899E4D0D555BC3",
+ INIT_14 => X"28531104D5F01EDD204141807555735D38346423303676407555545F6B945696",
+ INIT_15 => X"5212D7645155503146685C599546660676E81041C85D570DCE1B07116F116021",
+ INIT_16 => X"5F9D03530F840406A5725910604E420D910DD521D6170F9AF0F940D91836445D",
+ INIT_17 => X"83E03E03C03414D5D5F5D9BE7550DD55775514A145E5405657024C3664F3059C",
+ INIT_18 => X"444C7584143756C431049D594DC444FD19CE181427555124440155503F58E14D",
+ INIT_19 => X"D54521B201810644D895159C568F40C6C85503E135203FCF555151102C7343CC",
+ INIT_1A => X"5A95904431351D93820C4D1AA2C7FD0CD95555311185802971639A1755607515",
+ INIT_1B => X"E7D41815C826057201815C826057201815C806057209815C82741C75D1BF4336",
+ INIT_1C => X"41BD443664E14155000C4191440445305B46A8D40443A3E115495503116861C3",
+ INIT_1D => X"A1520F9C10F850FC18DB80D4777F1D5757195241D35F9754D755DD35F40D9D99",
+ INIT_1E => X"65E6A10F206870F0557411545536F0D5FA1765C8D5443E658956E52727558D14",
+ INIT_1F => X"DDD2151D31A956A0400F03FC754175510FD4A34252E0DC4076A5EC66A10FB312",
+ INIT_20 => X"77C1676610FBD310C3C3CC76F05C9FF20755DC17ECE5451D3472D9D215D34C40",
+ INIT_21 => X"55556189C508B6C3F0F0FF1D9F4561676610F207A5EF52D7957CC0F8800F7726",
+ INIT_22 => X"8890203480C224080B251D4352F126920C8CF13E00C15A16445A44DA4F105554",
+ INIT_23 => X"0F203CF4495240B82923890203080E20B8809249524080C2C0B490210C803203",
+ INIT_24 => X"854F25C74C20400C1030000B24838A6F858A08E24080F2823890203C80D203C8",
+ INIT_25 => X"00000C000000001F75D5D74FC0000000000000003FFFFFFFEAAA95438104DA47",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000154000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(1 downto 0), -- Port A 2-bit Data Output
+ DOB => memBRead(1 downto 0), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(1 downto 0), -- Port A 2-bit Data Input
+ DIB => memBWrite(1 downto 0), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => low, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM1 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"01510111000100020061006B0000004000100002001005510001059A00360064",
+ INIT_01 => X"40300000064005640380001E0001543802180002000200010002000500110005",
+ INIT_02 => X"000653709D19C24E555555552400000000920000000024000000000162843876",
+ INIT_03 => X"0000CC55555DC1557EC5DC00033155555577055555D315607655000000007000",
+ INIT_04 => X"74818211417206084505C705770000F940000398000001765560745D30017700",
+ INIT_05 => X"165081C206084505C8182114174818211417206084505D206084505C81821141",
+ INIT_06 => X"51200592163801450816D095E0044564ADB5C58C82606080118051A1162881C8",
+ INIT_07 => X"550175554516163566505D44014118AA4818516C185014519662131830201616",
+ INIT_08 => X"96140906D01981608AF43685992015DA5245D45628675859062835B511755017",
+ INIT_09 => X"6000B8F861B22CE39C0EC602ED202FC596B59458405845C55118595694001162",
+ INIT_0A => X"55A58300016D31668D5941040556516111611710005B4D4545716E190280595B",
+ INIT_0B => X"C968C00BA5BE80B2C68C00B65A3002C1BC8BA32CBE70C3EA02C9CAC89C59458A",
+ INIT_0C => X"0B1A0D6164EC408F8A047008D9CB622E2D19546CB32362C8BE8312FACC4BA202",
+ INIT_0D => X"4455CCCC1601143B2E45916976DC147401104104059F14685B456418596D1171",
+ INIT_0E => X"B4B55655D7453C5DA01654441070416015693378C475DC495A0458256156D15F",
+ INIT_0F => X"468751645665865943F040105B8164446641416011165018A11454D15D007415",
+ INIT_10 => X"8175134656FB96434615446289641B554684057595597595D066598611165695",
+ INIT_11 => X"18A6599B55F856501AD764059656556684017495497495C066598559C91D555D",
+ INIT_12 => X"5346166005EB404406411356518A35554684656685DD4686446112185F85B684",
+ INIT_13 => X"D555D6601585546854151468D5568546895EB4044115B4595F454E12599655D6",
+ INIT_14 => X"335D511B5557C55D467C504218A4E119C7135101456604AE1A05A1555F861668",
+ INIT_15 => X"91101161116169E0F5D448156855955595171C7110462859E41D55815FD556C1",
+ INIT_16 => X"153011465B440F059A495550560474598A50591544045B8105B8459841662905",
+ INIT_17 => X"16E16C16C16514546104654E051C0615418A9450651A1155A1B165662D1D417D",
+ INIT_18 => X"700111F690095D6159A445904D270024D7D3C3B711855915976D62896C56D165",
+ INIT_19 => X"62A10F7C5B0C0557D468857E5149D00170C316D15CCD6EC558AD0441D72116D2",
+ INIT_1A => X"97681F4400824581000023D4516DE3E2517161920D8D38057557861185921514",
+ INIT_1B => X"E152154484F551212D544846551210954484D551212154484515A45C3B78F895",
+ INIT_1C => X"457E256626804961925697473A0E2C44D0F51470F47849C431468400D048CD56",
+ INIT_1D => X"51105B8C05B445B315555C05417946285153C440619C2166018A4619C8598151",
+ INIT_1E => X"4595955BA2EA0761584405655975B59920519556E9056E0566859A4581645C14",
+ INIT_1F => X"9055965A909455530D5B16F1185118A55B15520D55159076C55AF455155B50B6",
+ INIT_20 => X"8085515155B6E90616D6E0146830806841851156724A0EC620DD04559653A415",
+ INIT_21 => X"75858C001F40514145B5B40507C305515155BA2D93E496D5695545B4605B9418",
+ INIT_22 => X"0810203080F20408032DA18003C200E266D1C15050400CF788038803844E58A1",
+ INIT_23 => X"0F203CCF4CF040B12103010203480F208C80A24CF04080D0C03C1023BC82F203",
+ INIT_24 => X"0600F6CFD04155043040000C38832340070840C04080F2103010203C803203C8",
+ INIT_25 => X"0A000C00000020061C7185CFEAAAAAAAAAAAAAAA95555555555555540B080387",
+ INIT_26 => X"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A",
+ INIT_27 => X"313A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A",
+ INIT_28 => X"00000000000000000000000000000000000000000001F0000000000000030000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(3 downto 2), -- Port A 2-bit Data Output
+ DOB => memBRead(3 downto 2), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(3 downto 2), -- Port A 2-bit Data Input
+ DIB => memBWrite(3 downto 2), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM2 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"0008000800000000000000010001002A000200000002000800000080000800C6",
+ INIT_01 => X"023AAAAAA028A040002A0000000002B000000000000000000000000000080000",
+ INIT_02 => X"AAA00B000020000C0000000002AAAAAAAA082AAAAAAA828AAAAAAAA008223032",
+ INIT_03 => X"AAA8CC000000E0000CC00E2AA33000000003800000030008300C2AAAAAAA3AAA",
+ INIT_04 => X"3C2828002830A0A000A0C020038AA8F02AAAA302AAAAA8000008300032A8038A",
+ INIT_05 => X"820800C0A0A000A0C282800283C2828002830A0A000A0F0A0A000A0C28280028",
+ INIT_06 => X"00000C00303000208600C841C0008C028AB00806C170000010000C0080002A30",
+ INIT_07 => X"8AB83808200000C000020C2000023002A830001E300380080002A00230100000",
+ INIT_08 => X"0000C00C00322300330800E0008020C088C0E280000B0003CC0020F08038AB83",
+ INIT_09 => X"40001DA0C0200401080400000CD880A23C00C23008C00A3B20303010102C8000",
+ INIT_0A => X"0000002AEC0C70000A0093220A8008C0230028EE00032A008CA00C230004F00B",
+ INIT_0B => X"9030420240C820130704202C1C108041C900C10A2CD04E0C00B34C80380E4000",
+ INIT_0C => X"8E32028C080030DA0244070DA342C0BC26AA40880A36C0A020D1008304020040",
+ INIT_0D => X"20A0303230280000AC0020A828028A20220000000C2080000B200030000C82C2",
+ INIT_0E => X"323200204380C300000080880B80A80B83008D037820E3A00008C0400000C203",
+ INIT_0F => X"00004800400008012C2000000300820808A323008D800A30008083C81C801000",
+ INIT_10 => X"8030808000C0002F8C0008C0000230000002200882883881C8CB0002FA000000",
+ INIT_11 => X"3080000A8030002A3220A08C0002800002200882883881C8CB000200C1200170",
+ INIT_12 => X"2F8C000AB0282A0A8CAFA006230000040008C8300080100408C08A820B003028",
+ INIT_13 => X"0002C0020208400002C8C1020800040002C282A0A800320003203C02000000C0",
+ INIT_14 => X"28002208005C2A840002A08A3009090828820E0900000A823200200507004300",
+ INIT_15 => X"0880A3000000020F00420E030000A080A0208208828C00000821810007080322",
+ INIT_16 => X"85002D080320300040088382000800000008C080E0AA0300E030A0000000008C",
+ INIT_17 => X"80C00C00C0010088C088C83C00028C002300800820000200013834000010B03C",
+ INIT_18 => X"0A20108A00290E4080038C088C00A20081C12810A30000E0A0A000000C02C804",
+ INIT_19 => X"C000020C0223C020C300000C002300C20882C0C813280FEF0008C0A8280900C0",
+ INIT_1A => X"8200000030428C0E008C100108E0CC084020000ABA882800380702E300026028",
+ INIT_1B => X"C0CE4280A240A02890280A240A02890280A200A02880280A2230228824330210",
+ INIT_1C => X"081C8000008000008C00C204DC280368800042CE0002C1C0A0000383A00E0280",
+ INIT_1D => X"0880030E803200308281822223088C00020082C0C08C630003008C08CA000000",
+ INIT_1E => X"00206003248C882E00238008023030008EB33021D0D00C002020400323020E80",
+ INIT_1F => X"08CA008A00888008AE0300F230223002030008AE02A00808A040812060030823",
+ INIT_20 => X"88B0060A0032E00880C0C8322821A22AA3020D83B00D808C182E28CA00878020",
+ INIT_21 => X"20000C003280A28E2030320C8B8220060A003248C6EA80C3003820302403026A",
+ INIT_22 => X"C2BA0AAC2AA0AE82A93AAEABA2A0B110EAAFA3EFEE8ABBAAC2C442444F300000",
+ INIT_23 => X"A90AA4BABAAAE82F04946BA0AAC2AA0AC82AE0BAAAE82AB24E5ABA09E42B90AA",
+ INIT_24 => X"AA8FAAAAACFBBEE8BED8AAA9EC0AEEBECAC1251AE82A905946BA0AA42AA0AA42",
+ INIT_25 => X"FAA00C000000700562A2FC8FC00000000000000000000000000000000E02C44E",
+ INIT_26 => X"FAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F",
+ INIT_27 => X"0D25500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F",
+ INIT_28 => X"0000000000000000000000000000000000000000000080000000000000020000",
+ INIT_29 => X"00000000000000000CF000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(5 downto 4), -- Port A 2-bit Data Output
+ DOB => memBRead(5 downto 4), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(5 downto 4), -- Port A 2-bit Data Input
+ DIB => memBWrite(5 downto 4), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM3 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"00040044000000020008000200020115000500020005000400020000000C0089",
+ INIT_01 => X"2975555550165082031500000000017218820002000200020002002000040000",
+ INIT_02 => X"5550070B0150281C000000008155555555849555555561555555555404117230",
+ INIT_03 => X"5555EE000000D8000CE00D9557B8000000036000000B80053000555555553555",
+ INIT_04 => X"31141484143450521050E090036555F0955557015555540000053200B9540365",
+ INIT_05 => X"4305181450521050D1414841431141484143450521050C450521050D14148414",
+ INIT_06 => X"088A0C0830B088305988C583C9824C914136660AEABA8A2AAA2A08084081160A",
+ INIT_07 => X"1544300C14808010800A0C1694A932055632082D3208420448095991A8684080",
+ INIT_08 => X"008210800A02130B030A8092006990C04620C540821702028C8290F568315443",
+ INIT_09 => X"9AB92A20C8084AAB01A820AB082640D53AA081A164C265B750A1702032124808",
+ INIT_0A => X"08016955148DF82021207E5595420685930996D9952351204C588C926A2FC00B",
+ INIT_0B => X"20E9A590C3A2192A9E9A590C3A6964A7A312A6830CEBA08A6433AA21310CA020",
+ INIT_0C => X"6E31A15036890AA312FD78AA33A084ACBE61820106E8843108A6A4229A90C4A4",
+ INIT_0D => X"11510AC9309402005C20185021614512190A28A28CF042020F108232008C45C4",
+ INIT_0E => X"31214814832100080940422454855404420142448520CC9E00A4C2C40808D90B",
+ INIT_0F => X"20268482C800150257062188232541244453130942420532044203C43C593612",
+ INIT_10 => X"7830466802C008134C8064C8208132082025942102102103D4C6202525980008",
+ INIT_11 => X"3241200540B2481531105A4C0002082025942102102103D4C6202520FB5002B0",
+ INIT_12 => X"134C801D711635AD4C525809932060882024C4202648202924C855430F223516",
+ INIT_13 => X"8282C80B91A8820265040201042028202691635AD44231040B103C99200003C8",
+ INIT_14 => X"9600999400AC154C98015A653207468C14C808871080914131A01A0A0F24C301",
+ INIT_15 => X"044853098808030C00C111820210C16080C44104654C8220949E86A80B240B19",
+ INIT_16 => X"4B46A224231280A0801E421B0AA401202064C048D1552324123252026480814C",
+ INIT_17 => X"48E88E88E8828204C864C42C90814C8053204205108099080A743C809070883D",
+ INIT_18 => X"0596A8858AA60CAA58004C066C60594203DB16B053201012505808208D03C468",
+ INIT_19 => X"C818807D4458A0C2C202603D081702E6862888C460988FDF02089AD4164688C6",
+ INIT_1A => X"420200A2B99B4C29286E640205F1CC088844081F49601684300F25132009D084",
+ INIT_1B => X"C9C2831215A0C4856831215A0C4856831215A0C485683121593251515C730222",
+ INIT_1C => X"203D4080904A20086864E4682C918096010081C30A0292C6442020EBD9160148",
+ INIT_1D => X"0548232D623112344203115113204C82084015E8C94D930063204C94D5202448",
+ INIT_1E => X"1080842348196501021064050170B2005553108554208C902010C06313012D42",
+ INIT_1F => X"04C500542A464205692388F93219320523420569084206041080560084234606",
+ INIT_20 => X"660408084234C2A548C8D63106851905632142433C9D654C965D54C5005B0A92",
+ INIT_21 => X"00201E21706259615232358C576854080842348195C541C3003112361A235591",
+ INIT_22 => X"005000100050140005055541515105505555514554414515441544554002020A",
+ INIT_23 => X"0500145455514015051545000140050014001055514000514054500114005001",
+ INIT_24 => X"4545554554515544005000055401555541414551400050515450001400500140",
+ INIT_25 => X"FFF00C000000501394E93A4FC000000000000000000000000000000005041545",
+ INIT_26 => X"FFFFFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F",
+ INIT_27 => X"093FFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F",
+ INIT_28 => X"0000000000000000000000000000000000000000000070000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(7 downto 6), -- Port A 2-bit Data Output
+ DOB => memBRead(7 downto 6), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(7 downto 6), -- Port A 2-bit Data Input
+ DIB => memBWrite(7 downto 6), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM4 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"02550195000200030077007600030359001E0003001C09DD000307EA00000064",
+ INIT_01 => X"706555555755A365027600130001222837780003000300030003001600120005",
+ INIT_02 => X"555709831042087800000000D355555554DA5555555536355555554D5AA46DF7",
+ INIT_03 => X"5541AA00002A2800AC82A25506A8000000A8A00002A200018329555555559555",
+ INIT_04 => X"A6956586F8AA55961BE2AAACA89541B85555060D555554AAC001822A2154A895",
+ INIT_05 => X"15564C3A55961BE2A956586F8A6956586F8AA55961BE29A55961BE2A956586F8",
+ INIT_06 => X"C4DD0F9C3E254D554C5A94D4A3500F07C1D00B5C330CF3C3F3CC5544DD52494A",
+ INIT_07 => X"E1B5D755571D97818E76755CE71835646436755036461D5558E13248A5555D99",
+ INIT_08 => X"DD953042010B03E0024CD486B931E7579D27491D5550765A0D55154409D21B5D",
+ INIT_09 => X"4424F150D91D3714CDB070020425D4601515551100F8018994D19555114041D5",
+ INIT_0A => X"75543554959F55D556679190489D554403E0072C4060DE140F41BA11D6E44451",
+ INIT_0B => X"6845704D611544DC545704D5111C1371144C1DC79E5C71E113697174D0747754",
+ INIT_0C => X"38344823553107174E413471697193C477905D84C7455344DE19D378574D9313",
+ INIT_0D => X"55DD48483E1B310505675CCD58860351454104100F441D5552558C3655B95098",
+ INIT_0E => X"65111AF8DD1AD055541D1D54F08F41D115509285CE0754B47450F82DDB5B6556",
+ INIT_0F => X"D550499F18E4B076DA4214846A8499649843C3E382555435685D9495496C3106",
+ INIT_10 => X"4DD55C3555001BD40D9110D5558C3701D5515951951D5114D0D2678221658145",
+ INIT_11 => X"340D6B9445289AC434711C0F9F15CDD5515951951D5114D0D2678267C4950175",
+ INIT_12 => X"F40D912D604235CD0D221D444356E005D550D1555381555500D97D875686A420",
+ INIT_13 => X"80549BE357DF5D553D7DD55A1DD555D557D4336CD746A5475E5D6A216391175A",
+ INIT_14 => X"010501F5405D40C8D5940C1435580D3849CE5740B18E1910340745C556881D5B",
+ INIT_15 => X"9B4603E049D9C0084555521555D5710555774D34040D536B8421F9D453441141",
+ INIT_16 => X"041175106E554455555F9551036500638510F943D169668356285678818E340F",
+ INIT_17 => X"D8F98F98F98FDD00D920DD6A08440D9103545D563755637555C621AE0505C164",
+ INIT_18 => X"1157D3918169757BC8590F9710611503950440C103644653210DD555BE179544",
+ INIT_19 => X"D54C433594B0854455550145755140154527D89514BD8B95754C1CD64F0D1906",
+ INIT_1A => X"5551405045830F8D75D16D155464110C4D99D918486C8049DD528503667CD750",
+ INIT_1B => X"A3429553102554C409553102554C409553102554C4095531003C972139044313",
+ INIT_1C => X"D151519E005111D94414170D204D0484CA4555500503216C59D5301C3526441B",
+ INIT_1D => X"57046685066556A495D5DD4103D10D51773591C0DE4C83E503570DE4CD6B889D",
+ INIT_1E => X"1775776F4CCF97A4766261D877D536396DC347407021AA255525558D03E7055D",
+ INIT_1F => X"30F31DBD15BBDD56706F9BF83648357C6F5D547377B6FD0855545F35776F3A33",
+ INIT_20 => X"8837575776B0C15859D9843C816FE39A4366411D28401C0D41F3E0FB1D9F4566",
+ INIT_21 => X"07670D146590C32F1676610FF31267545776B40CCCCFC89D59D5A6E8DC6F2CDF",
+ INIT_22 => X"CC30300C00300C000C320499A95208E1C4535A2755E92DCB882389238A427556",
+ INIT_23 => X"000002951C50C080313003030BC02D003400811C50C002CB87E43003F803E300",
+ INIT_24 => X"5841550C544F955C0740000C380831B1C14C8C00C0C023330030300800D00000",
+ INIT_25 => X"FFF00C000000F01400FFEAB3C0000000000000003FFFFFFFEAAA9543850823A8",
+ INIT_26 => X"555555555555555555555555555555500000000000000000000000000000000F",
+ INIT_27 => X"3A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5",
+ INIT_28 => X"00000000000000000000000000000000000000000000B0000000000000020000",
+ INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(9 downto 8), -- Port A 2-bit Data Output
+ DOB => memBRead(9 downto 8), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(9 downto 8), -- Port A 2-bit Data Input
+ DIB => memBWrite(9 downto 8), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM5 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"0028016800040002006B00A40002002500150002001500200002078500620060",
+ INIT_01 => X"090555555A16501F0555001E00011554543400020002000200020008001C0004",
+ INIT_02 => X"555A082282D08E55000000009355555555841555555561455555555058510938",
+ INIT_03 => X"5564320000C598030D3C595590C80000031660000C58C0246FC1555555550555",
+ INIT_04 => X"12084505C8182114172040DF165564345555903D55555715C0246FC58D571655",
+ INIT_05 => X"96296A48211417206084505C81A084505C8182114172058211417206084505C8",
+ INIT_06 => X"E18B5B896D1CD962A7546A5450CF5B71580861C4E138618E91B8586205916041",
+ INIT_07 => X"17146758A54584656E0B18A04CF16646C1660945661A862854D183703F0F0588",
+ INIT_08 => X"0582C0F063C156D030459915F861A18480718705961516185996751FBC617146",
+ INIT_09 => X"378E9CA59823E272012C64BB400C144101558A49B5B4BD50710945615F380059",
+ INIT_0A => X"1852855419554461645F509EE3462926D6D2F546F1595CCC5B756511B2343155",
+ INIT_0B => X"B7702AFAD5CB6C8B1702AFAD9C0AB629CBD9C4BA28082E8CBEA02C8E801A1166",
+ INIT_0C => X"0166AC531C4502C8D941902C80263E735D40066BA5723A8DA8CCBEA322DAFEBE",
+ INIT_0D => X"A01240416D1107E5A19151016694527B3730C30C5B44061651A15D6601668510",
+ INIT_0E => X"DA01D4D9861C12585D05065D2811A8519615D0104661940514C5B41453955451",
+ INIT_0F => X"6168095D15E114149C58BE2F5542950D5956D6D080162966440614694692E3C5",
+ INIT_10 => X"40628441544996DA5988A599654D643461695D65165D65D45596534A07012D74",
+ INIT_11 => X"668D5784B55457D16459CA5B8496B061695D65165D65D4559653465304D4BC14",
+ INIT_12 => X"CA5985D59F72958459207121566453606155996169016161A5985D5559451715",
+ INIT_13 => X"4D5555D195940616913116116061606165B7295844555A2759A175215B85D555",
+ INIT_14 => X"70B417352F056B6A715694656668C4C6756858D0D14D121D66E164A05D440611",
+ INIT_15 => X"80ACD6D20058E080458A141616C58D8595B41041C55991577DC058B25D774D57",
+ INIT_16 => X"A01F145855A314C58515165132DC89574495B80B0855514715545534054D025B",
+ INIT_17 => X"17495497495C066598559D45356659889666462941859D185867416D14046975",
+ INIT_18 => X"99524CDD7720192513505B84634995CA1454710996622409D9C0596565546840",
+ INIT_19 => X"996DF895A74805A21616894518A86430CC0D5568440545001645484671C4D444",
+ INIT_1A => X"561B22C94D195B472D1345162807D10000A4582043DF16F464514116627A61A5",
+ INIT_1B => X"5100966998A59A662966998A59A662966998A59A66296699896E9892E1FC400C",
+ INIT_1C => X"6545195D1AC85458697806A50148143DF1458A102C00D046646190140D247717",
+ INIT_1D => X"280F5144451A15D51616D05456C1599118412815927256E196655927215B4460",
+ INIT_1E => X"11858751486456951621685817855578511641A9DF0165016105845C16E02E06",
+ INIT_1F => X"35B8051B0CB846294559D7456619664659462A441B75B441C587E5058759A619",
+ INIT_20 => X"641759587598E0C15454556E8BAA56A5566140865C12B2596B3255B40507C305",
+ INIT_21 => X"C1632BBD073618665515155B50B647595875948676CA8846106405D4D05DA420",
+ INIT_22 => X"C030003C40F10C040D284715799040C1155498499FE9FDA30103010304C41658",
+ INIT_23 => X"0D1036025D60C0F617D18300080422103440125D60C0420B00C4301190424003",
+ INIT_24 => X"D0456C31905419FC4108000C300999F50245F460C000C14D1830003040D10344",
+ INIT_25 => X"AAA00C000000002AAA555573EAAAAAAAAAAAAAAA955555555555555407010320",
+ INIT_26 => X"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA",
+ INIT_27 => X"003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ INIT_28 => X"0000000000000000000000000000000000000000000060000000000000020000",
+ INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(11 downto 10), -- Port A 2-bit Data Output
+ DOB => memBRead(11 downto 10), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(11 downto 10), -- Port A 2-bit Data Input
+ DIB => memBWrite(11 downto 10), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM6 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"00000000000000000001000200000000000200000002008800000300000000B0",
+ INIT_01 => X"202000000800080A010000000000080202B20000000000000000000200000000",
+ INIT_02 => X"0008A20300A00C02AAAAAAAA0B00000000020000000000000000000002002830",
+ INIT_03 => X"0000B8AAAAC002AB2CBC000002E2AAAAAB000AAAAC0EEA800FC8000000000000",
+ INIT_04 => X"84A000A0C2828002830A22CF000000B00000023C00000300EA800FC0EC030000",
+ INIT_05 => X"000003028002830A0A000A0C284A000A0C2828002830A328002830A0A000A0C2",
+ INIT_06 => X"3C0003000CA33000040300400B38030004028238020082002600000C8C080000",
+ INIT_07 => X"8A08CB00028C0A803C31300EA08000208000200800208C0003C8380232828C02",
+ INIT_08 => X"8C000B04881380C8800F0400B03803020093020C000A30280000202224C0A08C",
+ INIT_09 => X"003914C000B6C0E02C000003000820C882A00080003200900D800800B802D8C0",
+ INIT_0A => X"30003002B808C8C004033000800C020000C802409E0608CE03080080A00C0302",
+ INIT_0B => X"C0D00083034C08010D100830340028034CB3403C3000030420C004DA00322302",
+ INIT_0C => X"E0002A07384C004DB0C22004D00B6894C2820CAE22D364D8304820C120932820",
+ INIT_0D => X"00E002C00C811C0028A3282C08228A2400CB2CB203C08C0000002C0008000200",
+ INIT_0E => X"000E80CACC0B80002A0C0C80280088C20008800A22B32C0E30803220CB808800",
+ INIT_0F => X"C002283E00C289320830C830042028000200C0C8200000002A8C80000022BC30",
+ INIT_10 => X"88C0020880BB82C800080000003C02F8C0000C08408008008002032202088038",
+ INIT_11 => X"022C0B02300202C0000020030A00B8C0000C0840800800800203220B08800010",
+ INIT_12 => X"C8000A04800A12240020200280022F80C000000001080000200000010020A080",
+ INIT_13 => X"BE8081C90A260C0010BA8008A8C000C00100A122401000030C0030880F0A0080",
+ INIT_14 => X"0A00822000040020688002080028208008480200401C8A80002302800C200C08",
+ INIT_15 => X"00A000C8D8C0C0800000028000E00C20200082082000080B202050200E020802",
+ INIT_16 => X"000218020C02208000050088F8834C0F2A20300FB400002380C20072201CA803",
+ INIT_17 => X"00882883881C8CB000200C008880000800028C00230002300003203C81004038",
+ INIT_18 => X"000008428210320A080A03020820002200880A80000202B92028C00028000022",
+ INIT_19 => X"00890210803420210000280A30001020B8C8C200000C1800302F82430A2083B2",
+ INIT_1A => X"0000D0B68823032CC0A208000200000C20A8C0E000830008C800228000B06320",
+ INIT_1B => X"0820808E8CA023A12808E84A023A12808E84A023A12808E8480C0B8AE0040304",
+ INIT_1C => X"C808003C8233A0C00C30080800009008320000000B83A00828C0082808800001",
+ INIT_1D => X"00B00820E0C000A08080022200C6000A322860C0083880C000020083800F2028",
+ INIT_1E => X"E320230E188022AA300E24C13380203035000332ED0C20800080020E80C03C8C",
+ INIT_1F => X"70320C8A08388C003602C18800000022028C00363330F3888002A2E0230A2220",
+ INIT_20 => X"2263020230E1E0880182800C92308AAA0000384C8C202300C23220320C8B8220",
+ INIT_21 => X"E303800A0100820A0060A003082303020230E18800DAB48C08C8B0E0C80202AA",
+ INIT_22 => X"4AAA2AA4AAA2AA8AAB2AEEEAE2A12512CFEFA2FAAA8F2AA2C59444944F803000",
+ INIT_23 => X"A32A8CAAABAAA8EF04892AA3AC4AB02AD0AAC2ABAAA8AB12CF7EAA2B4CA932AA",
+ INIT_24 => X"AE8EEAAFA8FBFAA8AE94AAAAAC8FABAA8A81224AA8EA305892AA3A8CAAB2A8CA",
+ INIT_25 => X"00000C000000100000000033C00000000000000000000000000000000A04944E",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"1500000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"00000000000000000000000000000000000000000000A0000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(13 downto 12), -- Port A 2-bit Data Output
+ DOB => memBRead(13 downto 12), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(13 downto 12), -- Port A 2-bit Data Input
+ DIB => memBWrite(13 downto 12), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM7 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"028200020002000000020081000001800000000000000A4600000320002A00CA",
+ INIT_01 => X"905000000C800680020000080000444101710000000000000000001100000002",
+ INIT_02 => X"000C51A6981A9A015555555587000000002140000000081000000006010850B2",
+ INIT_03 => X"0001745555E001579D7E000005D15555578005555E0DD5410FE400000000A000",
+ INIT_04 => X"4C521050D1414841434519CF80000172000005BC00000380D5410FE0DC038000",
+ INIT_05 => X"00800311484143450521050D148521050D1414841434521484143450521050D1",
+ INIT_06 => X"B21023208C60000808020082040823582DA15A0A0A828A202A0202024C040620",
+ INIT_07 => X"5454C702054C25583CB23201564080111480B02080B14C8202C4451530504C29",
+ INIT_08 => X"4C2CD70F843F88C6782C0E40B2442321A663258C008530942000508418C9454C",
+ INIT_09 => X"90332AA202A8C4867C420A02E68152956550205C02310276425C64087C4124C0",
+ INIT_0A => X"320900014031E4C8090F7980048C817008C409D4390C4DAD23442049465EBE08",
+ INIT_0B => X"A6EA40229BAA42128EA40229BA900843AA22A93A69924E9A08A64AA22E319301",
+ INIT_0C => X"1080551FB198A8AA21E92A8AA64A88A82A6D8C6B22EA88A329A508A694328808",
+ INIT_0D => X"091921E08C46AC38145316580551649C4024924923E24C8008083C80A4202506",
+ INIT_0E => X"809103D78C9C4802118C8C50462554C94085486515E31E1D32123198C7831708",
+ INIT_0F => X"C805903D82C942314421C0700C1514904108C8C518408080114C42002005E000",
+ INIT_10 => X"64C82514423FC3D4202E1200002C8134C8000C048048048202080B1484546834",
+ INIT_11 => X"81380F25708102D882181023258074C8000C048048048202080B140BA642AAA2",
+ INIT_12 => X"D42025987905A11A208844A948010368C80200080368080812025822081080C0",
+ INIT_13 => X"0D4202C615198C803475408494C808C802D05A11A220C0A30C0830540B258202",
+ INIT_14 => X"45A24450AAA8001ED44005148016322E0482011A9C2C554C8013056A0C128C84",
+ INIT_15 => X"267108C424C2CAA22020854080D02C10102165961120040B501AB6060C09A404",
+ INIT_16 => X"2A80668308085210208B405C3410A90B1512326F49010C17408110F1542C5423",
+ INIT_17 => X"42102102103D4C6202520C204660202E08014C80932001320243982C52A28031",
+ INIT_18 => X"800422C160763185560523251E58003082160568080B914B1814C00020820259",
+ INIT_19 => X"00470222620A101A808054213206208A2193C202621C225A301FD1A305320225",
+ INIT_1A => X"408028096013231C01580480818028AE6674C292201F5104C60814480A709312",
+ INIT_1B => X"05A8405D4A5017529405D4A5017529405D4A5017529405D4A48D445D900A2B99",
+ INIT_1C => X"C421882C5F0098C24E6697488A6D6201F520208A80EBD91434C81A9690E40082",
+ INIT_1D => X"81700C11108080C14040851988D92005316491C20534C8C808012053440F1254",
+ INIT_1E => X"1310130866891415309108C2332080B255482315568030580850212D48C9BC4C",
+ INIT_1F => X"B2358C41A1714C810908C22080848011084C81093370B4E690215110130841A2",
+ INIT_20 => X"119301013086DA150202108D206544150809068C5E980520407852358C576850",
+ INIT_21 => X"D30B40018241451440808423460613010130866895E50E4C84C54086C6085545",
+ INIT_22 => X"4410101440510404051545555151455155455154554145554515451540283001",
+ INIT_23 => X"0510145455504015151141010144051054405055504040514154101054415101",
+ INIT_24 => X"5445551554515554415400041401555541454450404051511410101440510144",
+ INIT_25 => X"55500C000000D00000000033C000000000000000000000000000000005051544",
+ INIT_26 => X"5555555555555555555555555555555555555555555555555555555555555555",
+ INIT_27 => X"1515555555555555555555555555555555555555555555555555555555555555",
+ INIT_28 => X"00000000000000000000000000000000000000000000E0000000000000010000",
+ INIT_29 => X"00000000000000000CD000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(15 downto 14), -- Port A 2-bit Data Output
+ DOB => memBRead(15 downto 14), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(15 downto 14), -- Port A 2-bit Data Input
+ DIB => memBWrite(15 downto 14), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM8 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"015502550005000300F6005200030357002A0003002A066500030BDD001C000F",
+ INIT_01 => X"793000000D4EC7C70123002F0001191522250003000300030003003D00060009",
+ INIT_02 => X"000D601010C040A555555554DA00000001DCC000000077600000001645953DFD",
+ INIT_03 => X"0024C9555693855A7CB92A00932555555A4E15556932D564899E00000000A000",
+ INIT_04 => X"5D961BE2A956586F8AA567064E0024F0000093A4000002405564CB932C024A80",
+ INIT_05 => X"5D510E56586F8AA55961BE2A955961BE2A956586F8AA566586F8AA55961BE2A9",
+ INIT_06 => X"A2CD6E8D995445D50415505D54486DAC86F2014401004100D90F76420F951317",
+ INIT_07 => X"1510D0756C0F85016A08356D69D1AE7545BE09D1BE090D551595211564540F86",
+ INIT_08 => X"0F805644C511DB9595044165E874C364C783450F96543E146F9B074370D9510D",
+ INIT_09 => X"D0059716B8C5137DC0372001534D13641227546416A51443126409D9590120F9",
+ INIT_0A => X"36560854A95A40D9CF52944C950D51909A94912C5C5517E569C5555639E4D274",
+ INIT_0B => X"1C5D34787171C74DC5D34787174D1531714974D1874D34571E113716083403E4",
+ INIT_0C => X"11BC45059E74587172579D87113C5A54D9100D71F15C56148574D215D3785A1E",
+ INIT_0D => X"57101951A951691C0443C079D85206791520820865500D917555498E15555D43",
+ INIT_0E => X"5643D4020DC94C76460F0D54FD2FB0F89D9E0713B48365143E566570FDD56475",
+ INIT_0F => X"D9515D4955A1203DB50398E455555344471A9996A41D51BE6B0D1D51D5B6B105",
+ INIT_10 => X"10D5514C5D3FD4116B8D1639C1459E40D9C401D0DD3DD2DD36BE5659440CD400",
+ INIT_11 => X"9F7C5E85475555A1AF08416284DD00D9F401D01D31D21D36BE56595B07104410",
+ INIT_12 => X"016B86C4001110346B344830DAE76470D916F1D9C089D9C816783811755571F1",
+ INIT_13 => X"905DD595B4040D9C0A341D9FD0D9C0D98D1111034FC55553757DD5545E865D17",
+ INIT_14 => X"11907484261415500C0179A5BE6373A31C467445C5596D8D8C03C3F0755C0D9D",
+ INIT_15 => X"83E4589420F845D51755749D9C37408777410410826F9657E7434002771C0034",
+ INIT_16 => X"354053475556521764441D2BC0A4815E5456A851083F555955557525B559536A",
+ INIT_17 => X"951951D5114D0D2678263DD55BD1678D58E60D5903659436431C1549535241DD",
+ INIT_18 => X"44003B04E4403403010B6681900440719D0110345BE343C85440F9715CDD5515",
+ INIT_19 => X"7986431374C5975D9D99B9D835502D49FC805555310551403E56034C107395E0",
+ INIT_1A => X"9D9120C85C8066553413241D5C5014B168B0F8D350CD1D40D275549BE1100366",
+ INIT_1B => X"54B49D071CE741C739D071CE741C739D071C2741C739D071CD815C8654051858",
+ INIT_1C => X"D1D145596B4080F8C1518D8456E6310CD53754060C2C353430D91D85BC110115",
+ INIT_1D => X"5264555525557571DDDD84001BD76B9437189636B0241BA01AE46B024D525D40",
+ INIT_1E => X"0377485474C5E3903E3400F03FC755E86D59C3478B415575D96767055BA26C0D",
+ INIT_1F => X"E6A10F207A310D5D0455154D8E21AE7F540D550437D5EC0C6767EA6748574D31",
+ INIT_20 => X"EF2D7675C576C499D515DDAD233DBA2F18E0360D814C1E67410C66A10FB31265",
+ INIT_21 => X"03E10116505841CC7565776BFB332B767485444C49EF430D90DD1554E856A57E",
+ INIT_22 => X"060010B042F18004022C024D1C0C8C024C88055CCD9726B03330313015D43E70",
+ INIT_23 => X"2E10B94C860800712F77200103040C105040C086080040C8029A0013B84AE10B",
+ INIT_24 => X"7D02A0C02689FCD84294002EC00712EB68CBDDC80042C2F7720010B040210B84",
+ INIT_25 => X"00008C00000000000000003CC0000000000000003FFFFFFFEAAA954349323032",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000C20000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(17 downto 16), -- Port A 2-bit Data Output
+ DOB => memBRead(17 downto 16), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(17 downto 16), -- Port A 2-bit Data Input
+ DIB => memBWrite(17 downto 16), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM9 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"009600160000000600E4009200060557000C0006000C02960006039300FA003A",
+ INIT_01 => X"B5D000000581E4BC081000060000110A155A0006000600060006004200740002",
+ INIT_02 => X"000959D19C274612555555558600000001AD000000006B60000000120541D009",
+ INIT_03 => X"00176555560F45581050E6005D955555583D155560F955579000000000002000",
+ INIT_04 => X"811417206084505C818201B03D00174C00005DC0000000331557D00F94003980",
+ INIT_05 => X"05904844505C8182114172060811417206084505C818204505C8182114172060",
+ INIT_06 => X"00B95D4956847059025610062B41597E299E04403812086A800816305B801AB3",
+ INIT_07 => X"16159116405B452D7501664AC09D5E01854D00657D01599654685565C7F75B44",
+ INIT_08 => X"5B405444511054691C433355D45496618696555B86456D155784919B25916159",
+ INIT_09 => X"970A02C57472B208C4E68B5073F10827B8D166E7551A574890E7B45841D905B8",
+ INIT_0A => X"6608B8000D640598E4514E75D5599B9D54695D15555904C55955628C08C3901A",
+ INIT_0B => X"C00B65A3002C1BE880B25A3002E96FA02CB02E9C30CB670268CB22CAE16696E1",
+ INIT_0C => X"356F85644232302C85304B02CBE7201284D6591C100B20C8302FA0CCBEB32C68",
+ INIT_0D => X"5A1BF03D468501103796DC24564AC421C50C30C3550C59841859454D1161632D",
+ INIT_0E => X"85D4D448590820161C5B595667C5A5B00581FCE8121643C16C95DA45B0D65418",
+ INIT_0F => X"985951471451596F6CB8120458A153154515546A2F45996E0059061061011525",
+ INIT_10 => X"659969F546555451534615B81D455DA5981400574554574665B551AAF5F542E5",
+ INIT_11 => X"6E55514D618A545D4CF26151450565984400574554574665B151AA555CD50306",
+ INIT_12 => X"615B4500879C03135F4F516357E04A6598053058E04058E495F4D4C818A5A16D",
+ INIT_13 => X"2B06D5689712598E0D3485815598E5986439C031312585AA184862965D454615",
+ INIT_14 => X"5C56557980C2D511356D69554E245A019110147CD1668D555F16CD6E18AD5981",
+ INIT_15 => X"4547156A05B44C709165B5058C4155014151861854578151255C0A1E1890E155",
+ INIT_16 => X"2C2148055859485162900507A804095DA5159403033C58A4458A051A45469451",
+ INIT_17 => X"D65165D65D4559653465B062850D534657E159901662056619D03156BAC41061",
+ INIT_18 => X"B40CA027558966CDB0B5594581EB405406459A4355D1A9405265B84963061695",
+ INIT_19 => X"B88C400052E3616445894869665813035A621616A3C160716E0031309D5A160E",
+ INIT_1A => X"85810003DF1055A137F7C24592C0B0534655B4753E2568459918A017D1809655",
+ INIT_1B => X"2ABF45A916115A458456916115A458456916D15A4584569161554844B32CD4D2",
+ INIT_1C => X"90665146A34835B4405B2243F45997E25841667C00140D3415982F3F5F100D16",
+ INIT_1D => X"914458A14585B58D0505057316525381649A743537DD175394E25B7DD251A445",
+ INIT_1E => X"564156596A42E5216D10D5B16F1195145157D6798BF562805801602E55501859",
+ INIT_1F => X"55955BA2D8F159910159565D4D217E105A5995016785D8328160E61156594E90",
+ INIT_20 => X"ED891416A5952D91D6561D652197FA6617D2065983117557579455155B50B645",
+ INIT_21 => X"96D1C15CCF5965D07595875966192514156597A438065D59859925A5D55A7182",
+ INIT_22 => X"86601098427198040F00102D2065F4638C0066147C25890194D197D1A48D6E32",
+ INIT_23 => X"2F10BD01DBE980D133F4660103040C10F04001DBE98040CF435E60123048C109",
+ INIT_24 => X"41CC71F0461277C043200020184454DCA90C7D198042D31F466010B440F10BC4",
+ INIT_25 => X"00000C00000000000000003CEAAAAAAAAAAAAAAA95555555555555540D14D180",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000B70000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(19 downto 18), -- Port A 2-bit Data Output
+ DOB => memBRead(19 downto 18), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(19 downto 18), -- Port A 2-bit Data Input
+ DIB => memBWrite(19 downto 18), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM10 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"00000000000200000042000800000003000A0000000A00000000038300200000",
+ INIT_01 => X"300AAAAAA020C232008800040000088008000000000000000000000800020000",
+ INIT_02 => X"AAA00002000008000000000000AAAAAAA8042AAAAAAA010AAAAAAA8020080088",
+ INIT_03 => X"AA800000008F00020208C0AA00000000023C000008F00000088CAAAAAAAA0AAA",
+ INIT_04 => X"0002830A0A000A0C282820323C2A800CAAAA00E2AAAAAA330000C88F02AA302A",
+ INIT_05 => X"8C0800000A0C2828002830A0A0002830A0A000A0C2828000A0C2828002830A0A",
+ INIT_06 => X"00300020200000C0A1000A0C000002088CA200005C130CB400003000030080C3",
+ INIT_07 => X"020002302E0320083088002282802C00880C88C83C880000C000083000800320",
+ INIT_08 => X"0322C80CE030C20033203A80C2CB0000E00022030A800C830F0A2321A0082000",
+ INIT_09 => X"020C00407253203845C00010EF0EF6002003008C60406000008C08C000200030",
+ INIT_0A => X"000003AAA80820008C020809000002318101802138028CC00E20000838403030",
+ INIT_0B => X"4202C0C108040C8010241C108090720804C0093413A20D00B042004C0C0000C0",
+ INIT_0C => X"802D008C8E130004D020800042893401283000252C01344D1008344020C13030",
+ INIT_0D => X"008A4000100000328380C228C82C20A028000000063200023000082C800000C0",
+ INIT_0E => X"02A8408800BCD830040300828028A0328C009022AA0000000EA0800030C08030",
+ INIT_0F => X"00A0000A0008280C031A0E8000000B8020C18000808C083C0A000C08C0A20800",
+ INIT_10 => X"000000808C9540880F24C0F0A0183C8000A2A0C78C78C68C90B000080080A800",
+ INIT_11 => X"0C100020230080883C080804208C8000A2A0C78C78C68C90B00008020822A882",
+ INIT_12 => X"880720A2880288820F00008800C0A800008070C0C0A8C0C140320BE030002868",
+ INIT_13 => X"A00C000080A0000C0A120C004000C000880028882000002E3028C0000C208C00",
+ INIT_14 => X"02A03008AA200022008010800C001222002A3008243000041C40D082300C0002",
+ INIT_15 => X"20808202003208CF6300308C0EA32823032C208220030202210210BA32028B30",
+ INIT_16 => X"08D080B10000B62300200C028200260C0080C20B80FF0000000030003800020C",
+ INIT_17 => X"C084080080080020322030C02A200B2401C0000880028000200AA000258210C8",
+ INIT_18 => X"82A22200A08000200A0A0820C2282A1A8CA0000800C90280080030A00B8C0000",
+ INIT_19 => X"7038030C21E023288C0238C80023663238A100000C2002080C000822021200A2",
+ INIT_1A => X"8C0C088083000C003020CD8C08382EA2083032C0008420000A3000C0C8000020",
+ INIT_1B => X"00F08C08A0A3022828C08A0A3022828C08A023022828C08A08280A2C0D0B6882",
+ INIT_1C => X"00C800000108003200820121208428084F63002088280880B000FC0A230B8800",
+ INIT_1D => X"088000002000300C8C0CB208838A0300000AA21072EA030B82C00F2EA2000820",
+ INIT_1E => X"802328022802E2A80C8AE0300F2320023A02C0294F080038C023003C03080E00",
+ INIT_1F => X"206003248E340008E002008C3C903C08020008E00380E000E30008A328021E00",
+ INIT_20 => X"ECAA3232802208C0C0808C386200BAA2C3C8E20012002B0B0281206003082300",
+ INIT_21 => X"00C82C04338C00893020230E2220EA32328022800A22AC00000AA020E00200AA",
+ INIT_22 => X"8BAA2AC8AB22EA8AAA3AAAABAEF12242EAEEFAAAEAEAB9EB858904893FB00C38",
+ INIT_23 => X"B62ADAAFAAAEA88604013AA2AD8AB62AA8AAA3AAAEA8AB6ECAA3AA299CAE72AC",
+ INIT_24 => X"FA8BABAAF8BEAEACBAC0AABBF88B3FAB8FC1804EA8AB706013AA2ADCAA22AD8A",
+ INIT_25 => X"00000C00000000000000003CC00000000000000000000000000000000B05893B",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"00000000000000000000000000000000000000000002C0000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(21 downto 20), -- Port A 2-bit Data Output
+ DOB => memBRead(21 downto 20), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(21 downto 20), -- Port A 2-bit Data Input
+ DIB => memBWrite(21 downto 20), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM11 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"010002800005000000C1008400000003002100000021040000000B0B00000080",
+ INIT_01 => X"300555555818C13E024600280002446044400000000000000000001400210008",
+ INIT_02 => X"5558001502C05488000000002055555554085555555502055555554490240A60",
+ INIT_03 => X"55400000005F20014925C05500000000017C800005F080001652555555554555",
+ INIT_04 => X"284143450521050D141494397C95402E555500D95555557B8000D65F09557015",
+ INIT_05 => X"4C06A011050D1414841434505284143450521050D1414A1050D1414841434505",
+ INIT_06 => X"08300810202228C05A80858C82220C544955A62AAEABAEBA2AA230A8232640C7",
+ INIT_07 => X"81820930112311843064801515403C98683C64CC3C642000820254B002222311",
+ INIT_08 => X"2319C42EE8BAC200709BF860C11608091088112325648C440F25531652041820",
+ INIT_09 => X"0AAA64A0B1AA88B6AE80A0F9CB0D89600123002ED080D0A1082E04C2601C8232",
+ INIT_0A => X"80B1F855540592024B086067802000BB42034297B9016AC008640821B6A83830",
+ INIT_0B => X"A590C3A6964A7A3129083A696430E8864AA6423AE830CEA4A9A084AA0C8048C8",
+ INIT_0C => X"402E609E6DA6824AA1855024A08AA99B160820AA6292A9AA6A4229A908A6A9E9",
+ INIT_0D => X"0155C680202440B64308D144C55D125014820820088920293200203C44080420",
+ INIT_0E => X"21158224204A263099232052441402364C257115550828288DD0801236C05232",
+ INIT_0F => X"025008204204448D20BD0F420204075350030300404C042C95208C84C8591480",
+ INIT_10 => X"120000824C6A82140F18C0B258202D42025358CF4CF4CF4C70F6080202425682",
+ INIT_11 => X"2D2E0814132042102D960C0C114C42025358CF4CF4CF4C70F608020811195469",
+ INIT_12 => X"140F1159658164C80B60264402C9144202E0B8C2CA74C2C6C0F140DA32001498",
+ INIT_13 => X"508C820240D8202CA5A58C268202C2024698164C8BB0201D3214C8120C114C82",
+ INIT_14 => X"41582246551A8099826834902C91209986B53201DC3018282FC8F041320C2024",
+ INIT_15 => X"14404302823121C09300314C2D531653231C1041590B25085301B0E5318547A2",
+ INIT_16 => X"812A614202024993081A8C9343921D0C01408167603C02062020808004200508",
+ INIT_17 => X"C048048048202080B140B8C815580B1803C9200648096080914544201F19B8C4",
+ INIT_18 => X"635309A05A60803045A50814A916352D4C51801602C6196216023258074C8000",
+ INIT_19 => X"B2642B997AD453154C2904C48011F864F8BA80800C1809048C988C8B81208071",
+ INIT_1A => X"4C2886A01F5A0808B007D24C040A0258047231C180889E2205320603C46A4810",
+ INIT_1B => X"80704C945513251544C945513251544C945513251544C9455031215D42809601",
+ INIT_1C => X"08C528201A2E02316950461B05582C08889300706A9690E6B2029C005E94E8C0",
+ INIT_1D => X"044202085020302C4C8C718442140B248247C1B0F4D18206C3C90B4D15080612",
+ INIT_1E => X"4813140150A9C5588C5692388F9310815542C81567040804C25309BC02058D20",
+ INIT_1F => X"80842348197820041901405C3C782C95012004188320C6849309555314016C2A",
+ INIT_20 => X"CC55313140158184C0404C219A25715003C510202846A50F6A46008423460610",
+ INIT_21 => X"08C41C890A4D24963010130841A215313140150A91905D2022045012D6015414",
+ INIT_22 => X"4050001400501400051411551455445144445554554505515511551140808CB4",
+ INIT_23 => X"0500154555414015155545000500140050004155414001414154500154015001",
+ INIT_24 => X"5545515054551554015400055445555541451551400051455450001400500140",
+ INIT_25 => X"00000C00000000000000003CC000000000000000000000000000000001151151",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(23 downto 22), -- Port A 2-bit Data Output
+ DOB => memBRead(23 downto 22), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(23 downto 22), -- Port A 2-bit Data Input
+ DIB => memBWrite(23 downto 22), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM12 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"039A019A000D000B001200DA0007023A001E000F001E0FDA000F0BD9003C00CC",
+ INIT_01 => X"B69555554C5750DF077600150001D65619160003000B0003000B007E00620009",
+ INIT_02 => X"554C39042084105A00000001DD55555555D955555555769555555565615EB5BE",
+ INIT_03 => X"554AAC0000192000620183552AB000000064800001B8800A0819555555549555",
+ INIT_04 => X"686F8AA55961BE2A9565862064954A8855552A255555506A800A481B855060D5",
+ INIT_05 => X"0F947491BE2A956586F8AA559686F8AA55961BE2A9565A1BE2A956586F8AA559",
+ INIT_06 => X"55E4555D553130F9471D940D531356044986430CC330E31F333C3E346A848391",
+ INIT_07 => X"35D6B03E5162555DD551BE454D416A32594950D1695D6F969D55D0B050106257",
+ INIT_08 => X"6A55650674135555948D2557551899E1D319DC6686C599575286C34146735D6B",
+ INIT_09 => X"0B511375E55C5CCB20300054564209022543E5E74557415004E410F8141746E8",
+ INIT_0A => X"AE0A5E5545D396F84475FC1100639791155105719777D7445735D550CB8C5434",
+ INIT_0B => X"704D5111C1371164C4DA119C13584551371134971C79E5D3C571D371018C5BA1",
+ INIT_0C => X"994753E402D391371FF80D1371A5C46D51346795104DC671DD378774DE15C546",
+ INIT_0D => X"5B5A9011555CD497541A5760FB60D8541C4D34D354C86B843665D9495DD99522",
+ INIT_0E => X"64695D546782203E03646F924107E6D50F86A6360919C905A7E55556E49D9436",
+ INIT_0F => X"B8440DDE1D5511B9048D4B53755C343160951559A40F957A056F0D90D94114C7",
+ INIT_10 => X"D679D4140D155DD85255D5E851D14116B87360F80F80F00D0537757F43D40796",
+ INIT_11 => X"7410755803559DF9600C1C55540FD6387360F80F80F00D0534757C75D144000D",
+ INIT_12 => X"D8525415078455CE5804350557A1910638D530F845D0F840E5651B0C35474055",
+ INIT_13 => X"450D5D5551C06F8451150F8B46F8467840C8455CEC0766083640D5A775540D9D",
+ INIT_14 => X"C435C39600054001D41427915A29110183343D0001D5B8055FDAF500354C6B86",
+ INIT_15 => X"5E50155F46A5765083E7050F8583D043C3C4D34D43568A75400001C83704D943",
+ INIT_16 => X"092310E176738BC3E0850F1317C143755645556B5856754057556754DDD55B55",
+ INIT_17 => X"1D05D35D25D36BE56595F0D52318565417A1679C5AE171AE108065D5B81070DC",
+ INIT_18 => X"137710413751AC75D19455584241371D0D284586159535150C16284DD40D9740",
+ INIT_19 => X"68B51C594F5503C60F85C0DDBE728B201C6CDD960905D341AA04DCE847119D04",
+ INIT_1A => X"0F8C5FD0CDD555441033720F9048321F20C6655390C4D1167C355C5495C159F5",
+ INIT_1B => X"54650F25F943C97E50F25F943C97E50F25F943C97E50F25F99553100D20C86C8",
+ INIT_1C => X"B0D3CDD5C10D16651A0001CA4C27190C4C83E467FD85FC2686B8D90E8F841C1D",
+ INIT_1D => X"9B517557476727680F0FB03495F05689BECE30C59D995556D6A05DD991756036",
+ INIT_1E => X"9AC3CC76F058CBDDA96706F9BF837755E8D719DE3645D500F8C3E26C15549C6B",
+ INIT_1F => X"75776F40CEB46F9098761DF5694D6A1D776B9C198FF7418483E18F83EC767C15",
+ INIT_20 => X"CF6C3C3EC76E0CC7DD9D71515318703B9794416707741951E1AF35776F3A3327",
+ INIT_21 => X"1995184149CDC7DFA76748564D310C3C3CC76F45BAFA416F86F01755E5775604",
+ INIT_22 => X"C13000BC02E04C002D999D80225BDDC38B0652041E3E0C672F772F7700859A10",
+ INIT_23 => X"3900D6125104C0BE1369130006001000D000C25104C001872DE13009E407500B",
+ INIT_24 => X"9B24DA1D155701E2091800057049300F44449A44C003B116913000DC02D00F40",
+ INIT_25 => X"00000C00000000000000003F00000000000000003FFFFFFFEAAA954314EF7729",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"00000000000000000000000000000000000000000002B0000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(25 downto 24), -- Port A 2-bit Data Output
+ DOB => memBRead(25 downto 24), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(25 downto 24), -- Port A 2-bit Data Input
+ DIB => memBWrite(25 downto 24), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM13 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"048000800000000200D00184000A017000000002000011200002000000180188",
+ INIT_01 => X"7C5555555854138606440000000108641104000E0006000A0002005000C00000",
+ INIT_02 => X"5558042D08A0B41A00000001AD555555549155555555E41555555541A0206648",
+ INIT_03 => X"55715C000240F00919240F55C57000000903C000243480300640555555555555",
+ INIT_04 => X"405C8182114172060845114903D571635555C5955555590C80300643455903D5",
+ INIT_05 => X"5B801D017206084505C818211405C8182114172060845017206084505C818211",
+ INIT_06 => X"CF9158A961AC95B82D05825991BD5A818146BA784E178E05EE196D1F5140921C",
+ INIT_07 => X"B005756E115DA14862955E25811175003146959146905384061691264ACA55A0",
+ INIT_08 => X"59A42C80120D1614043907018A5255D15255DD5D458556865145564855BB005F",
+ INIT_09 => X"01CCB2259A0B2392C28EB25C2C44439D7556E1C065846DC42FC145B4B017F5D4",
+ INIT_0A => X"5D045055085455F440192D596B5B87059615B7094314F0445810596FD2990D67",
+ INIT_0B => X"2AFAD9C0AB629CBFAFADDC0ABEB572DBE2CBEB0208A280BA712A3A2C017F5451",
+ INIT_0C => X"11556380E4B31F22CC8459F22A00B2C9AD2F53440AC8B22C8BAA332CA8CCB170",
+ INIT_0D => X"20521D116161320750D75445BA63043113F3CF3C5A8353456600614680580100",
+ INIT_0E => X"61C0465D5B55056D2C59536A410615565B4484160756D1354445850590451166",
+ INIT_0F => X"34540464C6282165840F2FC01644185361165611845B8175155F598598574301",
+ INIT_10 => X"95B81610590006D555A145D454614515B44D55B85B05B059451518414910F155",
+ INIT_11 => X"754218A4566586A15676D758A25B95745945B85B05B05945151841195403B8C5",
+ INIT_12 => X"D551A2D57526556851549CC515512185746555B44C55B454651AD2896651552D",
+ INIT_13 => X"8559861581715344E5155B4405F4557449226556808162B96615991018A25946",
+ INIT_14 => X"26810900EE302D971042C7156514441D7E116C47006114D165575485665C5744",
+ INIT_15 => X"A0C05611F51A011016E3015B4416DC56D6D50410605144194847857167575649",
+ INIT_16 => X"8501D75816390056D02C5B13154B001851558A06B000164401658184C0614458",
+ INIT_17 => X"0574554574665B151AA515999DD755A194515B8256D1855D195248612057559C",
+ INIT_18 => X"294541ADD1C95F545C0658A6DD729444592D35B5D46841BCF6D5145056598440",
+ INIT_19 => X"149C18D3853DD6ED5B46C5954E2306988017058001305075452D168064440507",
+ INIT_1A => X"5B45DE3E255C5866C889405B844000F7C4859A19500318D5F56654D4686755D5",
+ INIT_1B => X"94C55B661556D98555B661556D98555B661556D98555B6615966998090003DF1",
+ INIT_1C => X"3592E46160BFE5DAB10482E8425701001416E005E33F6F15057471E127141505",
+ INIT_1D => X"80C9165B516301415B5B0701161251457D340D55D4531628D7525D4509184AA5",
+ INIT_1E => X"16D6E0146835CA997694559D7456518A815556F59C405905B416D01856291657",
+ INIT_1F => X"8587514864C4538C5A1605E146B57504145784994C01A31416D14956D0141E0C",
+ INIT_20 => X"CD516D6D0145C6464505A965E90EB3E9566B0C5F1536A2596A25058759A61921",
+ INIT_21 => X"5468563D4019C7D5514156594E90616D6E0146C37529415345B4115925148658",
+ INIT_22 => X"01C0003000C07000268DD053D75C7D13203354162007003471F473F46485451C",
+ INIT_23 => X"020009137507003F200E1C000C003400D00003750700030D29C1C00BC00F0003",
+ INIT_24 => X"CC244C4D1D8522020A340015444E300FD448038700000200E1C0000002D00080",
+ INIT_25 => X"00000C00000000000000003F2AAAAAAAAAAAAAAA95555555555555541931F475",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(27 downto 26), -- Port A 2-bit Data Output
+ DOB => memBRead(27 downto 26), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(27 downto 26), -- Port A 2-bit Data Input
+ DIB => memBWrite(27 downto 26), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM14 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"000A000A00020008000A0002000400B2000A0008000A008A000C000A00100010",
+ INIT_01 => X"3C00000002000B2100020000000000020882000C000800000004000A00060002",
+ INIT_02 => X"0002800A00C02800AAAAAAA80400000003080000000042000000000008082020",
+ INIT_03 => X"00300EAAA808FAA00C008F00C03AAAAAA023EAAA80B02AB22008000000000000",
+ INIT_04 => X"2A0C2828002830A0A000802023C0303B0000C0000000002E2AB2200B000023C0",
+ INIT_05 => X"0302A00830A0A000A0C2828002A0C2828002830A0A000A830A0A000A0C282800",
+ INIT_06 => X"322C0000000F2030098C00000AC20218800000408020003A00A00C9008220000",
+ INIT_07 => X"3000B00C08080028C0002C008CC030B82000000000000B0A0C00001031310403",
+ INIT_08 => X"080003203C800000000302230088C3CB2C00CF0420E030020020000200F3000F",
+ INIT_09 => X"0284200000013410000200FB000402024000C082C002C087A08260320D0F0002",
+ INIT_0A => X"1C88F20068CB00320032CA23C00F020B000B0203C230201A00B0C00610320001",
+ INIT_0B => X"00830340024034CA0830340020C0D302C0420C0001C30028D0036C04002D0108",
+ INIT_0C => X"CC390F8224230200473B002007401083A38D0B0080801204828C120B304810D1",
+ INIT_0D => X"2B020380000CCE810202820030002ACC0B082082000003200008C80000C02802",
+ INIT_0E => X"004C8C800F22000C8E0E072BB02AA0A003228022B000F80018400000228C0000",
+ INIT_0F => X"7202A8CC8C002008E004CD363022A22F0A808008200300308807000000200D83",
+ INIT_10 => X"4070A00200000C00000240C208C0188072012030030030004022302201020A80",
+ INIT_11 => X"3802300200028CA00A8A040000030032012030030030004022302232C0A80B28",
+ INIT_12 => X"000000000880004802201A200008A820F24020320800321260002A2000232800",
+ INIT_13 => X"A0008C000C4A0B208080032230B210720008000488830208000000823000008C",
+ INIT_14 => X"0008812A02CA808202280340308C0A8280900FC200C08BE03940902800240B22",
+ INIT_15 => X"0234800B00400A0000C3A0032000C200C0C820820A0022322904885000800281",
+ INIT_16 => X"2209082030310040C888038181680230000000030082302223002302E8C00200",
+ INIT_17 => X"0C78C78C68C90B0000802000A02800020008070001C8203C880808C0A0281003",
+ INIT_18 => X"A121A82029842D1002A00002420A1204002880CA000088080A004208C8000A2A",
+ INIT_19 => X"0233E882882000C80320E0080C0E0A284C208C024008C0AC10800488800A8C00",
+ INIT_1A => X"032E0CC0840800023421000303022020C080C00080C20BA070002200000E03C0",
+ INIT_1B => X"0B000302E000C0B800302E000C0B800302E000C0B800302E0808E84000880830",
+ INIT_1C => X"B002E8C088442000220300C83023800C1400C300CC0A33000032C00B0700280C",
+ INIT_1D => X"003630032303A32803032088808800201CC82C30E08A000243080E0882302220",
+ INIT_1E => X"82C0C8322820D2881003602C1880230035C081C88008C0A032C0C80E00000C0B",
+ INIT_1F => X"20230E18800B030389304CE000303088320703880C23280000C88880C8322E08",
+ INIT_20 => X"DE080C0C8320883A8C8CA008A00036AA8300AE0F0221300E1312E0230A2220E3",
+ INIT_21 => X"03000BCE003CC3C2A32328021E00880C0C83228208AAA00720B0E32A223212A9",
+ INIT_22 => X"0ABA2A90AA42AE8AB02AAEFA8AC18042EFAACFBAAB4AAEAB060104013F402082",
+ INIT_23 => X"AC2AB3AAAEEAE8940911ABA2AB8AAE2AB8AAE2AEEAE8AAE84B2ABA2DB0A6C2A9",
+ INIT_24 => X"AB4EAAEAB2AAAAB4BA84AAAAB08BAAAA2A42C46AE8AAD0B11ABA2AB4AB42AB0A",
+ INIT_25 => X"00000C00000000000000003F000000000000000000000000000000002E06012A",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000170000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(29 downto 28), -- Port A 2-bit Data Output
+ DOB => memBRead(29 downto 28), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(29 downto 28), -- Port A 2-bit Data Input
+ DIB => memBWrite(29 downto 28), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+ ZPU_RAM15 : RAMB16_S2_S2
+ generic map (
+ INIT_A => X"0", -- Value of output RAM registers on Port A at startup
+ INIT_B => X"0", -- Value of output RAM registers on Port B at startup
+ SRVAL_A => X"0", -- Port A ouput value upon SSR assertion
+ SRVAL_B => X"0", -- Port B ouput value upon SSR assertion
+ WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
+ SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL"
+ INIT_00 => X"012501250005000C00850021000C04790015000800150445000C06A500A20022",
+ INIT_01 => X"3E0000000102861A0021001A000062014461000800080008000C000500090005",
+ INIT_02 => X"00016181A9A606405555555408000000020400000000C1800000002406860012",
+ INIT_03 => X"00380D555416F5504C816F00E0355555505BD555417215799015000000000000",
+ INIT_04 => X"150D141484143450521044505BC038370000E0000000005D1579901720005BC0",
+ INIT_05 => X"232560943450521050D141484150D1414841434505210543450521050D141484",
+ INIT_06 => X"00220200080CA232424C242006C10156652140C2A0A8208A00A08C600C152802",
+ INIT_07 => X"7960B48C94080954C8002C90603830464420020820060B290C804A2B0A8A0808",
+ INIT_08 => X"0801A099B260808262038663204603C45802DC0C111020210811482500B7960F",
+ INIT_09 => X"B21A08408092A834489A08F2B02D6019E008C8D9C021C81E70D9D231028F00C1",
+ INIT_0A => X"3C65F50054C400B126310D53AA0B236700872053A93255150278C00D7442A482",
+ INIT_0B => X"40229BA900843AA20229BA9008A6EA90C4A08A6493A69908EA4E884AE83E0304",
+ INIT_0C => X"083213991D0B0084AC3620084E992813008A0B666021294A508A694329A528EA",
+ INIT_0D => X"941900480802026609C30522351855428704104100200F1080A4C42028C29489",
+ INIT_0E => X"09924C500B55848C49080F5E48945081231541904403C48021D020A0854C8880",
+ INIT_0F => X"F11354CE4C829821D2282A093015515E4540408412232430540F202202542263",
+ INIT_10 => X"C0B252C920AA8C820809A0C114C82140F11A123A23A23A20A08132192B490540",
+ INIT_11 => X"31A9320188014C4821458A02082340F11A123A23A23A20A08132193189540F14",
+ INIT_12 => X"82080840056000820852B53082055430F180823121423135908045108013168C",
+ INIT_13 => X"50204C8060860B121484231580B130B12056000826630914809200493208204C",
+ INIT_14 => X"60147B5503C56A444956B3C8304DAD4164688CA9A8C840D832822238801B0B15",
+ INIT_15 => X"050A408700809D8A08CB58231148D108C8D65965050811315FBC68B48264017B",
+ INIT_16 => X"3987081A30B361C8C641238A42DC6932092020630669301593001321D4C82502",
+ INIT_17 => X"8CF4CF4CF4C70F60802082005016080982040F2403C4582C4D2424C852942208",
+ INIT_18 => X"5A12D4581F1C3F2241500201C105A1AA20896085820254018580C114C4202535",
+ INIT_19 => X"81709601658808D02311D2042C992E2EAE684C29A084C9682040482661AD4CA0",
+ INIT_1A => X"231F1CC0888102070A2228232621A807D66080894AE65C90B4801182024003D0",
+ INIT_1B => X"060023511408D445023511408D445023511408D4450235114405D4AA486A01F5",
+ INIT_1C => X"F208D4C846C8108005EA29C4245760AE6A08CA81CC005E9120F1C00A4B12968C",
+ INIT_1D => X"26093003130B531623235855404608102D249870C644408183040C6451321180",
+ INIT_1E => X"42C8D6310685E5402010908C22081320554202D55024C0523108C58D80818C0F",
+ INIT_1F => X"1013086689640B2442308CC820343062310B24402E93142648C56148D6315DA1",
+ INIT_20 => X"ED148C8D631068854C4C500542A579414301690F86B5240C527110130841A213",
+ INIT_21 => X"82028B29217CE3C1531314016C2A548C8D6310685441680F10F6131181315052",
+ INIT_22 => X"4150005401505400051555515555155155055515155504555455555540A03041",
+ INIT_23 => X"1100451145454055115515000500140050004145454001414151500144051005",
+ INIT_24 => X"5544555515551154011400155405100554441545400111055150004400500440",
+ INIT_25 => X"00000C00000000000000003F0000000000000000000000000000000015545555",
+ INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000",
+ INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000",
+ INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000",
+ INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000")
+ port map (
+ DOA => memARead(31 downto 30), -- Port A 2-bit Data Output
+ DOB => memBRead(31 downto 30), -- Port B 2-bit Data Output
+ ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input
+ ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input
+ CLKA => clk, -- Port A Clock
+ CLKB => clk, -- Port B Clock
+ DIA => memAWrite(31 downto 30), -- Port A 2-bit Data Input
+ DIB => memBWrite(31 downto 30), -- Port B 2-bit Data Input
+ ENA => re, -- Port A RAM Enable Input
+ ENB => high, -- PortB RAM Enable Input
+ SSRA => low, -- Port A Synchronous Set/Reset Input
+ SSRB => low, -- Port B Synchronous Set/Reset Input
+ WEA => memAWriteEnable, -- Port A Write Enable Input
+ WEB => memBWriteEnable -- Port B Write Enable Input
+ );
+end dualport_ram_arch;
diff --git a/zpu/hdl/zpu3/src/xmake.filelist b/zpu/hdl/zpu3/src/xmake.filelist
new file mode 100644
index 0000000..3d0a779
--- /dev/null
+++ b/zpu/hdl/zpu3/src/xmake.filelist
@@ -0,0 +1,5 @@
+vhdl zylin "zpu_config.vhd"
+vhdl zylin "zpupkg.vhd"
+vhdl work "dmips_ram.vhd"
+vhdl zylin "zpu_top_bram_intstack.vhd"
+vhdl work "testlut.vhd"
diff --git a/zpu/hdl/zpu3/src/xmake.xst b/zpu/hdl/zpu3/src/xmake.xst
new file mode 100644
index 0000000..bfdb23f
--- /dev/null
+++ b/zpu/hdl/zpu3/src/xmake.xst
@@ -0,0 +1,53 @@
+set -tmpdir ../tmp
+set -xsthdpdir ../xst
+run
+-ifn xmake.filelist
+-ifmt mixed
+-ofn ../syn/ic300
+-ofmt NGC
+-p xc3s400-4-ft256
+-top ic300
+-opt_mode Area
+-opt_level 2
+-iuc NO
+-lso ic300.lso
+-keep_hierarchy NO
+-glob_opt AllClockNets
+-rtlview Yes
+-read_cores YES
+-write_timing_constraints NO
+-cross_clock_analysis NO
+-hierarchy_separator /
+-bus_delimiter <>
+-case maintain
+-slice_utilization_ratio 100
+-verilog2001 YES
+-fsm_extract YES -fsm_encoding Auto
+-safe_implementation No
+-fsm_style lut
+-ram_extract Yes
+-ram_style Auto
+-rom_extract Yes
+-rom_style Auto
+-mux_extract YES
+-mux_style Auto
+-decoder_extract YES
+-priority_extract YES
+-shreg_extract YES
+-shift_extract YES
+-xor_collapse YES
+-resource_sharing YES
+-mult_style auto
+-iobuf YES
+-max_fanout 500
+-bufg 8
+-register_duplication YES
+-equivalent_register_removal NO
+-register_balancing No
+-slice_packing YES
+-optimize_primitives NO
+-use_clock_enable Yes
+-use_sync_set No
+-use_sync_reset No
+-iob true
+-slice_utilization_ratio_maxmargin 5
diff --git a/zpu/hdl/zpu3/src/zpu_config.vhd b/zpu/hdl/zpu3/src/zpu_config.vhd
new file mode 100644
index 0000000..506121c
--- /dev/null
+++ b/zpu/hdl/zpu3/src/zpu_config.vhd
@@ -0,0 +1,25 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+package zpu_config is
+
+ constant Generate_Trace : boolean := false;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
+ -- maximum address includes upper bit for IO registers
+ -- the rest is RAM
+ constant maxAddrBit : integer := 14;
+ constant minAddrBit : integer := 2;
+ -- This bit is set for read/writes to IO
+ -- FIX!!! eventually this should be set to wordSize-1 so as to
+ -- to make the address of IO independent of amount of memory
+ -- reserved for CPU. Requires trivial tweaks in toolchain/runtime
+ -- libraries.
+ constant ioBit : integer := maxAddrBit+1;
+ constant wordPower : integer := 5;
+ constant wordSize : integer := 2**wordPower;
+
+end zpu_config;
diff --git a/zpu/hdl/zpu3/src/zpu_pipelined.vhd b/zpu/hdl/zpu3/src/zpu_pipelined.vhd
new file mode 100644
index 0000000..207939d
--- /dev/null
+++ b/zpu/hdl/zpu3/src/zpu_pipelined.vhd
@@ -0,0 +1,852 @@
+-- Company: ZPU3
+-- Engineer: Øyvind Harboe
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+use IEEE.STD_LOGIC_arith.ALL;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+
+entity zpu_top is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ io_busy : in std_logic;
+ io_read : in std_logic_vector(7 downto 0);
+ io_write : out std_logic_vector(7 downto 0);
+ io_addr : out std_logic_vector(maxAddrBit downto minAddrBit);
+ io_writeEnable : out std_logic;
+ io_readEnable : out std_logic;
+ interrupt : in std_logic;
+ break : out std_logic);
+end zpu_top;
+
+architecture behave of zpu_top is
+
+signal readIO : std_logic;
+
+
+
+signal memAWriteEnable : std_logic;
+signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memAWrite : std_logic_vector(wordSize-1 downto 0);
+signal memARead : std_logic_vector(wordSize-1 downto 0);
+signal memBWriteEnable : std_logic;
+signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memBWrite : std_logic_vector(wordSize-1 downto 0);
+signal memBRead : std_logic_vector(wordSize-1 downto 0);
+
+
+signal busy : std_logic;
+
+signal begin_inst : std_logic;
+
+
+
+signal trace_opcode : std_logic_vector(7 downto 0);
+signal trace_pc : std_logic_vector(maxAddrBit downto 0);
+signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit);
+signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0);
+signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0);
+
+type DecodedOpcodeType is
+(
+Decoded_Stall ,
+Decoded_Nop ,
+Decoded_Im ,
+Decoded_ImShift ,
+Decoded_LoadSP ,
+Decoded_StoreSP ,
+Decoded_AddSP ,
+Decoded_Emulate ,
+Decoded_Break ,
+Decoded_PushPC ,
+Decoded_PushSP ,
+Decoded_PopPC ,
+Decoded_Add ,
+Decoded_Or ,
+Decoded_And ,
+Decoded_Load ,
+Decoded_Not ,
+Decoded_Flip ,
+Decoded_Store ,
+Decoded_Storeb ,
+Decoded_PopSP ,
+Decoded_Ashiftleft ,
+Decoded_Ashiftright ,
+Decoded_Lshiftright ,
+Decoded_Eqbranch ,
+Decoded_Neqbranch ,
+Decoded_Eq ,
+Decoded_Neq ,
+Decoded_Loadb ,
+Decoded_Lessthan ,
+Decoded_Lessthanorequal ,
+Decoded_Ulessthan ,
+Decoded_Ulessthanorequal ,
+Decoded_Duplicate ,
+Decoded_Duplicate2 ,
+Decoded_Duplicate3 ,
+Decoded_MoveDown,
+Decoded_MoveDown2,
+Decoded_MoveDown3,
+Decoded_Pushspadd,
+Decoded_Callpcrel,
+Decoded_Sub
+);
+
+
+signal decode_pc : std_logic_vector(maxAddrBit downto 0);
+signal decode_fetchedPC : std_logic_vector(maxAddrBit downto 0);
+signal decode_fetched : std_logic;
+signal decode_opcode : std_logic_vector(OpCode_Size-1 downto 0);
+signal decode_opcodeWord : std_logic_vector(wordSize-1 downto 0);
+signal decode_starved : std_logic;
+signal decode_wordStarved : std_logic;
+signal decode_willBeStarved : std_logic;
+signal decode_idim_flag : std_logic;
+
+signal execute1_stall : std_logic;
+signal execute1_fetched : std_logic;
+signal execute1_decodedOpcode : DecodedOpcodeType;
+signal execute1_fetchedPC : std_logic_vector(maxAddrBit downto 0);
+signal execute1_sp : std_logic_vector(maxAddrBit downto minAddrBit);
+signal execute1_opcode : std_logic_vector(opCode_Size-1 downto 0);
+signal execute1_spOffset : std_logic_vector(4 downto 0);
+signal execute1_fetchPC : std_logic_vector(maxAddrBit downto 0);
+signal execute1_push1 : std_logic;
+signal execute1_push2 : std_logic;
+signal execute1_pop1 : std_logic;
+signal execute1_pop2 : std_logic;
+signal execute1_antialias : std_logic;
+signal execute1_savedTopOfStack : std_logic_vector(wordSize-1 downto 0);
+
+
+signal load_decodedOpcode : DecodedOpcodeType;
+signal load_opcode : std_logic_vector(opCode_Size-1 downto 0);
+signal load_spOffset : std_logic_vector(4 downto 0);
+signal load_stall : std_logic;
+signal load_willBeStalled : std_logic;
+
+signal execute2_opcode : std_logic_vector(opCode_Size-1 downto 0);
+signal execute2_topOfStack : std_logic_vector(wordSize-1 downto 0);
+signal execute2_addResult : std_logic_vector(wordSize-1 downto 0);
+signal execute2_topOfStackB : std_logic_vector(wordSize-1 downto 0);
+signal execute2_pc : std_logic_vector(maxAddrBit downto 0);
+signal execute2_sp : std_logic_vector(maxAddrBit downto minAddrBit);
+signal execute2_loading : std_logic;
+signal execute2_loadByte : std_logic;
+signal execute2_storeByte : std_logic;
+signal execute2_loadingDone : std_logic;
+signal execute2_decodedOpcode : DecodedOpcodeType;
+signal execute2_spOffset : std_logic_vector(4 downto 0);
+signal execute2_persistTopOfStack : std_logic;
+signal execute2_persistTopOfStackB : std_logic;
+signal execute2_resync : std_logic;
+signal execute2_resync2 : std_logic;
+signal execute2_resync3 : std_logic;
+signal execute2_resync4 : std_logic;
+signal execute2_resync5 : std_logic;
+signal execute2_resync6 : std_logic;
+signal execute2_resync7 : std_logic;
+signal execute2_resync8 : std_logic;
+signal execute2_resync9 : std_logic;
+signal execute2_resync10 : std_logic;
+
+
+begin
+ traceFileGenerate:
+ if Generate_Trace generate
+ trace_file: trace port map (
+ clk => clk,
+ begin_inst => begin_inst,
+ pc => trace_pc,
+ opcode => trace_opcode,
+ sp => trace_sp,
+ memA => trace_topOfStack,
+ memB => trace_topOfStackB,
+ busy => busy
+ );
+ end generate;
+
+
+ memory: dualport_ram port map (
+ clk => clk,
+ memAWriteEnable => memAWriteEnable,
+ memAAddr => memAAddr,
+ memAWrite => memAWrite,
+ memARead => memARead,
+ memBWriteEnable => memBWriteEnable,
+ memBAddr => memBAddr,
+ memBWrite => memBWrite,
+ memBRead => memBRead
+ );
+
+ opcodeControl:
+ process(clk, areset)
+ variable compareA : signed(wordSize-1 downto 0);
+ variable compareB : signed(wordSize-1 downto 0);
+ variable execute1_doFetch : boolean;
+ begin
+ if areset = '1' then
+ break <= '0';
+ begin_inst <= '0';
+ memAAddr <= (others => '0');
+ memBAddr <= (others => '0');
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ memAWrite <= (others => '0');
+ memBWrite <= (others => '0');
+
+ memBAddr <= (others => '0');
+ memBWrite <= (others => '0');
+
+
+ io_writeEnable <= '0';
+ io_readEnable <= '0';
+ io_addr <= (others => '0');
+ io_write <= (others => '0');
+
+ -- stage 1. Don't care since this is driven by stage2
+ decode_pc <= (others => '0');
+ decode_fetched <= '0';
+ decode_starved <= '0';
+ decode_opcode <= (others => '0');
+ decode_opcodeWord <= (others => '0');
+
+ -- stage 2.
+ execute1_antialias <= '0';
+ execute1_fetchPC <= (others => '0');
+ execute1_fetched <= '0';
+ execute1_decodedOpcode <= Decoded_Stall;
+ execute1_sp <= (2 => '0', others => '1');
+ execute1_push1 <= '0';
+ execute1_push2 <= '0';
+ execute1_pop1 <= '0';
+ execute1_pop2 <= '0';
+ execute1_stall <= '1';
+
+ -- stage 3
+ load_decodedOpcode <= Decoded_Stall;
+ load_stall <= '1';
+ load_willBeStalled <= '1';
+
+ -- stage 4
+ decode_idim_flag <= '0';
+ execute2_pc <= (others => '0');
+ execute2_sp <= (2 => '0', others => '1');
+ execute2_loading <= '0';
+ execute2_loadByte <= '0';
+ execute2_storeByte <= '0';
+ execute2_loadingDone <= '0';
+ execute2_decodedOpcode <= Decoded_Stall;
+ execute2_resync <= '1';
+ execute2_resync2 <= '0';
+ execute2_resync3 <= '0';
+ execute2_resync4 <= '0';
+ execute2_resync5 <= '0';
+ execute2_resync6 <= '0';
+ execute2_resync7 <= '0';
+ execute2_resync8 <= '0';
+ execute2_resync9 <= '0';
+ execute2_resync10 <= '0';
+ execute2_persistTopOfStack <= '0';
+ execute2_persistTopOfStackB <= '0';
+
+ -- stage 5
+ memBWriteEnable <= '0';
+
+
+ elsif (clk'event and clk = '1') then
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ io_writeEnable <= '0';
+ io_readEnable <= '0';
+ begin_inst <= '0';
+
+ -- stage0: fetch
+ decode_willBeStarved <= '0';
+ if (decode_fetched='1') then
+ -- resync #4
+ decode_opcodeWord <= memARead;
+ decode_pc <= decode_fetchedPC;
+ elsif (decode_pc(minAddrBit-1 downto 0)=b"11") then
+ decode_willBeStarved <= '1';
+ else
+ -- we can continue decoding.
+ decode_pc <= decode_pc + 1;
+ end if;
+
+ -- stage 0b: move to byte..
+ -- resync #5
+ decode_starved <= decode_willBeStarved;
+ case decode_pc(minAddrBit-1 downto 0) is
+ when "00" => decode_opcode <= decode_opcodeWord(31 downto 24);
+ when "01" => decode_opcode <= decode_opcodeWord(23 downto 16);
+ when "10" => decode_opcode <= decode_opcodeWord(15 downto 8);
+ when others => decode_opcode <= decode_opcodeWord(7 downto 0);
+ end case;
+
+ -- stage1: decode 1
+ execute1_opcode <= decode_opcode;
+
+ execute1_spOffset(4)<=not decode_opcode(4);
+ execute1_spOffset(3 downto 0)<=decode_opcode(3 downto 0);
+
+ execute1_decodedOpcode<=Decoded_Break;
+
+ decode_idim_flag <= '0';
+
+ -- resync #6
+ -- resync #1
+ if (decode_starved = '1') then
+ execute1_decodedOpcode<=Decoded_Stall;
+ decode_idim_flag <= decode_idim_flag;
+ elsif (decode_opcode(7 downto 7)=OpCode_Im) then
+ decode_idim_flag <= '1';
+ if (decode_idim_flag = '0') then
+ execute1_decodedOpcode<=Decoded_Im;
+ else
+ execute1_decodedOpcode<=Decoded_ImShift;
+ end if;
+ elsif (decode_opcode(7 downto 5)=OpCode_StoreSP) then
+ if (decode_opcode(4 downto 0)=b"10001") then
+ execute1_decodedOpcode<=Decoded_MoveDown;
+ elsif (decode_opcode(4 downto 0)=b"10010") then
+ execute1_decodedOpcode<=Decoded_MoveDown2;
+-- elsif (decode_opcode(4 downto 0)=b"10011") then
+-- execute1_decodedOpcode<=Decoded_MoveDown3;
+ else
+ execute1_decodedOpcode<=Decoded_StoreSP;
+ end if;
+ elsif (decode_opcode(7 downto 5)=OpCode_LoadSP) then
+ if (decode_opcode(4 downto 0)=b"10000") then
+ execute1_decodedOpcode<=Decoded_Duplicate;
+ elsif (decode_opcode(4 downto 0)=b"10001") then
+ execute1_decodedOpcode<=Decoded_Duplicate2;
+ elsif (decode_opcode(4 downto 0)=b"10010") then
+ execute1_decodedOpcode<=Decoded_Duplicate3;
+ else
+ execute1_decodedOpcode<=Decoded_LoadSP;
+ end if;
+ elsif (decode_opcode(7 downto 5)=OpCode_Emulate) then
+ execute1_decodedOpcode<=Decoded_Emulate;
+ if decode_opcode(5 downto 0)=OpCode_Neqbranch then
+ execute1_decodedOpcode <= Decoded_Neqbranch;
+ elsif decode_opcode(5 downto 0)=OpCode_Eq then
+ execute1_decodedOpcode <= Decoded_Eq;
+ elsif decode_opcode(5 downto 0)=OpCode_Lessthan then
+ execute1_decodedOpcode <= Decoded_Lessthan;
+ elsif decode_opcode(5 downto 0)=OpCode_Ulessthan then
+ execute1_decodedOpcode <= Decoded_Ulessthan;
+ elsif decode_opcode(5 downto 0)=OpCode_Loadb then
+ execute1_decodedOpcode <= Decoded_Loadb;
+ elsif decode_opcode(5 downto 0)=OpCode_Storeb then
+ execute1_decodedOpcode <= Decoded_Storeb;
+ elsif decode_opcode(5 downto 0)=OpCode_Pushspadd then
+ execute1_decodedOpcode <= Decoded_Pushspadd;
+ elsif decode_opcode(5 downto 0)=OpCode_Callpcrel then
+ execute1_decodedOpcode <= Decoded_Callpcrel;
+ elsif decode_opcode(5 downto 0)=OpCode_Sub then
+ execute1_decodedOpcode <= Decoded_Sub;
+ end if;
+ elsif (decode_opcode(7 downto 4)=OpCode_AddSP) then
+ if (decode_opcode(3 downto 0) = 0) then
+ execute1_decodedOpcode<=Decoded_Ashiftleft;
+ elsif (decode_opcode(3 downto 0) = 1) then
+-- execute1_decodedOpcode<=Decoded_AddSP;
+ elsif (decode_opcode(3 downto 0) = 2) then
+-- execute1_decodedOpcode<=Decoded_AddSP;
+ else
+ execute1_decodedOpcode<=Decoded_AddSP;
+ end if;
+ else
+ case decode_opcode(3 downto 0) is
+ when OpCode_Nop =>
+ execute1_decodedOpcode<=Decoded_Nop;
+ when OpCode_PushSP =>
+ execute1_decodedOpcode<=Decoded_PushSP;
+ when OpCode_PopPC =>
+ execute1_decodedOpcode<=Decoded_PopPC;
+ when OpCode_Add =>
+ execute1_decodedOpcode<=Decoded_Add;
+ when OpCode_Or =>
+ execute1_decodedOpcode<=Decoded_Or;
+ when OpCode_And =>
+ execute1_decodedOpcode<=Decoded_And;
+ when OpCode_Load =>
+ execute1_decodedOpcode<=Decoded_Load;
+ when OpCode_Not =>
+ execute1_decodedOpcode<=Decoded_Not;
+ when OpCode_Flip =>
+ execute1_decodedOpcode<=Decoded_Flip;
+ when OpCode_Store =>
+ execute1_decodedOpcode<=Decoded_Store;
+ when OpCode_PopSP =>
+ execute1_decodedOpcode<=Decoded_PopSP;
+ when others =>
+ execute1_decodedOpcode<=Decoded_Break;
+ end case;
+ end if;
+
+
+ -- stage 2: execute 1 - load stage.
+ --
+ -- the address must be known without using the value on top of the stack...
+ -- resync #3
+ execute1_fetched <= '0';
+ decode_fetched <= execute1_fetched; -- the value in memAAddr will be valid for 1 cycle only
+ decode_fetchedPC <= execute1_fetchedPC;
+
+ if (execute1_fetchPC(1 downto 0)/=b"00") then
+ execute1_fetchPC <= execute1_fetchPC+1;
+ end if;
+
+ execute1_push1 <= '0';
+ execute1_push2 <= execute1_push1;
+ execute1_pop1 <= '0';
+ execute1_pop2 <= execute1_pop1;
+
+ if ((execute1_push1 and execute1_push2)='1') then
+ memAWrite <= execute2_topOfStack;
+ else
+ memAWrite <= execute2_topOfStackB;
+ end if;
+
+ -- resync #7
+ case execute1_decodedOpcode is
+ when Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_Load | Decoded_Loadb | Decoded_Store | Decoded_Storeb | Decoded_Emulate | Decoded_PopSP | Decoded_PopPC| Decoded_Callpcrel =>
+ execute1_stall <= '1';
+ when others =>
+ -- nothing...
+ end case;
+
+ execute1_antialias <= load_stall;
+ execute1_doFetch := false;
+ case execute1_decodedOpcode is
+ when Decoded_PushSP | Decoded_Emulate =>
+ execute1_sp <= execute1_sp - 1;
+ execute1_push1 <= '1';
+ execute1_doFetch := true;
+ when Decoded_Duplicate3 =>
+ memAWriteEnable <= ((execute1_push1 and execute1_push2) or
+ (execute1_push1 and not execute1_pop2) or
+ (execute1_push2 and not execute1_pop1)) and
+ (not execute1_antialias and not execute1_stall);
+ memAAddr <= execute1_sp + 2;
+ execute1_sp <= execute1_sp - 1;
+ execute1_push1 <= '1';
+ when Decoded_Im | Decoded_Duplicate | Decoded_Duplicate2 =>
+ execute1_sp <= execute1_sp - 1;
+ execute1_push1 <= '1';
+ execute1_doFetch := true;
+ when Decoded_LoadSP =>
+ memAAddr <= execute1_sp+execute1_spOffset;
+ execute1_sp <= execute1_sp - 1;
+ execute1_push1 <= '1';
+ when Decoded_AddSP =>
+ memAAddr <= execute1_sp+execute1_spOffset;
+ when Decoded_MoveDown2 =>
+ execute1_sp <= execute1_sp + 1;
+ execute1_pop1 <= '1';
+ execute1_doFetch := true;
+ when Decoded_Ulessthan | Decoded_Lessthan | Decoded_Eq | Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_MoveDown | Decoded_Add | Decoded_Sub | Decoded_Or | Decoded_And | Decoded_PopPC | Decoded_StoreSP =>
+ -- be afraid :-)
+ memAWriteEnable <= ((execute1_push1 and execute1_push2) or
+ (execute1_push1 and not execute1_pop2) or
+ (execute1_push2 and not execute1_pop1)) and
+ (not execute1_antialias and not execute1_stall);
+ memAAddr <= execute1_sp + 2;
+ execute1_sp <= execute1_sp + 1;
+ execute1_pop1 <= '1';
+ when others =>
+ execute1_doFetch := true;
+ end case;
+
+ if execute1_doFetch then
+ -- resync #2
+ -- some instruction that does not change the stack pointer
+ -- and does not need use a memory operand.
+ -- We can fetch the next word to be decoded to avoid stalls
+ execute1_fetchPC <= execute1_fetchPC+1;
+ memAAddr <= execute1_fetchPC(maxAddrBit downto minAddrBit);
+ execute1_fetchedPC <= execute1_fetchPC;
+ execute1_fetched <= '1';
+ end if;
+
+
+ -- stage 3: fetching memory takes 1 cycle
+ -- here we also verify that we've fetched & decoded the right
+ -- opcode.
+ -- resync #8
+ load_decodedOpcode <= execute1_decodedOpcode;
+ load_opcode <= execute1_opcode;
+ load_spOffset <= execute1_spOffset;
+ load_stall <= execute1_stall;
+ -- resync #9
+ if (load_stall = '1') then
+ execute2_decodedOpcode <= Decoded_Stall;
+ else
+ execute2_decodedOpcode <= load_decodedOpcode;
+ end if;
+ execute2_opcode <= load_opcode;
+ execute2_spOffset <= load_spOffset;
+
+ -- stage 4: execute 2 - we now have both operands. This is the
+ -- main execute stage...
+ begin_inst <= '1';
+ trace_pc <= execute2_pc;
+ trace_opcode <= execute2_opcode;
+ trace_sp <= execute2_sp;
+ trace_topOfStack <= execute2_topOfStack;
+ trace_topOfStackB <= execute2_topOfStackB;
+
+ execute2_pc <= execute2_pc + 1;
+ execute2_loading <= '0';
+ memBWriteEnable <= '0';
+
+ case execute2_decodedOpcode is
+ when Decoded_PopSP =>
+ execute2_sp <= execute2_topOfStack(maxAddrBit downto minAddrBit);
+
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ execute2_resync <= '1';
+ when Decoded_Callpcrel =>
+ execute2_topOfStack <= (others => DontCareValue);
+ execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1;
+ execute2_pc <= execute2_pc + execute2_topOfStack(maxAddrBit downto 0);
+ execute2_persistTopOfStack <= '1';
+ when Decoded_PopPC =>
+ execute2_pc <= execute2_topOfStack(maxAddrBit downto 0);
+ execute2_sp <= execute2_sp + 1;
+
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ execute2_resync <= '1';
+ when Decoded_Emulate =>
+ execute2_sp <= execute2_sp - 1;
+
+ execute2_topOfStack <= (others => DontCareValue);
+ execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1;
+ execute2_topOfStackB <= execute2_topOfStack;
+
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp+1;
+ memBWrite <= execute2_topOfStackB;
+ -- The emulate address is:
+ -- 98 7654 3210
+ -- 0000 00aa aaa0 0000
+ execute2_pc <= (others => '0');
+ execute2_pc(9 downto 5) <= execute2_opcode(4 downto 0);
+ execute2_persistTopOfStack <= '1';
+ when Decoded_Im =>
+ execute2_sp <= execute2_sp - 1;
+ for i in wordSize-1 downto 7 loop
+ execute2_topOfStack(i) <= execute2_opcode(6);
+ end loop;
+ execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0);
+
+ execute2_topOfStackB <= execute2_topOfStack;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ when Decoded_ImShift =>
+ execute2_topOfStack(wordSize-1 downto 7) <= execute2_topOfStack(wordSize-8 downto 0);
+ execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0);
+ when Decoded_LoadSP =>
+ execute2_sp <= execute2_sp - 1;
+ execute2_topOfStack <= memARead;
+ execute2_topOfStackB <= execute2_topOfStack;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ when Decoded_Break =>
+ report "Break instruction encountered" severity failure;
+ break <= '1';
+ when Decoded_PushSP =>
+ execute2_topOfStack <= (others => DontCareValue);
+ execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp;
+
+ execute2_sp <= execute2_sp - 1;
+ execute2_topOfStackB <= execute2_topOfStack;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ when Decoded_Add =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= execute2_topOfStackB + execute2_topOfStack;
+ execute2_topOfStackB <= memARead;
+ when Decoded_Sub =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= execute2_topOfStackB - execute2_topOfStack;
+ execute2_topOfStackB <= memARead;
+ when Decoded_AddSP =>
+ execute2_topOfStack <= execute2_topOfStack + memARead;
+ when Decoded_Or =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= execute2_topOfStackB or execute2_topOfStack;
+ execute2_topOfStackB <= memARead;
+ when Decoded_And =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= execute2_topOfStackB and execute2_topOfStack;
+ execute2_topOfStackB <= memARead;
+ when Decoded_Load | Decoded_Loadb | Decoded_Storeb =>
+ if (execute2_topOfStack(ioBit)='1') then
+ io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit);
+ io_readEnable <= '1';
+ else
+ memAAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit);
+ execute1_fetched <= '0';
+ end if;
+ if (execute2_decodedOpcode = Decoded_Loadb) then
+ execute2_loadByte <= '1';
+ else
+ execute2_loadByte <= '0';
+ end if;
+ if (execute2_decodedOpcode = Decoded_Storeb) then
+ execute2_storeByte <= '1';
+ else
+ execute2_storebyte <= '0';
+ end if;
+ execute2_loading <= '1';
+ when Decoded_Ashiftleft =>
+ execute2_topOfStack(wordSize-1 downto 1) <= execute2_topOfStack(wordSize-2 downto 0);
+ execute2_topOfStack(0) <= '0';
+ when Decoded_MoveDown =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStackB <= memARead;
+ when Decoded_MoveDown2 =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= execute2_topOfStackB;
+ execute2_topOfStackB <= execute2_topOfStack;
+ when Decoded_MoveDown3 =>
+ execute2_sp <= execute2_sp + 1;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp+execute2_spOffset;
+ memBWrite <= execute2_topOfStack;
+
+ execute2_topOfStack <= execute2_topOfStackB;
+ execute2_topOfStackB <= memARead;
+ execute2_persistTopOfStack <= '1';
+ when Decoded_Duplicate =>
+ execute2_topOfStackB <= execute2_topOfStack;
+ execute2_sp <= execute2_sp - 1;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ when Decoded_Duplicate2 =>
+ execute2_topOfStack <= execute2_topOfStackB;
+ execute2_topOfStackB <= execute2_topOfStack;
+ execute2_sp <= execute2_sp - 1;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ when Decoded_Duplicate3 =>
+ execute2_topOfStack <= memARead;
+ execute2_topOfStackB <= execute2_topOfStack;
+ execute2_sp <= execute2_sp - 1;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp + 1;
+ memBWrite <= execute2_topOfStackB;
+ when Decoded_Pushspadd =>
+ execute2_topOfStack <= (others => DontCareValue);
+ execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp + execute2_topOfStack(maxAddrBit-minAddrBit downto 0);
+ when Decoded_Not =>
+ execute2_topOfStack <= not execute2_topOfStack;
+ when Decoded_Flip =>
+ for i in 0 to wordSize-1 loop
+ execute2_topOfStack(i) <= execute2_topOfStack(wordSize-1-i);
+ end loop;
+ when Decoded_Store =>
+ execute2_sp <= execute2_sp + 2;
+ if (execute2_topOfStack(ioBit)='0') then
+ memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit);
+ memBWrite <= execute2_topOfStackB;
+ memBWriteEnable <= '1';
+ else
+ io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit);
+ io_write <= execute2_topOfStackB(7 downto 0);
+ io_writeEnable <= '1';
+ end if;
+ execute2_resync <= '1';
+ when Decoded_StoreSP =>
+ execute2_sp <= execute2_sp + 1;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp+execute2_spOffset;
+ memBWrite <= execute2_topOfStack;
+
+ execute2_topOfStack <= execute2_topOfStackB;
+ execute2_topOfStackB <= memARead;
+ when Decoded_Neqbranch =>
+ execute2_sp <= execute2_sp + 2;
+ if (execute2_topOfStackB/=0) then
+ execute2_pc <= execute2_topOfStack(maxAddrBit downto 0) + execute2_pc;
+ end if;
+ execute2_resync <= '1';
+ when Decoded_Eq =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= (others => '0');
+ if (execute2_topOfStack=execute2_topOfStackB) then
+ execute2_topOfStack(0) <= '1';
+ end if;
+ execute2_topOfStackB <= memARead;
+ when Decoded_Ulessthan =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= (others => '0');
+ if (execute2_topOfStack<execute2_topOfStackB) then
+ execute2_topOfStack(0) <= '1';
+ end if;
+ execute2_topOfStackB <= memARead;
+ when Decoded_Lessthan =>
+ execute2_sp <= execute2_sp + 1;
+ execute2_topOfStack <= (others => '0');
+ compareA := signed(execute2_topOfStack);
+ compareB := signed(execute2_topOfStackB);
+ if (compareA<compareB) then
+ execute2_topOfStack(0) <= '1';
+ end if;
+ execute2_topOfStackB <= memARead;
+ when Decoded_Stall =>
+ begin_inst <= '0';
+ execute2_pc <= execute2_pc;
+ when others =>
+ -- nop
+ end case;
+
+ -- load cycle...
+ execute2_loadingDone <= execute2_loading;
+ if (execute2_loadingDone ='1') then
+ if (execute2_topOfStack(ioBit)='1') then
+ if (io_busy = '0') then
+ execute2_topOfStack <= (others => '0');
+ execute2_topOfStack(7 downto 0) <= io_read;
+ execute2_persistTopOfStack <= '1';
+ else
+ execute2_loadingDone <= '1';
+ end if;
+ else
+ if (execute2_storeByte = '1') then
+ execute2_sp <= execute2_sp + 2;
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit);
+ memBWrite <= memARead;
+ case execute2_topOfStack(minAddrBit-1 downto 0) is
+ when "00" => memBWrite(31 downto 24) <= execute2_topOfStackB(7 downto 0);
+ when "01" => memBWrite(23 downto 16) <= execute2_topOfStackB(7 downto 0);
+ when "10" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0);
+ when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0);
+ end case;
+-- case execute2_topOfStack(0 downto 0) is
+-- when "1" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0);
+-- when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0);
+-- end case;
+ execute2_resync <= '1';
+ elsif (execute2_loadByte = '1') then
+ execute2_topOfStack <= (others => '0');
+ case execute2_topOfStack(minAddrBit-1 downto 0) is
+ when "00" => execute2_topOfStack(7 downto 0) <= memARead(31 downto 24);
+ when "01" => execute2_topOfStack(7 downto 0) <= memARead(23 downto 16);
+ when "10" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8);
+ when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0);
+ end case;
+-- case execute2_topOfStack(0 downto 0) is
+-- when "1" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8);
+-- when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0);
+-- end case;
+ execute2_persistTopOfStack <= '1';
+ else
+ execute2_topOfStack <= memARead;
+ execute2_persistTopOfStack <= '1';
+ end if;
+ end if;
+ end if;
+
+ -- write top of stack...
+ execute2_persistTopOfStackB <= execute2_persistTopOfStack;
+ if (execute2_persistTopOfStack = '1') then
+ execute2_persistTopOfStack <= '0';
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp;
+ memBWrite <= execute2_topOfStack;
+ end if;
+ if (execute2_persistTopOfStackB = '1') then
+ memBWriteEnable <= '1';
+ memBAddr <= execute2_sp+1;
+ memBWrite <= execute2_topOfStackB;
+
+ execute2_resync <= '1';
+ end if;
+
+ -- here we resync the pipeline.
+ -- a number of things have to happen on certain cycles
+ execute2_resync2 <= execute2_resync;
+ execute2_resync3 <= execute2_resync2;
+ execute2_resync4 <= execute2_resync3;
+ execute2_resync5 <= execute2_resync4;
+ execute2_resync6 <= execute2_resync5;
+ execute2_resync7 <= execute2_resync6;
+ execute2_resync8 <= execute2_resync7;
+ execute2_resync9 <= execute2_resync8;
+ execute2_resync10 <= execute2_resync9;
+
+ if (execute2_resync = '1' ) then
+ -- resync #1
+ execute2_resync <= '0';
+ decode_starved <= '1';
+ memAAddr <= execute2_sp;
+ end if;
+ if (execute2_resync2 = '1') then
+ -- resync #2
+ execute1_fetchPC <= execute2_pc;
+ memAAddr <= execute2_sp + 1;
+ end if;
+ if (execute2_resync3 = '1') then
+ -- resync #3
+ execute2_topOfStack <= memARead;
+ end if;
+ if (execute2_resync4 = '1') then
+ -- resync #4
+ -- during this cycle the address is set to the opcode
+ execute2_topOfStackB <= memARead;
+ end if;
+ if (execute2_resync5 = '1') then
+ -- resync #5
+ execute1_pop1 <= '0';
+ execute1_push1 <= '0';
+ end if;
+ if (execute2_resync6 = '1') then
+ -- resync #6
+ decode_idim_flag <= '0';
+ execute1_pop1 <= '0';
+ execute1_push1 <= '0';
+ end if;
+ if (execute2_resync7 = '1') then
+ -- resync #7
+ execute1_sp <= execute2_sp;
+ execute1_stall <= '0';
+ end if;
+ if (execute2_resync8 = '1') then
+ -- resync #8
+-- load_stall <= '0';
+ end if;
+ if (execute2_resync9 = '1') then
+ -- resync #9
+ end if;
+ if (execute2_resync10 = '1') then
+ end if;
+
+
+
+
+ end if;
+ end process;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/zpu_top.vhd b/zpu/hdl/zpu3/src/zpu_top.vhd
new file mode 100644
index 0000000..0ac6df4
--- /dev/null
+++ b/zpu/hdl/zpu3/src/zpu_top.vhd
@@ -0,0 +1,421 @@
+-- Company: ZPU3
+-- Engineer: Øyvind Harboe
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+
+entity zpu_top is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ io_busy : in std_logic;
+ io_read : in std_logic_vector(7 downto 0);
+ io_write : out std_logic_vector(7 downto 0);
+ io_addr : out std_logic_vector(maxAddrBit downto minAddrBit);
+ io_writeEnable : out std_logic;
+ io_readEnable : out std_logic;
+ interrupt : in std_logic;
+ break : out std_logic);
+end zpu_top;
+
+architecture behave of zpu_top is
+
+signal readIO : std_logic;
+
+
+
+signal memAWriteEnable : std_logic;
+signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memAWrite : std_logic_vector(wordSize-1 downto 0);
+signal memARead : std_logic_vector(wordSize-1 downto 0);
+signal memBWriteEnable : std_logic;
+signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memBWrite : std_logic_vector(wordSize-1 downto 0);
+signal memBRead : std_logic_vector(wordSize-1 downto 0);
+
+
+
+signal pc : std_logic_vector(maxAddrBit downto 0);
+signal sp : std_logic_vector(maxAddrBit downto minAddrBit);
+
+signal idim_flag : std_logic;
+
+--signal storeToStack : std_logic;
+--signal fetchNextInstruction : std_logic;
+--signal extraCycle : std_logic;
+signal busy : std_logic;
+--signal fetching : std_logic;
+
+signal begin_inst : std_logic;
+
+
+
+signal trace_opcode : std_logic_vector(7 downto 0);
+signal trace_pc : std_logic_vector(maxAddrBit downto 0);
+signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit);
+signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0);
+signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0);
+
+-- state machine.
+
+subtype State_Type is std_logic_vector(3 downto 0);
+constant State_Fetch : State_Type := b"0000";
+constant State_WriteIODone : State_Type := b"0001";
+constant State_Execute : State_Type := b"0010";
+constant State_StoreToStack : State_Type := b"0011";
+constant State_Add : State_Type := b"0100";
+constant State_Or : State_Type := b"0101";
+constant State_And : State_Type := b"0110";
+constant State_Store : State_Type := b"0111";
+constant State_ReadIO : State_Type := b"1000";
+constant State_WriteIO : State_Type := b"1001";
+constant State_Load : State_Type := b"1010";
+constant State_FetchNext : State_Type := b"1011";
+constant State_AddSP : State_Type := b"1100";
+constant State_ReadIODone : State_Type := b"1101";
+constant State_Decode : State_Type := b"1110";
+constant State_Resync : State_Type := b"1111";
+
+
+subtype DecodedOpcodeType is std_logic_vector(4 downto 0);
+constant Decoded_Nop : DecodedOpcodeType := b"00000";
+constant Decoded_Im : DecodedOpcodeType := b"00001";
+constant Decoded_ImShift : DecodedOpcodeType := b"00010";
+constant Decoded_LoadSP : DecodedOpcodeType := b"00011";
+constant Decoded_StoreSP : DecodedOpcodeType := b"00100";
+constant Decoded_AddSP : DecodedOpcodeType := b"00101";
+constant Decoded_Emulate : DecodedOpcodeType := b"00110";
+constant Decoded_Break : DecodedOpcodeType := b"00111";
+constant Decoded_PushPC : DecodedOpcodeType := b"01000";
+constant Decoded_PushSP : DecodedOpcodeType := b"01001";
+constant Decoded_PopPC : DecodedOpcodeType := b"01010";
+constant Decoded_Add : DecodedOpcodeType := b"01011";
+constant Decoded_Or : DecodedOpcodeType := b"01100";
+constant Decoded_And : DecodedOpcodeType := b"01101";
+constant Decoded_Load : DecodedOpcodeType := b"01110";
+constant Decoded_Not : DecodedOpcodeType := b"01111";
+constant Decoded_Flip : DecodedOpcodeType := b"10000";
+constant Decoded_Store : DecodedOpcodeType := b"10001";
+constant Decoded_PopSP : DecodedOpcodeType := b"10010";
+
+signal opcode : std_logic_vector(OpCode_Size-1 downto 0);
+
+signal decodedOpcode : DecodedOpcodeType;
+
+signal state : State_Type;
+
+begin
+ traceFileGenerate:
+ if Generate_Trace generate
+ trace_file: trace port map (
+ clk => clk,
+ begin_inst => begin_inst,
+ pc => trace_pc,
+ opcode => trace_opcode,
+ sp => trace_sp,
+ memA => trace_topOfStack,
+ memB => trace_topOfStackB,
+ busy => busy
+ );
+ end generate;
+
+
+ memory: dualport_ram port map (
+ clk => clk,
+ memAWriteEnable => memAWriteEnable,
+ memAAddr => memAAddr,
+ memAWrite => memAWrite,
+ memARead => memARead,
+ memBWriteEnable => memBWriteEnable,
+ memBAddr => memBAddr,
+ memBWrite => memBWrite,
+ memBRead => memBRead
+ );
+
+
+
+
+ opcodeControl:
+ process(clk, areset)
+ variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0);
+ variable spOffset : std_logic_vector(4 downto 0);
+ begin
+ if areset = '1' then
+ state <= State_Resync;
+ break <= '0';
+ sp <= (2 => '0', others => '1');
+ pc <= (others => '0');
+ idim_flag <= '0';
+ begin_inst <= '0';
+ memAAddr <= (others => '0');
+ memBAddr <= (others => '0');
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ io_writeEnable <= '0';
+ io_readEnable <= '0';
+ decodedOpcode <= (others => '0');
+ memAWrite <= (others => '0');
+ memBWrite <= (others => '0');
+ opcode <= (others => '0');
+ io_addr <= (others => '0');
+ io_write <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ -- This saves ca. 100 LUT's, by explicitly declaring that the
+ -- memAWrite can be left at whatever value if memAWriteEnable is
+ -- not set.
+ memAWrite <= (others => DontCareValue);
+ memBWrite <= (others => DontCareValue);
+ opcode <= (others => DontCareValue);
+-- io_addr <= (others => DontCareValue);
+-- io_write <= (others => DontCareValue);
+ spOffset := (others => DontCareValue);
+ memAAddr <= (others => DontCareValue);
+ memBAddr <= (others => DontCareValue);
+
+ io_writeEnable <= '0';
+ io_readEnable <= '0';
+ begin_inst <= '0';
+
+ case state is
+ when State_Execute =>
+ state <= State_Fetch;
+ -- at this point:
+ -- memBRead contains opcode word
+ -- memARead contains top of stack
+ pc <= pc + 1;
+
+ -- trace
+ begin_inst <= '1';
+ trace_pc <= pc;
+ trace_opcode <= opcode;
+ trace_sp <= sp;
+ trace_topOfStack <= memARead;
+ trace_topOfStackB <= memBRead;
+
+ -- during the next cycle we'll be reading the next opcode
+ spOffset(4):=not opcode(4);
+ spOffset(3 downto 0):=opcode(3 downto 0);
+
+ case decodedOpcode is
+ when Decoded_Im =>
+ memAWriteEnable <= '1';
+ sp <= sp - 1;
+ memAAddr <= sp-1;
+ for i in wordSize-1 downto 7 loop
+ memAWrite(i) <= opcode(6);
+ end loop;
+ memAWrite(6 downto 0) <= opcode(6 downto 0);
+ when Decoded_ImShift =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0);
+ memAWrite(6 downto 0) <= opcode(6 downto 0);
+ when Decoded_StoreSP =>
+ memBWriteEnable <= '1';
+ memBAddr <= sp+spOffset;
+ memBWrite <= memARead;
+ sp <= sp + 1;
+ state <= State_Resync;
+ when Decoded_LoadSP =>
+ sp <= sp - 1;
+ memAAddr <= sp+spOffset;
+ when Decoded_Emulate =>
+ sp <= sp - 1;
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto 0) <= pc + 1;
+ -- The emulate address is:
+ -- 98 7654 3210
+ -- 0000 00aa aaa0 0000
+ pc <= (others => '0');
+ pc(9 downto 5) <= opcode(4 downto 0);
+ when Decoded_AddSP =>
+ memAAddr <= sp;
+ memBAddr <= sp+spOffset;
+ state <= State_AddSP;
+ when Decoded_Break =>
+ report "Break instruction encountered" severity failure;
+ break <= '1';
+ when Decoded_PushSP =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ sp <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto minAddrBit) <= sp;
+ when Decoded_PopPC =>
+ pc <= memARead(maxAddrBit downto 0);
+ sp <= sp + 1;
+ state <= State_Resync;
+ when Decoded_Add =>
+ sp <= sp + 1;
+ state <= State_Add;
+ when Decoded_Or =>
+ sp <= sp + 1;
+ state <= State_Or;
+ when Decoded_And =>
+ sp <= sp + 1;
+ state <= State_And;
+ when Decoded_Load =>
+ if (memARead(ioBit)='1') then
+ io_addr <= memARead(maxAddrBit downto minAddrBit);
+ io_readEnable <= '1';
+ state <= State_ReadIO;
+ else
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ end if;
+ when Decoded_Not =>
+ memAAddr <= sp(maxAddrBit downto minAddrBit);
+ memAWriteEnable <= '1';
+ memAWrite <= not memARead;
+ when Decoded_Flip =>
+ memAAddr <= sp(maxAddrBit downto minAddrBit);
+ memAWriteEnable <= '1';
+ for i in 0 to wordSize-1 loop
+ memAWrite(i) <= memARead(wordSize-1-i);
+ end loop;
+ when Decoded_Store =>
+ memBAddr <= sp + 1;
+ sp <= sp + 1;
+ if (memARead(ioBit)='1') then
+ state <= State_WriteIO;
+ else
+ state <= State_Store;
+ end if;
+ when Decoded_PopSP =>
+ sp <= memARead(maxAddrBit downto minAddrBit);
+ state <= State_Resync;
+ when Decoded_Nop =>
+ memAAddr <= sp;
+ when others =>
+ null;
+ end case;
+ when State_ReadIO =>
+ if (io_busy = '0') then
+ state <= State_Fetch;
+ memAWriteEnable <= '1';
+ memAWrite <= (others => '0');
+ memAWrite(7 downto 0) <= io_read;
+ end if;
+ when State_WriteIO =>
+ sp <= sp + 1;
+ io_writeEnable <= '1';
+ io_addr <= memARead(maxAddrBit downto minAddrBit);
+ io_write <= memBRead(7 downto 0);
+ state <= State_WriteIODone;
+ when State_WriteIODone =>
+ if (io_busy = '0') then
+ state <= State_Resync;
+ end if;
+ when State_Fetch =>
+ -- We need to resync. During the *next* cycle
+ -- we'll fetch the opcode @ pc and thus it will
+ -- be available for State_Execute the cycle after
+ -- next
+ memBAddr <= pc(maxAddrBit downto minAddrBit);
+ state <= State_FetchNext;
+ when State_FetchNext =>
+ -- at this point memARead contains the value that is either
+ -- from the top of stack or should be copied to the top of the stack
+ memAWriteEnable <= '1';
+ memAWrite <= memARead;
+ memAAddr <= sp;
+ memBAddr <= sp + 1;
+ state <= State_Decode;
+ when State_Decode =>
+ case pc(1 downto 0) is
+ when "00" => tOpcode := memBRead(31 downto 24);
+ when "01" => tOpcode := memBRead(23 downto 16);
+ when "10" => tOpcode := memBRead(15 downto 8);
+ when others => tOpcode := memBRead(7 downto 0);
+ end case;
+ idim_flag <= tOpcode(7);
+ opcode <= tOpcode;
+ if (tOpcode(7 downto 7)=OpCode_Im) then
+ if (idim_flag='1') then
+ decodedOpcode<=Decoded_ImShift;
+ else
+ decodedOpcode<=Decoded_Im;
+ end if;
+ elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then
+ decodedOpcode<=Decoded_StoreSP;
+ elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then
+ decodedOpcode<=Decoded_LoadSP;
+ elsif (tOpcode(7 downto 5)=OpCode_Emulate) then
+ decodedOpcode<=Decoded_Emulate;
+ elsif (tOpcode(7 downto 4)=OpCode_AddSP) then
+ decodedOpcode<=Decoded_AddSP;
+ else
+ case tOpcode(3 downto 0) is
+ when OpCode_Break =>
+ decodedOpcode<=Decoded_Break;
+ when OpCode_PushSP =>
+ decodedOpcode<=Decoded_PushSP;
+ when OpCode_PopPC =>
+ decodedOpcode<=Decoded_PopPC;
+ when OpCode_Add =>
+ decodedOpcode<=Decoded_Add;
+ when OpCode_Or =>
+ decodedOpcode<=Decoded_Or;
+ when OpCode_And =>
+ decodedOpcode<=Decoded_And;
+ when OpCode_Load =>
+ decodedOpcode<=Decoded_Load;
+ when OpCode_Not =>
+ decodedOpcode<=Decoded_Not;
+ when OpCode_Flip =>
+ decodedOpcode<=Decoded_Flip;
+ when OpCode_Store =>
+ decodedOpcode<=Decoded_Store;
+ when OpCode_PopSP =>
+ decodedOpcode<=Decoded_PopSP;
+ when others =>
+ decodedOpcode<=Decoded_Nop;
+ end case;
+ end if;
+ -- during the State_Execute cycle we'll be fetching SP+1
+ memAAddr <= sp;
+ memBAddr <= sp + 1;
+ state <= State_Execute;
+ when State_Store =>
+ sp <= sp + 1;
+ memAWriteEnable <= '1';
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ memAWrite <= memBRead;
+ state <= State_Resync;
+ when State_AddSP =>
+ state <= State_Add;
+ when State_Add =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead + memBRead;
+ state <= State_Fetch;
+ when State_Or =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead or memBRead;
+ state <= State_Fetch;
+ when State_Resync =>
+ memAAddr <= sp;
+ state <= State_Fetch;
+ when State_And =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead and memBRead;
+ state <= State_Fetch;
+ when others =>
+ null;
+ end case;
+ end if;
+ end process;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/zpu_top_medium.vhd b/zpu/hdl/zpu3/src/zpu_top_medium.vhd
new file mode 100644
index 0000000..4896b30
--- /dev/null
+++ b/zpu/hdl/zpu3/src/zpu_top_medium.vhd
@@ -0,0 +1,768 @@
+-- Company: ZPU3
+-- Engineer: Øyvind Harboe
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+use IEEE.STD_LOGIC_arith.ALL;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+
+entity zpu_top is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ io_busy : in std_logic;
+ io_read : in std_logic_vector(7 downto 0);
+ io_write : out std_logic_vector(7 downto 0);
+ io_addr : out std_logic_vector(maxAddrBit downto minAddrBit);
+ io_writeEnable : out std_logic;
+ io_readEnable : out std_logic;
+ interrupt : in std_logic;
+ break : out std_logic);
+end zpu_top;
+
+architecture behave of zpu_top is
+
+signal readIO : std_logic;
+
+
+
+signal memAWriteEnable : std_logic;
+signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memAWrite : std_logic_vector(wordSize-1 downto 0);
+signal memARead : std_logic_vector(wordSize-1 downto 0);
+signal memBWriteEnable : std_logic;
+signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal memBWrite : std_logic_vector(wordSize-1 downto 0);
+signal memBRead : std_logic_vector(wordSize-1 downto 0);
+
+
+
+signal pc : std_logic_vector(maxAddrBit downto 0);
+signal sp : std_logic_vector(maxAddrBit downto minAddrBit);
+
+signal idim_flag : std_logic;
+
+--signal storeToStack : std_logic;
+--signal fetchNextInstruction : std_logic;
+--signal extraCycle : std_logic;
+signal busy : std_logic;
+--signal fetching : std_logic;
+
+signal begin_inst : std_logic;
+
+
+
+signal trace_opcode : std_logic_vector(7 downto 0);
+signal trace_pc : std_logic_vector(maxAddrBit downto 0);
+signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit);
+signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0);
+
+-- state machine.
+
+subtype State_Type is std_logic_vector(4 downto 0);
+constant State_ResyncDecode : State_Type := b"00000";
+constant State_WriteIODone : State_Type := b"00001";
+constant State_Execute : State_Type := b"00010";
+constant State_StoreToStack : State_Type := b"00011";
+constant State_Add : State_Type := b"00100";
+constant State_Or : State_Type := b"00101";
+constant State_And : State_Type := b"00110";
+constant State_Store : State_Type := b"00111";
+constant State_ReadIO : State_Type := b"01000";
+constant State_WriteIO : State_Type := b"01001";
+constant State_Load : State_Type := b"01010";
+constant State_ResyncStack : State_Type := b"01011";
+constant State_AddSP : State_Type := b"01100";
+constant State_ReadIODone : State_Type := b"01101";
+constant State_Decode : State_Type := b"01110";
+constant State_LoadByte1 : State_Type := b"01111";
+constant State_LoadByte2 : State_Type := b"10000";
+constant State_StoreByte1 : State_Type := b"10001";
+constant State_StoreByte2 : State_Type := b"10010";
+constant State_Mult1 : State_Type := b"10011";
+constant State_Mult2 : State_Type := b"10100";
+constant State_Mult3 : State_Type := b"10101";
+
+
+subtype DecodedOpcodeType is std_logic_vector(5 downto 0);
+constant Decoded_Nop : DecodedOpcodeType := b"000000";
+constant Decoded_Im : DecodedOpcodeType := b"000001";
+constant Decoded_ImShift : DecodedOpcodeType := b"000010";
+constant Decoded_LoadSP : DecodedOpcodeType := b"000011";
+constant Decoded_StoreSP : DecodedOpcodeType := b"000100";
+constant Decoded_AddSP : DecodedOpcodeType := b"000101";
+constant Decoded_Emulate : DecodedOpcodeType := b"000110";
+constant Decoded_Break : DecodedOpcodeType := b"000111";
+constant Decoded_PushPC : DecodedOpcodeType := b"001000";
+constant Decoded_PushSP : DecodedOpcodeType := b"001001";
+constant Decoded_PopPC : DecodedOpcodeType := b"001010";
+constant Decoded_Add : DecodedOpcodeType := b"001011";
+constant Decoded_Or : DecodedOpcodeType := b"001100";
+constant Decoded_And : DecodedOpcodeType := b"001101";
+constant Decoded_Load : DecodedOpcodeType := b"001110";
+constant Decoded_Not : DecodedOpcodeType := b"001111";
+constant Decoded_Flip : DecodedOpcodeType := b"010000";
+constant Decoded_Store : DecodedOpcodeType := b"010001";
+constant Decoded_PopSP : DecodedOpcodeType := b"010010";
+constant Decoded_Ashiftleft : DecodedOpcodeType := b"010011";
+constant Decoded_Ashiftright : DecodedOpcodeType := b"010100";
+constant Decoded_Lshiftright : DecodedOpcodeType := b"010101";
+constant Decoded_Eqbranch : DecodedOpcodeType := b"010110";
+constant Decoded_Neqbranch : DecodedOpcodeType := b"010111";
+constant Decoded_Eq : DecodedOpcodeType := b"011000";
+constant Decoded_Neq : DecodedOpcodeType := b"011001";
+constant Decoded_Loadb : DecodedOpcodeType := b"011010";
+constant Decoded_Lessthan : DecodedOpcodeType := b"011011";
+constant Decoded_Lessthanorequal : DecodedOpcodeType := b"011100";
+constant Decoded_Ulessthan : DecodedOpcodeType := b"011101";
+constant Decoded_Ulessthanorequal : DecodedOpcodeType := b"011110";
+constant Decoded_Storeb : DecodedOpcodeType := b"011111";
+constant Decoded_Lshift2 : DecodedOpcodeType := b"100000";
+constant Decoded_DoubleIm : DecodedOpcodeType := b"100001";
+constant Decoded_AddIm : DecodedOpcodeType := b"100011";
+constant Decoded_Mult16x16 : DecodedOpcodeType := b"100100";
+constant Decoded_Swap : DecodedOpcodeType := b"100101";
+constant Decoded_Callpcrel : DecodedOpcodeType := b"100110";
+constant Decoded_Pushspadd : DecodedOpcodeType := b"100111";
+
+
+signal mult1 : std_logic_vector(wordSize/2-1 downto 0);
+signal mult2 : std_logic_vector(wordSize/2-1 downto 0);
+signal multResult : std_logic_vector(wordSize-1 downto 0);
+
+signal storeByte : std_logic_vector(7 downto 0);
+signal byteSelect : std_logic_vector(minAddrBit-1 downto 0);
+
+signal opcode : std_logic_vector(OpCode_Size-1 downto 0);
+signal opcode2 : std_logic_vector(OpCode_Size-1 downto 0);
+
+signal decodedOpcode : DecodedOpcodeType;
+
+signal state : State_Type;
+
+begin
+ traceFileGenerate:
+ if Generate_Trace generate
+ trace_file: trace port map (
+ clk => clk,
+ begin_inst => begin_inst,
+ pc => trace_pc,
+ opcode => trace_opcode,
+ sp => trace_sp,
+ memA => trace_topOfStack,
+ busy => busy
+ );
+ end generate;
+
+
+ memory: dualport_ram port map (
+ clk => clk,
+ memAWriteEnable => memAWriteEnable,
+ memAAddr => memAAddr,
+ memAWrite => memAWrite,
+ memARead => memARead,
+ memBWriteEnable => memBWriteEnable,
+ memBAddr => memBAddr,
+ memBWrite => memBWrite,
+ memBRead => memBRead
+ );
+
+
+ process(clk, areset)
+ begin
+ if (clk'event and clk = '1') then
+ multResult <= mult1 * mult2;
+ end if;
+ end process;
+
+
+
+ opcodeControl:
+ process(clk, areset)
+ variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0);
+ variable tOpcode2 : std_logic_vector(OpCode_Size-1 downto 0);
+ variable spOffset : std_logic_vector(4 downto 0);
+ variable spOffset2 : std_logic_vector(4 downto 0);
+ variable nextPC : std_logic_vector(maxAddrBit downto 0);
+ variable pushspaddTemp : std_logic_vector(maxAddrBit downto minAddrBit);
+ variable tempVal : std_logic_vector(wordSize-1 downto 0);
+ variable compareA : signed(wordSize-1 downto 0);
+ variable compareB : signed(wordSize-1 downto 0);
+ begin
+ if areset = '1' then
+ mult1 <= (others => '0');
+ mult2 <= (others => '0');
+ state <= State_ResyncDecode;
+ break <= '0';
+ sp <= (2 => '0', others => '1');
+ pc <= (others => '0');
+ idim_flag <= '0';
+ begin_inst <= '0';
+ memAAddr <= (others => '0');
+ memBAddr <= (others => '0');
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+ io_writeEnable <= '0';
+ io_readEnable <= '0';
+ decodedOpcode <= (others => '0');
+ memAWrite <= (others => '0');
+ memBWrite <= (others => '0');
+ opcode <= (others => '0');
+ io_addr <= (others => '0');
+ io_write <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ memAWriteEnable <= '0';
+ memBWriteEnable <= '0';
+
+ io_writeEnable <= '0';
+ io_readEnable <= '0';
+ begin_inst <= '0';
+
+ case state is
+ when State_Decode =>
+ nextPC:=pc+1;
+ case pc(1 downto 0) is
+ when "00" => tOpcode := memARead(31 downto 24);
+ when "01" => tOpcode := memARead(23 downto 16);
+ when "10" => tOpcode := memARead(15 downto 8);
+ when others => tOpcode := memARead(7 downto 0);
+ end case;
+ case nextPC(1 downto 0) is
+ when "00" => tOpcode2 := memBRead(31 downto 24);
+ when "01" => tOpcode2 := memBRead(23 downto 16);
+ when "10" => tOpcode2 := memBRead(15 downto 8);
+ when others => tOpcode2 := memBRead(7 downto 0);
+ end case;
+ idim_flag <= tOpcode(7);
+ opcode <= tOpcode;
+ opcode2 <= tOpcode2;
+ if (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 4)=0 and tOpcode2(3 downto 0)=Opcode_Add and idim_flag='0') then
+ idim_flag <= '0';
+ decodedOpcode <= Decoded_AddIm;
+ nextPC := pc + 2;
+ elsif (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 7)=OpCode_Im and idim_flag='0') then
+ decodedOpcode <= Decoded_DoubleIm;
+ nextPC := pc + 2;
+ elsif (tOpcode(7 downto 4)=OpCode_AddSP and tOpcode(3 downto 0)=0 and
+ tOpcode2(7 downto 4)=OpCode_AddSP and tOpcode2(3 downto 0)=0) then
+ decodedOpcode <= Decoded_Lshift2;
+ nextPC := pc + 2;
+ elsif (tOpcode(7 downto 7)=OpCode_Im) then
+ if (idim_flag='1') then
+ decodedOpcode<=Decoded_ImShift;
+ else
+ decodedOpcode<=Decoded_Im;
+ end if;
+ elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then
+ decodedOpcode<=Decoded_StoreSP;
+ elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then
+ decodedOpcode<=Decoded_LoadSP;
+ elsif (tOpcode(7 downto 5)=OpCode_Emulate) then
+ if tOpcode(5 downto 0)=OpCode_Eqbranch then
+ decodedOpcode <= Decoded_Eqbranch;
+ elsif tOpcode(5 downto 0)=OpCode_Neqbranch then
+ decodedOpcode <= Decoded_Neqbranch;
+ elsif tOpcode(5 downto 0)=OpCode_Eq then
+ decodedOpcode <= Decoded_Eq;
+ elsif tOpcode(5 downto 0)=OpCode_Neq then
+ decodedOpcode <= Decoded_Neq;
+ elsif tOpcode(5 downto 0)=OpCode_Lessthan then
+ decodedOpcode <= Decoded_Lessthan;
+ elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then
+ decodedOpcode <= Decoded_Lessthanorequal;
+ elsif tOpcode(5 downto 0)=OpCode_Ulessthan then
+ decodedOpcode <= Decoded_Ulessthan;
+ elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then
+ decodedOpcode <= Decoded_Ulessthanorequal;
+ elsif tOpcode(5 downto 0)=OpCode_Loadb then
+ decodedOpcode <= Decoded_Loadb;
+ elsif tOpcode(5 downto 0)=OpCode_Storeb then
+ decodedOpcode <= Decoded_Storeb;
+ elsif tOpcode(5 downto 0)=OpCode_Mult16x16 then
+ decodedOpcode <= Decoded_Mult16x16;
+ elsif tOpcode(5 downto 0)=OpCode_Swap then
+ decodedOpcode <= Decoded_Swap;
+ elsif tOpcode(5 downto 0)=OpCode_Callpcrel then
+ decodedOpcode <= Decoded_Callpcrel;
+ elsif tOpcode(5 downto 0)=OpCode_Pushspadd then
+ decodedOpcode <= Decoded_Pushspadd;
+-- elsif tOpcode(5 downto 0)=OpCode_Lshiftright then
+-- decodedOpcode <= Decoded_Lshiftright;
+-- elsif tOpcode(5 downto 0)=OpCode_Ashiftleft then
+-- decodedOpcode <= Decoded_Ashiftleft;
+-- elsif tOpcode(5 downto 0)=OpCode_Ashiftright then
+-- decodedOpcode <= Decoded_Ashiftright;
+ else
+ decodedOpcode<=Decoded_Emulate;
+ end if;
+ elsif (tOpcode(7 downto 4)=OpCode_AddSP) then
+ decodedOpcode<=Decoded_AddSP;
+ else
+ case tOpcode(3 downto 0) is
+ when OpCode_Break =>
+ decodedOpcode<=Decoded_Break;
+ when OpCode_PushPC =>
+ decodedOpcode<=Decoded_PushPC;
+ when OpCode_PushSP =>
+ decodedOpcode<=Decoded_PushSP;
+ when OpCode_PopPC =>
+ decodedOpcode<=Decoded_PopPC;
+ when OpCode_Add =>
+ decodedOpcode<=Decoded_Add;
+ when OpCode_Or =>
+ decodedOpcode<=Decoded_Or;
+ when OpCode_And =>
+ decodedOpcode<=Decoded_And;
+ when OpCode_Load =>
+ decodedOpcode<=Decoded_Load;
+ when OpCode_Not =>
+ decodedOpcode<=Decoded_Not;
+ when OpCode_Flip =>
+ decodedOpcode<=Decoded_Flip;
+ when OpCode_Store =>
+ decodedOpcode<=Decoded_Store;
+ when OpCode_PopSP =>
+ decodedOpcode<=Decoded_PopSP;
+ when others =>
+ decodedOpcode<=Decoded_Nop;
+ end case;
+ end if;
+ -- Fetch the two next opcodes... :-)
+ memAAddr <= nextPC(maxAddrBit downto minAddrBit);
+ nextPC:=nextPC+1;
+ memBAddr <= nextPC(maxAddrBit downto minAddrBit);
+ state <= State_Execute;
+ when State_Execute =>
+ state <= State_Decode;
+ -- at this point:
+ -- memBRead contains opcode word
+ -- memARead contains top of stack
+ pc <= pc + 1;
+
+ -- trace
+ begin_inst <= '1';
+ trace_pc <= pc;
+ trace_opcode <= opcode;
+ trace_sp <= sp;
+ trace_topOfStack <= memARead;
+
+ -- during the next cycle we'll be reading the next opcode
+ spOffset(4):=not opcode(4);
+ spOffset(3 downto 0):=opcode(3 downto 0);
+ spOffset2(4):=not opcode2(4);
+ spOffset2(3 downto 0):=opcode2(3 downto 0);
+
+ case decodedOpcode is
+
+ when Decoded_DoubleIm =>
+ memAWriteEnable <= '1';
+ sp <= sp - 1;
+ memAAddr <= sp-1;
+ for i in wordSize-1 downto 14 loop
+ memAWrite(i) <= opcode(6);
+ end loop;
+ memAWrite(13 downto 7) <= opcode(6 downto 0);
+ memAWrite(6 downto 0) <= opcode2(6 downto 0);
+ memBAddr <= sp;
+ memBWrite <= memARead;
+ memBWriteEnable <= '1';
+ pc <= pc + 2;
+ when Decoded_Im =>
+ memAWriteEnable <= '1';
+ sp <= sp - 1;
+ memAAddr <= sp-1;
+ for i in wordSize-1 downto 7 loop
+ memAWrite(i) <= opcode(6);
+ end loop;
+ memAWrite(6 downto 0) <= opcode(6 downto 0);
+ memBAddr <= sp;
+ memBWrite <= memARead;
+ memBWriteEnable <= '1';
+ when Decoded_ImShift =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0);
+ memAWrite(6 downto 0) <= opcode(6 downto 0);
+ memBAddr <= sp + 1;
+ when Decoded_StoreSP =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp+spOffset;
+ memAWrite <= memARead;
+ -- avoid address crashes.
+ memBAddr <= sp - 1;
+ sp <= sp + 1;
+ state <= State_ResyncDecode;
+ when Decoded_LoadSP =>
+ sp <= sp - 1;
+ if (spOffset = 0) then
+ -- This is a duplicate instruction.
+ memAAddr <= sp-1;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead;
+ else
+ memAAddr <= sp+spOffset;
+ end if;
+ memBAddr <= sp;
+ memBWrite <= memARead;
+ memBWriteEnable <= '1';
+ when Decoded_Callpcrel =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto 0) <= pc + 1;
+ memBAddr <= sp+1;
+ pc <= pc + memARead(maxAddrBit downto 0);
+ state <= State_ResyncDecode;
+ when Decoded_Emulate =>
+ sp <= sp - 1;
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto 0) <= pc;
+ memBAddr <= sp;
+ memBWrite <= memARead;
+ memBWriteEnable <= '1';
+ -- The emulate address is:
+ -- 98 7654 3210
+ -- 0000 00aa aaa0 0000
+ pc <= (others => '0');
+ pc(9 downto 5) <= opcode(4 downto 0);
+ state <= State_ResyncDecode;
+ when Decoded_AddSP =>
+ if spOffset=0 then
+ -- avoid address line crashes...
+ -- FIX!!! is this an issue?
+ -- oh-well. While we are at it, we've got a faster
+ -- shift operation without updating the toolchain.
+ memAWriteEnable <= '1';
+ memAAddr <= sp;
+ memAWrite <= memARead + memARead;
+ memBAddr <= sp+1;
+ else
+ memAWriteEnable <= '1';
+ memAAddr <= sp;
+ memAWrite <= memARead;
+ memBAddr <= sp+spOffset;
+ state <= State_AddSP;
+ end if;
+ when Decoded_Break =>
+ report "Break instruction encountered" severity failure;
+ break <= '1';
+ when Decoded_PushPC =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ sp <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto 0) <= pc;
+ memBAddr <= sp;
+ memBWrite <= memARead;
+ memBWriteEnable <= '1';
+ when Decoded_PushSP =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp - 1;
+ sp <= sp - 1;
+ memAWrite <= (others => DontCareValue);
+ memAWrite(maxAddrBit downto minAddrBit) <= sp;
+ memBAddr <= sp;
+ memBWrite <= memARead;
+ memBWriteEnable <= '1';
+ when Decoded_Pushspadd =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp;
+ memAWrite <= (others => DontCareValue);
+ pushspaddTemp := memARead(maxAddrBit-minAddrBit downto 0);
+ memAWrite(maxAddrBit downto minAddrBit) <= sp+pushspaddTemp;
+ memBAddr <= sp+1;
+ when Decoded_PopPC =>
+ memAAddr <= sp;
+ pc <= memARead(maxAddrBit downto 0);
+ sp <= sp + 1;
+ state <= State_ResyncDecode;
+ when Decoded_AddIm =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp;
+ tempVal(wordSize-1 downto 7) := (others => tOpcode(6));
+ tempVal(6 downto 0) := tOpcode(6 downto 0);
+ memAWrite <= memARead + tempVal;
+ memBAddr <= sp + 1;
+ pc <= pc + 2;
+ when Decoded_Add =>
+ memAWriteEnable <= '1';
+ memAWrite <= memARead + memBRead;
+ memAAddr <= sp + 1;
+ memBAddr <= sp + 2;
+ sp <= sp + 1;
+ when Decoded_Or =>
+ sp <= sp + 1;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead or memBRead;
+ memAWriteEnable <= '1';
+ memAAddr <= sp + 1;
+ memBAddr <= sp + 2;
+ when Decoded_And =>
+ sp <= sp + 1;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead and memBRead;
+ memAWriteEnable <= '1';
+ memAAddr <= sp + 1;
+ memBAddr <= sp + 2;
+ when Decoded_Load =>
+ if (memARead(ioBit)='1') then
+ io_addr <= memARead(maxAddrBit downto minAddrBit);
+ io_readEnable <= '1';
+ state <= State_ReadIO;
+ else
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ memBAddr <= sp + 1;
+ end if;
+ when Decoded_Swap =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite(wordSize/2-1 downto 0) <= memARead(wordSize-1 downto wordSize/2);
+ memAWrite(wordSize-1 downto wordSize/2) <= memARead(wordSize/2-1 downto 0);
+ memBAddr <= sp + 1;
+ when Decoded_Not =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= not memARead;
+ memBAddr <= sp + 1;
+ when Decoded_Flip =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ for i in 0 to wordSize-1 loop
+ memAWrite(i) <= memARead(wordSize-1-i);
+ end loop;
+ memBAddr <= sp + 1;
+ when Decoded_Lshift2 =>
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite(1 downto 0) <= (others => '0');
+ memAWrite(wordSize-1 downto 2) <= memARead(wordSize-1-2 downto 0);
+ memBAddr <= sp + 1;
+ pc <= pc + 2;
+ when Decoded_Store =>
+ sp <= sp + 2;
+ if (memARead(ioBit)='1') then
+ io_writeEnable <= '1';
+ io_addr <= memARead(maxAddrBit downto minAddrBit);
+ io_write <= memBRead(7 downto 0);
+ state <= State_WriteIO;
+ else
+ memAWriteEnable <= '1';
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ memAWrite <= memBRead;
+ state <= State_ResyncDecode;
+ end if;
+ when Decoded_PopSP =>
+ sp <= memARead(maxAddrBit downto minAddrBit);
+ state <= State_ResyncDecode;
+ when Decoded_Ashiftleft =>
+ memAWrite(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))) <=
+ memBRead(wordSize-conv_integer(memARead(wordPower-1 downto 0))-1 downto 0);
+ if memARead(wordPower-1 downto 0)/=0 then
+ memAWrite(conv_integer(memARead(wordPower-1 downto 0))-1 downto 0) <= (others => '0');
+ end if;
+ memAWriteEnable <= '1';
+ memAAddr <= sp + 1;
+ memBAddr <= sp + 2;
+ sp <= sp + 1;
+ when Decoded_Ashiftright | Decoded_Lshiftright =>
+ memAWrite(wordSize-1-conv_integer(memARead(wordPower-1 downto 0)) downto 0) <=
+ memBRead(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0)));
+ if memARead(wordPower-1 downto 0)/=0 then
+ if decodedOpcode=Decoded_Ashiftright and memBRead(wordSize-1)='1' then
+ memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '1');
+ else
+ memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '0');
+ end if;
+ end if;
+ memAWriteEnable <= '1';
+ memAAddr <= sp + 1;
+ memBAddr <= sp + 2;
+ sp <= sp + 1;
+ when Decoded_Eqbranch =>
+ sp <= sp + 2;
+ if (memBRead=0) then
+ pc <= memARead(maxAddrBit downto 0) + pc;
+ end if;
+ state <= State_ResyncDecode;
+ when Decoded_Neqbranch =>
+ sp <= sp + 2;
+ if (memBRead/=0) then
+ pc <= memARead(maxAddrBit downto 0) + pc;
+ end if;
+ state <= State_ResyncDecode;
+ when Decoded_Eq =>
+ sp <= sp + 1;
+ memAWrite <= (others => '0');
+ if (memARead=memBRead) then
+ memAWrite(0) <= '1';
+ end if;
+ memAAddr <= sp + 1;
+ memAWriteEnable <= '1';
+ memBAddr <= sp + 2;
+ when Decoded_Neq =>
+ sp <= sp + 1;
+ memAWrite <= (others => '0');
+ if (memARead/=memBRead) then
+ memAWrite(0) <= '1';
+ end if;
+ memAAddr <= sp + 1;
+ memAWriteEnable <= '1';
+ memBAddr <= sp + 2;
+ when Decoded_Ulessthan =>
+ sp <= sp + 1;
+ memAWrite <= (others => '0');
+ if (memARead<memBRead) then
+ memAWrite(0) <= '1';
+ end if;
+ memAAddr <= sp + 1;
+ memAWriteEnable <= '1';
+ memBAddr <= sp + 2;
+ when Decoded_Ulessthanorequal =>
+ sp <= sp + 1;
+ memAWrite <= (others => '0');
+ if (memARead<=memBRead) then
+ memAWrite(0) <= '1';
+ end if;
+ memAAddr <= sp + 1;
+ memAWriteEnable <= '1';
+ memBAddr <= sp + 2;
+ when Decoded_Lessthan =>
+ sp <= sp + 1;
+ memAWrite <= (others => '0');
+ compareA := signed(memARead);
+ compareB := signed(memBRead);
+ if (compareA<compareB) then
+ memAWrite(0) <= '1';
+ end if;
+ memAAddr <= sp + 1;
+ memAWriteEnable <= '1';
+ memBAddr <= sp + 2;
+ when Decoded_Lessthanorequal =>
+ sp <= sp + 1;
+ memAWrite <= (others => '0');
+ compareA := signed(memARead);
+ compareB := signed(memBRead);
+ if (compareA<=compareB) then
+ memAWrite(0) <= '1';
+ end if;
+ memAAddr <= sp + 1;
+ memAWriteEnable <= '1';
+ memBAddr <= sp + 2;
+ when Decoded_Loadb =>
+ byteSelect <= memARead(minAddrBit-1 downto 0);
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ state <= State_LoadByte1;
+ when Decoded_Storeb =>
+ sp <= sp + 2;
+ byteSelect <= memARead(minAddrBit-1 downto 0);
+ storeByte <= memBRead(7 downto 0);
+ memAAddr <= memARead(maxAddrBit downto minAddrBit);
+ memBAddr <= sp;
+ state <= State_StoreByte1;
+ when Decoded_Mult16x16 =>
+ mult1 <= memARead(wordSize/2-1 downto 0);
+ mult2 <= memBRead(wordSize/2-1 downto 0);
+ sp <= sp + 1;
+ state <= State_Mult1;
+ when others =>
+ -- nop. Here we persist whatever was loaded into
+ -- memARead
+ memAAddr <= sp;
+ memAWriteEnable <= '1';
+ memAWrite <= memARead;
+ memBAddr <= sp + 1;
+
+ end case;
+ when State_ReadIO =>
+ state <= State_ReadIODone;
+ when State_ReadIODone =>
+ if (io_busy = '0') then
+ state <= State_ResyncDecode;
+ memAWriteEnable <= '1';
+ memAWrite <= (others => '0');
+ memAWrite(7 downto 0) <= io_read;
+ memAAddr <= sp;
+ end if;
+ when State_WriteIO =>
+ state <= State_WriteIODone;
+ when State_WriteIODone =>
+ if (io_busy = '0') then
+ state <= State_ResyncDecode;
+ end if;
+ when State_ResyncDecode =>
+ memAAddr <= pc(maxAddrBit downto minAddrBit);
+ nextPC:=pc+1;
+ memBAddr <= nextPC(maxAddrBit downto minAddrBit);
+ state <= State_ResyncStack;
+ when State_ResyncStack =>
+ memAAddr <= sp;
+ memBAddr <= sp+1;
+ state <= State_Decode;
+ when State_AddSP =>
+ memAAddr <= pc(maxAddrBit downto minAddrBit);
+ nextPC:=pc+1;
+ memBAddr <= nextPC(maxAddrBit downto minAddrBit);
+ state <= State_Add;
+ when State_Add =>
+ memAWriteEnable <= '1';
+ memAWrite <= memARead + memBRead;
+ memAAddr <= sp;
+ memBAddr <= sp + 1;
+ state <= State_Decode;
+ when State_LoadByte1 =>
+ memAAddr <= pc(maxAddrBit downto minAddrBit);
+ nextPC:=pc+1;
+ memBAddr <= nextPC(maxAddrBit downto minAddrBit);
+ state <= State_LoadByte2;
+ when State_LoadByte2 =>
+ memAWriteEnable <= '1';
+ memAAddr <= sp;
+ memAWrite <= (others => '0');
+ case byteSelect is
+ when "00" => memAWrite(7 downto 0) <= memARead(31 downto 24);
+ when "01" => memAWrite(7 downto 0) <= memARead(23 downto 16);
+ when "10" => memAWrite(7 downto 0) <= memARead(15 downto 8);
+ when others => memAWrite(7 downto 0) <= memARead(7 downto 0);
+ end case;
+ memBAddr <= sp + 1;
+ state <= State_Decode;
+ when State_StoreByte1 =>
+ state <= State_StoreByte2;
+ when State_StoreByte2 =>
+ memAWriteEnable <= '1';
+ memAAddr <= memBRead(maxAddrBit downto minAddrBit);
+ memAWrite <= memARead;
+ case byteSelect is
+ when "00" => memAWrite(31 downto 24) <= storeByte;
+ when "01" => memAWrite(23 downto 16) <= storeByte;
+ when "10" => memAWrite(15 downto 8) <= storeByte;
+ when others => memAWrite(7 downto 0) <= storeByte;
+ end case;
+ state <= State_ResyncDecode;
+ when State_Mult1 =>
+ memAAddr <= pc(maxAddrBit downto minAddrBit);
+ nextPC:=pc+1;
+ memBAddr <= nextPC(maxAddrBit downto minAddrBit);
+ state <= State_Mult2;
+ when State_Mult2 =>
+ memAWriteEnable <= '1';
+ memAWrite <= multResult;
+ memAAddr <= sp;
+ memBAddr <= sp + 1;
+ state <= State_Decode;
+
+ when others =>
+ null;
+ end case;
+ end if;
+ end process;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/zpuio.vhd b/zpu/hdl/zpu3/src/zpuio.vhd
new file mode 100644
index 0000000..96e9aea
--- /dev/null
+++ b/zpu/hdl/zpu3/src/zpuio.vhd
@@ -0,0 +1,180 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library zylin;
+use zylin.arm7.all;
+
+library zylin;
+use zylin.zpu_config.all;
+use zylin.zpupkg.all;
+
+entity zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+end zpuio;
+
+architecture behave of zpuio is
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal io_readEnable : std_logic;
+
+signal din : std_logic_vector(7 downto 0);
+signal dout : std_logic_vector(7 downto 0);
+signal adr : std_logic_vector(15 downto 0);
+signal break : std_logic;
+signal we : std_logic;
+signal re : std_logic;
+
+
+-- uart forwarding...
+
+signal uartTXPending : std_logic;
+signal uartTXCleared : std_logic;
+signal uartData : std_logic_vector(7 downto 0);
+
+signal readingTimer : std_logic;
+begin
+
+ timerinst: timer port map (
+ clk => cpu_clk,
+ areset => areset,
+ we => timer_we,
+ din => io_write,
+ adr => io_addr(4 downto 2),
+ dout => timer_read);
+
+ zpu: zpu_top port map (
+ clk => cpu_clk ,
+ areset => areset,
+ io_busy => io_busy,
+ io_writeEnable => io_writeEnable,
+ io_readEnable => io_readEnable,
+ io_write => io_write,
+ io_read => io_read,
+ io_addr => io_addr,
+ interrupt => '0'
+ --,
+-- break => cpu_fiq_p
+);
+
+
+ -- Read/write are on different addresses
+ -- The registers are 8 bits and mapped to bit[7:0]
+ --
+ -- 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO)
+ -- Read : Reads from UART RX FIFO (4 byte FIFO)
+ -- 0xC004 Read : UART status register
+ -- Bit 0 = RX FIFO empty
+ -- Bit 1 = TX FIFO full
+ -- 0xA000 Skrive: LED's (8 stk.)
+
+ -- 0x9000 Write: bit 0: 1= reset counter
+ -- 0= counter running
+ -- bit 1: 1= sample counter (when set to 1)
+ -- 0=not used
+ -- Read : counter bit[7:0]
+ -- 0x9004 Read: counter bit [15:8]
+ -- 0x9008 Read: counter bit [23:16]
+ -- 0x900C Read: counter bit [31:24]
+ -- 0x9010 Read: counter bit [39:32]
+ -- 0x9014 Read: counter bit [47:40]
+ -- 0x9018 Read: counter bit [55:48]
+ -- 0x901C Read: counter bit [63:56]
+ --
+ -- 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz)
+
+ fauxUart:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ io_busy <= '0';
+ uartTXPending <= '0';
+ timer_we <= '0';
+ io_busy <= '1';
+ uartData <= x"58"; -- 'X'
+ readingTimer <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ timer_we <= '0';
+ io_busy <= '1';
+ if uartTXCleared = '1' then
+ uartTXPending <= '0';
+ end if;
+
+ if io_writeEnable = '1' then
+ if io_addr=x"1000" then
+ -- Write to UART
+ uartData <= io_write;
+ uartTXPending <= '1';
+ io_busy <= '0';
+ elsif io_addr(12)='1' then
+ timer_we <= '1';
+ io_busy <= '0';
+ else
+ report "Illegal IO write" severity failure;
+ end if;
+ end if;
+ if (io_readEnable = '1') then
+ if io_addr=x"1001" then
+ io_read <= (0=>'1', -- recieve empty
+ 1 => uartTXPending, -- tx full
+ others => '0');
+ io_busy <= '0';
+ elsif io_addr(12)='1' then
+ readingTimer <= '1';
+ io_busy <= '1';
+ elsif io_addr(11)='1' then
+ io_read <= ZPU_Frequency;
+ io_busy <= '0';
+ else
+ report "Illegal IO read" severity failure;
+ end if;
+
+ else
+ if (readingTimer = '1') then
+ readingTimer <= '0';
+ io_read <= timer_read;
+ io_busy <= '0';
+ else
+ io_read <= (others => '1');
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ forwardUARTOutputToARM:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ uartTXCleared <= '0';
+ elsif (cpu_clk = '1' and cpu_clk'event) then
+ if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then
+ uartTXCleared <= cpu_din(0);
+ else
+ uartTXCleared <= uartTXCleared;
+ end if;
+ end if;
+ end process;
+
+ cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z');
+ cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z');
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu3/src/zpupkg.vhd b/zpu/hdl/zpu3/src/zpupkg.vhd
new file mode 100644
index 0000000..a904b11
--- /dev/null
+++ b/zpu/hdl/zpu3/src/zpupkg.vhd
@@ -0,0 +1,130 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_ARITH.all;
+
+library zylin;
+use zylin.zpu_config.all;
+
+package zpupkg is
+
+ component dualport_ram is
+ port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+ end component;
+
+
+ component trace is
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBit downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic
+ );
+ end component;
+
+ component zpu_top is
+ Port ( clk : in std_logic;
+ areset : in std_logic;
+ io_busy : in std_logic;
+ io_read : in std_logic_vector(7 downto 0);
+ io_write : out std_logic_vector(7 downto 0);
+ io_addr : out std_logic_vector(maxAddrBit downto minAddrBit);
+ io_writeEnable : out std_logic;
+ io_readEnable : out std_logic;
+ interrupt : in std_logic;
+ break : out std_logic);
+ end component;
+
+
+ component timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ we : in std_logic;
+ din : in std_logic_vector(7 downto 0);
+ adr : in std_logic_vector(2 downto 0);
+ dout : out std_logic_vector(7 downto 0));
+ end component;
+
+
+ component zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+ end component;
+
+
+ -- opcode decode constants
+ constant OpCode_Im : std_logic_vector(7 downto 7) := "1";
+ constant OpCode_StoreSP : std_logic_vector(7 downto 5) := "010";
+ constant OpCode_LoadSP : std_logic_vector(7 downto 5) := "011";
+ constant OpCode_Emulate : std_logic_vector(7 downto 5) := "001";
+ constant OpCode_AddSP : std_logic_vector(7 downto 4) := "0001";
+ constant OpCode_Short : std_logic_vector(7 downto 4) := "0000";
+
+ constant OpCode_Break : std_logic_vector(3 downto 0) := "0000";
+ constant OpCode_Shiftleft: std_logic_vector(3 downto 0) := "0001";
+ constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010";
+ constant OpCode_PushInt : std_logic_vector(3 downto 0) := "0011";
+
+ constant OpCode_PopPC : std_logic_vector(3 downto 0) := "0100";
+ constant OpCode_Add : std_logic_vector(3 downto 0) := "0101";
+ constant OpCode_And : std_logic_vector(3 downto 0) := "0110";
+ constant OpCode_Or : std_logic_vector(3 downto 0) := "0111";
+
+ constant OpCode_Load : std_logic_vector(3 downto 0) := "1000";
+ constant OpCode_Not : std_logic_vector(3 downto 0) := "1001";
+ constant OpCode_Flip : std_logic_vector(3 downto 0) := "1010";
+ constant OpCode_Nop : std_logic_vector(3 downto 0) := "1011";
+
+ constant OpCode_Store : std_logic_vector(3 downto 0) := "1100";
+ constant OpCode_PopSP : std_logic_vector(3 downto 0) := "1101";
+ constant OpCode_Compare : std_logic_vector(3 downto 0) := "1110";
+ constant OpCode_PopInt : std_logic_vector(3 downto 0) := "1111";
+
+ constant OpCode_Lessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(36, 6);
+ constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(37, 6);
+ constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(38, 6);
+ constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(39, 6);
+
+ constant OpCode_Swap : std_logic_vector(5 downto 0) := conv_std_logic_vector(40, 6);
+
+ constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(42, 6);
+ constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := conv_std_logic_vector(43, 6);
+ constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(44, 6);
+
+ constant OpCode_Eq : std_logic_vector(5 downto 0) := conv_std_logic_vector(46, 6);
+ constant OpCode_Neq : std_logic_vector(5 downto 0) := conv_std_logic_vector(47, 6);
+
+ constant OpCode_Sub : std_logic_vector(5 downto 0) := conv_std_logic_vector(49, 6);
+ constant OpCode_Loadb : std_logic_vector(5 downto 0) := conv_std_logic_vector(51, 6);
+ constant OpCode_Storeb : std_logic_vector(5 downto 0) := conv_std_logic_vector(52, 6);
+
+ constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(55, 6);
+ constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(56, 6);
+
+ constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := conv_std_logic_vector(61, 6);
+ constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := conv_std_logic_vector(62, 6);
+ constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(63, 6);
+
+
+
+ constant OpCode_Size : integer := 8;
+
+end zpupkg;
OpenPOWER on IntegriCloud