1101100111001110100110101000010111000011101011111111011100000101101100110100111001100101101101111010110110001111000111010001111111001010110010010111100101110100000000101011100000001011101101000100001010010001110111001111001100100001101110111110000101101101000010000000001111101000011100000000101000101010101001001000011010001110001101111011101100101011001001101011001110110001010010000110010101110101 0010000111100000000110011100001001011111000101011100111100001001000100111110010001010100110010101010111101110001010011001111011101011110001010100011010011111101100010101101001101101010111111110011100011000000100101011010110101101001100001011100110101101110010111010001111110110110000000101000100101000101011001101111110100110000100101100000100000100101111010001110100111101000111011000101100101111001 1010001111100011011101101000100001010100101010111100000101100001101100100100111100010110000100111101111001010101111100010001101101101100110101101001000101110010101011100110010010010011000100000110111100110111101000010001110010111011011000110111001011011101011000010101111000101011111101100011011001000001101011101111011001000011100010000001000000101111101110011110011100111110100110000111100011010011 1101110010010001111001100111011100100111011011001010000110010111110110111101100101110111001111001110101001001011101011110101000100011100000011011101011011101000000111000100110111001101000110000110110111000110100101100110100110101010110101010010110000010010101011010100010110010111100111100010011010000111101101101001100011110010101101101011000101111100011010110101011000011110010011000010101111011011 1110011111011010010001111110110100110100100101011011010011001100101010010000000110000100111011011010001010100001110010110000110100110111101101110101111110011011100100000101110111011001101000100111011100010001101100011010001111111100000011010010101110100000101111101001011110001010000001101000100110011011000111111000010000000011111000001100101011011001011100111101100001000101011110110010101000111110 1101110000100001000100011110111011000100000000001100101000101001010111110010101000001100000011011000000001110011001110101110011101000001010010111111001011010011000000111100111101000110111011101110001011101100111101000101111011010011101011001110101010111001100010110110010000100110010110010011110001111001011001100101101000100110111101010001010001100001101100010000100011110001101110001110110011111111 1001001100000011110011001011010000100011011000010001000110011100011101010000010111001000011100111001111110000110100000010110111100100101011111101101010011110000011000110100011011111011111100110001111001011111100011001011110110001000000110110100011001111010110100111010100110011000110100010010101010001010011010001010001100000101000111110001100011100101000000111111100111101011011010010110010010000011 0000001011011111010100001111110001111011001000110111010101101111010100111001001111010111001110101101101100100010111110010111010011011100100000110101101011100000000100101101010011000001010011101011000100001100100011100110000101010011100010011010001101111000001010001011110001100111010010101000111010001111010001101100110011100010010001000100011100011100111101110011110000110011010000110000000111100011 0001101011010110001100110100010111000111101001100000011110111000001101110111000010111001011010110001011000100101001000001101101000001100110010101011000100110100100100011010001000011011001110001010101011010101101011010110100111010001110001011111011010011111000101000011111001010000001101111100011001011010100010001001011010110101010000101001000110000010110111100100010011111011101110010010101100110111 1010101101011001000011011011001111111101101011100000111100111010011011011001001110011111110111111111000101010001110001100010010101101000111101010000010011001010001000001111010000011010100011100010010011101011111010000100111100101001101101110101001011111010100110011001001111111000000111000111101000100001000000000110001110011001001110001011000100001000000110001011110010101110101111111011000001111010 0001110011111110011010101011111001101000010101100000010000001101110111100101010000000000101001110011010100110100111110001101110111010010000011110010100010101011000011010111010111010000101010000001111001100110010000111000010000111110000000000011000101000010100001001100001101000001110010100110010001101101111001010000101101000001100110100010001110000101110101110001010110010011011100001011101011100100 0100010110010100111100010010010111100100101111011010111101111101011010101101111110101011011010111110101000000110010111011010011000000110110001111100000100000110111011111111010101000001000000000110000010010011100000110110110100111010000001011111011101011000111100100110110110010101011110010001011011110100010110110000111000001101111011000101010001010110000000100100000010000010000101101010110111101000 0101010011011101111001000110001000000111110101001000010100011111100110110110110000110100001110111010011101110001100001100110111101010100110101110110110011001110010010011110010100011100100100001110100101001001110110101111110101001000001110000000011111010110110010110000011011000111110010001101001011000100010111111000000011001010001011111101101110001001000100010101000001000010001000110011110100110001 1011010000010001100011101101011000010001001011100001101011111001100101100011010010111111100110000111011011000110110111000000110001100001111111111010000111111000111110011111111100111000111001010110011000001011111011001101011010011001000101111110110001100010110010011001111101100110101100010001000110001010011110001111011000101010110011011000101101110100000110100111101100111001100010101000101011010101 0101011101001001000000101100000100101010110100101010011000001010011010111110101001011010011111100101001110001100001001000100000110000010110011010001000101100110010010010110010000100111101101001001010101101000000011101011010000000001000100111111010001110100011010010000110001110001001101010110111001101010000010100011010011111101101111001011100000110001111101000111100011000000010110000001111001101000 0111111111001001111101111011010000001001011001001001110101110010110000101001100110000101110000000000100010111111110011100111101000101100010101001000100101000000000110100101010100001110010010100011111100001110101000011010110011110110001001010100010111000010101101101101110100001000110111001111111010001110111110010111110001010001101000111111111001001011010010001110110111000100010101101000100011101111 1110101011001011010101011011010110001000001010101000011101101011001000100110000111100101111001110100000101110001110011101101101111110000001111100011011000101110000000100010000001001111100111100111001100110111111010111101000000000010001110010011001111010001111101001010110010100010100011110110000010010000011001010011111010111011101001111011111101111101011001001011011100010100100111010011010011110110 1011000010100110001000100011000000111110010001110011101001010110101100011000110110010100111000001010111000110001110001100010111101000000000001011011010101101100010111011111000100001000111111000000100100010011010111010101001111000100010011100010001001100011000110101110111111011110110100101000000010111111110101000111010110010001010001100010000001111011011111011101001000111111111111101101111110101100 0010011000010011100110001110110010110100101001000001000100000011001011001001111010101111011100111111100111101100100110100101100110011001001001110101011010011001000001001101111100011110010010111010001111110111001010011001111010110100001000010010000110110111010111011011100100110100010100000110010100101001010001100001100001001111111010000000010010000011010000101011101110100011101000101010100011010101 0111010100001000011101000000100001000110111111000100101011010111111101111001101110110100111010010001000000000010110011100000101101011001001010110001110100101111001011011000001010010101101101000100100000100100100010010110111000101111001100100110110001110010001100010000100000101001101010111101100010001011000000010000111000000011010000101110000011000011010111111001110001011001111001101000010101111110 0110011010001010111100111100110011011001001011111100110111000110100001001110010110000010110010010100011101111010011111000111101101001000011110011010000100000110100110111111000001101000101000010010000010001111011011101110000010000000101001110001000010010110001010001101001100101110000100001010001001100100010111100011011001111010000000010011010100110111100100001000010001111110101110101101111011100010 1000011101001000011101001111010000011010000101101110111000101110101100100100011110101010110111001010000011101001111110000000111010100100111001100000100011110101110000000011011111101011101011111011111110101111101100001000011110101101010000100101100100111110101110100110010110001101001000110110101001000110111101100101101011001010110101111111011111110111100110000010011100100001011110100111001100011100 0010010001110010001001111000001000011011110111000100111001010110001001110111010110111000011111111111011000000110100111011101101101000000100000110001001000101010011010100111100100110010000110000100010010010101011000110001101100111110001110001100101010001101100101100010100100110000100100011110101011100110100111100011100100000100100010000010001000101010000100001001100000101001000001101110001000110111 0001110011111100011101010000111100010010110111110010001001100010000010110011100010001011101110011001000011101010010001000101010111011011001000001000111111100010001010110001010101001111011101011100101010100110001011001000001101001000101011010001011100001110010110111100100110110011011100001101000110110110011001101000100010101000010000000011011111010101000100011001100001001110000111111100111001011000 1110000010111101001101010000000111011001010000011001011011010010100111001110011110100101001101110010101001001100101001110100010111001110101101010011011110110111011010000101110010101011101100010110010100011101010101000101011111000001011110011011001011011111100101001100001110011000101100100010010010010011101101001010101011010000101111111110001011111001000100000101000110110011100100010001001010110101 0011101000110101000101110001011100010101000110110000100110100101011001110000111011010111100100110110011100011000101001110000111010111000001110111011010011010111110101111110000001010100111000001010111000100111100101010001000011100001011101010100101100000011001000011010001101101100010010011001001101110000101100111001100100011001010100010110010111011001000110000101101101111011111000010101111000001001 1001101100111011011000101110011111100111101011010011011001111011111011101000000010011101100111000010011111100111011110100110011100111111101001011010011000000111110100100110100100110001011111010101001011000101100101010010011011011101001101101001000100110101010111000001011000111111011100001110100101100001110000000100101100100000100110001011111110100001110000110101010001110100000011100011000111011010 1011000111011110001010110111101000100111101101110010101011000110001011001001110000101101010110100100101010110010100000011100010101001011010000000001101100010000001111100010100001100101100010100111111110000001101101011010010010010111000010010011100101010010010101010101101111110100101011101000101001110000001111000001110010011111101000001001100110100101111010010100000110110011101010111000111001010100 0100101111101101101011000000110111011100011111011101010000101001111100011101011111100101000011011001110001000000101011000100110100000000101101111100101011000010101111100000110010111101111100101100100111010101100100100010101000111001011011100010010101000000111011001001001100100101011111010111110001101001000110111111101010000000000100011001110011111001111101000101110001001001011111000100101101001010 0001000011110110110110100010111011101001100111111010100010100010001101100100101010011100001000011111111001101001011101111110011101000100111001110001101111101010110010111110110010100110000011001101010000110110101011011010010111110110110110110000010110100011101101101110100101110001001001100110101110011111000010000111010101001100000101011011011110011000100011110100111011000110001001100111100110010101 1011010000111101000111100110111101011011011011010100110011111011110101011111010111100011111100001001011000011101011111101001000100111110111110100111110010100110000011111000100001011101111011000000101011101101000011100001000000110001101011101100010010111010100001010110101011001111100101111001101110110010000001111001001110011000001010001100111101111101110111110010001011000011110000010100111101011011 0111100010000100010001101111001111111011100111000110110011011001100100011100011111011011010100000010001101011001110111110011101000101111011011000010100001100101000110011010101111010111010111101000000110101010111100001111000111111100101000111110101010101010111101000111010001010110111101111110101000101111011110011111101111010000110100000101100110111011011111011000010100011001110000100010001111000010 0101110010101100111011110110000100001100000000011111001110111011011110000111001100111010010100101011011100111100101101100100011101110000110000000111110000011110000001010010011010100001101001011000011001010101101001000101111001110010000111101011100010010101110101110011101001111100000010100111010011101010000000001010000110100011101010101011010010100100111100100010000001010011000010101010101100111000 1100001111111101101111000100111111101010101001000000011000111001011101011111000000000010101000111001000110011001100100001111110011111001010110011000110001001000100001001011110000111110100110111111100010011110000011110110011001111011101100110001010010011100010011111001000000101000001011000101001011011001100011111001011000110101000101111101101000001000110011101011011000110010100001111110000111000010 1000100100101001011001000010010000010011010111011111010000110100001100110101010000111011000111110111101101011101100010010011101110101100110001100100000000111110000101100110000101010100111110111001101100001010111110110001101010101010011010011010010111011101101000011111010011110111111010011100010001001000010001001101111010111010001010111000001101000100010000001010101010110100000011010010101011011011 0010000000100010011001010100000110011001010001000110010111001000001001110110110101101101010110011001010011110101100001100100101111000100101001111110101001011011000010000010011101011010000100110101110100101010010111000000100100011000011011000000101000000111010001110001111110000010111101100110011011101000010000000101001000010001100111000011100000111010101111001000011011011000001000010001100100110111 1011110100101110011010011101111110101001101111001000011010001110011111111110010100000010010001110010111100101011000010110001000100110000010000011110011111000010110100101000000000111001111101010110110100000010001010010101111111011000110000101000100100000001111110101111111111111010000001100010110001010010101111011100011011101110111100111100101110111010101110000000100100000001000010011001000011101110 0000111111111111111100010100111001001110010100011001001010000011101010001111011011101011011011110001011001101111010001100000011011101100101010001100101000111000101100001100010010000010000000001111000101010101000101101100001001001101101000100001011001011000000010001111100110101001111111011010110000000101110111101111110110010011110010001100110111111111111010100110111010101001010110010001111111110001 1110011001010001011100010101110011101001000100011101010110101111001111100101001111101110000010101111101000110100000101111001101111011110101001000001110111001100111000011011101100000000110010011111110001111001111001110010111010000000010011011010111000101101001111100111100100010100111000011011000100010010111000000000111001001110101100101011000111111010100100111100100010011101011110001011100011000100 1011101001010100100001100000111110010111111100111101001010111100110110000101111100010011111101111000010100011001001100001011100001010011001100011110111011101110110001011010100110011111101010100110000011001010010011100111111100000000101111100111010110101000011100010000100101011110000110101001001110111100001011001110000001001001110111101000000101110111111101101110100100111011011001000001110100101000 0001111010111101101111000011011001011101110110100001001000011111001100000011100010101010000100111110110001110100000101000010001111101100011010011110000100101001000001000000010000000100111011110100000111111100010010011000111010110110110001011011101011101100000011110110010111100001001001001011010100110101001101011111010100111011010001011001111000100010011100110000101011111001001010000000110100101011 0110011010011101101110000011110000111000000000001110111100011100100001010000110100000110110110111001110000001100110111000001110110010001000111011111010110101101001010100101110100001001011001110001001100000000010011010100010000000010111110101111010101101001000001100110011110010110100011010111010111010100010101101001101000010000000000011101000001001111100100111000111001010100100001011000101000100100 0101001001010111111101111110010110001010110110001100000011110100011000001101111100011111101101100110111110100011110110001101111100110111111010001110011111010110000010001010001111101111010100001101000011010101011100010011001000110100110000001100011001001100100100001000001110101100010010101011010011111000110111100001000010101001000111000000001100000101000101011101011010010000110000100000101000001011 0101001011001011010000001000101110100001000000000011000110111000011011011000011100000101000010101011010001110011001101110000110110001110010010101000010110110001010110101000000101100110000100100010010001010111100111100100010111011101010001001011101000101010100011010111011011101001100100011100001111111001000000000111101011001001111010010001100000110000010110111110110001010001100001100010001011010101 1011010101000100111110001000001111011111110001000100110000101110111000010001000010010101111100011001100000010110011001110011000110100011111001101110001101101000100100000011111111101010101111110111100111100110110100111100100110110101101110101100111110011011001101000110010011110111100101010000011100110000010000110110001000101101010010100111000100100010100000111010011010111001111101111101101000001110 0101000100111010000111011000110001011001000111001110101010100010101101111000011001001100110101101010001100110101110100111011101100101011110010100011011001111011101001100001001111000001100001001101100000000011011000101010011000001001011100101010000101111101001001000100111111000110000000011110110110111000100000010011101110001011010100011011010001111101011011010011100100001100101011011100011000001111 1110001111011101001100110001100111100011111000010011110010111011110110000010110101111111011110111001101111101001111100001110011011111010011110011001001100010111111010000101111000000100101011110110100011010001010001011001101110110101101000111001111001101011001110100100101110001010010011111110001111001101000111110011000001010011111001011000000101110011010010001110000110011011111000001101111010011100 1101000100010101100110001111010110011110111111010101011110110110001010101110001101110110110111110011011010100001010010100000001101000001001110111110010110110100100010110100111010101001001010100111001101101010000011111110011101011011111101101110101100100100010111101111100011110111000101100111000100010000011010110101101001000010011110000010010111001100011000010111100100110000100001011100001011110110 0011001111000011111101100001110011111101111010101010000101000111111110000010000001001100110100011101100100110101101011101011010000101001111011011111101110010011001110011101010110100001001000111000110100101100110010101100001110111110101100110100001000110001101010101000110101100001111101000100101001000000100111011011000110000010010111101111000010001100110010000101000110100010111110010101111000000010 1111001010110101111001101000101011010101100101101011011010000111101110101000111010111010001010101010010110001111011001100101100100111111100111001110000111011011001011000011110010110011001011000010010100101000111011011010001100010010110010000010110100110101111010111101111000110001010001001110001000101000100110100010010101111001100011001101111101101010111110010100010100101011100010110001111000001111 1101100001100001000111010110100100001011001001101010110011010100100010000101000011001010101100110101001000011111110110001010011010111101011111001011001101111001100011000000011100000010111001100100110011000111010111000110101100010101000011101100011100100111000101001110101110100101101100110000110111010100001001110000001001000011011111010111000010100101001111110000000110010101110110100110100100000111 0010000111101011001000011101111111100100011100011100101100001111110000100111010010010000000111011011101110001101100010001110000010011111001110100110001010100011111101111011010001101110101111011111111101001010001100110000000010000111010011111110011100000110010000011010111110101010011101000101111101100110001100011101001111100011011111101001110000111010001110000000011100001010101100100100101011011000 1000110100001101011001110001001010110000010001100100101010010101110111010111110100110111001111100000101101000011000111111101000010111011000101100011000111111111111111111110000011111001101100010101101000000010111001011100000010101001000000010100111000000100001110101011011000100000100001011001001101100101101101110100010111110011100101111100001101111111001100000111000111101011000010001011111001010101 1010010011111100100100100000100000011010001100011101011010101011100100011011110100010110011111011100001010010100110010010101111001001101110011000011000111101110110100010101100001100011010100111011010011100111101011111100101000101011100111001100011001111010011101100011111110000010010001110111100101111000100111110011011011011001100010100001000010010001000101010101011110011010000010101000111111010010 1110011010101000000000000010010110010110000010011101110001011100001000100100101111100011101000000100100101101011101010101111001101000011011011111101011000111001111110011101100100011011010100000011110011100100011101110111101001000011101010011001000110011001100011111001100001110000110000010000101000111110001010110000011001111101100010111111110101001010000011001000110010001011010011010110010111101111 1000101111111011100101111110010001001001101111100110011011001111111100100111110100010011101101101000011001000001010011000010011111010011001101100111111100101001111110110001100010110001010101011011111001011101010110101101001110101001100000100101101101000011010100110000000110010001111110100111101000001111011111111011001111101110001000011001100110011100111011010111000110001100101110101100101011011001 1110000100011110000101100011111011000110110110110011110101001010010001100100110100101011110111000100001110101001101101010100000101001000000011001011101110010100101001001110110110101110110111111100011011010001000001011100001110111110010110010010111101000001011000011010001110000001011111110000010010101000000100100001111011001010011101101110111010100100001101111110110101101101111011111100110000011001 0101101010001101011100001100111111000111010010100100110100100101111011111100001011110110111010000000101110001111110101111010100001011101100000100011101001001101100100010010010000101011101010010110000010011101100000100001110001001101010111111001011100110001001100000001100000001011000100000011000010110000000100000110001100111101010111110101111011111101010100000001000000010100000000110011010101110111 1111011101001001100101011111001010110001111101011101101100110101101111000111011001000100111011011111101010000010100111001001001000000100110001010011110011010100001101011010111011111110000001111110010101001100101100100010000111000000010100100101100111110111100001010011111100101110110000010100101110001100000000010100100111111100101010110010101110001100101110000010010001110111011110011000001001110011 0101111110101110011011111100000111001100000001111111010110001100000001011010001010000001100110101000010101110001011010111111110111011110000110001100111100101111000010010100110001001101111010011111010000111110110111110111011011000101111110010010110110101101111011111100011001101100011111101111011010011011111100010101110010101101011110000101110101111001001000011001001101010000010000000000100110010011 1111001001001111001101101101111010101000110000101111100100001001010101100001001011001001010111101010110000101001011011111111001111011001011011111111000001110011101011001000100011001110110110011010101111110110110100100111101000110010101011101100011000100101001000100010011111010100000111010111101001100100110110100000000001110001100110101110011000110000100000111010110111100111011101110101001000111110 1110110100011111100011001110101010011001100100000011011010010101010001010000001010100101001001000100110010101001010010000100101100000100010000100011011000000101111001000110111010101000101111001010101100110110101011100000000111100101100110011100101100011111110100000111000010101111101011111001010011100101011001001001101110111111001100011011101110011100011111011011111101110110000000110111010101110011 1011101110110011111100101111011011101011101000101001111000001011110110110011100111001101011101011110110110100111010000100000011110011000010111011011011010100111001010111110110110010011011011110000001011101001010000001110011000000111011011000110011111000101010101000110001010011001011011010001101011100000110100110101110111100100101010000110011010100001101000101101010011100000110011101101011100101001 0000000100101111110001100110011101110010111011010011110010001111010010101101010111111010111100010011101001101011001101111111011101010111010100101000011011110101110111010101001010001001100010011101001100111100101001111011101011100000011000100001100111010001101100010011010111000111111100100100111101000010111000110001001000110101101001001111101110010111010011001101101010111000000101111000100011101111 1110100101000100111010010001001111101100101111111001000100000100010001010000100100001101111100000011001110100100100000101111100100000010100001110000000110001110101100000111111001011111100011001101111001100110011011001111011101111101111110011111001110110110010101100010101111111101110000001011001010101011101001101110010110100001111010010100100011001110000011100100111100001011110100101111000001001110 0100000111100000111000100101010100011011100011011110000100010001010011111111001011010110101110101010101000000010110011101000011000000011001010100010000001010000111000011111111011011101010100110110011111100101000011000110011111010010010100001010001100000011000111001000000011110010000111111011000110011101011001000010011100000011100010110000111110110111110111011110000001101000111010111001010111110110 0101000001000001110100111100101111010110111011100110111111111000011000011100000010101100101101001110000000101100001101110001110111010101010111010011111010110011101100011101010010011011110100000011011000110001111101001010000001111001001000111100011100111010101010111000011101111100110101010011000000110011001111000000010000001101110001010010000101111101101011011111001101101100000000110001100000000001 0000001011010110101110101011101101000110101010111000100100110011101000010000010110011001110011110101111100110100010101001100000011110110110001011011100000110110101100001111011110011000101101011111010000011111100101101001111001011010001000101100010111010100111101010100101100101111111101011011100101111000000101100010010100111110010111110110110010100001001110110110011000011000110000011000001110111110 0011010101100001011000110110101111010010101101011000011101000101000110010010010110110111101101011111100100000111111110101101100001001001000101010001111100110110100010101100111110100100000010011010111010010100001111001011000100011101110011100101010010011001111101110011010011011111110001001010000111110111000100011111111000010101101100000000011111011100111011101100100101011000110011011111110100001110 0101001001000011001000100100111111101000100010110100010101010110100110001011110111110011111010011001100010110010111100111111011100111011110000101110010010101110111100111000000010000001100111011010110110101011101000100101100101101011000000001111111110001011010101111011101100100000110000000110110011111100101001110111111110111000110100101111111100000110011001000111100100100011100010000101000001101001 1001100110010110001111111100011001100100101011110000000101001011000110011000101110110100011011011110000101010001001111011001111100100001011100011001101000100011100111110000010110011011100010010000101001110000100101111011001101101000010000111011001010110001001011011010110000011000111110000111010001100101001101000100010001010000011110011111101001011101000011011000101011100001000101110111111100011010 1001001110110110000101011101010101110110000100010100101011111001101110111001010110001010001101100001110010001110011101011001000101010011001111110100111001111101001111101001101110010110001010110101110101000110111110010011011010111000110101011010001111001011111010000000011111110011011111011101001110011100001101001011001111001110001000011011110010001001000000110100010011010111001001011001001111111111 1110010101111101101100000010101101101011010000011101111011011111101001110101011111001001010010010111000110011011111101101101001110000000001111001110011001101101011010000110001111001100111010001101000000011100010100100010110000100111000111101111010001100111010010011011101101010101011010000101000101010101011000101110100100100101001100001110001101000011111011111101110110010111011010101000000000101101 1010000110000111001000000101010000101100101001111000001101011100110000010111010010000101110001100011111010011100100000100111000111111000000101010100101111000100001001100000110000100010000010001110101110001101011100000111000101111000010100000010000001011010001101010110011111100000110110100010101100010011010110111011101111111101010001110110001010111000001100001011111001000010000111101001111000010111 0100101011110110001110011111111001101100010010111000100001111000001010001010100000110010001011101001101011010100100001010110000110011000010101011010101110000100111010010111000101000111101111100010011011011011111011010010011000100111100001011001101100110111001111110110111011100011000101101010101110010111110100000000001101100101001110001010111101000010000011011000101110101001001001110101101000110110 1111101011110100011000000011010001010010101000010100110001000011110110000000001010101111000000010101100100100011110011100000010111001110001011100010000011011111110100001001101111001011101110111001001100011001101111111110110101001111111000111001000001101100000111100001001111010110100111110010111100100101100010100011010100000001000010110101001100010011101011111110100000111010100101000000110000011000 0101001000110000001110110000001011100011111001010101000000011010111001001101011001111101001100100001100010010100000001011110101100111110111010010111101011111111111011111000110111111010011100001100000110011010000100110110101100011001000010001100100011011110000101100010100000001110000011110111100010010011110101101001011011001101000100000001001101011101001100100000110000110010101011011100001001011101 0010011010001101001001000011011101001001100101111011010010000010000110011010100010101110001010110001110011100000010101111101000111101000101111001001101001101110111001000011101010101101110101110011000000010110110010100110000111100011000011100000110111110010110111001110010001101001010010111100100000010100101000100000111101110011001100100101000111111010000001110011011101000100101011100110010010010011 1110001110111010001001010111000000001000001010100111001011100011010010101000100011011001100010011111110000101011111101101011010000100001101100111110110111100000101001100000110001110000011001001100011000010100001111101100110110010110100000011000010011110011001100101001000000001100010000000100000000010101101000111100100001000110110001010111111100101001010110110111111001110111000010001010100000010011 1010111100010110100011100101011000011000010010101011110001010000111111100011001111000000001110111011101000111101000000110111001011110111110010101101111111111010000011111100100111010101000010010100101100111100011100000100000110100110010111001110010100010110000010111111100101001111001011000000101000000110011111101000000001111101110010000010111100111101110000110010001110110110100101100111111101111110 1001110010010011111001110110110000110101011000001011010001111110000110101011010101100111011101100100000110110110000011011111001011110001101111110111100011110001110011010000110101100101100111000111111001010100001010100011110111011010010011101010000011101000111001011111010100111111001100010000001101101001001000100100100010101100111001111111101011000001010011110100000011100100111000101000001100001101 1010001110110010001011001011100001010010010000010101011100111101000000001010100001100001001110101100000011010100111111010010011001100111110110101111110010001101010110111010010010101111110000110001110000011100011101011001011001010011000110101101101110101010011001110110010101101100010110110100000010111010000100100001101100010000101010111111100111110100110111001110001001001111100111101101111111010111 0011111010101111010001010000011011100111101000100111111101110110000101101010110011101100001001000110000000101000001100100111101010011110000000110001011100000101100110001001101010111001100100010101010111111010010101110011000010000111001011101010111001000100111010000001011101001000110101100111000010100001000111110011000110010000010100010100011010111101010010111100110001110010100100111001010110001100 0111111111100101001110100110011001000000101100110010111001110011100100001000010100001100100010110100011000010110100000111001111101010001110001100101111011110001101110001100110101000001110010100010010000010001000111101111101101001011111000100011010110000100000010110011111000001110010000101101111101001111010010011100101011110001000010001110001110100111110111011101101100110001000001011100100001011001 1100010001111001010111011111101001000101100000111001100101010101001010010100011110001001101100101101011110100011111001101001111111101110010011110100011000011001111011010010001100101110010110001010011010101010110101110000101011000110110011001111001111011110001101010111010110010101100100110011001010000011001100000001101010110001000001101010111000111010011010010110010110010110011101001010001010111010 0000101010011111001101111001001011111111000111100001100110100000111000010110000101101001000110000101110100001011110000111101001000100000011011001000000010001110111101001100010101111100111000011000110010111011101101001001001011101011100110011010001110000110101000011011011011101111111001111000100000110011000111111010001011111110000000100000011000010110111110011011010001111000101101110010111101011001 0010110101110010010001101010100000100011010100100011110111101101110001111111001001010100011101100110010010000010101100010110101100101001111101101111001110100000000011110000111101100101010111101001010111110111101010001001100101001101101010011110110011111011000000100011100001100101010101000101011010001000011000000111000010000101100001110000111001010000000111101101111111001100001111011110100111010010 1100001011011001001010110010010101000011100100001100010010100100111000011010011001011101100100010000110010111110101111110010100001010010011000010101110110010011011010010101000000000000100100101001100101000001010011110101101001000100001111111101101110111000011001010010010010101110111101100101110001000010000110000001011110111100111000100101101001111100111100111101100001011001001001010110011100001001 0000111011011010001110110111001000100011101110011110011110101011011000111001111111101011101111100010100101100101111110111010110011001010101110111101011011110001011101111111010011000000110110011101110110011011001100000110001011010010001001001101100001000000110110000100110001101000100101001100111100111011100110011000011001110011101110011111101100000010110010000100010110110110011100100111011000010110 0100110110001000110101110100001000111110000001010110011000000111010100001010001110110010111110010001000100110100010001001101011111001010100110000000011001110111100000001111111110101100111111001011001010010101000010101000110011000000010011011010000111010111101001100110101110110101011111110110101111010001001011110101111011110001110110111101100011101011001101010111111100011000000010001101111110100000 1110100010111001000011011111000011010110011000000000101000001010100100000101010100010100111000011001001101101100110011000001000000111011011110111010101011100010001110010010011010011100011011000011100010111010101010110100101011101001010010011001111111000101100001110101000101010001011010110000000111110110111001000001110100010111010100110111001011000011100110100011100101101000001100010010000111011100 1000101001100110100000001000010001111111000100010011100000111110000001111101001000011000110111011101000010011011000001010011000011111001011101011110001111111110100101011011011100011010111101111011111110000101111100111011000011011100010000011100000101111000100010001100101111011100101101001011000000100100111111110010000110010101101100010111100101011001101101100010110011100100010011001010111110111110 0001101011011011100011000100111010001001101111001110011010110000110110000000100001110010110010001000011011101001100011000110011001011001011010000000011100001010100011101010011010001110001100110001111010111010000011100110110100110111001011010110000100100010011100111100010010011101110010010011110000111111110111100100000001100100001101011001110111001000110101000111000001111110010111110110001100111010 0100100011011110011000011101100110111111000011010110110000111001100111001111101011111101001011100101011100111110001010100000111110011110100001000011001100111000011010001011011100101000000000000111001000110101011110100000101010101101011100101110111100100000011000001011010101000001110001100000111101000111011100001000001010100111010110000001001010101011010110101000000010001100100111110111010100010001 1001101101101110110011010110010001001010011000111100110110010010010111100101110000111101100111001101100000011011111001000010000110100010110111000011110001100100110000000001111110000000010101010001101001101110010100110100100110100011101001101101101110110111111010001001111100101001000111001101000001010111011000111010001001101011000101100001000011100110010101110100001010101111010001001001111011000110 0100110101110110011100001011100000000111100001001001110110111101000100110011111000000101100010100101000010111010101101001101010111111111110100110100001100011001100111111010010000001101011101100111011001100110100011111100111010000101101111101110100011111100001110110110100010011111010000011110111110100111100100111100101111011101110011010110110010000000000110111111100101110110011010011101010101001000 1110010110000100101101001110011010011110111111101000111000101000010111101101011010101110111101111100111110011010111100011011001000001111011010111101011011010001110011100001110001110001111101111100111110001100000000110101110000011001011100010000010110101100100000001111100100101011100110100011101110010100000101001011011111101011000111000111010000101001011001001001110011101011000111101100110010111111 1110011001110101111000010011000110101111001111010001110111101011001011111111110111101100000101000001110101110110001010010011011101011001110111010010101111110110001010110000010101011100000001001000101011110010010111000101000111010100000000110011110010110011111110011011001100111100000111000000000100101011110011110111111100110100000011000010001010011000101100010001110010000100101000010010110000100111 1000000010100110110101001101100111011101001011100000111010011100101111010100100000101101101010100100110110010111001001111110111110111000010110100111000010010101110111001010010010111111010001110111100010011111110101011000110000000011010110101110011000001011001011100010010011100111111100001111110000101110000100011010001010000100001001010001000110111100110110011011100110011001010100010111001100001010 1011000010001111111101010111111001000001000011100000101110101010001110101101110000101101100100010111000010001010000100011111111000001110001011111001101101010010010010010011100101100101010011111111110011011010001001101111010000101001010111011011000110010001110011011010110010000001110111001010101001011000110011110110111000000101011010100111110001111001011110111000100101101011111000011010110000011010
cTrader Algo

KeyDownイベント【cAlgoAPI】

3/3/2021 3/4/2021

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

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

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

© 2026 ajinori