1001011101100110001010011011101001101100111111100110010101010010000100100000001001000011000101001110111011011111001000011110101001001111010101000011000110101110000110000111101000110111000011111111110000011010011100001001000100001011110100010011100011111111100000111011000101100101010001001010011000110100001000010111011000010000111100000011010011110001110010101100100101110100001101010001100010011010 1110101100010000101111010010000111010001111000001010001100010111100000010010101100110001001100101100110011101001000000111010100110010111011011011010111001110010001000001111111101101011100111001000000110111111000111101000010001011011001001111000111000111010110011010111001110001001000010101110100110011110111011001100111010011100000010111011000101010011000000110101101101010000011110101010001100101101 0101010000110110111011000111011100100111001110110000101011110110111000001110010011100010111001000111100100101011000000001000110111000011001010000000110101101110111010000111111000111010010111000011000100101000101001110011010011011101111010010111101110011100010001110100001100001011101011100011011011000000000000110000000010100100011000111000001110000010001100001100000011110000110100100110101110011000 0110111111010011100100101111100101101000110100010101101111110111001110110000110100110010111000101000010010001100011101011010100111001111110111110010011001110111011101001000011111111101000001100101010000111001011001101111111010010110111001010000010111000101001011001011110000011000100101101111100010100011110100011100010001011111000110100101010000101111100010101001111001111001001000011111100100000000 1101101101111111001110101100001110001100000100110110011011101111110101101100110010110101100100110110001011101101111101000111100011010000111111110001011110111001011011101011101000111001011110111000101110000100010111100001011000100011110101101111111010011111100011110101000100110110000011110101110010100110010000000100100011011010000111001100111001000001110011010010111011110111101001011101101011010111 1110000110100101001010010000001011011101011010001011011000110011011011010110100001111011110100101110000110010101010110000101100100100100011110101101011010001000011111000110111010100000010110011011101111110000000100001110111011110000101011010000100110000010001001011010010001001110111101001110000011111101101100000001101001001001011001101001001100110110010101111010010111101100010000001100010111010001 1110010110110001001001100100010000010111110101000011001000010100000110101101101111101011110000110100111001001100110000101101001001110001100110101101111111110001110000010101101001000010011000110110110001011111111111010001110111100101111111101101110000100110001010011110010111101000110111000010011011100110100001110101010101011111100011111010101001100101000001111010111101100011001110101111100000001101 1001010000000010010000011101001110000100111100000110011001100010011001000111000110001110100101001010100111011011111111111011100001000111100101111110000101110110011111001011001011010010001110011010111111101110110001110001000001010110001110010001000010000110100010001111011000000001010001110100010110101100100010000101000110111001101111101000100000010100101001101011101111110110101001111000011011100000 0001011111001001100011101110110000100110100101100111010001000111111100010001010001010111111010000111100011000010111010000100010000001111000010100001111011111000111010110011100010111111110101010000000001100000000101100011101011110000010110110110000110111010011110110110111010100011101100100001010000110111101011101100100001111101001110011011001001101001010111001001010101000111011110010000010101101001 0000111101100011100110111011001011110110110110001100011110100001110100001110100010110110001011110101011101100110000100100011110110001110111111010010110110000110011011000011011110010110010100000101110100010110001110001111101100011011010000010110011010100010001011001101100011100000000010011010001010101000010100110110100100011001110110101100011100000100101100010100011010000010110001101000100000001001 0111000001000011010011110000001000001110010111000000000001001000100000100011010111010100011110101000101110010101110010100110001111010001000100011000100011000110101000011111001001111101100110100010001010011010010100111111010110110111110010010011010010000100010010011000110100010011100001010101000100000111011000000010100110001010111101001101000111111100100110001101011011010001100101000001010110010000 0000101101010001011010110101010110011100100100100010001010110000101000000000001010100110110111110110011110110000111001101101111111011110001000101101111101111111100001011111101010101110001010011010000101010001101101011010110011010100110001100111011100011011000100100010000111010100101000101110101010011101101100100011100011110001010101111101100110100010100011100010101100010110010000001010001011010010 0101111000111101000000100101101010010000101010101110000010110100011001100011101001000100101100010010011111001100011101111101101111110101001110010111000011011100011011111001111110010000010111111101111001101100000001010011100111101100111001010011010000001100001110001001110101001101010010000100100101110111011010001011000011101010001100110101011101001010010111000011011000000110110111111011000001101101 1011110111001111010000000111000110100010100111000011110000100011100000100000000010011011001000001000000100010011110101101101100110010011100111111011010111100111001110010100000001100000100001101101100010000100100101101010010000101111111110011100111010100100100001010100110011001011100011010010001110000000010110001010110101100000111101000101100111000011110011001000010001100001010001010010010101000011 0110011110101111101001110110101100000101000010000011100011001011100100010010111111001010010010111110010110101000011100000110001000110101010001000011001011101000100111101110100001000001110010010100001001011110000001100001100011010000101000001001000101101100100110101010000110101101011011101001100111001101010000110101111001001001010111111100000000111001100011010110111000110001100000010011111000111100 0000011111111101100011100001110000101010011111011101100001111111100010001101011010001111111010000010011110111101010111101111111111111100100000111101001101011011101000011110110011011111010000000111010101001111000101011110000011000111010011010101110010000011110000101011100000110011101010011001010111110100000000000111110111011010110100100111110100100001111011111000000011011011100100111011010111000101 0011111110000011111011000001010110101001101001010110011110110010100111110000000010101000101111010010001100101100010010110011011010101010010111101011000110101111000100110010000010100011101101000010111000110110101100100000100000010011010101001100001100010011111101000111010001001000100001100010000100110000001100110110111111110011111001111001000101000111000111011011110010010011111111011010001100100111 0000110011101010110111101000000001111000110111100010110101101001101001110111100010110011001010110000011111101110000000000010110100001011100101111111101001011001010001001100010110111100101101010100011000000101011010001000101101010111001010100001110111001011111011101101101011001001010110110011010010111011110100011000010111110011111001100110000111111101111100001101000100101101001111101100011000111010 0110001000101111010010111000011111010011000001010000010000111111100100110111011010110011010010100111110110010000011100010100100001100101011101011000010101011100110110010010001001011001001100011100011111100110011110011000001110011111011110000100110101001111100100100010101101001001100010011110001100000011000100010011011100001001111011101100010000010101111010011110101010110100101101011001011001100011 1110111111111110100110111000100111110010001101000011010110010110001001110100111000100001110001011001101101111011010010001001011011110010010001011000110011111111010100111110001101010100101110011010100100010100000011111001100100101000101110111111111010001100101011010000101000000000101001101111000000100101111110000010011110110011111100101111100110111011101100000110110010000110101101100010101111111011 1111111000101111101100111110001111000100001010100011011011100111001110101111000010101100001001100011011100110001010000010011100011111000110110001010101010001101100010100001000011101000000010011011100110100111110111000001010101011000010111101111011111111011110000110100110001010001111101001111100011100111001110110111101001001011010011010011100100110000001110101110010011101101011010000101001000110001 0011111110011101010110110111000001011011111010001001110011010100000111011011000101111011101101110101010101010111010110110100100011111000110111010001001111010110101010010011010011111000010010010001001110001000110111110010001001010111110011100011011000011011001100101101101010111011001100010110010001101111110111111011010001001001011111000101101010110110100100010100001000100101111011001000111110010100 1011001010100101101100100111010000011001111001110010101000100111111111000000110001011011100100001011001001101010111010111010001011001101100011110010100110100001001110010110110000010100011001111100100101110011010100111011011011110001111010000000011000111000000111100101001101101000111111111011110000010001011111001100100010100000001110110101011011010010000011001000100001101011010101000110100011011100 1111101111111011010010000000010010100100011110110001110010100010110100111010101100001001001011010010001110010011000000100110011101110001000010111100000000111101110000110110110100011101100011001111100100110100111110011000101111001100101010111100001100101110110010111101011100011111100001011000010101011110101000011111001100001111000000110100101010110010001011111110011110001110011100100101101110111011 1011110000111110111011000100011000110011000001001110101100000001110001101011100011000000000111110000001001100100000001100001001110010100000001001010011001101001001011100011111011001001110010011010101010001011101110000011110010010110101000000011110000110010101111001101101111001110010101100100110011101111011101101100111010001010110011101110110001100011000001010111111000001110111100000111011101000011 0010010001011001001111011010101000101111001000001111100111110100111100000110000011011111110100111011101001100110001010100111011001010010111110001100001010001110010111100001100111001001111101000110000011010011101001100010100101011011110100010000111101011010110111001110001100100011010011101010000001111001000001011011011100101010010011011110111001001110111100001001110100101111110100000110000000010111 1001110100010111110110100001010111011100000001010100010101100010111101001010001100001010100000001100000110001001010001001100011101001111010001111000110110001100100100100110101010011000100001011111011111111011001101100001100110111100101111111010001010110010000100001100111000011001110110111011001010111001111101011110110110111110100100001111101111001101010101110011011011001010110001110000101101001110 0011001100100111110111000011001101010001101011100100000101111001000000100110111011110011011000011100111000110011100010000010001011110110110110111101001010001011110011000010000110011111010100000101011001001011000100001101101001101000001100000010010001110001001110010111000101110010101100111000011101000010110001000000010101010010100000011011000001000101110111110001110101000011110010010010001000110001 1010000111110000010000111100110010101110101111100010101110010100101101101111110110100101010101101010000110011001101000011101110101110010011011110110110000100100001010110000100011000001001011010111110010010011011100101010101010011110010011101100011001100100001111110100111100100010111111100100100100011011110100001001101000011001111101001111001011111101100000111110111001011010010010010010001001110010 1110110110010010011101100101110110110101000000100011000111111000001111010010000011101010101111001011101011110010011010010101001001000011011010010110010000001111000111100101100100110101001100011011101110101011011100010101110000011000111011111110101011011000011100011010101100111001111011010001100111111110111001000010011110110010010111001001101001000000010001011111011111111000100011111111100001100000 1101110001111000001001010010010010110001110111010010011011101101100011101100100011101001010111101111101001010100101001110111100011001011001100011101101000000000111101000111101011111000000100110011101101010010110111101011111101000110111010111000000011010000110010101000011101000001101000101101110001100001001100000100010111001000110001001111100000110010011101000001010110111010101010010101010001000111 0111110001101110110010101000011001101100100001101111111110000110000010101010101011110010010010001010001101110111101111010110011110110100100110110110111101000011010111001101001100110111010111010101110110100001011110001100011100110001101111100011001010000110011111101111111011110000101101010110001000010101001100011110000010011011001000011000110100101000000101001100111010001111100001000011101001000001 1010111100110010110011000011001111011110111111000001110000011011011100110001101010000101111100010101001011001101010111100000100000010001111100010010101111011100001000001011100000101100110110111110100010011101110101111001001011110000000010011001100100111100010110000000100011111111011100010000000001001000000100110011010101101010101011010110011111010001001101000001101000111010010100101100101110101110 1111101011010110110011110101101111101110111000111000101000010100000100110111111010010111010011110101100011111000110000110001110101111101001011001000011011101001010010101101111100100011100100011100110101001000110111011111010010110000000100000111110010110111000000101000100010001101100101010001000011100010000000100110100100001101010100010010010011000100001010011010001011000111010011100010100000000101 1011110101011010010001101011011000001111001111101001101110011111100000001001111001101101101001101110110000101110101100000100101011011100011000111101001111110111101110000010100000011100100010110111001001011100001011111000011100001011010111011111010010111001000001111110010111100100011101000110111011101100000001111100101001100000010100000000111001100001101000101110110010001101010000010010001001000010 0101111011100000001100000100000000110000011111111000100111000111011110110100010111011001111001111110010011100111111001101101100011001100100000111001000000111011100101111100000001011101101011000010101000000101110101110001100111000100000111110101001010001111101101110001101000101010011111011100000110010111101101000000011000110101010000000001011100010100000101011011111010010110010111011100000001111110 0100110011111100101010110000010000010111101101101110101100011001010010111111100100011100110110101111011100110111110010110101111010001000101010100000011101101011010100100111101001101100011101010110001111111001100001101010110110100000011110100001110100011111101101001100010100010000111000111000111001110001001100110110010001101010110000100011101000000111110100000111011111111111110011001101001101110110 1101110101000001010101010000000011001101101000110100100100111100011010001100000010001010000101111100110110101010010010011011110001110000001111101000111100110111011110001000111100101110011111010000011100100000000011101011000101100110011110001111110001001100100000101100001101010010101101111100011001101011001110111000101011010010111100011100100100001001001100010001011110010100011010100100101001100101 0100111101001101011000011000001001100100100111001110110100011111110011101010000011000100111010000000011000100011010000001001010001000100001011001110010000101110010011111000011010010011110101100000111010101010010111000100110100101001100100011000001111100011101011010011000111111100000000111011100001110010100001010000000100110001001100110010010001111100100100100100010100001011000100000010111101101010 1010100100111000111001111000111100010100011000101010001011110001100101101110110111111010000100011000010011110000010100001010010110010101011100101001000000110100011010111000100010000111001110100101011001100001010111001011010001111111100000111111100001111101000100110100001110101011111100001110101010110110110011101011010111110011111111011101011011110010001110010101110000011101000010101011101010000010 0101011100010000010010101111011010111101000001000101100111110011110011101011111001111011010111101111010100111110101001011100001011101100110111101001010110111010010110011100000001111100111000001010100111101011111010110001100011010011101101100110011010011011101101001110111000110110111010100011111110110001011101101001110000101001010010100100001100010110100101010000010001011001110110111110000001000110 1101111001001001001110110000100011111011100001100010001001010011100101011001001010100011011000111001000101110111001011001101111111101101000011001000010110000000111110011001111011110101011000011100000010000001111000110011110000101100101010000010110001101001111101101100010111001110010100101011000100111100101101000100011100011110100110010111100110001011100111011111111111100000000101010101010111011010 0100111110111100100111100101111011000001000110000010010111011011010111010011111111001111001111001111010001001100011010111010010001011111010101000010101010010111111001110111010011000111010111111110001100110101001000010001001101101101001000110011101101100001010101000001010001001111001001010101001011010101111001110101001101011100111100011110100000100010011111110110011110110111001100101101001000101100 1000100001001000100110101010010010111100011110000000011010111011100101101010100011001011001001100001100100000110101000100000100010010000110010011100110011101000100111011011011111111011000010000100111100001100000011010010111111011001111111110000110111011100100000011101010111101010101000000001010100011010110101010110111110000000000101010110010000010111100111101100101111010000011011111111111101110011 0100101110111000001000010101100000001010101111011001001101110100000100101110011011011011010001011001111001010001001000100111100110101001000100101010010011000101100110001010100101011001011001100101110010100101001110100110100000001111101110011100001000111100011110010100001110011010111110100110010011101000001111100001100100000111010111111010111001000000101111110010111001001001000011000111101010010110 0000111011111000000110101111001110001101110000111001100001101111010001001001111101101010101101001001100010001011000111000110100111111110101001001001010010000101110000110001011001001011010101000000000111100100000010000001010000101001011010011111000001101011010011011110011110111001111110000110001100101111100011010001111100001101100001010010101010011010110100100100011100110111000100000011110010110001 1001111100101001011100101110011111101011010000111110000011011101010101100101101011110010010011010110000000001110010000110101011001001101011100101000100001010111000100100100010101111110110000101010000010001011000100101001001010000111111001001010110100101011100101110011001101111011111011100110111011100011010100000110100001001001111111100110101110111100000101101110111100101101111011010000011001010101 1011111000100011010110100011001011011001110100110110101001011011111010000001110011001001100001101100001001101011000010001010111011111101110111010111000000001111000111110001111011101000101010011111111101100110100110110010111101101011110111011100011101100000001110111111010111111010100111110000000010010001100100101100101110011011000101010001000110110101010010110101100100001111111000100101111100111010 0001110010010110101001000000011001110001101000111011110001010010001011000100010000101100000110001100001110001000101111100011010110011000011010010011111101111101000000100100001001100000011010001011001100100100100000111110100110001111001100101011101110111011110011010000101110001001110010111011101100111010000100011000111100001001110001010010100110100111100010011101001000111001110010010011111110101000 0001110000010110001110110001101101110000111011111111001010000011111011101011110000010010001010100101010100000001111101001111010011010101001100100101110000000100111101100001011000110010001001010000111101011000101010101101100011010110101111000110111001000111101111110011100110000000011010110010011111101010101110111111111000101000010000000100011101100000010100010010010000000101000011000100100110101001 0110100010001101011000010001100000110011000100101001111100011011101111011100011101011011111111100011000010011100001111101111000111111001101110110011111010111000110101101010001110010100010110011001110010001000010011011000001111110000100011001100001101010010101100111011001011101000001001010011110010000000110100101111011110100010000000010001011010011000111111100010101101000011011100011001011010100110 1110100100011001111001011110011011111001000101010001010000011110001000100001000011011000111001011000000100000110110001001110000101100010111000001011110100001111001001110001111010111000100100010011010010101011000011101010100011101101010110100010010001000100001000111101011110101001101001010101111000100101100101110011000001001000000010011011111110010101010000111110000010111100100011000111000001111011 1101111010110001000110101101110101110101000101001000110000000010100110100111010001111101011011010000010011000010100000011111000001001000010000001101100011111001010011001000110011101101111111010001011111100001001100001011111000100011110010110011111100111010100111110001011000001001011100001110101100111010100010000011000001101011011010000001011101000010001111100110101110111110110010101010010010001001 0111111101001010011111110001011101001001111011110110101000111111000001000100111000110100100011001001001011101110110010010000111110011100010010001000001011100111010101101101111000010011010100101101111001001000110110111000101011110010110100101110100110111000101011101111000010101011000101111010111111101110001111000111001000111010100001111010110111111100010000010110111110110110110010111001101111110111 0000101010110001111110010010011101100111000110001101001111000000101100010111001100111111100110001011001101001000111101001010000101111011001001101111111001101011000000001101001111101110101001110100111110000100010110100010100000010101110101100111111100110010100001011000110100011011111001011000001111111111011010001101101001010000111000101001000100110001001110011001100100001100000010111100010011001010 1010011000101100100010000000101001010000100110011111100100010010011101100011111000010001100000101101011000111001110101010011100101011010100110010000001110111100001101100110100010101111101101101110111001000101100111100011001000001111011000110101010100001101001111101010101011100001011000111010101011001011101011011001100101010101101100010011011011110101100100000010110101001000101100111001000100111100 0011101100010110000010011001011101100011010111011011101111010100110010010010110101001010001111001101110100011011100001010000011001101100001001110001110000011101010001011010001100101111110011111111100010010101111110100110110111000100000000001000100110111101101101101011101001101010101010111101111111110001011010000011001001101110111010101111001011001101111010100100100101001010111001111100000101001010 1101000010100011001001001111111001000101111001111000011011000000001011110011001010010010011111100111000001100100001010000011101110000011011010001000000000010011111111000101010010110011000001101011110101010001100110101000001001010101011011100001110101010111001010100011000100000111000001001011110001000011000100110011101100010001011001111101110110011110011011011101111000111110010100010110001000100111 1010111100010011000001110101011010010010111111101111000000010011101010100101110100101011001110010100101110011110011111101100101100111011111010011001011001111101100111010100000111100101110110110011101011011010011011001110111000001000011010111011011000110100000001110111010100001101011000110100100101010001001110010000111110110111010011100110100010001100111000011010001111100101011011001010011011010011 0000101100011110000101010110000100100101111011100111001010010010100010111110111011111001011001111110101001101001100111110010000010011101010100110110011100111000011101110010111001101111001100000011010010000000011111011011000101101100110011010101100101010001000010110010110001000001100110010011111000010001111010010101111100110001001000110001010101100101111111100011010110000000001001111001101100100110 1000011001100110001001011101110100101011101001011010110000010010000110100010001110000100000110100001011110111101101011110101000111101001101001110110011101001110111010110010001011111010100001010101100100111110101010011111011111111110011100011000111101010111001100110000100010110111100010001110111101001011010101101101011011001101100000100001111111001010010111111010110111010001110111111001110000011000 0001110111000111100000010111110101010101100000010001000011110011100111011111100011001000011011000001111011010010001111111110010000100110111110110110100101000100110110010111000101000100101110100001100001110101001100010110000101101100100101100000010111100101110111110000110111001111000000110101111010101111001100100110110001101001110101110000111001101001011100101011011010100010010101100001101010110011 1000101111101110111110010111010001111101010000110001111000001110010111111010000011001111110011001010010011001100100100100011110101110000111100100011100101110010100001100111001111101010111100010110101000111011101101011111001111100111001101000011100110011001101100011111010101010001000101101001110001110111101000010010000100011011101011111100001100111010101011110000000111011000101110000001011011011010 0001000011101000101011101001010101011000001000000101101011111111101111001000001001010011001110011001000111101011011110000011011101010101000101101000111000110100101100011110011010000111011100001011100001111101101100001111100111001010111111000010001110110110100011010110010111011010111110111111010111001101100110101001111011010100010001000110101101111011100011010011100000110010011101100001100100110000 1001100000010010001100111010011001111110101100101111111101101011000011101101100000110000001000100010100111111111000100010010110100100010101011110010100100010011100001010111111100110101110000000111010111101010011010100000001101100100110101110111001101101100001001001101010101001100110010001101111111110011100010111000100110101011111100010011100100011110110110010100111000111111000100011100111000101111 1111011110100111111101110111100111100011100000111001111100010011000111101010000101011111110101101011001001100010000000111001110001110110000000101001000110110111111010011010101100101000010100101001100100000110001001101010110100101110110011010110100010010010101101001000011010011010111011001100001010011100100010000011000010011001111010111010111100111011010100011100000001011000101011001001000000001110 0000000111011001010110110101001111000110001111111100001111111101100100011101001001000011110010010010101101010100001011100110001001110111101010011100000111011011110000100001111100000010111000010100000001010110111010011000101010101010000001101100000101001110011011010101101111010010100010000110010110111110010010011000000010010000011101100101101001101001111001010110100000101101010100000100101000000010 0110101101110010000101101100101100000010010111110100110000000000001001110101111011111010000110010001011100100100101010010000101111100101110010011111101000100100100101101111100100111001110101100101000001101010100011111110000011101001010001011000110001001110000000010111010111101110100111001111011001110010010100000111010100000101110011111111101000100111001110011011001101110101110101100011001001100000 1000000101100100110001001111011001111101101101011101110111111101110011111111110100101111111010111001100110110101110010001011010110100000011111011010100010010010110101111110001110000000100001011111101110001000100011000011000100001110110101001101101000011011110000010100101111100100001111100001111011100100101110011011110000001101000100000100000000100001110011000100100001101001011001111011101010100010 0100010111001000100010011100100001111111000100011110111111000010110000101100011000001110100001110010101101110101010110001100011110100000111010101111111011000111000001010110111000011001100001001010100010000111010001000001000110111111111111111011010100100010101101010000111011000011001001000111001011111100010100101000110001011101000001100101101110110010010100011011001010000101110100110000010110001101 1000001101100100111101011001010101111011100110111000100000110011111101000101111111101011001110011110001001111000011010101110010011111111010100001110010111010001000111100011110011000001110000001110001111100000100101111111011010001011011001110011110001100010100000000011011111110010000011010000110001111101110100111100011111010010110000100101101001100010100010111110101001110010111101101000011000110101 0110101101011111111001100101100010001111001110101001111101101111010101000111000111001100010001001111010010110011011001110100100010110011010010110110100011001111111010000110110000111100110111000001010110100100100000100000101110000101110001100111001011000100111000010110000101011000100010101110111000100111010011011100001001010111010110100101000011111100001111100100010010010001100001110101110110101001 1000001010010101110011010001011001000111001000100100100011000100001101100101110111111000000011110111100110010100110000101111100101110001110111010111001101010011101000001011111111001101110010110011000011101101100000111001001010111010101001110101101111110000111001110110101100100011001001110111010101101111001111111101011100100000011001100101010101110010011100011100111000000101100100111011001011100011 1110101100110001101101111110000101001101101111100111110000101010010111101101110111110100101010000001001100110101011000011010110100011000000011011110101011011001001001000011100000101011110000011001011110010010110101001111100101101001101010000111111111000011011010001111010111000001101100010001001001101110100101110011000111011111000101101000110001001111011111101110110110000110000100010100001111010011 0011111101000110000110001011001101111110010110100100000101110001110010100001000010000010011010011100111001101110100000011011101001100100100110110000101011011111100110001010100111110110101000100000100101100010001000101101011101110101111101101110101110011110110000011111011110011011100010010000111011111000110110011000000010010001000110110010000111001001100110111000110001011110101101100101000100010100 1101001100100100101000011101011111000110111111100111000001100001100001110101111010111001000110100001000101110111110001010001011100010110010010001100111001000111011001000000110110100011001110011000000010001010010101101000010001100001100011001111010111101000010000011111011110110010101101000101100100001011101001000011101100110000001111101010100011010001110000100001100100011100001101010111000000111000 0011010100010100111011011010011101110110011011100010001111001111000101010111100001000111010111000010000001110111011000011010100001001011010010001010111010011010111101010001001110100101000111100111100100010110001010100000011100100001111011111000000111010111100101111101101101000111010101101011100101000000000001111011011001111101100100001001011001101100000000001011010010011000101101011001111011000000 1110110111000100100110011110011100010111101010011000110101111110011110001110000000001000011100010111100110101100011111110010001000100110010100011000111010101100111000001010010011110111010111111010011110001000011110001101011100110010110101100001011000110111011011101000111000001010101110011111001110000110101101101111000100000000011001011011000110001100101111110001011101100101010010000000001101111110 0000100111100011000000100100100110100011101110101011000001100111000010100010111110111010100010111110000001001010001001111010110111111000111001111100000001001000011011110010000011001001101001011000000101101101110101011110110011011000101110100101100111010000100001001000101111100111111110110110111111101111100010110000001000100010000010100101111111010110000011110011000011011001011001011010110111010110 1000001010001101111010001010000101010001011111010110000001000000000111001110010110101101100111000000101011011010010100101110001010000001010000000000100111000111111010101000111000000011000001100100101011010110111110101010101001011010100110110011110011100000101100011100110100101101100111001001001000011100100110111011101111101110001110000010010110000011011000101110001011110010011011010001110000011100 0010010111111101001000110001111110101000011001100001011101110011010111110010110001010110010011011101110011111000001111011001100001100001111001000111001101111011000101101101001100101011110000001110100100001000000111111001100110011110000111000101000001000111110100101000001010101010111011010101011110111000110001111100100000000001010001011100100010100001101101011100000010011111000001001010011011010000 1010110100111010100101010110001100110001101001010100111111011110111100000000010111010101011001010000010111101101110100001101101100011110110110101001001111101011010000001100101000011001111110111110001101000010101001101001011010100111111011010001101000000011010011110001100010011100011111110000101001000010011011011110011001100000110000000011111100101100111000000100100001111010001100111010001100001111 1101001011101011010000100110010000011000010001100011101100011000110111100100110101000000001011111000100101110011011000010101001100100000111001011000001110110001110101001100110111001110100001111011000100101000001000000000001100111010011000110010011010011010000110100011110101010110110010000000101000011101000001111110111110101111100111111000100100100000111010000101100100101011100100011101101101110000 0111111011010100101100001011000010001111000101100101111010001110010011001101011010010110000110100010110110110010010010000000011101101001001110001000110000000100100110101101110110111110100011100100010001100101110000101000010010100111001001000011000000110110111000000110011001001101110111111001001100101011010000100011110111011010101100111001001110101111101101111011111111100010001110010011110111111001 1101101111100011101101111001100111001010110100110111011111111101000111011111111001101000111001111111101011001101000100000011111101001010000011011001101010000001111111000000111110100111110011101101001100011111110010010011000011001010010100101100111010101010000010110101110011010100111000110010101001001011111000000001111110011101111101100110001101001001011101110001000011101100100110011110000010000110 1010000010110101100000110010101110101111100001101101110000011100100110101101001000001100110010011011011011001010100110110001111000001111110001110010101011101110111100001000000110011100010111111100110111110101011011001010011110010010110110001110011101010000011101100011000000001101100001100110010101110111001101000011000000111100001100111111100100110110101000110001110110011010000000110011101110100110 0110100011110101000101111010101000000111101000010100110111110110111110010111000110100001111100100100110110010100000100100010110000010000000100001111100111101001000010001011110110110011110001100111000111010101000010110110110000001001111000100010100111111101101000011000110001101000010100100000101010001101100101100110100001101001110110111000001001000111010111100011010011101111010011100101111101010110 0111000110010001011100101010110000110100001110110011000011010111100101101001001110101011101000101000111101010001010100011100101111101101001001101101110110110111100001100110111001100110101111101000110011101000000110010000010000111110001100110010011000001101011100100001110101101110011011101110110000010011001111010110101010001111001001101110111000100011100110110001001110000011111010010000101000101101 1110100001000010101111011110111100011010110111100110111000101111000110101101111100110111110111001111100110111001000010010000100110101010010000111000100110100100000110111101001000110100100101100111001100111011001011010000011011000111001111101101101011101110100011110011010110111000000111010011111110110000010110011111000101001010011110000011111011010110111101111101111111111011101001010101001101010110 1101001101010010100010110110001010001011101001010011001100110111110010101110101010101010110010111110010010001111001011100101000010000000100010010011001010000101011111011111101101100100110011011001000100111000100110011010010110001111101111111100010101001100000101100010001010001010100001110110001100110011001110110010101010111110111011111101001101010001100111101000010111101001011000000011110100001000 0101110110100010000100010101110100001001100001010100000001011010110011000001110010101011100110110110100101111010101001100111101000101100010100111100111010001010011111110010111011000010110010100011100110011111001110010010010100111000100010101010101001101001111111011010111110111010101000101101100101100100101011000111110000010000001111100001011010011010000001110001101011111100101111011110100101001011 1100101101001000001000010011111011011010011100011111010100001010011100110000010111010101111010101011000011110011010100011001100100001111010001011100000000010000101010001100010011011101101000001111100011001111110100001001010001111111100101010001101101110100010011110001011001000100100100000101001010101100110101110000110001100011010101100011000100011011101010010000101111100010001100001011110000011100 1101011010000100000111011101111011111010001010000110101111100010001111001000001000111100010001011010101000110111111111000100011001000011110000001000001101111000111001000101000000111000011110010010011101100111111001011001000110011111101001110100010111111010011100001111101110111100010110000000010100101010001001010010110111110100101100101011111100010100111111111100111101110010100110111111101010011011 0000111010010001000011111111110010111100100001001000010011010011010001010011111111010001100011101100010101100100110011010001101100010110000101011001111001001111001000101110110010011000010001110100100111111111010101001001001100001000000001110001010111101001110100110010001111100011111101000001001100110000110001000001000100010011000000001101001111000110100000001110101100001011000000111010001010011001 0001110010001011000000110101001011000110110101101001101101000110110101001001010000010101110001101111010110010001111101001011111111100010101101111110000010111111101111001100111011000001111101000010101010001110101011101011111101110000110100111110010110110010010110101001001100001100010011000111101101101000101101110110011011110010100011111110000101011101001000010100111011100111111010111001000101110011 1010001011110010110011001110000011110001001010110111111101001101000111011001001010110111111111010000101111011001101101001110111110010010100001100111101110110011100001010000001100101111011100011000001010001001010101100000001111100001000100001011110100100001110011100101010101010011101000110111010010010110100000000110011001011110101010011000010111100110010001110100000000111010101010011010111100011100 0110011110111110000111001000100110111111110001000011101010000010000001010110111110010001110111001011000110110110111000111001010100011111000011110111010010100111111100001100000111110101001010011101111100110111100001101110010101010100111000011001010101000000010011011101000000111010010100001111001010011101110010110101110001110100001101110100010110001101110100101100111001010011100011111010101001100011 1110011110000000011101010101110111111011010101100010001101101110110011000010110110100111010001001110011001001101010001101000011110101100001111111110010100001010100001111111111011101111011111111000001010001001111100001001011101001101001100111010110111100010010011110010000100010010011010010110000010101110111111111010110001001011011101100000000000111100010111110100000101011000111111010011000101100000 1101110000011100001001001010011001000010011000001000101111000010011101000111000100010100110010101111111110110111110010001110110110111001110001011000101101001001010110010000111100010001010111111101100101011101100100011101101100010001010110000100000100010100101011100000001111101101000111101000001110100100100011111001001010101001100100111000110101011001010011101001000101110100100110010011011111100111 0011100101101001000000111011111110110000110110011101101100100000011001010111100000100110011101100010100101011011000001111010101110011101010111101111101011000100010101100110111111010000000010010101110000111101011110110011011111101001111001010101000110010011010101110111010100110100101101110100110111100100100111010100101101101100001100001001110001101010011000100101101101000101000111100111000010100111
cTrader Algo

KeyDownイベント【cAlgoAPI】

3/3/2021 3/4/2021

4年以上前の記事です。内容が古くなっている可能性があります。

特定のキー押下で処理をする

cTrader4.0でやっとできるようになりました。キーボードイベントの処理。これにより、自作インジケーターやcBot内でキーボードからいろんな処理を行わせることができます。

 

使い方

他のイベントと同様です。Chartオブジェクトが持つKeyDownイベントに処理を登録してあげてください。

どのキーを押されたかは引数となるChartKeyboardEventArgsオブジェクトを利用して判定します。

なお、単純にホットキーを作りたいだけであれば、後述のChart.AddHotKeyメソッドの方が使い勝手がいいです。

 

サンプルコード

イベントの使い方さえ知ってれば難しいことはないと思います。

protected override void Initialize() {
    Chart.KeyDown += Chart_KeyDown;
}
private void Chart_KeyDown(ChartKeyboardEventArgs args) {
    switch (args.Key) {
        case Key.P:
            // --- P押されたときの処理
            break;
        case Key.Q:
            // --- Q押されたときの処理
            break;
        case Key.R:
            // --- R押されたときの処理
            if (args.ShiftKey) {
                // --- Shift+R押されたときの処理
            }
            break;
        default:
            break;
    }
}

ちなみにこのコードだとShift+PでもCtrl+PでもAlt+Pでも”P押されたときの処理”が走りますのであまり現実的ではないです。

 

cTrader本体のホットキーとかぶらないように注意

cTraderに最初から登録されてるホットキーについてはcTrader本体にとられてしまい機能しません。cBot、Indicatorには流してくれないようです。

cTraderのホットキーはユーザーが独自設定している可能性があるため、配布、販売するプログラムでは気を付ける必要がありそうです。

 

ChartKeyboardEventArgsクラス

押されたキーの情報を保持するクラスです。

public class ChartKeyboardEventArgs : Object

 

プロパティ
(Chart) Chart

イベントが発生したチャートを取得します。

(Key) Key

押されたキーを取得します。

(ModifierKeys) Modifiers

同時に押された修飾キー(Ctrl,Alt,Shift)を取得します。

(bool) AltKey

Altキーが同時に押されたかどうかを取得します。

(bool) CtrlKey

Ctrlキーが同時に押されたかどうかを取得します。

(bool) ShiftKey

Shiftキーが同時に押されたかどうかを取得します。

 

 

メソッドで新しいホットキーを登録する

ChartのメソッドにAddHotKey()メソッドが追加されました。単純に「このキー押されたらこの処理走らす」みたいな使い方をするのであればこっちを使った方がいいです。

また、このメソッドでホットキーを登録しようとするとcTrader本体のホットキーと被るとこんな感じにログに出力してはじいてくれます

Failed to add hotkey “Control+W”.

ホットキー登録するだけなら、KeyDownイベントではなくてできるだけAddHotKeyメソッドを使った方がいいでしょう。

(2021/3/4 返り値が誤っていたため修正)

 

(bool) AddHotkey(Action action, Key key, [ModifierKeys modifiers])

第一引数は引数なしのActionか上記ChartKeyBoardEventArgs型の引数をとるActionを指定します。簡単な処理ならラムダ式で書いてもいいですが、メソッド用意しておいて、それを渡してあげるのがわかりやすいかもしれませんね。

第二引数はKey列挙型を渡してあげます。Key.Pとかそのまんまです。

第三引数は省略可能。修飾キーをModifiedKey型で指定します。Alt押しながら、とかのときに指定します。Key単体でホットキーとして使うなら省略していいです。

返り値はboolで成功したかどうかを返します。すでにcTraderのホットキーとして設定されていると失敗し、falseを返します。

 

(bool) AddHotkey(Action action, string key)

第二引数が文字列になったバージョン。”P”とかそのまんまの文字列を渡します。

修飾キーを指定する場合は“Control+P”みたいに+でつなぎます。Alt,Shiftはそのまま、ControlはCtrlでも大丈夫です。すべて小文字でも構いません。

Key型とModifierKey型で指定したほうが間違いが少なそうですが、文字列にしておくと一目でわかりやすいというメリットはあるかもしれません。

 

サンプルコード

protected override void Initialize() {
    // --- 第一引数Action型のラムダ式、修飾キーなし
    Chart.AddHotkey(() => Print("P-KeyDown"), Key.P);
    // --- 第一引数Action<ChartKeyboardEventArgs>型のメソッド、修飾キーあり
    Chart.AddHotkey(PrintOpenTime, Key.P, ModifierKeys.Control);
    // --- 第二引数を文字列で指定
    Chart.AddHotkey(PrintOpenTime, "Alt+P");
}
private void PrintOpenTime(ChartKeyboardEventArgs args) {
    Print(args.Chart.Bars.LastBar.OpenTime);
}

 

これでPだけ押したときには”P-KeyDown”がログに表示されます。Ctrl+PかAlt+Pを押すと、最後のローソク足のOpenTimeが表示されます。

サンプルコード書いてて思ったのですが、AddHotKeyのActionでEventArgs引数が必要な機会ってほとんどない気がします。外部のメソッド登録して、Chartを渡してあげたいときくらい?

 

 

関連する列挙型

Key列挙型

各キーを表す列挙型です。マルチメディアキーとかもそろってますので、だいたいどのキーでも使えると思っていいでしょう。

個人的に使いそう、かつ、わかりにくそうなとこだけ表にしておきます。

NumPad1~9 テンキーの0~9
Multiply, Divide Add, Subtract テンキーの* / + – (Add,Subtractはデフォルトだと拾えない)
D0~9 数字キー0~9
Up,Down,Left,Right 矢印キー(Left,Rightはデフォルトだと拾えない)

全部確認してませんが、たぶん.NetのKeys列挙型とだいたい同じです。(どうでもいいけど、こっちはなんでKeysじゃなくてKey列挙型なんですかね?修飾キーはModifierKeysなのに。)

「このキーはどんな名前で登録されてるんだろう?」と思ったら、下記コードをcBotのOnStart()内に書いて試してみてください。

Chart.KeyDown += args => Print(args.Key);

このcBotを実行してる状態で何かキーを押せば、キーの名前がログに表示されます。

 

 

ModifierKeys列挙型

修飾キーを表します。

None 修飾キーなし
Alt Altキー
Control Ctrlキー
Shift Shiftキー

なお、Flags属性を持つため、ビット演算子を使った指定が可能です。

Chart.AddHotkey(() => Print("P-KeyDown"), Key.P, ModifierKeys.Control | ModifierKeys.Alt);

これでCtrlとAltを押しながらPを押したときにログにP-KeyDownと表示されるようになります。

この指定方法、馴染みがないと間違いやすいのですが、&じゃなくて|ですのでご注意ください。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2025 ajinori