----------------------------------------------------------------------------------
-- Company:
-- Engineer: Mr.DDDAlKilanny
--
-- Create Date: 16:29:19 03/22/2013
-- Design Name:
-- Module Name: RegisterFile - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.mine.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity RegisterFile is
port (
-- selector of mux1
read_sel1 : in std_logic_vector(4 downto 0);
-- selector of mux2
read_sel2 : in std_logic_vector(4 downto 0);
-- selector for destination register to write into
write_sel : in std_logic_vector(4 downto 0);
-- the write-enable for registers
write_ena : in std_logic;
-- the clock
clk: in std_logic;
-- the write data for destination register
write_data: in std_logic_vector(31 downto 0);
-- the output of mux1
data1: out std_logic_vector(31 downto 0);
-- the output of mux2
data2: out std_logic_vector(31 downto 0)
);
end RegisterFile;
architecture Behavioral of RegisterFile is
signal decout,
reg1out, reg2out, reg3out, reg4out, reg5out,
reg6out, reg7out, reg8out, reg9out, reg10out, reg11out,
reg12out, reg13out, reg14out, reg15out, reg16out, reg17out,
reg18out, reg19out, reg20out, reg21out, reg22out, reg23out,
reg24out, reg25out, reg26out, reg27out, reg28out, reg29out,
reg30out, reg31out, reg32out : std_logic_vector (31 downto 0);
signal canwrite1, canwrite2, canwrite3, canwrite4, canwrite5,
canwrite6, canwrite7, canwrite8, canwrite9, canwrite10,
canwrite11, canwrite12, canwrite13, canwrite14, canwrite15,
canwrite16, canwrite17, canwrite18, canwrite19, canwrite20,
canwrite21, canwrite22, canwrite23, canwrite24, canwrite25,
canwrite26, canwrite27, canwrite28, canwrite29, canwrite30,
canwrite31, canwrite32 : std_logic;
begin
-- selects which register to write into
-- in, enable, out
D : dec port map (write_sel, '1', decout);
-- in_data, out_data, clk, write_ena, inc, clr
R1 : reg port map (write_data, reg1out, clk, canwrite1, '0', '0');
R2 : reg port map (write_data, reg2out, clk, canwrite2, '0', '0');
R3 : reg port map (write_data, reg3out, clk, canwrite3, '0', '0');
R4 : reg port map (write_data, reg4out, clk, canwrite4, '0', '0');
R5 : reg port map (write_data, reg5out, clk, canwrite5, '0', '0');
R6 : reg port map (write_data, reg6out, clk, canwrite6, '0', '0');
R7 : reg port map (write_data, reg7out, clk, canwrite7, '0', '0');
R8 : reg port map (write_data, reg8out, clk, canwrite8, '0', '0');
R9 : reg port map (write_data, reg9out, clk, canwrite9, '0', '0');
R10 : reg port map (write_data, reg10out, clk, canwrite10, '0', '0');
R11 : reg port map (write_data, reg11out, clk, canwrite11, '0', '0');
R12 : reg port map (write_data, reg12out, clk, canwrite12, '0', '0');
R13 : reg port map (write_data, reg13out, clk, canwrite13, '0', '0');
R14 : reg port map (write_data, reg14out, clk, canwrite14, '0', '0');
R15 : reg port map (write_data, reg15out, clk, canwrite15, '0', '0');
R16 : reg port map (write_data, reg16out, clk, canwrite16, '0', '0');
R17 : reg port map (write_data, reg17out, clk, canwrite17, '0', '0');
R18 : reg port map (write_data, reg18out, clk, canwrite18, '0', '0');
R19 : reg port map (write_data, reg19out, clk, canwrite19, '0', '0');
R20 : reg port map (write_data, reg20out, clk, canwrite20, '0', '0');
R21 : reg port map (write_data, reg21out, clk, canwrite21, '0', '0');
R22 : reg port map (write_data, reg22out, clk, canwrite22, '0', '0');
R23 : reg port map (write_data, reg23out, clk, canwrite23, '0', '0');
R24 : reg port map (write_data, reg24out, clk, canwrite24, '0', '0');
R25 : reg port map (write_data, reg25out, clk, canwrite25, '0', '0');
R26 : reg port map (write_data, reg26out, clk, canwrite26, '0', '0');
R27 : reg port map (write_data, reg27out, clk, canwrite27, '0', '0');
R28 : reg port map (write_data, reg28out, clk, canwrite28, '0', '0');
R29 : reg port map (write_data, reg29out, clk, canwrite29, '0', '0');
R30 : reg port map (write_data, reg30out, clk, canwrite30, '0', '0');
R31 : reg port map (write_data, reg31out, clk, canwrite31, '0', '0');
R32 : reg port map (write_data, reg32out, clk, canwrite32, '0', '0');
-- selects which register to read from
-- I0, I1, ..., I30, I31, selector, output, enable
M1 : mux port map (reg1out, reg2out, reg3out, reg4out, reg5out,
reg6out, reg7out, reg8out, reg9out, reg10out, reg11out,
reg12out, reg13out, reg14out, reg15out, reg16out, reg17out,
reg18out, reg19out, reg20out, reg21out, reg22out, reg23out,
reg24out, reg25out, reg26out, reg27out, reg28out, reg29out,
reg30out, reg31out, reg32out,
read_sel1, data1, '1');
M2 : mux port map (reg1out, reg2out, reg3out, reg4out, reg5out,
reg6out, reg7out, reg8out, reg9out, reg10out, reg11out,
reg12out, reg13out, reg14out, reg15out, reg16out, reg17out,
reg18out, reg19out, reg20out, reg21out, reg22out, reg23out,
reg24out, reg25out, reg26out, reg27out, reg28out, reg29out,
reg30out, reg31out, reg32out,
read_sel2, data2, '1');
process (clk)
begin
if (clk'event and clk = '0') then
canwrite1 <= write_ena and decout(0);
canwrite2 <= write_ena and decout(1);
canwrite3 <= write_ena and decout(2);
canwrite4 <= write_ena and decout(3);
canwrite5 <= write_ena and decout(4);
canwrite6 <= write_ena and decout(5);
canwrite7 <= write_ena and decout(6);
canwrite8 <= write_ena and decout(7);
canwrite9 <= write_ena and decout(8);
canwrite10 <= write_ena and decout(9);
canwrite11 <= write_ena and decout(10);
canwrite12 <= write_ena and decout(11);
canwrite13 <= write_ena and decout(12);
canwrite14 <= write_ena and decout(13);
canwrite15 <= write_ena and decout(14);
canwrite16 <= write_ena and decout(15);
canwrite17 <= write_ena and decout(16);
canwrite18 <= write_ena and decout(17);
canwrite19 <= write_ena and decout(18);
canwrite20 <= write_ena and decout(19);
canwrite21 <= write_ena and decout(20);
canwrite22 <= write_ena and decout(21);
canwrite23 <= write_ena and decout(22);
canwrite24 <= write_ena and decout(23);
canwrite25 <= write_ena and decout(24);
canwrite26 <= write_ena and decout(25);
canwrite27 <= write_ena and decout(26);
canwrite28 <= write_ena and decout(27);
canwrite29 <= write_ena and decout(28);
canwrite30 <= write_ena and decout(29);
canwrite31 <= write_ena and decout(30);
canwrite32 <= write_ena and decout(31);
end if;
end process;
end Behavioral;
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBDb21wYW55OiAKLS0gRW5naW5lZXI6ICAgICAJTXIuREREQWxLaWxhbm55Ci0tIAotLSBDcmVhdGUgRGF0ZTogICAgMTY6Mjk6MTkgMDMvMjIvMjAxMyAKLS0gRGVzaWduIE5hbWU6IAotLSBNb2R1bGUgTmFtZTogICAgUmVnaXN0ZXJGaWxlIC0gQmVoYXZpb3JhbCAKLS0gUHJvamVjdCBOYW1lOiAKLS0gVGFyZ2V0IERldmljZXM6IAotLSBUb29sIHZlcnNpb25zOiAKLS0gRGVzY3JpcHRpb246IAotLQotLSBEZXBlbmRlbmNpZXM6IAotLQotLSBSZXZpc2lvbjogCi0tIFJldmlzaW9uIDAuMDEgLSBGaWxlIENyZWF0ZWQKLS0gQWRkaXRpb25hbCBDb21tZW50czogCi0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbGlicmFyeSBJRUVFOwp1c2UgSUVFRS5TVERfTE9HSUNfMTE2NC5BTEw7CnVzZSB3b3JrLm1pbmUuYWxsOwoKLS0gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGlicmFyeSBkZWNsYXJhdGlvbiBpZiB1c2luZwotLSBhcml0aG1ldGljIGZ1bmN0aW9ucyB3aXRoIFNpZ25lZCBvciBVbnNpZ25lZCB2YWx1ZXMKLS11c2UgSUVFRS5OVU1FUklDX1NURC5BTEw7CgotLSBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaWJyYXJ5IGRlY2xhcmF0aW9uIGlmIGluc3RhbnRpYXRpbmcKLS0gYW55IFhpbGlueCBwcmltaXRpdmVzIGluIHRoaXMgY29kZS4KLS1saWJyYXJ5IFVOSVNJTTsKLS11c2UgVU5JU0lNLlZDb21wb25lbnRzLmFsbDsKCmVudGl0eSBSZWdpc3RlckZpbGUgaXMKCXBvcnQgKAoJCS0tIHNlbGVjdG9yIG9mIG11eDEKCQlyZWFkX3NlbDEgOiBpbiBzdGRfbG9naWNfdmVjdG9yKDQgZG93bnRvIDApOwoJCS0tIHNlbGVjdG9yIG9mIG11eDIKCQlyZWFkX3NlbDIgOiBpbiBzdGRfbG9naWNfdmVjdG9yKDQgZG93bnRvIDApOwoJCS0tIHNlbGVjdG9yIGZvciBkZXN0aW5hdGlvbiByZWdpc3RlciB0byB3cml0ZSBpbnRvCgkJd3JpdGVfc2VsIDogaW4gc3RkX2xvZ2ljX3ZlY3Rvcig0IGRvd250byAwKTsKCQktLSB0aGUgd3JpdGUtZW5hYmxlIGZvciByZWdpc3RlcnMKCQl3cml0ZV9lbmEgOiBpbiBzdGRfbG9naWM7CgkJLS0gdGhlIGNsb2NrCgkJY2xrOiBpbiBzdGRfbG9naWM7CgkJLS0gdGhlIHdyaXRlIGRhdGEgZm9yIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCgkJd3JpdGVfZGF0YTogaW4gc3RkX2xvZ2ljX3ZlY3RvcigzMSBkb3dudG8gMCk7CgkJLS0gdGhlIG91dHB1dCBvZiBtdXgxCgkJZGF0YTE6IG91dCBzdGRfbG9naWNfdmVjdG9yKDMxIGRvd250byAwKTsKCQktLSB0aGUgb3V0cHV0IG9mIG11eDIKCQlkYXRhMjogb3V0IHN0ZF9sb2dpY192ZWN0b3IoMzEgZG93bnRvIDApCgkpOwplbmQgUmVnaXN0ZXJGaWxlOwoKYXJjaGl0ZWN0dXJlIEJlaGF2aW9yYWwgb2YgUmVnaXN0ZXJGaWxlIGlzCglzaWduYWwgZGVjb3V0LAoJCQlyZWcxb3V0LCByZWcyb3V0LCByZWczb3V0LCByZWc0b3V0LCByZWc1b3V0LAoJCQlyZWc2b3V0LCByZWc3b3V0LCByZWc4b3V0LCByZWc5b3V0LCByZWcxMG91dCwgcmVnMTFvdXQsCgkJCXJlZzEyb3V0LCByZWcxM291dCwgcmVnMTRvdXQsIHJlZzE1b3V0LCByZWcxNm91dCwgcmVnMTdvdXQsCgkJCXJlZzE4b3V0LCByZWcxOW91dCwgcmVnMjBvdXQsIHJlZzIxb3V0LCByZWcyMm91dCwgcmVnMjNvdXQsCgkJCXJlZzI0b3V0LCByZWcyNW91dCwgcmVnMjZvdXQsIHJlZzI3b3V0LCByZWcyOG91dCwgcmVnMjlvdXQsCgkJCXJlZzMwb3V0LCByZWczMW91dCwgcmVnMzJvdXQgOiBzdGRfbG9naWNfdmVjdG9yICgzMSBkb3dudG8gMCk7CglzaWduYWwgY2Fud3JpdGUxLCBjYW53cml0ZTIsIGNhbndyaXRlMywgY2Fud3JpdGU0LCBjYW53cml0ZTUsCgkJCWNhbndyaXRlNiwgY2Fud3JpdGU3LCBjYW53cml0ZTgsIGNhbndyaXRlOSwgY2Fud3JpdGUxMCwKCQkJY2Fud3JpdGUxMSwgY2Fud3JpdGUxMiwgY2Fud3JpdGUxMywgY2Fud3JpdGUxNCwgY2Fud3JpdGUxNSwKCQkJY2Fud3JpdGUxNiwgY2Fud3JpdGUxNywgY2Fud3JpdGUxOCwgY2Fud3JpdGUxOSwgY2Fud3JpdGUyMCwKCQkJY2Fud3JpdGUyMSwgY2Fud3JpdGUyMiwgY2Fud3JpdGUyMywgY2Fud3JpdGUyNCwgY2Fud3JpdGUyNSwKCQkJY2Fud3JpdGUyNiwgY2Fud3JpdGUyNywgY2Fud3JpdGUyOCwgY2Fud3JpdGUyOSwgY2Fud3JpdGUzMCwKCQkJY2Fud3JpdGUzMSwgY2Fud3JpdGUzMiA6IHN0ZF9sb2dpYzsKYmVnaW4KCS0tIHNlbGVjdHMgd2hpY2ggcmVnaXN0ZXIgdG8gd3JpdGUgaW50bwoJCS0tIGluLCBlbmFibGUsIG91dAoJRCA6IGRlYyBwb3J0IG1hcCAod3JpdGVfc2VsLCAnMScsIGRlY291dCk7CgkJCQoJCS0tIGluX2RhdGEsIG91dF9kYXRhLCBjbGssIHdyaXRlX2VuYSwgaW5jLCBjbHIKCVIxIDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcxb3V0LCBjbGssIGNhbndyaXRlMSwgJzAnLCAnMCcpOwoJUjIgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzJvdXQsIGNsaywgY2Fud3JpdGUyLCAnMCcsICcwJyk7CglSMyA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnM291dCwgY2xrLCBjYW53cml0ZTMsICcwJywgJzAnKTsKCVI0IDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWc0b3V0LCBjbGssIGNhbndyaXRlNCwgJzAnLCAnMCcpOwoJUjUgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzVvdXQsIGNsaywgY2Fud3JpdGU1LCAnMCcsICcwJyk7CglSNiA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnNm91dCwgY2xrLCBjYW53cml0ZTYsICcwJywgJzAnKTsKCVI3IDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWc3b3V0LCBjbGssIGNhbndyaXRlNywgJzAnLCAnMCcpOwoJUjggOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzhvdXQsIGNsaywgY2Fud3JpdGU4LCAnMCcsICcwJyk7CglSOSA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnOW91dCwgY2xrLCBjYW53cml0ZTksICcwJywgJzAnKTsKCVIxMCA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMTBvdXQsIGNsaywgY2Fud3JpdGUxMCwgJzAnLCAnMCcpOwoJUjExIDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcxMW91dCwgY2xrLCBjYW53cml0ZTExLCAnMCcsICcwJyk7CglSMTIgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzEyb3V0LCBjbGssIGNhbndyaXRlMTIsICcwJywgJzAnKTsKCVIxMyA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMTNvdXQsIGNsaywgY2Fud3JpdGUxMywgJzAnLCAnMCcpOwoJUjE0IDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcxNG91dCwgY2xrLCBjYW53cml0ZTE0LCAnMCcsICcwJyk7CglSMTUgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzE1b3V0LCBjbGssIGNhbndyaXRlMTUsICcwJywgJzAnKTsKCVIxNiA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMTZvdXQsIGNsaywgY2Fud3JpdGUxNiwgJzAnLCAnMCcpOwoJUjE3IDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcxN291dCwgY2xrLCBjYW53cml0ZTE3LCAnMCcsICcwJyk7CglSMTggOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzE4b3V0LCBjbGssIGNhbndyaXRlMTgsICcwJywgJzAnKTsKCVIxOSA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMTlvdXQsIGNsaywgY2Fud3JpdGUxOSwgJzAnLCAnMCcpOwoJUjIwIDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcyMG91dCwgY2xrLCBjYW53cml0ZTIwLCAnMCcsICcwJyk7CglSMjEgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzIxb3V0LCBjbGssIGNhbndyaXRlMjEsICcwJywgJzAnKTsKCVIyMiA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMjJvdXQsIGNsaywgY2Fud3JpdGUyMiwgJzAnLCAnMCcpOwoJUjIzIDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcyM291dCwgY2xrLCBjYW53cml0ZTIzLCAnMCcsICcwJyk7CglSMjQgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzI0b3V0LCBjbGssIGNhbndyaXRlMjQsICcwJywgJzAnKTsKCVIyNSA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMjVvdXQsIGNsaywgY2Fud3JpdGUyNSwgJzAnLCAnMCcpOwoJUjI2IDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcyNm91dCwgY2xrLCBjYW53cml0ZTI2LCAnMCcsICcwJyk7CglSMjcgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzI3b3V0LCBjbGssIGNhbndyaXRlMjcsICcwJywgJzAnKTsKCVIyOCA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMjhvdXQsIGNsaywgY2Fud3JpdGUyOCwgJzAnLCAnMCcpOwoJUjI5IDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWcyOW91dCwgY2xrLCBjYW53cml0ZTI5LCAnMCcsICcwJyk7CglSMzAgOiByZWcgcG9ydCBtYXAgKHdyaXRlX2RhdGEsIHJlZzMwb3V0LCBjbGssIGNhbndyaXRlMzAsICcwJywgJzAnKTsKCVIzMSA6IHJlZyBwb3J0IG1hcCAod3JpdGVfZGF0YSwgcmVnMzFvdXQsIGNsaywgY2Fud3JpdGUzMSwgJzAnLCAnMCcpOwoJUjMyIDogcmVnIHBvcnQgbWFwICh3cml0ZV9kYXRhLCByZWczMm91dCwgY2xrLCBjYW53cml0ZTMyLCAnMCcsICcwJyk7CgoJLS0gc2VsZWN0cyB3aGljaCByZWdpc3RlciB0byByZWFkIGZyb20JCgktLSAJCUkwLCBJMSwgLi4uLCBJMzAsIEkzMSwgc2VsZWN0b3IsIG91dHB1dCwgZW5hYmxlCglNMSA6IG11eCBwb3J0IG1hcCAocmVnMW91dCwgcmVnMm91dCwgcmVnM291dCwgcmVnNG91dCwgcmVnNW91dCwKCQkJcmVnNm91dCwgcmVnN291dCwgcmVnOG91dCwgcmVnOW91dCwgcmVnMTBvdXQsIHJlZzExb3V0LAoJCQlyZWcxMm91dCwgcmVnMTNvdXQsIHJlZzE0b3V0LCByZWcxNW91dCwgcmVnMTZvdXQsIHJlZzE3b3V0LAoJCQlyZWcxOG91dCwgcmVnMTlvdXQsIHJlZzIwb3V0LCByZWcyMW91dCwgcmVnMjJvdXQsIHJlZzIzb3V0LAoJCQlyZWcyNG91dCwgcmVnMjVvdXQsIHJlZzI2b3V0LCByZWcyN291dCwgcmVnMjhvdXQsIHJlZzI5b3V0LAoJCQlyZWczMG91dCwgcmVnMzFvdXQsIHJlZzMyb3V0LAoJCQlyZWFkX3NlbDEsIGRhdGExLCAnMScpOwoJTTIgOiBtdXggcG9ydCBtYXAgKHJlZzFvdXQsIHJlZzJvdXQsIHJlZzNvdXQsIHJlZzRvdXQsIHJlZzVvdXQsCgkJCXJlZzZvdXQsIHJlZzdvdXQsIHJlZzhvdXQsIHJlZzlvdXQsIHJlZzEwb3V0LCByZWcxMW91dCwKCQkJcmVnMTJvdXQsIHJlZzEzb3V0LCByZWcxNG91dCwgcmVnMTVvdXQsIHJlZzE2b3V0LCByZWcxN291dCwKCQkJcmVnMThvdXQsIHJlZzE5b3V0LCByZWcyMG91dCwgcmVnMjFvdXQsIHJlZzIyb3V0LCByZWcyM291dCwKCQkJcmVnMjRvdXQsIHJlZzI1b3V0LCByZWcyNm91dCwgcmVnMjdvdXQsIHJlZzI4b3V0LCByZWcyOW91dCwKCQkJcmVnMzBvdXQsIHJlZzMxb3V0LCByZWczMm91dCwKCQkJcmVhZF9zZWwyLCBkYXRhMiwgJzEnKTsKCQoJcHJvY2VzcyAoY2xrKQoJYmVnaW4KCQlpZiAoY2xrJ2V2ZW50IGFuZCBjbGsgPSAnMCcpIHRoZW4KCQkJY2Fud3JpdGUxIDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDApOwoJCQljYW53cml0ZTIgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMSk7CgkJCWNhbndyaXRlMyA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgyKTsKCQkJY2Fud3JpdGU0IDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDMpOwoJCQljYW53cml0ZTUgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoNCk7CgkJCWNhbndyaXRlNiA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCg1KTsKCQkJY2Fud3JpdGU3IDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDYpOwoJCQljYW53cml0ZTggPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoNyk7CgkJCWNhbndyaXRlOSA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCg4KTsKCQkJY2Fud3JpdGUxMCA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCg5KTsKCQkJY2Fud3JpdGUxMSA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgxMCk7CgkJCWNhbndyaXRlMTIgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMTEpOwoJCQljYW53cml0ZTEzIDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDEyKTsKCQkJY2Fud3JpdGUxNCA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgxMyk7CgkJCWNhbndyaXRlMTUgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMTQpOwoJCQljYW53cml0ZTE2IDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDE1KTsKCQkJY2Fud3JpdGUxNyA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgxNik7CgkJCWNhbndyaXRlMTggPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMTcpOwoJCQljYW53cml0ZTE5IDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDE4KTsKCQkJY2Fud3JpdGUyMCA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgxOSk7CgkJCWNhbndyaXRlMjEgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMjApOwoJCQljYW53cml0ZTIyIDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDIxKTsKCQkJY2Fud3JpdGUyMyA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgyMik7CgkJCWNhbndyaXRlMjQgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMjMpOwoJCQljYW53cml0ZTI1IDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDI0KTsKCQkJY2Fud3JpdGUyNiA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgyNSk7CgkJCWNhbndyaXRlMjcgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMjYpOwoJCQljYW53cml0ZTI4IDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDI3KTsKCQkJY2Fud3JpdGUyOSA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgyOCk7CgkJCWNhbndyaXRlMzAgPD0gd3JpdGVfZW5hIGFuZCBkZWNvdXQoMjkpOwoJCQljYW53cml0ZTMxIDw9IHdyaXRlX2VuYSBhbmQgZGVjb3V0KDMwKTsKCQkJY2Fud3JpdGUzMiA8PSB3cml0ZV9lbmEgYW5kIGRlY291dCgzMSk7CgkJZW5kIGlmOwoJZW5kIHByb2Nlc3M7CgplbmQgQmVoYXZpb3JhbDsKCg==