1001101100110101100010111111110011100001011011001011100010000100000101110010000100000110101110100010000100010010010001011111101001111110011011011110100101011110010110110110111001111110001011001010101000100110011010010011110110010100101000010011011101111111101110010111010100010111001000001011000011001001100100101111110000100110000000111010001111011100100001100010001110100001000010011010010110110101 1100110010001100100000111011111110011100101111100011010110010100000011110011001010101101100111001111010110111100001100011100010101000100000111000001111001001001111110111011100010101111011111010100010001111001010011000000001011001100000110111111010011000111001010011010000011100010111001111110111110000011000011000000011001011101001111101100101001001011100011000101110100100100111001111101010010000101 0100110011011110101100011111001011100111010110100110101100101011010010110000011111000010100111111000011101110010100000110000110101010110011101000011000100111111110010110000011011101100000111011101011110001111000000001011100100100110011111010011001100110000110101000000001010100000010110111101100100100001000111101001101100001100100111001110010110100100111011110111001011100001010111101100110011101100 0100011001111001010010000011101010011011011010010110010110011110111101000111011001001101001011110110110010001001110010000011100100000100000101001110011110111001101001001000110110101110110010000010101110000101000010010101111010000110101010110001101101011001101011100001011111010000110011101011111100110110010000100111101001101101111011100101010011000011101000011000100111110011011100110100100011010100 0100100100111001001111010111011001110010001110101001001010011000001101110110101100101010001100111001001001110110010110001000011011011010111100110011111011010100001110111001001111000010010100010110110011111110011110101101000111110000011010000001101101101111011011000110101010010000111000000110011000011000001100011111011001010010100010000110111011101101010001111100001111011100101000111001010100010101 0100011100101010111110011101110100110000111001110010000010001000001010011001100001100011101101000101001100010111001010010111000011011010110001110011111110111111000111110110001110100011101101011110100100101101010100101011000001101010000101001011011001000001100111101000111001011010010011111000110100011011100001101001011111001011100000000111110010011010100000000011101011111010001110001111100111010101 0110010000000001110111100000111001010101011100111010011001001011110111111100000101010100101010101010111000010001000111000010110000101001000110111011010111011110110000010100010000100010010011111000110010000001111001100000010110100010010110101000101100000110110111001001010000000111100011111101100001100100000010100110011100011101010011001101110000100110001000111101111000101110001000110111001101100111 1111101101101110111110110011101101000100001111011110011011110011010001000011000010110010010000010011100101010101000100111101101011111001011101101100111100111100111100100011100011110010000010001011000100100101100111011111111101111010001000100010101100101010010101101001000011001100101000000011100010001100111111001011001000111011010010001111111011100001011101001111000110001101111101010110100101001000 0110100001000000101010100010000000011000110010111111101101010010000001000011011101100000010001110100110110110001110100010110000000010001000011000101011110110011110011111011100100100011100000110101100110101101011101000001010000101110111010110110111010111011000101000101100111100001101101011010000010001101010001010011010101011001011101100100100110110111001111011100100101011000001111100101100011111000 0111111010000001100011111000110000111001100111110100001001011010110010010101011110100101011010111000011011001001110110111001100101000101001100010101001000110001111011011101010010111100010111010010100001011000011011000111110001000011001001011010110011011011000101101100000010001000011010011010011100011111010001000000100001010010000101010101001110100100011000000101001001011110101111111110000011001010 1100110100010010010101111111111000111000000001010011100010001000011111001110100000100110010010110100010110001000011000111010000011100001010111010111101011110011001000000111011111011100110111110100011101001100000101001110100101110011001111101101011001000100101100100011000010000011000001111101001001000001001010000011110011110000011011100101100000110010110101011001000101010010001111111001110111111000 0001001100000011111010000010100001001100111011101100110000100100110101100000010011100001111100010011101100111100001101101001101110001101000100010000110010011010110110001110011100101100001101111111001001110110101111110010101111111000110011011001011110100001010111000110111001000110000000111100101001011010010100110011111011101010111100010101010100000111001101100110000011001010011010000000110010010110 1000110100000010011100111110010001100000110100100000001011100011111001110010111010111010101010010100000100111010111011110101011101101011101101100010110101101111101100101111010110111110110100010101111100001011011011001111010101011011100011001000100110001010101110011011111001010011010100011000101011111111001011110100011111111000010101100100011101000110001111110100110010111001001001011000001100001110 0001000100000011000111000010011001000100110100110010000000001010111010010110011101111010010100101110110000100101000011110001011111110101001010001000011000011010011101011110110110111000111000101001001101010100101010011011011111001101101010101010011010110100010111011000001111110110101101110110011010001110101001011111000011010101001011111010001110011100110110000100100010101110110000011111101000000101 1110101110110111110100011101000000100001100100001001111011010100000111110110000001011110000000011101000000101010110110000111101000100101110001111100000100000101001010100000001001100101100000110100000110101011011010100110111001001101101101000111010001010010110001001011010001101011000011000110000011101101000101101011110001110110101110010100100111010101011010000000100001011101111001011101001010110100 1000111110100011111000101100011011001011111000001100001101001000100011010111010010111100101001000100011011010000001010011110111100111001111110001010010100011111110111000011110010001110111001001111101101001000011110011001100101011111011111011110110011101011000000000001100101011100101110110100001000000100011001001101000101001100010100101000010110100001111101010001000000011000100110100000111111110011 1101111011000100001011000110010101101011111100110000001001000110101100100001001000010000111111000101111010010111111110001101111010111101100001100100111110010010011001001111001100010101111110100101101010110001110101111101011010011000101001000010110011101000010111010101011111010010101111010000011111100101111110001010001011111001001011001111000100000111010000110100011111000101100110100101011101000111 0101110000010010000010101110111101010011100100110100111000111110101110011101110010000011010000001000011010111111110101000010001101010010101010000001111000100111111111011010001001110111001010111111010010010100110010110110011101100010101101101000000011010001111101100110111000011000000001101110101110101101111011000110111000011111111100001010011000000001001000111101101100011001110111011100011110100011 1011001110011111101001000000101110101100100001001101011100001111110010101010001111000110011001100001010010100001100111110010111100111101011010010000101111111100110000010100011101100101111011110100000011101001000101111110011100001110000101110001011010011001011001101100001111100000011100110001011000001000101100000001011011101001111010001111110100000110011000110101000010110010011101110100110010010000 1011000000011101110010100111100000000110011000000110100111100101100110000110101001100011011110101100000100101000011101000011101111110100010101010100010010100111111000001111010010100010100000000101100010101111101100110101001101111001100111000100100001100101000100001010011001010000101100101001010101010011101010100100100011011111010011111011001000011100101000010100101101100100000011110100100101001011 0110001101010100101010000001011000110100111001011011110011010010100000111111111010000111001011101001111100110100000101100100011111000101011110111100000111010000000001001001100100010100101100010111110011001110000011001000100100101101100100000100111011100010101010011010101111001000010010111111011001111001001010001000110010001111101011001110110010001000011001110101011000010101011100100110110101101000 0110111100100001101000011111110110111110101111010001110110101010111110010001000000110001010001011100110001010011111011010100100101000101001001010101111010010000011011101001111000001110010101000011111111100111100010110111111010001011001010110110111000100101111010001010011011100111011010010101110110110111000000100101101101110111001111111000111011011101010100100110001011001001000101101111001010100100 1001101110101111101000011101010110101001101001011110001100010111111001011011011001010110101000100100011111110100100001010100100100011011011111100111010111010000010100101001011001100100101010101111110001011100110101001101110101000101111010111001111001101110101100011011111001001101101001111000100011100100001000000111010100110111000001110010000100000010101011001001101001010111111101110100000110100100 1100000101111001110110001010010100010011111010111111101001000111000011010111101101100011000100110010100110000100100100001101101110011011110110000100010111011110101110101110100010011100100011010110100110010000101110111111110010101011000010100001001000110010101110001011111111110010011010101111111101011010011110000101011100111101101011000010000110001001001100011000101101000001111010111000011000000111 1011000001110000101110111111100100100011111101101000101101111110010100100000011111101111101111001111110011110111010110010000100010110000010100011000110011000010110010101101100100111111100100111011001111000010110000001111101110111000100011111101010100001011010010100100110110110110101101001110111011011010011010011011001100011111001111110111100110100011001100100001000010010001010100011010110110011110 1111100110101100110111100111001111010001101100010111000100010101000010010100101011101011011110110000001000001000101001111111011111101010111010110110011000110101001101011000000001111011010100111110010111110010101000010110101111101111001001001111010011011111011000111100101011001000010110001110100000000011010110111011110111101011110000010100000010110001101111010011011100011001010111100011111110010011 0101011101010011011110010100010100000101100110101000011101000000000010101011110111101011011110011101100101111100111000011111010000111101000011010000100100111100111010101100100100111010101100011000010100111110110010101111100100000000010100111011101101000100100111100001011000110110001000101000100011001101011011110110100111011000111001000011011011011001011001101111011110101111111001011000010000100011 1101101010000111100010010010101100100110010011100011010111001010011101110111010101001000001100110011010110111011101110101101101000110010110000101100000100101010010011110000110001110100101001010010010000101011101011111101001010000010010010011100001111111101001000011010011100110110001100110010001101011111100111001101100111010011001110111100011111001111011110110010010110010010011101110001010101101010 1100100110000110010010010100010001100100101001111110110110101011010001011000010011111000001001000110001011100010001011000011010101100000011110011011111000100110100101111110010110010111101111100110101010000100111000000100100111011000100001111111110000100111010100001110101111001001001110111110101010101001011010100000000100110101111110011101100100000110111000011100110100111110000100010110010000010101 1101001001001110111010000011011110010001110001100011010101101000001100011111111011010101101010110110011101011000111100101100111011010010011111011100110110010000000011001101110000111011010110011000000001000001011100100101110111000000011101011110001000011010101100111001011000010010000000111100010111011101101000111100010000001010010100100011100101100011011100100010000100010001010000111111101011000010 0010111010000100001001101000010110100100010010010001010000001110101110110010001101111001010111001100000000011010000011010011111111010000001101101101101010101111011110111010111001110101000111100000000001110111011001010010001000010101000011011100010001100101001000100001100111100111001001110011000001100111010101110010101100111110100001000110111011101101111111011111100100110111111000110011100100111110 1111100011101101011010000011101000100010101110010001100010001100100100111001101110001010101001001010110101010011011100110100110100000010110101000011001101100001010110001111101010111010101101001100011100101000100001000010011000110001111110111000010001111100000011000101011100100111110100000111101001100001100001011111011110000011101001010011101110011111010001100111100000111010011101111001100011101110 1100000100001000101010010100010001100011111011100011101100001101100110000110011100101011011011110010111110110011101001100101010101101101001111111000100010000110110000110111011101011010010111101101000001100000011001110110000000101101011000110011101101001101110001100000011100011011010001001011011001100010011110001111000100010110000111001001001001101010011101001011110001001010100100110010011110010111 0101001110010111011011000010001001100000111110110000011100101101110000100000101010101001001010100111100000011111110110110010111011100111111110110001111111001100000100011101011101101010010111011000011101001111101110010001001001011010011111101110100100001100001100011010011000010111011011111001101111000000001011100011001000100001001010011100101010110011110000100010110100000100101001011101101100101101 1001000101001011100010000101000111001011011010010110011010011101110101110101010001101011000000110011111000111011001001010111010011000101000000100010111100110101100110100001001110110000110101001110011000011110100000100001111010001100110100100000000000100000000001100101010011001101110011101101100100000101111011000010101110100101111011011101001111111001101000011100111111111101011111000001011100111011 1001000000111011101010100010001101111110100111010011011110101111010000100101101100000011101000111110010110000000101000110101010100110100011001110101001000011010000011011111101100101000001001010100011010111010001001111000110101110001100111001101101011110101111000111111011011000001110110110111110000010010000111100001100110011010111100101101010011110011100010001101001001000111111111100011011001011000 1011011011000110111100000010110101011111110011010111001101011010100111101111111010000000010110010001011111101011101110010011101001100000000011110101101001011011100001110001010011001001100001000000001111001001001100110010010010000110011110101101001000001101011011111011010011000100001110110010000110000110100011010110101100111100110001100101001000101000110000110001111000110000000011000000011000000010 0001010001100001100100010101101101101001001101001011000011000110101101001100100001001011010110111011101110010111011000011110100001111100001101010111001000001111111011110011100001010000010000100100010001000101011000000111001010001101010000010011010111101110110010101111100100110011010011101011100010101110010111110011011010100111001011111111110110001001100001011001110100110110010100001001100000110100 1010001000001011010011011000011101101111011110000001011111110110010011110010000101100101010101100100000010110101001010111100111000111100000111101100110100101011110110000010001101100000000000111000110100000000110001111101011011111101101110011101010100111010100111010011011101110000001011111001000111001110110011111011001011010010000000000101101001110110101011111010110110110010111111101101010100111101 1101010001000011001000001001110100111100001010011011111101010101100001010101010011010100100100101010111100011111000000100001001010101010010001111011111011100101101100100100001011110110111110011100001111010010100110011110101000000000101100101110010010100000101110001100001110101010010001011000010110001011011110111010011110110101011110111100100011010001000111111101000111111111010101000000001011011001 0010100100000010100001001000101001111101010001111101101001111001101010011111011110101000111011011100111111111000010111110111110001011001011010101010001110011110110110010100101001000110000011100100111101100000001011100001011101010100111010001111100000001010110101100011110001101110011111001101000100011001101010111101101100110010000011101000100010000111101010000011111011110011001111101011011000101110 0001100010000110000101100000110110110011000001100010011101110110110010001111101110110010101010011101111111100000101101010111001000110010111101010100001111000101100110111111010111100000100101010010100010010000000000011001100101001001101100100001000011001001010001100110001111011111000100000110011110101111100001011000011010111101011100011100011000110000001000011111001001000010100010101101101000001110 0011011001111110111101110100110011011011000101101010010010001010000110111000110100101100000111110111000011010101111111101111010100100101101100001111111110111111100110001011011110110001011100010111110011111111101110100010100010111110110000111010000011001100001110001100010011001100111100001110101110011111101000100110000001111110100001000010101011001110110111110100010101100001001000111010011011001101 1110000101111111100111001010011010100110100110010100001101000000010010000100111011010110010001110011011101101010101110011110010010000111011101101001010011110100010101001111101010111101100110011001011011001011000100000101001001111010010101011011111001000111110011111000001010001001000011000001110110000001111110100011101000000001101111101100101111001000110110010111100010101111000111000101110110100101 1001101101001101001111001010100000000011010110110010110001010100001100010100100110010100000011111100000000001011011010101110000001101011101101010001110010011000101100010110011001111111101101100001101110110100100101101001010011111011101100101110101100110101001100101100111011011111000101011110100101000110010000001000110101101011000001100111101010001100101011101110001000100010011101010111110001001100 0111010001111001010000111101101000000111100001101001010011010000001100100101100111000000010001100110101001010001001010001001011101101001000010000101001001001110010101001011010100011111101000011011111110000100111111010101100100001101110111110011111001100101000001101111101111000110000101101111100011001101101001000101111111100011011100000000110000011001000010111111111100111000110011100100101101101010 0000010101100001000111001100000111000111100100111101111110101011100001001111010111000000000001110100101010100101010011111111001110110000101110000100010101010100101011010101011011110000100110010101101011010110101011011110011110110011110101101100001111010000001100110000100011011101101001011110100010001110011100001101001101110000011000011010011100001100001110011111111001011010101010100000011010001011 1100100001000001000100111111010111111100100010010101100010000110010111111010010010000100100010111001010000000011100011011001000010001101010111101110001010000101110100001100010000011101111011101101101110011010110000010000001110110100101010001010110000101000111100010011010110110110100010100011100011001100001100011100001100010111000111010110110011101011110110011110110100100000010101011110010101110011 0111110001111010110010001000100011101011111010111110001110010001101101110110001001011011001111000110011010101010001011101011001111101010011100101110110100111101111111001111001010000001111100011110010010101011000011011110111110101110100011000010010111100101100011100011100001100000110001110110001111001010110000100110111010011010011100100101111010001001111000011110000010111110010100100100001001010100 1100110000110111101100110011000001001110110111000100000001000110010010101101010000101110000111000100000001001001101110110101100100111110000000001100000001000101101110011010100001101100000101111110001101110011100100111100000111010011110111011101110101001111111010011011000001111000100100011011000100001101000011111101100100001100100010111110100001011111110010001100001001110111001101000010110101111001 0011011010000111010101001010101011011000000111110111110101100011011100101100011000101010010101001000110001011111100111110101010010110010101001000101000011011110010000111011110000000011101000111001000101101100010011101010010111000011100101001100000010110101001111111010000100000110100011111100010111110110011101110000001111000011111011000111001010001110011110000110010000110101110100010100011100111110 1110111100011101010011010011001100110000100101011010111000011111011100000100010101110011010111110011011110111100011001100000100110000110010000110001010101000010011001100111111011101010001010111011011110001011110001100110010101000100001111101011011011100111000001000101001101010101000100110101101110011111111101101100011001001100110010000001010101010000110000011000000000110100011010000111111110100010 1101110011011001011111100000010111000011011000111010100011011001111111011101000100001101100100101101001110000001101010000100001010001000010000000000011100001100010111110010101001011001101010110011100110000111101011111010010000000110011011010010110001000000110010011000000111001100100000000000101011011000101001010010101100010010100110101101000110101111001100010101010110011110101110001100110011010001 0111010110011101010111111011000110010000101101011011010000100101011100001101101101100011001000000110101110010100101001001011100100001111000111011101011000111111110000001101111110001001111101010111101001011010001101111010100110100101101001111100111111100001100000110100001111111101000100010100110001100111101010011011000010011011001010000001011011100011110001110100011010100101100101100100110101011000 0010001110100100100000000010101110101000010011111011011001111001111111100111000100011110101010011110110010110001010110111111001000000111010010110010111001001010100110000111111111100110110100100110001011110001111101101000110000010001110001010101110010101010000010001101100101111111000100001000011011111011011010111000001100100110011101000100011011011100011001011110111100000101101001101011001111011000 1110000110111111011101100101011011101111000010101111010001111011001001110100010101001100000011101000100001111000100111001100011000000101000110110001001011100001100001011000010100111000011111000111001001101010101100011001011001100100100011110011001101100001111000011010111010001111100011011100000001100100111101011001011000111010110011011001100011111101000111101000001010011000110010010000101000100011 0011111001011110010000011110110010111000010110110101111101000101010010010111000101101111000001011010100110010111110011111011101100100110110010011101011101110001111001011010100100010110001100101000101111001110011101101000001100010111011101000100011011111100011011100001110111000111110111110111011111001011001110101110100100101001010011010000111011000111111010100000000010001111100010000010000010110001 1110100110111100010000100111001111111100110011001110110110100011000001100011100110011101000110001111010111001110111011001011111001110101000001100010100000001001110111110011111110010011110010001110110101001000110100110000101110001011111001000011101000111111100100001011000001011000101110100001100000111010101001100110000011010100000001010010111101110100111001100101000010111111010110011001000100100100 1000000100011000011010100000011110111001000111111100110010011101101010001001100001100000000111000111101000000010011000100001110010101000000110000011001110100000100110001010001001000010101011001000011011001110001111100110101001000110000010010001101101100111101110000101010100011011100011011010111111101011001001100011011001010101000010000000101000111111001010100110100110000010111111101101011111110000 1101011010111101010111111111101100101001010110110100100101000010000100011010001001011110000011001101010000111110011011000000111111010000000011111000010110000101111101010001100110100100011011111001101110111000001110110100100111011010000011101011010010010100001010110010001101001111100011010001100100010011100011011110010010111111100111111110111100011110101111011100010011000011000101001100000100000010 1111000110011010010010101111100110011110001101100010100100111010101100011110010110100001000011001101001110011111111001010001111111110001101101100011010000101101001101001101101010101010101110010010000110000011101111111001000100110111101000010110110111100110001010101000100001001110000111010011011011111011000110100100101001000010000110011000000010010111000111100110001100010100101110010110000101101111 1001010010101001110010110101001000110111100001000000100000100011100001000000100110011010001111000001001111010001111110000110011000010111011001001101010000011010001011001001101011000001110100110000101000000100111110001011010100100101010100000010100100011111001010111010101101000101000110100001011001000011100010111101010110101010101101001000101110110100001110000111100111111100110111001011011000001001 1111011110100100111010010110111010011000101101101000001010011100000101011101010101110101101010000011111001011000110011110001000110011010010010110111111111101000010101001110100001110100111000111010011010101010101110001110101000111000110110110010000101010011000101011001001101001101000011001010110010111010101000100100000101000011011111111101111110101010110101101100100011001011111001100111010001101011 1011101111100000001100111101111000101110000000101111111110101101010100101101011100011110000011110100111000100000011010100000111000001000111001000011010100110111100010000010011100001000000111000010111010111110110011101110010000101001010010000011010010010001010000000000100100101101010001101101011100011110110111000001101111100000101111011001111000000011111001110101011111000001010101101011010100000101 0000001100001011001011011110000011001111100010111111110110011110101001000000011101001010011010011111010001101111100101000010111110110111000100001000110001110110110100101011011101001110111011100100001111011011001001011100010001111101000100011101011001001001100110011101011110101100001001110111001001110111100100110111101101111100011100001101001010010001011011010111101110110001001111101101110111011001 0100001000001001000000001010001110010011110010110110001111010001111001111011010111010011101110111111011011101010000011100100011100011001010011010100100010101110101110111010110110111100110011111111110001111001010101110001110011011100001110101000010101111101010110001010011001010101100000011010101001100111000100001001101100111001100011100111101101101010011001011001101011000011001101010101110110110001 1101110111100100001001011111000010110110111011101101000010101001101101100110101100111100100111010100001011100100100110011111010100101001010000100101011111101111100111001010100101111110001010100001010111001010100001110110000101100011100110011000101010000000001100000010001011101010110011111101110110101001000101010001000000101111111000101000011110000110111110010100000010110100100111001100100111111111 0100100011001100011101000100011011000101011110001000000110000001110000001100110111001101101110101100100100111011010010100111110101101001111101100111010111100001100100001100011011111000111110001110000101011010100000000100010100010100111100111010110110100010000011111110010111111000111101000010001010010011101110110001011011110000000101001110111001000001101001010110110000011001111000110110111010011011 0001000000111110011000011010000111011111011000111100001010001010110101000111011100100100001101110110111111101110101101010001111000111000010011111110101000001111111010001000001010010001100101010111101000011000100000111100010011001111001011000001100011101010000100111001011111100011010001100100010010110101001001111100111110001010011000111011111111111100101100011000001101101011010010001100001110111101 0111010111001001001101111101000000100111111011011101111101010011101001100101010101111000101111110010111001100000010100011111001101010001000100101100001100000010001111011000010011111001000011100101000111001100100010011111001011010111110100111010010001111111010111011000001000100100110000000000100110100100011110110101000011001111101111111000111010001001110101000011110100101011001011000011011011101110 1101100111001001001111011100010100110001011001111101000101100010110111001101011000001010100000011101001001101101101101000101000010011110010111011011111000011101011110001001111101000100101001011010100010011011010000001011110011101100001101000110011101111100011111111000000010001010110110000101001111110110110100111100001010110101010010111111000101110111011101100011011011000101110001110011000011110000 0101101011000101000000110010000110111010111011101001100110100110000101111101000100110010101001100000101100010101101100110010000111000100110101010010001111101110010010010101001101010111101010001001010110010010100101001000010011110110111110100101011101011111111010001111101111100100101011101110100001110111110110101001010001111000110000100001110100101110100110100011101100010100100011010001010010000001 1011100101011001001001111011011100101000010011000110011100001111001100101110111100000101101101011100011001110010101111011101111111000000010110111001010110000010111010011010000110111000100110101100011110110100101101101000100000000100001010010100110001101111010110101010100000111001011001001000100100111010110000101101001010110101110011100000001001010111111110101001001111010011011101100001011110111110 0111000111100011001000101010110000010011010100111110110001001111001111000000010000000111110011000110110000100010001111100100001000111100000011100011111001001001111001001110010000011101111101001100001110010001100100101111011100001000001101011011000011111111100111110100010001111101000010000010000000100110000110001110101010001111011000101100101111101110101001011100111100111110001100010100111101011110 0011001011011101100110100010110100001001110110010101011101111000100000000011110110011010101111101010110011000110001000101110111110100001011011100100111100000101110001110110100100000000111111101100011011001001010110010110100110010110111011010100111011010010011101100010011100111111001000011010001010001000010001101101001110101111010001101011010001101100000010000001101001101010010100110110101111100010 1001000011111100101111101001110000100001001011111011010010001010001111111101111101110011011110111100111011011000001110110111100010011111100010101000001111111101110001001000011111000111011010010000110100010110110000101111010111110000001111100100101110110010101110000101001100010001011101011011101101001111011010011111110100111011010110000010001101101011001011000110010010110000100100110100011001100001 0010000110110110000100111111100111111000100110110111001001111101101001001001011010000001110000100101110100101110100101010110101001100010111101100001100010001111000000011111101110101010101011011100100101011000100000110001100010000011100101000001000000110001101011111111010010101011010111000101010010110011011111000110001101010011110000100111100100110010110100101011100011011001001001101000110101010010 0100111010110110101001010100001110010101011111100011111111110101111111010011000111000000101011100100100001100110010100010100001000010100101100111100001001010001111010011100000001111001100001000101111011101001000010100011010010001110000000010110111011010110100101111001001110011101010011001100100000011001001101001001001100010110010011101110011101110010001001001100010110001111100110101011111001111100 1101111110000101110100000111011001110111101001101000000011100010010111110010100101101000111010110011010000110100000001010110110101110111101011100011100110101010011110000011111011001000101100110011110110101101110110000011100001110110111010010110010101010111101101010010111111011001111110100011011100100101110011000001101001101101110010001001100000111101010011100001000100000111100101101111000111000010 1101010001111100100000101111110100110000011011011101011110110100110101000110010010000001011000001101101110000001110100010111111010111010111001010011001111001110101011100101011111011110011010011101111111001101001101111100110000001011001010011011101101101001100010100000101101010010110010011100101111111101111111100100111001001101111101011101111000110011010100001111101011100000001110111110011101100101 0101000110101011111000000111101001100101100001110100011110001000100000110100111001011111110000001011101101011001111010010100000101110101101000011100010110101111000100100101011011000010011000101010000100100010011011110101000001001110100100001001001100000010110001010101010010001101111110011110000101101110000011100111001011011111101000010011111100001101111110111010111011001010111110110010001010101110 0000101010011110101110011110100100100101111011110111001110000110101100110010010110001101110010001010001000001100101111111010000101000101111111111010101010110110010111101010110101100101011001111110110101010101110101000101111101111010001001111111011000010011001011011101111011111010011101001010111111010011000111100000100111101101010101001100101000110000000000110001110001001110100000001101010110011001 0101000101100101100010100000001010110100000010111000111011100010100110000010011111101011000100111001001001101010001001100010110101011111100100101001010101000100010001010111111011001010010010010010001000001111011001001101001111011001001011110000000001000010101011101111110110110010110101000111111101101011000000110000001001011110111111010011000110000011111111010111100000100000101010000110000100111001 0000011111010000110101100110100100110011101101100011100001111001001100000011100101000111000111010101011110101110011101110000000111000101111111001111000101010011110000100110011111101110000111111111110101111101000011000010110001111010111100101001111110110010001110100100110010011010101101011000000011111110111010001111100001010011011010100001000111011101110011111111000011111011111110001100000001011010 1001000010010001111100010100111111011010100000110011000100011110000011010001100101110111101100111011101111110010011110101000111100000010101000011101111011101111001000110111111111001011001000010101010000010110100100001001111111011010000101010111000011101111001111100011111100101111011110011011101101100110010011011011010101101011100010111111111111101000001111111011001101001100111100100000110110110001 0110011001101010101100011110100001010111101100010100111101101101001011001101000001011001100011101001010001100101010001111111110000001101011110001010101101011001101011000000001010000111010110101010011100100001111010101000110010010110000101001111100110100011000000001101110101110010001010111001111101110100001110010100110000010000001111111101110011110011110001011011001011000001011000111010011110010111 1111000001011010100000011111010100010111111010101001001111000101110001010101101001111111011000110010011100001101011001001101001100011100110010001111101100010010001011000110111010000111011011100011001011100010101001001001100101000010100010010110010111110010010100110001110101000110000100111101001001100101111100111100100110010110110010000110010111101101000011011100101001011111100101010110110100101001 1011001100111011101101100110001000110000001001100001110001010010111110000000100101010111100011100100000100110110000101100000011111000110011011110111110111101001111101100101001000001010101110010011000101111001001100111010111110000111101001111101101111000001000110101011001001101001110101101001010100101101110110000101000001100110101111110010111011101110100110100100001111000101111111100011000100011000 1000010000110110100011100101101001011001011001010100100010101011010001001101100001011101000101110110100000110111011110011110000101011001101101000010001101011000111111011010001010111111110100001001011110101100011110010110100100000010000101000001110111000100110001110110100101100100001100010101000101001010101100100001100100100000101111010100011111100110011110111000010101101011101100011100111110011100 0010010000011101111000100011110011000001100100001110000100011001010001000100010010001111001100010110110010100000101100010110001111000011110100100111110100010001010000111011000100110000010011110110101001110001100001011110110100011001011011000001011000100011110101111011001010001010001000011101101011000011100101011001011010000110100111001111110010110100101100010011000001001101001010100101010001111000 0001100011010000101000001011101101001000001110001110001100110001000000111011010100001000111010111000110100110010010011111011001110000001001100011000011001010001101001101110100000110000011100111000100000100011000110010101100001011100110110000000010110100110000101000011100011010011000111000110110110110111000110001111111011100100011111111101111000100001011101100001100001100110000101100111001110011000 0010010010111101011110011000110111000000101110110110100010010101100111011111110100100001101110010010101101110111100010100001000111010001111101101111111110110000010010001100011010111100101110110111100111100101010000011011111110001011110011011010011110010011001100111010010000011001000011001100100011011101110011100001000010001111111000100100111101101010010000000111000100000011010010000110110100001010 1110011000011011101010110000001010101011110001001110101101110101111101001011010001011111001110100111001000111101011101000110001010001001000100010001100100010100010110111001011001010111010011000111111001101110001011100100000100000110001010111010100011101100000101001000111011110111000011111010100000111110101111100011011110011100001010110100010110000001110011011111110000110100000001011000111011011000 0111010011011100000000011100010010111110101111011111110011101110101101110001010101110101001110011111100101100011000010110001110100001100000110010100000111101000010100011001001110101010010100011100101101100101101001011100001010001000011000000100011010110010111000011010010101110110011011101111010001001000000000000000010110011111000111111011101111000001000110010000001100100010101110011001011000000111 0011111010001110001011010100110111101010100100011010010000010000011101000011001111011100000011100101011010001101101010011011001001110001000111110010010011010101000101010011110111011110010110010001100000001100101000010011011111101111011010101101001010110000111001110010111011111100110000010011010010010010011100000011110011011101110000010000111100101101010010001001011100110010100111110101110100100010 1110110011001001010111110111010100100100011110010110110101010001011100011110000011000101000100110010000101010010001110001010110001010100010110101101000110001101101110011010101110111011000100111011101011110101100111001110100001000011111100000010100010101110110010001111000000110001111001001011110000110011000001010101100110111010100100010101001101001010001001100000010110101111110111010110010011111010 0111010101101001001011010100110011010101101000101010010110101000010111011010111110001100101111001110111001011111011101001100110100110001101100101010011011000111001110111001011111101011001001010000100110110100010000101110100010111100011010110111100100010111010100000001100001101000010110101111001110100000111111100010101111010100100001001110110010010011101100011000100110011111010110011001110011011111 1101011011100001010100010111011010111001001000100111111000110011001110000011000000000110010001100001001111000111110101110101011011010001011001101011111010110111010100111100011001011100100110001111000011111000001000010100100111011100100101000110110100010110010111001100001100000000101001011011000011010111010010111011010111100000111100111101000110001001010110100100111010100111011100011010110111111110 0011100010000101110000100000111010010000011010100100011001001110100100011110110100011110110010001111101001010011100000111111110100011110111011100010001110111010110111011110100100010101000001000110010001101110100001011010100000011101000000111100001101111110010110110011101110000111010111111000001100110000100001100110010111011101111100110110110010010101111111010100010010101101010110000001010111111011 0001000111111101110101110000011101101000101000010001001001101010011100110110011100100101001000011001100011000101001111010111101010101010011011111100111101101010001000111100110101011110010101110000111010101111010000000001000001111011101110101000011010001000101010000011000010010010010110100100011001110101011011010110010010101100001001001000101011111101011011101100110101101010000010111011101000111001
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

© 2025 ajinori