1001001001111101111111101000101001000111101010101101011101011100100101111001100110001101111011101000010000010100011001101011001011000111111011110001100101010100000001110011001111011001010110101000101110011111110110110110110110110010011001000111111000100000000111001010110110000001111011111100101100111010000100000101100011110111010101011101101111111010110011010010000000111111111100010001000001110011 0110001111100100011011110100011111101111111001011001101110011110010000010000101100100011111100110010111111010010100010011110000111100011011010101101010110100101110011010101110110001010100101010110000000010101011011101111110010101000010111101000100000010110011100100110000100010010011000011011101001001110001010001001010111011111011000100011111001110010101101010100100110000011111111111110111101000011 0110010001111100101111000110010000000110001010110000101110110100111110110101000101110111011010111011101010010101000011101011100111110000101000101100101001101111000010000011100110010101011001100100010011100110010000001001111100111110010000111010100000101000001000101110001011010001000011001111111101000001111011001010001001110100010101010000001000100010011000111010011111111110011010001101111011010101 1101100011100110011101100001000110010110111111011101101101110100010001100001101011011110110111000011001110100000100001111011000100001001110101111101111010011100100110001010101100100110111100100101000010100111001100001000000111110101101101111101100001011000111011110101100010000111000011101100101011110000001110100100110001100011101101110100111001101011110000111100100110011110100101110111010000101101 0001000010000111011000110100000001101001010010101101000110101000001101000010111100001011001101101110110100010011011010110111100011010011111000001111000000000011001001100011001001001010111001110101110100100101101000100100001011001110011110100100101000000111010011110011101110011101111110000100001111001000001001101011100111110100011110110000100010000110110111100110110110000010101010011100000011010011 1011110010111101000001110000001100101000110010000011001111001110000111010100100100101100001111001010001000000011111110110111010101101011101110001010000101100000001010011011010000111000010000011101110110110110110011001111110101111101101111100111100111110000110100100000000100001001110000001101000100101000100101111100010100000100010010101110101000100000000010010101101010100010010000000100000011101010 1101110010111001110001101101001101000000101001111010101001101001100101110000000110100111000101010100001011010011010010000110111010011101000111011011110011100001010111010000101100000011011110011101110011111111001000110111101111011000000010110100000101010111111111000010111111010100010111101000110001101001011001000000110110110111110001011100100111111001011110011000001010101001111101011100111011001111 0010111100110000000111011000011011110110010111110000010000101001101111011000100011111110000000101011101111110101110000010011001010011010101100110000101111111001100001010100001110010111000010110111101110101001111001011111010100000010100001101101101011001110101110100000000000001000010110000100001000000110011111111111101100101011011111100000100101000100101001011001111101111110110001101100101000101000 1001000110000100011001101001101000011111100111011001011001101011110111101110000010010011111010011111001000111001010000000011000001000011010000100100000010000110111100010111010001011100000101111100111111000000111111100100001110000110100101100100101100001111111000010011000100000011111111110000110101100110000101111010010111010011011010011100000010101101000100101101111011110100010101010101101100011010 1010100111100011110000010011001100111101101100010100110110110011101110110100111011100110010000000000111101011100011010011101101001101000001101001001111110101011010010100011001111111010001010101101101101000001000010111111111101001101011000101100001100111001001100010000011011000111100000101111000111110110001001000101100100100011011100011010110011011010001000101010111010000101000110000011001010101010 0011001100001101111101101101010000001001111110010111100111100011001010010100100001101101001010011100101011001010000011001111110101010000000001101101000110001001101000101101001001011110000001101100000110101101011000001101000111100100110101000100001110111011110001011101100011001110111000101001000000110010110101101000010100111100011010101110001111010100100111101110010111101100000110110111000110011110 1000110000111011010100001111011100000001100110101001101010000000001001010101100011001111101111000010101101010011001010001011011101111001000111111001110011101001100001000110001101001000111011011111110110101110011100100100110100011000101001011100100110001011100011000100001100011101000000010001111000111010100101010010110100000011011000111110001011101000111100011010000011000000000101100010100011011100 0110100101101110000101011000011110011000010011000110110100111001011111101000110000001010110010101011010110011011000001011110111011100010111110111011000100011101011010111001010011000111010010011000111111101111101011001100000000001011011000100011110100011100001000000000001101000010010110000000010000110101011110011011001101111111111011001001101010110101011011001010110010111110000100000011111110101111 1100011111011010000011000110000011110101101110111100100010000000011110010011011111001001110001101110111010110000110001101111100110001011010111101011001101010010011000001101010000100110111101001011101010000011101100001011100001101100001100110101000101101000111110100101011000110010010010011001111000110001111000011010001111000101000110011001001011000111000011011100111011010110110010000010000011000100 1001000000010111101100001110000111101001111000000010100111001111110111111011110110001010100110010101001100001111111000110110101100100110110010100001001111101011011011111101001001000001110001001011010100111011000111011100010110000001000111100000111011001000001111111110000000101100011011010000100011001111111101001111000001000100011111011010010111000011100111111111001110000100110111111111101000000101 0000101001100010000010110000001001000111000011000100000001000000110101111010010010011000001110111010101111110100100001110110111001101001101011001100000100111010110101100011101000111000110111100110111001110010010110100101111001010100110111111111001100010101100110110101011010101101111100101110001000000000110011000011110001000011011010101010110011100110010110101101010011110101010101101000111000011010 1110101111010010010111100001000111110001001100101110110110110001111001101100010100110110001101000000000000100000100111111001001001111111111010001001110011111111000110001100110001010110000000101000110010011000010011000100010111100011001010101111110111010000010001111001010000101101001111100110101101010100001011011000000011101001010101001011111000110001001111010001011011110000100001101011111101110111 0101010101010111111101101101101011011101011010001110010001011010001101111000111010100000101011100001111010010001010010100001011011101111000010100011111110000001110100101001001000001001100001011000010000111100001010110101110011100010001111101100101101010101111110100110000011100100111101001101001101011011011001111001011100101101011000000010101110000011100001011100000101001010010100001011001101011101 0111011111100001010010101000001100010100111010011110011010011011100101011000101111100110000011100110000101011010100111011010011010100101100010110001101000101101000110001001101110101111110001011111111011011001100011111010110100111000111010101111101011100010011101111100010100101110100101110100100110011010111010110111001100110111111000111101011011111111001110000101011100010000011101011001110101001101 1001010101000011100101100100011100100010010110111111111110001100110011100111010010001100011111011100101010100111011010011000110000000001101111110110100001010111011110000010011110100100101011101110111111011110111001000111111100100100111110011100001011001101101011101001100110110000011000111101010011111010111110000000001010011100000000110101001101001011000101001001010110001001000101101000010011010110 1000001011101111010101101101110011000100110000100001001110101101011011010001100110111000001101111000001011011100001001011100010001110011110010000100111001000010011011111011101001111101011000001011001000111011010001101000111110001100010100111011111001110111110111010011111111100101000010001011100100100111001010000111010011110110111101110001000100110011010101011101111111111011000110010000111101010101 1000100001001000100100011111111100101101001110001011100000110001101111110000100001000000000010110001010010001011101011101110011110101001001100110111011110110100000111000101101001110000101000000111001100001100001000100100011110010110111010111011010000110010101010111111110101111000011011000101001111001000101001110010000011011010111111011111000110100111110101100111001001101010110100100010000110111110 0110110101100001110110001010110000101011011100101101100101001000100101100110100011011001100000111011011000110111110010000001111110100101110110100001101000111001011101011100100011001011010111101010101110001111011000110111001100010011001001110111100101001011000100000100110001110110011110011010001011011101000100100011101110101010100111000010010100011110001011111001011101000111000101001010111001010011 0010010011001111111011111101111000000000011100101101110110100111000111001110111011000110011011110101001110111110110101100110110100110100001101111110101010111000111110111010000100110010011000011010010011100101010101011111100001010000111101010010010110100011010000111000111001010000110101010100000000100101011110100011110000010000001100000110010011101101010110110100100000000001000001011000111101101001 0110100110100111000101001100000000111001001110000001011110101010111111011100010001010100110010100000110100000011100101110100111100100000101011100010111111100001111111110110011000100001111100111100101111101100100110100000011010111011010111101001000111101010011011010001111000110001100111011111111000101100000110001101100010111100011000100010101000101100001101011100100100110100001011001011001001011101 0100010010100001111000010110001100101011110110111010111101101110011111010110010101110011011110000010100100001111111111110000110111100100010001111001101101101001000100110010110010111000000111100101010000001101100011001000001111100000010111011011000011110011000110100010100011101100001111101010000111000110100110101111110001001001101010110101101011000111001011000100001101011101010110001010000010000010 1111110110011110010001010000001110111001011010010110001110000110000110001011101101111001100000100001000100100011100000111110100011101010001101011001010101111111100011000101010111011101000011000001010100110100111101011001100111101101000011000010000101000010010111011111111000010010101011111000110010000000101101101101101010111001011011100100000010110100001011011010110001011110100111111011100110001000 1010010110101000111111001111101111001011001001010100010001101000100010110010001001001011000110111011101101101101100101101011011000000111001101110001010110000010100111100011100110000111001001101010010011010101011101010111101010011110100011010001101100000000001110100101011101111100111001001011100100101000010101011101001111011000011000111001000101000111111000010111001011111001011000101001100101110010 1100100000010101111111011110011110100100110001010101110100110001100010000111001100000110111001000100111100101001111011110011010111010010000001100111011111001010100110000111001010000111101110010011111001011101110100011111110111111011111111001101000110100100101111010010010010100111000110011111101111111001001101111001111100010011110001101000010101111111010010010011010011100011011110111100111110010111 0100110010100011111110100000001111111000111011010011010011000100010000010010101101011101000110010011001010110010111111000110001010110111110010111100001101101010011010110000001110110110101001101011110100010111110100011111011101101000011011010000101010100010000011100001100110011111111011001000111111011101000011001110101010001110110110110101101110110011101111101110000011000100110010101100100011011001 0100011010001101100011011010000010101010110000100001010010110000000111111011011000110110011000101111011001000000100010101110000000001111001010100011000011000000111101101001111110101001010111100010111011100111011101101110111111110001100100010001111111101111111111111110001001100110111001101110000001101100100110101011110100100100101000011010100000110010000111101010001110011001011011100110001010111100 0101001001000010111111110101101111010011110111001000000100111001111001001101111011111000101111000001100101010011111000010010101100000001011000011101110001110001110111111111011111100001110111001010101011011111111011000101010001001011010101001110010001101101100011111110101000011100110110000001110101010010000100100111110010110100001110010001111011001101011100111100100101011000011100111010110010111100 0111001100010010010101011110011001100111010001101111111101101100110010111000101000101100101010000100101111010100000101010001101101011010110110001010010011101011011000001110010100101011100111111101000110000010101000101011100101011101111111011101000001001010010010110000110101110011111110000011010100010110010101010010101100010011000110110010101001000010011110010111010111111110101100110010111001010100 1000100000011111111110100111001110001110001100000100110111000111100100011010000101101001101100110000001001010100110110101011010010010010011010010010111111001000001110011000001100100100010100110001100001101011111110101010011110100111000011011001011100010011111111101010111101101101110111111001010000001110111011000101010100101100011000011010011000110111111111000101010011001111101010101100100110001000 1000001101001001000110011101111001010111111011101001000111110111101100000101001000001110110001111010101110100111000100001001001001101010111011001000010101110100010110110011010001101001011010010101101100100011111100011011010010100111110110111001000011100110011000100100100110111011100100101000001111000000000100111110010101001000010100101101110111010100010000011100100000101000000100101111001110001111 0011001011111010110010110011101000001111110000111101110010110011110001101111010101010101111010000100110100011100000111100010111111111110110100110000010011010100011111001000110010100010110101100011110000111101000001000100111110011000100111110010111101111000001010000100000100100101010101111001000100010001000110110111101110110101011110100001000001011110000010101101110000000111110110011000001111101011 0001100101111010011101010000010011001111000011000001111001010000000110100010100100101101100001111111100000100010111001101000011011001100010110000110010111001011011110100011001101111100001111000100111111101010010011101110011100100001011010010111111100010101100000011111111101100110001000000101000001110001011001101011110101101111011101001101101111111010001111110101111101111110011000011010000000000010 1011010110001000110111110110100011101001111110101100010101111110001100101001001111000111101101100111100100111100111011110100001010100000010000101101101110011101111110101000001101101010010101000010001000110000011111100011000010110001001101010100111110001011000111001111001000110111011110000001000000101110100101011011011111001010111111111000101101010010101100011010111111101001101100010011001110010001 0011101011100001110000000100000110000011011101001100101010011000100011100100001111111100000000101001100110011011001011000101011001100001100100100110100100000100110100010110101011100010001101010010010100001111101111110101101000110011111100100000101000100111110110001111100010001110000110001101011000101000101010100110101101001101001111100000010010101100101100110100101000110001000011100100011111000101 1100111011010000010101100111010000111000000111000100110101000000101101010001001000011011100011000110111001011001101011101111011100101010000010010110111111101101110100111110110111111001000010000111101011111011101110000000111100011100110011011000110010110011101100000100101100011110110011001111010110010101011100001101110100100111100010000011001101011110000001010001110100101101110101010011101010011001 0101011011111101111101011101010100001101101001000011001111000010010000101000110000110101010011100100010010110111001011000101000010111011100010011101101010011111110000001100010101001100010110010001100110111000011000011011010010010110101101100001010000000110011111000010111010000011110110011100110111111100011100011111011101100011001000100011110111101000100100110101111110010101110001001101111110100011 0010110110001111000101010100110000011001111110011001001111111001101111010111110100101100001000001010011100110010011001101010010100000011100100000010100111000011110000011101001100110101001110010110011100101011001000101011111110000101111100111010011111111101100110011010000111111100110000010000110110000011001100110010110011011111000011001101110111011110101011011111111010110010011000100111000011010111 1100001011100111001001110001101001100111111110000000100000111111001110111111101010011010110110001111000100111101110011110101001110000101101100010011000110100111100101000010010010010000000001010111001001110010001100000000111010111101010100011011100110010011011111101011111000110100110111101001001000001010001100010110010010011100011001000000011010100010101110101111100001100111011100011001001000100011 0001001000110001111000101100011111101111101100001001010110011000101010011010001111110111111001001000001011010110010001001100110101111010110011101100111101010101000111010011110110110110001001001101011110001111100100001111101001111000000000110000101101101110100111000001100001001001100100010010000001111100011011011111101100001001000111101111110100000111110011011011011111100110110111111111010111001101 0101100110111100100100100010010111000000111110101111001000110010101000011100011100101001001001001000110001001110101011100000001110110001000101011011111010111011111100110000100000000000101100111010111101011111011011111010110101011011101101011011011010010110010100100110011101110101001010100100001110011010110000011001101011001111100001101101001110100001010010001101010011111100010001010010010100011111 1001110101110100101101010110101100101000011011100101011011111011111110011000010000001010111100111110011101010011011101110010111110010011000111000010010111111111111101001011101101111001010100011100011111100110101010011011111100101111110100010011011111011101111101111010010111000100010000011011110110111011011001001010000111110001110001011010000001101010010000000010100111111111111100010001101110100011 1000011001010100010000111101100010010000010111111101001011000001010010111011000110110110111010011110100001100100010101110110001100001100100110000111110001101001100110101100000001000110010100000101010101111110111010011101011111111011011100110101000010100101011011001011110111100011001010110110100111000110101100100001000110101101000010010010010101101111001101111101100010110101110111110100111000100101 0110100000000001001011110011010011101011000100101110101011011001001100000000001001110101111010101000010000001100010111100000110001000101010001110101000101110001010110000010011100100000101110001111101101010100111101000011001111100110010001110010110010111001110100011001010000110110111101110010100101101011010101101000110010100111100011000010111011110001001111010001001000110011000011101001011010011101 1010011101101010110100011111110111111000000011000000011011011011101110010001010110100000110000111011001001111110010000100000111100111010100000111011010111000100011100001100101101000101111000001001011000100001101110011110011110100010101011100100111110111011010011111000101101100101011100000010100000011011000011101011101101111011001011001101000110100011111000101100000101001011000001001111010001101100 0110010101100011111101111000100010010101000111001000111000000011100001110110110111001011011010001000000001010000011010100000001101101010011011101101101111111110110101010110001011100000000101000110111111010110011000001101001100010110010011110100110000010010110010101100001111011001010011011000101010111010101110000100000101100100001011010101101010001010010011101101110100101100100000001101100001000011 1101001110111101100000010101011111011000010001011000111111100110111011001101101000111001000111111101001001011010100101000111111110100101101000110011001111011011001110001111011100100001011100111001010110000111000010001011001110011001010110111001110111101011001100111000111000010100000001011100001010100111010110100111001000110011010000110101011001011111101110110100110110010111100000100110111001001000 1100000011001111001000101000011001110101010010110000100001000110010101111000100001001101100110110110010001001000100111110110001101101100000001111111101010000101111000000100101000010000001011111111111000011011010101010011000011011110001101101011010101001111011100001101010101001000101111100010101000111011010000001010110010111001010011001000111101101101010100011000111010110011101110110110011110110001 0001010001110011100000011111001100100111100111011101100010101101110011010010001111011000100001101110111111000001111100011111111000001010110011000000101011001000001011011111110000101110011010100110110101001111100010010110011011011010110111100000110000101011001111011101000000110010111010000101011001111000100001110001010111010000110100001010010001100000011110000000111101001101100011100001111001111010 0011000110100000110100110000001010100101101010100010100000111001110000110010010111001011101001010000100010110111011101001001001001000100011001001001010000001011111100111010101111001110000011010111000001111111001010001011000001101101011010110111111001100011110010001010000001001101001010100000110111111101011010110010101010010111100100111011101010010110110100101101000110110010110000100110111010011110 1110111010010000101001010011111100111011111100000010101001011010010000010010010110010011011011101011101001000011011110010001100000101010100010100101000010111001001101111010111001001010110000011101100110011000100000011100100000000010110111011000011010100001101101001010010000010001011000100011010010000100011011010110010111111011000011001100011000011001000010010111001101000101101110101101000100000001 1111001110111110011000001000101001101001001000110001110111111100000001110011100010000101110000110110111110101100101011000110000000011000000000110011111110000100010011111011101110010110100010101001011000011010011110011100101110110011110010111000010100001101011010100111001011111111111011011100110010010100100111110111011000000100100100011011011111101111110111000111010000101111110110110100001001100010 1000000101010100111011010000100110001111000100110110001100000000000100000001100110100001101110110010001001010000000011111101110011101111110101001110111111000010101110101011000010000110010101110000011111001011100001101110010011111010100101100001010010111110011111101110000100100011100110110010000010100101011010010011101011001100000111001101001001010100001000101101001111011000110111111000100111011111 1111010111001111111111100010010101110000110110001011110100001100100100001001011111000011100110111011010010101111111000110100011001110110100001010111011100111001100101110011110001110111000011100001111001101000110000111110010100001101100011101011000110111011101010100011110110011100011101001110000101111100010000101001011010101010111101101001000001110101100010001000011001101000101100000001111010000101 0010100100011110110011010101010011101101000000101000011111000011000101110110101011110111100011100000011001111110000101000111100001001000011001000100011001011100010110000101100110111110001011100110111000110100010011001011111000111110001001101111111011001001011100101010000000110001011001000110111000110001011000111001110101110100100010100011110010101000011011010010111110000000111011100110110010110001 1100011011110110001000100010101001000110001101011010111100101101011011001100011111110111100101000010001110001011101100000100100110101001111011101110110001100011000100011100101101111000001110001011010010110101110011110111000110011000000011110101101110111101110011100000000111101100011100111001011000110001110111110110010001000011110100011111110010111111010101100001110001001100011001110100000110101001 1110110110101000010011001001110111110001010101111111001011110100110100010000101100100100110011100110111111000010011110101110000010011111011110001001001011001000101101010000000110100111100001101011000111011110010001101100001111010100000100101101100001000001000011111101010111110001011110101000111001000000111111110100110010010111001101101100011010011000010000110010110010110110110000111110001110101100 1001001100111010101100000001111010011000110101111101011101001001111101001110111101110000001000101110100001000001000000010110100011001010100010000110001111100010101101001111101101010000110100100011111001001100110000100111100111110100001010101000010111101001001011011101110000101001011111001000000001001101101011000011111001100010010001110110000111010100110101001011101111111101100010011110011111000111 0001111001101101111000100101010010110100101000001011101110010100011101110000001110110111100100011010011100111011000010010011011111000110011000110110000110000001101010101011100011100110010101000111100101011101000110100100110111101011010000001011010110100010100101100001001111010001111101101101110000011000100010011101111101010111001110111011011100011011111110111000000110010010000110101011111101110100 1011100010011000011010100010001111101111010111100110101011101101100101101100011010101111011110010101101110001011100101010110111011010110011001110100001011001000110100010101010101111010011111100111010001011101111000010000111001101010000001011110011001100111111101010111001101010000001011000010001010101011010011000001000101000101111111100101111110011000110101001000111011000100011001010000001011001010 0111001110011101111111001001110101000001011100011011001000001001000111110010110011110010111100111100111110001010001101101011111101001111101010001011110011000101000010111000111110000001101000000000001011010001000001111010010111100000111100011101110111100110000101001010100000110001001111000000010111000110111010111010001100000011000111111100011100000010101010011111111000111010000001011110010111100100 1110100111100101111011101001000000110101001010111010001110100101110110100010010100110011101000001101010100000001101010001011001001000010010100111000010011000011101001101111010011110000000000101110001110110111011111100100111011101001110010101010110010110101000010110001001110110100100001011010011010000101100000111000110100011100000000001011101101000000101010101110000111011111000000111000111001000111 1111100100010010011110101111110101010000101101010110110011101001011100010001110110010100101100001100001010011111110010101000100101110101010101101111110100001100011100010001110001100010000000000110010000100100110110111010001111100110100101110001100001110110100110101011110111010110011000010001101100111010000000100100111000000101000000110001100110111110101111011110001100110000001011100000000100100000 1100011011000100100010100110100011011010100100011110001101011100101011100001000111011001100111100001100010011100000110100000010111001101000000101011100011110100100101011100100101110001010001001100111001011110101011000001101110011100011000001010000110101011101010111101011000111000100011101111101111100111111001110000100111101010100000101100000111001100000010101111101100011000100100101110101010110011 1001010100110110100100110001111001000011101100100100011000010100111110111110010000001100101000100101010011101100010111101111010011110001000010001011011111110010011110110111100011100010110100111101000100010110001110010101011110011001100110111111000100101101101111111101110001010100100110100110110101111110000010011000111000011011110110000110001011111101110001011110011011010000110111010011111101000101 1111010101011011110111001010110101111100111011111100011011011110100110000000111001011101010110011000000110101111111101011110000000000010110000111010111100001001100000010011001101100110011110111101010001111110111010100110110111010111110101100100001011100011111000000011101010101001010001011100101010110111101010000111010110110010011011001011111000101101000110001100011011011101100000001111111001100001 1111001110101110100001011001010011001010001000001000111010110011110011000100001101101001110111001110110011010000100010111111100101111000010110110101111001011110011101001001000000010010110111101010000001001011110011100000001101111100000001100011110010000001000110110010000110101101001110011001100010011011000110010110111000110101100111001011100100000010000110010011111110011000100001011111011101011100 1000010000111111111111000010111000000011111000101111100100010110010010011001100010000101000000010000111001011000110100111110011001100011011101001111001001011011101100101101001100101011010001011110000000001001001011110100010010000000001101000110000101001010001110111100100010101001111111010000100101101011010000000100101110000100000110011111100001000100101111110011110000111010010110110110101011110101 1101101110111101000000001111001011111100000000011110010011100111100111011001111000110001111010000100000100000100011111101100111011010011100101110110100001001110001101111011000010010011011111101010111111110001101110101011111111100000100001010100011111110011110101000101100101101011101001101000110101110100010011100111000111110000110111101101111100001011011110010100001011011010111101010101000101011010 0000110011011001000111010000101111101001001110101111101010111011000100101101101010100111001011001010001010101101001101111110001000010001101010011001001011000110110011000000001111000111000111011100110101111001101100000100100110011100011101011101000111100001010110011001100100011010011100001100100111001110000111011111111111001001100101110001100000101101100110000010101101011001011011011110010001011100 0111011000111111010001111100010001111110110001100001100100111000000110101101010011101110000111001100111110000010000111100111100011001011011011100001010000110000010011001100111010001010110111111111000110001011110011101000010011011111000110000111010011011100110100011110011111011100010001111111101001100010000001100011111101100100011110000001000111011111011001000001010011011101001100000110110111001100 0010000000001011110100000000011111010010000001010111001001010101000110000100110001011011011101000000010000100001000110000100010100010001011100001001001010001000001111010001110011011100000110010001010000011011010100010001111000110101110001011110000000110011011010101111000011010110101100111000011000001000110110100011110111111101100001011000101011011100101111111000001001000000011001110111111111011011 1101100011111010101010110110111011010001011101001010101010011011111000000111111111101001100101101100010101011001110101000011011110101111010011011010111111101110110001011001011011001001110111100001100101110001010111000010011110110100010110101101101010100110101110101000011110110010001011110010010010100001100111011101110001000011111010100101010111000011010111111100010010111100110010100101011000111101 0011011010001010111001101100100000000011010010010111101111010101111001001100110010110001101100001011001010111110000110110110011010000000110011000110111011110100110010100111000100100111110100010111110000010111111100111000101111111000000111100110111101101011011111010010011111000000101010010111101000100111010011100011011111000100000101001100010101000100100011001000000100000001100101000010001010110100 0101011100100100010000111100010100001100010100011000110011001000101101111111101000111010000011101010011110010011110011110101001000010010010110001011110011111101110000001110011111011110100101110010101111010101011110000011111111001000010111011101111111100000101000011101011011100011010100111101010000110011101010001010001010010100011110101100000100011111100001011010000010010101111011101100101010010000 1010110001101001110000001010101010001011011111001100011000100111011010011110000101110100101100101101100000100110001011011010010010100111111010110011110001110001111010101110011100001011101110000001000000011000001010101110001111101101101100110011000100111110101010000001110001110111111110101111110011001000010011010001000100111101010000000101011101101110011011100110110100111011000101001000011011100000 1100001001100001011100011100011000101111000010011001100001011000010000110001000011111110001001111000000011111001010100111011000010101101101101110100000000010111011000000011000110001100011000010010110011110011100100100010111111101010111010011000111100010011001011000101010111101001110011001110101000100011011011011001100011101001000110001010011010000110001001000011111010010000101000110001101000011001 1110011011111000011110110110100001110010100000111111101000111001100000100100000101101000000110111101111100011101101001010011110101011110101011000010100010100101000001110110011101001100101100011011011100101000011111101111110011101110100000001001001111110001001110110011010010111010111100010110000111011001000101011011101100011100011011100011101110111111111000011011100110101111010100100001110100110110 0110111111101110100001101110011011110001110001100100011011001001011110011101100010100000100110001111011111110111010011001000011011000010111001111101010000011101110110011001110101001110111000010110011010010110100111100110001101000001101001111100100011000100110100110000011010000011001001001010110001001000100010001111001111111100110001011101111100010000100000110010100010010111011110101011001101000000 0011001100111110110011110101000111001100110010110111100100100101101111011011010110110101101110011000011101100001110001010110011010000001011010001010011100100001111110100100110000110110111000101101010110010111100011100010100101010001110101011100101111101000001100010000100100101011011111001000001100110110011110010111101010110011111100000001000101101110110011010111110110010101111010111111011011100101 1101111001001111011100110100110111101011100111000101010000110111111111001001000011111000010011001011100010110110001010010100110111110101010001111110010011010000011110100010101110111011011001110100110001110001000100001101011011100111100011010010101000101000011001010000001011010101001101000011011001101001000011011110010100011101010001101010000011110100000011100001000001000010000100000001001011011110 0011100001111100110000110100101001101110101111101000010101001110001001100001100001100000100111000111000000100011101101011100010001001000111000001111110000011100000010001011011100110111011111010100010111000110010001001111111001010010011001111111010110010110000101101111101101001000110101000000101011001101100000000011000000100010111011101000011010101100110001000001001000111110010100110111110101100111 0010110010000010100100000101011111111011110001011110011011100110111010010010101001101001011101001110000101001100110110010000011111110011011100000101000101101011111110011111110101110001001010010000111111000110110010000001010011011100010011001100100101001100001010110101000011010111111111001000110100110000001101111100010010110111001110011110011001011011011001111000011011100110000100111110100010000010 1100100001110000001101110111010001001111100110011011100110110100011000111000001101001101011100000110011100110110011110111001011000001001110000110101111000100100011010111010100011101100100001100001101111000000010000000111010011101011010101110111111000000100101110001010001101101000111010111011011111101100111110101111010101001101010100101000010011001000110100010001110101010001110011000010110000010111 0110111001110010100110011101011111001000101001000000000001101110001010011000010001111110010010110110101011001001010101101111000110000000110010110000101100011101001000001001000011000101010110011111001011011110101001101100110000001110000100000001010011111011001100101100011010010111111110100101001000010111000000101111010100100010100000000000000110000000111110100010111000111110101010101100011101001100 1101010100100000101111101000001101010001001111100011001100100110000100011100110111010111011011101001110011010111001000111011100011011100111110001100010010111110000101101010111010100110010000111000010001101100110010000111001011100011010101100100011110110011001010011111100111110100100100111000010001001011011111000101000000011100011011110101111011000100000111110001100110110000110011111000110100111110 0001010110111110110101010001100010001111111101111110011000101000010101001011011010000011000101000001000001111011101111101001001010100101100000110100001111000000000001000001111100000001011001011001001111010110111000010000011011100000100011100100110110111000100101010011011110101000101101011011001110110110110001101101110110000101000100011110011000010010010101111110111110101010000100010101010010111001 1111001011001001111011010100010001001000010100110000100010101101111001011100001011010001100010110001110100001101101000000100100100110001010000001110110100000010000011101001000011001011011101001100001101100011000100111100010101100000010111011011011011100111100000111101110010001111100111010011110111111001100111110111110100001111011110110000110101110110000101011100111101011000001010011100111001000011 1110100011010010000110000110110010101001110011101001110111000010010111011000001000011100101101101100110100011110000100001100101001111010111010100110010011101101101100010001011111101011111100100110001011011111100100110011011101100001001101001001100001111100001110011111101011011101001110010100010100111011001001111001101010000011110110110010001010111110101101100110110011100100101000000000101101011101 0101010001100111100111101001100010000110110011101000000010000011100001101000111010011111101011010100010110010011001011000101010111001011010010111101100010011100111000000101101101110011111000010011100001000001000110100000000000101000000000001111011011000000011001010010011101101100010011111001011110011111000001110001110011110011011100001100010010110100000011001000010000000101011001010001100101101011 1101110101110110101010110010110100100110110111110100110110111110110001001001101101101010000111100010010100001101000110001000111011110011010101011101010011111000111010111011000001100000101111011101000000111001000101110000101000101100010000001100011100100001110010001101011110001110110000111101010010110101100011011010101001111001001001110001110100001110101111010010011110000011011010001000011110000111 1000010110011010000001111001111110100110111011101100001010001000010110010110100011111000011001000110011100000100110001011010110001000110111000101001110011010111011001010111001110001111110010111111010011011000110110101001000110010010001010111011110110101010110100011001010110001110101101001010111100101100011101001000111011010110100010111010100100100000111001110011001001001101110110001011100010111000 0000111010101010000001111000000111011111011111000000111110000000111011100001100111110011111111010000111111111101110100010010001000110111010001010010111010111111010111111101110101110101111011111001110000010000110100101110001001111000011000000011110000110110001101010110000101011001011000010011110110011001000000111000010110000100000110000100100111000110111101010001010100100111101100110100110101110010 0101100110111001111000010010110111100000001100000001010001110001101010000011000100000001011101100100111000000110110111100100111100000001110101010110010101110100000111001111111010111110111000101111110001110100010001011010001110110010000010110110110000001011101111011100111101101001111011101101000100011111011110001101110101000011100000110011000001100010100111001100110101000011110100100000000100011010 0000100011110100000110000101101001101010101000100001100100001111001010010011010100110001100101000111000001011001110001100110110001101111010000101011101000100010001011100110110110101011101111111001111100001000111111000011101111100001010010000011011111100111011000010010110010101111111110011111100010111010001000011101101010010110011001110001110101011010010101111101111101011101010101110001100101000000 0100100000011001110000011100011011111011011001010011001111000100110100100110000010100011001001010000001000011101000111010001000000000100010001101000001000111011011000010001110010011110111001110100110000110100101100001101011100011000101001100001100111111011001011100110010101000110011101011101000011101100110100111011011010011010111110011101001000011011010110000111001101001111010011010000111010100000
cTrader AlgocTrader

【cTrader】VS CodeでcBotを作る方法【Automate】

8/11/2022 8/13/2023

この記事の内容は古くなっています。
cTrader4.8以降ではより手軽にVSCodeが利用できるようになっています。(記事内追記部分)
またcTrader5.3以降では組込環境でもMonacoが採用されたため、そのままでもそこそこ使いやすくなっています。

cTraderがなくてもcBotが作れる!

cTraderなしにcBot作る人なんているのかわかりませんが、まぁとにかくcTrader4.2からはcBotやインジケーターを作る際にcTrader本体は不要になりました

これにより開発環境の縛りが一切なくなったため、普段使い慣れた環境でcBotやインジケーターが作成できます。

ここではVS CodeでのcBot開発方法を紹介しようと思います。Windows前提で話は進めますが、MacやLinuxでも適宜読み替えていただければ開発自体は可能です。

あえて「VS Codeで開発したい!!」と思う人なんてVS Code使ってる人以外にはいないと思うので、VS Codeについては詳しく説明しませんし、この記事はある程度プログラム経験がある方向けと思って書きます。

 

cTrader公式ページ

なお、VisualStudio Codeを使った開発方法については公式でもちゃんと説明があります。

Using Visual Studio / Other .NET IDEs – cTrader Automate API

以下はこの公式の情報を参考に手順を解説したものです。

 

(2023/8/13追記)

cTrader 4.8以降ではVS Codeでの編集に対応済み

cTrader4.8からは組み込み開発環境のツールバーから「Visual Studio Codeで編集」を選ぶだけでVS Codeが利用できるようになりました

下記の手順は基本的にcTrader 4.7以前をお使いの方向けの説明です。

(cTrader4.8以降だとしても.Net 6 SDK & C#拡張機能までは必要です。)

 

VS Codeを使ったcBot開発

ちなみにIndicatorも最初にフォルダ作る場所が違うのと、コピペするテンプレートが違う以外は完全に同じです。

前準備

.Net 6のSDKが必要です。SDKだけ入れてもいいですが、何も考えずにVisual Studio 2022をインストールしてしまうのが楽です。

Visual Studio 2022 の新機能 | 無料ダウンロード – Visual Studio (microsoft.com)

画像のCommunity2022をクリックするとダウンロードされますので、それを実行します。

インストーラーが準備されこの画面がでたら.Netデスクトップ開発だけチェック入れてインストールしておけば必要なものが一式入ります。

 

VS Codeの拡張機能

VS Codeはインストール済みですよね?

C#拡張機能が必要です。入ってない場合は追加しておいてください。

必須の拡張機能はこれだけです。

この先も一応説明しますが、この後の手順は自動化スクリプトを用意しましたので、よかったら記事最後のダウンロードリンクからどうぞ。

 

フォルダ作成

マイドキュメントのcAlgo/Sources/Robotsに新しいフォルダを作成して好きな名前をつけます。HellocBotとでもしときましょうか。

そしたらこれを右クリックして「Codeで開く」を選択します。

「Codeで開く」がメニューになければシェルでも開いてcode ./HelloCBotとでもしてVSCodeでこのフォルダを開いてください

 

プロジェクト作成

VS Codeが開いたらターミナルを開いておいてください。Ctrl+Jで開くはず。

あとはここに公式にある通りのdotnetコマンドをひたすら打ち込むべし。

dotnetコマンドはVisualStudio入れてれば使えるようになってるはずです。(多分SDKだけでも使えるはず。)

HelloCBotの部分は自分でつけた名前に読み替えてくださいね。

dotnet new sln
dotnet new classlib --name HelloCBot -f net6.0
dotnet sln add .\HelloCBot\HelloCBot.csproj
dotnet add .\HelloCBot\HelloCBot.csproj package cTrader.Automate

順番にソリューションの作成 – クラスライブラリプロジェクトの作成 – プロジェクトをソリューションに追加- cTrader用のNugetPackageを追加しています。

(cTraderのcBotやインジケーターの実態はライブラリなのでクラスライブラリプロジェクトとして作成します。)

 

テンプレートをコピペ

Class1.csというファイルにcBotテンプレートをコピペします。Class1.csという名前が気に食わなければ変えても構いません。

このファイルがcBotのメインソースコードになり、cTrader組み込みの環境で開いたときはこのファイルが表示されます。

ここにcBot用テンプレートをコピペします。

using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None)]
public class MyRobot : Robot
{
    [Parameter(DefaultValue = "Hello world!")]
    public string Message { get; set; }

    protected override void OnStart()
    {
        // To learn more about cTrader Automate visit our Help Center:
        // https://help.ctrader.com/ctrader-automate

        Print(Message);
    }

    protected override void OnTick()
    {
        // Handle price updates here
    }

    protected override void OnStop()
    {
        // Handle cBot stop here
    }
}

インジケーターならこっち。


using cAlgo.API;

namespace cAlgo;

[Indicator(AccessRights = AccessRights.None)]
public class MyIndicator : Indicator
{
    [Parameter(DefaultValue = "Hello world!")]
    public string Message { get; set; }

    [Output("Main")]
    public IndicatorDataSeries Result { get; set; }

    protected override void Initialize()
    {
        // To learn more about cTrader Automate visit our Help Center:
        // https://help.ctrader.com/ctrader-automate

        Print(Message);
    }

    public override void Calculate(int index)
    {
        // Calculate value at specified index
        // Result[index] =
    }
}

 

cTraderで「新規作成」したときにでてくる初期テンプレートですね。

ここからあとは好きに編集してください。

 

ビルド

ビルドもコマンドで一発

dotnet build --configuration Release

ソースコード付きならこう

dotnet build --configuration Release -p:IncludeSource=True

 

出来上がり

ここまでで(Windows環境なら)もうcTraderで使える形で配置されています。

実際は作ったものを動かしてみないとなんとも言えないのでcTraderを一切開かずに開発するというのは非現実的ですが、ちょっとしたインジケーターであればAutomate画面は一切開かずに作れちゃいますね。

 

一つずつコマンド打つのが面倒な人へ

「VS Codeは使いたいけどdotnetコマンドで一つずつ作ってくのめんどくない?」という私のようなものぐささんのために(というか私のために)コマンド一発で新しいcBotやインジケーターのテンプレートを作成するスクリプトを用意しました。Windows専用です。

 

ダウンロード方法

下記リンクをクリックするとブラウザ上に中身が表示されます。コマンドが羅列してあるだけなので、なんとなく何してるかわかると思います。

(2023/5/7 追記) PCに.net7が入ってると7を使おうとしてしまいビルドできないため、フレームワークを.net6指定にしました。 (追記終わり)

使用する場合は右クリックから「名前をつけてリンク先を保存」を選んでパスの通ってるところにダウンロードしてください。

 

使い方

ctindi 新indicator名
ctbot 新cbot名

このコマンドで勝手にプロジェクト作成からテンプレート挿入、VS Codeを開くところまで一気にやってくれます。

ついでにビルドタスクも作るのでVS CodeでCtrl+Shift+Bでビルド可能になります。

 

使用上の注意

コマンド実行用です。ダブルクリックしないでください。(多分何も起きません)

また、実行には.Net6 SDKとVisualStudioCodeがインストールされてる必要があります。ない状態で実行すると中途半端にフォルダとか作られた状態で落ちると思いますのでご注意ください。

ざっと作って自分で使ってるだけであまりテストしてません。自己責任のもと利用いただけるようお願いします。

なにを血迷ったかbatファイルなんぞで書いてしまったのであまり編集したくないのですが、おかしなところくらいは直しますので言ってください。

使う人が多いようであればなんかしら別の方法でちゃんと作ります。

 

(2023/5/9 追記)

Windows11での注意点

Windows11ではOneDrive同期が自動的に有効になっており、そのままだとcAlgoフォルダがOneDriveフォルダ内に作られてしまうことがあるようです。この場合はbatファイルはそのままでは使えません。(動きますが、ソースコードが別のところに入ってしまいます)

そもそもこの機能、無料のままではすぐに容量不足のエラーに見舞われるやっかいなものですので、OneDriveに課金予定のない方はWindows11を使い始めたらまずはOneDrive同期機能をOFFにすることのをお忘れなく。(私は気づかずあとから面倒なことになりました・・・)

OneDrive有料会員の方は同期機能を使う方もいるかもしれません。その場合に上記batファイルを使うなら内部のフォルダ名を書き換えて利用してください。

 

(2022/8/17 追記)

新規作成後インテリセンスがうまく効かない場合

私の環境だけかもしれませんが、新規作成後にomniSharpのエラーがでてインテリセンスが効かないことがあったので、解決方法をメモしておきます。どうもスクリプトの使用有無にかかわらずときどき起きる現象のようです。

  • dotnet clean
  • obj/Debug下の.Net6.0をフォルダごと削除
  • ビルド
  • コマンドパレットから restart omniSharp  する

これでインテリセンスが効くようになるはずです。


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

新しいコメント

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

cTrader's Life

© 2026 ajinori