0110100010101111111011001000111010001111110011111110001101100111101101011101110110111010011010111001100001100010010001101101101101011000011000010011000100010110101001011101110100101100001100111001001000000000010011000110110110000111000011111000110011101011100111011101111110110111001101101101110010100001000100111000100101000111000010101100000110011000100100000001010110001110110010101101101100110100 1010110100100010010100000100110010110101101001010101010011001110000000111010011110111000011010001100111001011110110111101101100010100001100101100111011111010000000111000011010110110001101010010110111100010111001000101001001000110100111010000110011100000011000000001111010000100011000110110100111001101100111100011111010100100101001111001100010001010111000101010100011100011000000000100110101100000100 1000101101101011000010101100100010110011110111000100100110101011110010001101000101000010101100100001101111101000111010110011110011101001111011010100011001011101110101001000110011111100101000100110111000101111010011101011001100010001100101001011101110101101011111111010011000110111111101001101000001101000011001101001101100111110001010011010010000100010010100101100000000101110110101010001111111101011 1000010010010111001101111100111001001101110011110101011011101001000011010001011111000100110001001101100000100110010100010010111111010101100010011101111000110100100011101110001101000111010110110110101111100110110101110111000110100010011011111100100101101000010011001111110110101000100110101010000010011010011111001101011001010101111101111110001110011101100010010101010110001101001010100111101010111101 1011110010101100001111101100001010011000111101101001001011101111000001000110010001010100010011101110110000001010000001100000010101000011011000101110011110011100100110101000010011100001111111011001111010000011001000100100100001101001000001101111010111110101101111111100100001001101011010110011111101000011000101010011111110011011001100111110111010111101000110100011001011010101011101110101011010101110 0100000110011100011110000110101011100100101111010100011011010000011110110111000111100011111101111101010011110100111001111111111100011000010100101100010111100001101001001101010000110001100010011111010011011000110011000100100100011010010010111101101000101100001101010100010011010011101011001100100101011001111000101110101101100001101100000001001111100111000110111100011110001011111011011011101001000001 0110000100100000100111001100111111101111010010010111111011110111101111000011111001111101000001000100101011111101100100100101000000010101110101010010100111001110000010010100010000010001001000011111110010100100000110100101011010101001100000100101010101100110011101000000111100010001000111011010110011101000001000011001000010110000010001011000010001111011000110111001100111111110001000111100100101010100 0101101011111110111111111001101101111010100111111110011011001000101100001111011011111100001010100101011000010101001111000101011001010001000000111100110110000100110100101000110000111011100101110110100100110100000110011011111111111111110101001011101001010011011111001000101111110011011111110110000100000010111011010001001100011011001101001000010101101010011100001010011010100100000100100001000011100010 1011011100010100111001000010101101000100101010110100111111000000000111101100111110110001111111111000101100101011010111110101000101101000101110100011100101100100110001010101001011010001010100100000011111110100001101001100100011000110000011010000100111100110101110001101100000011100110011001000111010000110100111011010110101010011011101010011001110110010000100111001010001111011111101110110000011110011 0011111010000010000100110111011011101011011000101100100110111000111011000000111001000100000100111110011011111111110110110011101100110110111000100101010000000101000100100101101110111010100100000010001000110110100001101100100100101101100000000010001110011100101100010100011000101110110100111000011111110100101110001000001011001101111111110111001101111011101110001111011001111010100111000100110101001000 0100101000011110010110011100010001011110110101000000110111011011111001110011110101011100011011011001010101000001011010100000101111100001111100011010101100001010011111001000111011001000001110110111011111010110100101000010101000001110000110000100000100000100110100111101101000001001000110111010011000110101100110110101100001100011101111101111001110100111000101000100001001010000000001001010100111001100 0001100100111010110100110100111010011101110011111000101011011100001100010111110000110111110100110000101011011111001000001100110101101010010101010101010010011000110000010110010100000010010101110111011101101111000010111000000011111111000001101010001110011000101110101100011101000000000101101100100001100111100011100100111000100100000001111011001011001010101101001010001010110101010011100011000110010111 1000011111100011000101101100100110101011100101110000011111010111000100010100101111011010101111110011100111100110011101111100110000001110010100111000111001111001000010010111101011101011000101111100101100011001000110001011000001001110011000000001100100110101111010000001011000011110010101110001110111110100100111101100001100001010110011100110100000001100010111101011010101010000100001110001011100110111 0011100101001010101000000000110101010011000111010101100000101011010100000000101011010110010100011100000000100110010010001110011001001000110100011110111001001111110101000010001101100010010101100010001010011100011101010101011100000001100100000001100001101011010011110101010100110101100011001101000010000011111111001111000001111111010010101100010111100111110111000101011110000011111011011010111001100111 0001101000011000000010110001000111101000111101000110011110110111011100000001101011001001000010110001110011000111010111100011110100101011101010001110101100001010111101101000101001011101101001010111000101100111100110000111111000101011111101011001110100001101100111101111000101111000010011100111001111101010110000010011011011110010000111000000111101011101000100100110011101010110100111111101101111100000 0100110000001000000010101010110110010010100101001110101101001001101111100000110001011111101110001100100110000011101101011111010111010001010001001110110111011001101011111010101011011101001100100001011000001001000010111000101001110000010011010101100100011000010110101010001010100111000110101101111110101011100000110111010011110110101100010001110101001011001011010010010111001000010001010010100101110111 0101000101010010110011110010011001000000011001001111101101010011011110001010010011110110111010001100000111110111111110111000101101111101111011100101000100001010111101110101111111111101001011000000000101001010010100110010011000000011010000010011010111010001010001110110101111000100100011000000101100101010110011011000011001010110111101110011100101000111011100011001111101101011100011110010000101000000 1001010101010101011101101011110111000001100100011000010100110001100101000100100110100100010101000111101011000011001110010101001101000111110000001111000001100111000010101100110101001100100100000001010010111010011010101010011001110011001010111110001100001000111101010011111011111000011111000001101000100110001111010100011011011110100110111101100100010000100000100001010100111001100010010000001000010111 1101000011011001110111000001011110100111011000000110000010000000101101011101101001001000101010011000001110100000111111110001010011100111000010000100010001010111001000011001110110100110011110010110001011001100110011101011000111101110000001101100001001110111101110100100001010101000010001101110111100001000110111101010001111110011111110111111110011100101011010001011110101010000000100000011100110000011 0111001100100010001100011011101100110101111110110111011000111011110000011010100110100010100010010001000110010111000111110011101011100110111000111101001001111000010100101111010101111010100001111000001110001011000111111111000110101100110010100011110010011110101101011101110100001000111011011111110010010011101110111110010110001111111111110011001110000110010101000100011011001010111000000000011001000101 1111000011001001001101001010010101100000010110100010010000101110000001000011000000001011111100011101111000011110011011101001110101101001101100000001011110101110111110011010010000111111000011001011001101100001101111001010100101100110000000101010100100010011011001010101010010000010000010101101010001000000100101111001000001101101011100000111100000110010111011011011100110000101101010101101001011110101 0011000111111111101011101001101111110001011011100000110111000010100110110101011000001110100101010111101011011000001110000101100001101111000111110110101110011011101100011110101111100010101110000010001111110011110000100011001100010010001100010010010001010000110011100111111110100011000111000010010010100000100111111110010011110010110100101000010110110111000101010111111000101000101011111111101010010010 1010001100010010011010110001011101000001111010100110101100011111001001010011101011011001101001011010100000010001010000011100101011111111001101010101001000001110101111010001101100101010110110000010011001110001011010110111110100101010000001100101010001100011101001100111110111011011101110100100101111110000000000100110110110100011101101011111001010110011100110100100111110101001011111010001001100111101 0110111111110110001110100010010111000110001111011011001111000111010100100000100111000110101110100111111111110110011010010111000001011100010101000011000001110110000011011111101011010010011010110001011001101101001001010000011011010010001101111011001100011101011101010010010010110111100000110011111110110000110001000001011010100101010100010001101101100000101101010100000010111100100010101011011000011111 0101011000101110001010110010000100000110000101101111101110011101100011101110100111100010001001011011110100000010010011000010011001101001001000111011100010011100110000100111101000001101001011001110111010011101110000001001001011110010000010100000101101101111011010011101001001010111110010011011000111010110011000011100010111001010100100101111111110001101011001001001111010100001111011101001000001001011 1101111101111000101111111001000101001100001011100011011110001011001101101011101010010011010011000010101011111110111100000101100111100110011011111100110001011011110100000011001000101010101011000110100100111110111011011001001100111000101110000111111011011000101010011010110011011011101000110101001110110011001010100110110110111000111010110011110111000101001001111001011110101111010000110001101011111001 1011101111001011010000000100011011100011111001110011011101101101001011111110010110011110010001001011010010111000101001100001110111000100010011111000101100100110111100101100010101010001001010100111101000101001010010001000000000001110010110110110001111000110001111011101110111111000011110111000111000000011010100000000000100110111111010011101110010100000101011000011001110101100011100101111010110101001 0100001001110100101010011110011000011011101101010000010111001101000100010000011110100010000111000101110110000010110000111100101010110101110100100010100000000101000100100001110011001100001001010001101100100111110111001111000010111000001011101110001000111111001101000110101111111111101101000101010001110100110101111000101010011011010100011001010000001001101101111111111000110000100010100000111110110001 0001000010100000101101000101000011110011100111110010111100110101001001001100001010011010110110111010100010001011001100000001010000000000001111100010110000010100101011100000011100101010001100011011010110111101111010010000100010111110100101000110110111010011011001011111011110011001100110011111101000010001111110001000010110100101001010110011011101110100000101101000011111000110001101110101000101101110 1110110111001000001010100110010100101101000011100101100101000000010111010001000110111000101010101010000011110000111011011101100101000110011111010101110100010011100101110110011001001110111010010100100011100101011001101001101011100111000101110111100001100110100111011011001001111100010100111011111001110101100000010000000010000010011000101100101011101011000000000111010100000000100010001000011000011011 0101111000010000111000010001101000011101110011011011010011001110111010111110101010000011101101110100011101010011001111001011011101010100011101100001110010111101011000101001110100010000101101101101000110100001111000100100000010101010010101111110110110111100101001011001011101111101110110001011000001001001000100110010100010100110101010111101100010111101110001010111100000110011001001001010001111110101 0110110111011010011001111001100100010101000101110101110100111001110011110010010110100001101001011110101100101110111011001110011011110010011110101000111010011110011100100000000001001010101000011000010001000011000011011010001111001001110010110110100010000110110100111001100100010001111101010010000010001000111110100011000100011111111100011011010000110010011010011100010001111100000010010111100001100110 1010011100110100010101001101000001101100111001111111100001001110010010001000100111001011001010111101110001011010110101110000111001011000110000011011011100110010101100110110011011011000011101010101111001001101101110101110011110010001111110011000101111001000011110011001001010010110100010000100101111100010101100011001001000001000011110110101101111001011101010001001010011110101111000000110110111100110 1110000110111010000001011110101000011000111100001011010011000110010101011100011110000000101000110100000000001011100011111111000000000100011110000010001100110000101010111001010000110011011101011110100010110000100010110110101001011101010011011111100101000111000101001010001001100011101010100001100100110010001100010001001001000011100011111111011110011110010000101011110000101010101110001001111000111011 0011111000000110000110110101110110100001100010001001101100000100101111110001110010011011100100011001100010000001010010011100110110001110001010001100000110111010011010111011010110101010111110010001000101011001011011011011000100110110111011001101110101100100011001011100101101010110001010110011100110100010000000111011010011110111010000110111010100110010110011101101101000011100100000100001001010011001 1000010000100101111101111100001110000101011111011000100101000100011100101010001110101001110011111110011110010101010101110001100101010001011001000110110101111010000011001010101000101000111100101000110110100111001110001010011010000100010101101011100100010001111110010111000100010011001010110110000011110110110011010001001011101111100010001101001110100001100100101001000001000000111101000111001101010011 1001011101111001010011001100111010100101100110111001110011111010001100001110100111110010000100111100101011001101111011100111010001011110110001010111100110110010000101110000101100100111011111100010100000010110110011011111110000110100100101000101111101111111010111100011101001010010111110111010010001110001010011010110011001010001110010110110111010101010000010000011110000111111000100000011001001100110 1111011110100111101001111110110001011101101100111100101010110010000110000000001100110011000101100000101000101010011100011011110001010001111100110011000010001100111011101000001110001111111111101000100000001101011111010011100000110101111101110101100100010100101111000100111111111001111101100010100100100001000101010110010011000011010111011000111001100001011010101110011111011101010000111111100000111011 0011111100101110110000101000001100100101110111000011111101001001101111111110011100111111010011110110000000010001001001111100011011110010010110100000110101011111100111101110001000011000111100001000001011101001001011001010101100101001100111101110111001000101100100101010111011011110100100110010011001000101001010111011000001000011001011010100000000111110000100010011001111010100111010100010111001111101 0010011000000001000011001000110010111100011001110111101111001111001111011100111111100111001110011101010111100001101011101111101011000000101010000111110111011101011111000100010000101011111101010111011010000110000110000111011000000001010010111111110100011010101100110100100100011000001011011111011100111001000101010000011100010101100111010001110011011111111001001010011000011010101111101011101111011001 1011011010010100011100101101110111111110011010010100011001001110011011000001001010001000100110010100001111001010010011000110001011101001011110000000111011100111011010111100011001001000001000111111100000000000110011010111111101101110011001001010001010101000001011011011010100000100001010100101101100010111000011100100010010000000100000000100110100010100010111100101000111011101010001110110110001101001 1000001100101101011110100001010110100110100000100110000001000110000100110001101100000111000010011100101101010000110110110101001011010010000010001011011101111110010011111000010001110101001101111100100000011010110001111000110110001001101001000001011001011111010100100011100101011000110110001001111101010011100110001110011100110000000010100010101100000000111110100011110001101011100110110100110110010001 1010010010100011111001101100101110101100000000010001110010111001001111111110101101001011100010100101001001011001100010010101010100100100010110011000000101100100100010101011010101111110010110110000111110001111011111101111000101011101010110010001000000001001001111100001010111101101011100110111000100000111000011111101000101001110011100000011001111011010111000101110000000000111010010101101110001001001 0010011010001100100011111000010111000100001010001100101100111101101110101011111111001100100110101011010100000010001011010111011000111101011010110100010000001100011001010101010010000011011011000001011000101111000011100001111111000010000011010110101011010100011111010010101110101001010100110010010110000110001001101000111101001000001101100011000010010101011000110010011000001101011101100000111111010101 0100100100000111101101111110100011100111010000000110001010010110100100101001101101011100111001101011101111011100011100011000100001011000101101101000001011100110111000001000001111100010111101101011100100110110111010110110010101101000101011100000010100101010000101111111001100110001111110111100001011000111010010011001000111011110100100001001100001101010000110110001101101011110110101101100011001001001 1010111100011110001111010001010101100101010010010111010100000100001011001001101001011100010110000101101110000110000001100101011111011110101100110001111001110001011101001110011000100001110001010000100111010111001011010011100000011101000010010111100010100101000110100101010110011010001111111111010101110100001100010111001011011111100001001101110000000010001101010101001101100010111100100010011001100000 0011111100100000110101011111101000101011010001100100100000000011100110010100010110010011110101011101011011111010110011000100100110000011111001001111001100010111110111001101010101101101111110100011111100000100100100011001000011000111101101011110110101000100101100110000010001100011010010110001000101010010101100111100101101011011101010110111001101001110110000110111011100100001010010111000101100001111 0110001001011110011011101101110000011111100101101010100010110010110001010001111110110110011111111011010000000010000111011000001101110000110010100111001011010111010111011111010110010101000110000101000101000010000010111100011101100110001011100011000100011111101111110001000010111110111100101001000101111100100111111001101001100101101001101101110001011101101001000011110110011000111011101000011101100100 0110000010001101011100001011001010100110011000001001010111010111001001100001110101001110000100101100111001000001001101111101100011011011100111110100101101001010111110001100100011100000100001001100011001110111100011111001011011011001111111100101101011010011010101011101010111100010111111011011111001001100001000010111001110111110000011001110100010000001110010100001011001101111101110000011111001001011 0111001010001111010101001010101100100111000111000111000011010010000011100101101110100000111000110001010111111000110011011110100101111101100001001110000010101000011011011011010110000000111011111100100111101100011010010111011100001011100100101101100111111110100001111101001101000000001010001110111001101110110100111000101100011111101111111110011010001010010110111100001111001000101111100000010110010110 1101000111100010001010110100001101011110100110110001101111101110011000111001010101011111100001001010000101100101010001000111111010111110110100000101011100100000000001111011001010000100101111010011010111010000000001100101010101000110010001010000111001111010100100101011111100010011110111111011010100000010101001011101011001101111100011010001000111001101110000011010010001010001100111101011101100111111 1101100010111100110001010110100111101110111001000010010000011101010100011100101110101110101110000110101000110111001101110101100010100011010011111101011010011000000110101101001010010100000001001001100010110011111111111111110101110011100111000100011010010000011110110001101000101111100111100010100010110000010110001001100100011000001010110011011100000011110010110101010010111011110001111110100101011000 0110011100011011001001111100010011011010001100101000101101111011111110101001010000100100110010000010000100110010000011000101101101110000111011100011100011101100110000011010110011010000001110110101001011011001000010110100011111111001111001110111110110100001100000011000010010110100110001100100011010011110100100111100001011101011100100110111100001111010110000110011110011011011111101111100100110010110 1100110000010010010110001011100110101111011101011110010000100000101001100001111000011011000000111100011110111001000101101111100100001011000110111010101000000000101111000000001001010010101001001011101110101111001110100010011111101110010100001000010100000110001000011100110011111000001000000100000110111011111010100001101001100010110100000101000000100000001110111100011001111000011100101010100111111110 1100110111101110101110000101011010100000100110011000010000101110011111100011001010001101110101101000101111011010011100011011010001010011001100100011001011111010010010101001111110100110011101111011011011000001001101000011110101100101111000011110111111001110000010000111011100100000001101000111000111011110001100100100011011010101111011111010100110110100001111010110010111111001011011000110000010010000 0101011100101011100110010111010010110100010000010011111100010100011110100110111011011010010100010111010100101010100111101011010001111111001000010000111001101110111001011010101010100100111010010100011100101000000111000111100000000101110110010011100000110010011011100011011011101110100011110100111111101010001100000100000011100001010110011110100101101100001100001101010111110110101100101111100110001010 1100100001101000011101110100010010111011100101000100011110101111001001001100010111000010001000000101001111101101001000100010110010101101001010110001011110001010111000101000010001010011110010110100000001100010001111001011000100100000010001110101110001111000010011101111011100000101111110000001101011100001000001100111010011010010110101010111011011100010111011100010101101000010101110001000111111000100 0010011101001011110001011001110010111011111000001110010110100111000111101011010100010100001010011011101111101011111010100101011111110101111001110010000101110000101110000001011001001010001111000100101110110110111101000110111000011000101000101011011101001110101001111111001110101001110001001000101000111010000101110010111101110110001011000000010100010000000001000010000011100101100001010001010000111110 1001010011100011110111110000111100100000101010011000001110111011111000011100111000011001011010110110101011010000111101101000101010101000110001101001111010110000111000011110100011101101010011000101010010100110101100110010111100100101011101110001101010001001001010111010010101100000111010101100000101101011100001110111100101101001100011000111001110001000101000100111100001101111100010001001101000011000 1001001000111110000101000000000101001001100000011110111011101000000100001010101101101001001101111001010011001101100010101101111110000000011010001100010010110001011111001011001111101100011111100101101001100111110000010100011101010010010010101111110010111001010110100011111111000100010100111000101111010001110111001111111111100010111000111000110000011011100000101100011011011010000111100000001100000010 1001100100011001000111111101100001001001011001001111011001011100001001010100101000010110101110000101010000111101010001011100100000111100011010111011110110110000111000100011010110011001011010010000000001110100010001111000111100010010110000011100010000011010011001010111110001011101110010100100010111011100100010111011110000111100111011000110111000101010000100010010011011000001111000001100011001011110 0110000101101011001001011011011011111001101001110010111110101011110101110110111010000110101001111110010100010110001110101111110100001110100010000010010000101011101000001011010101000111110011111011110111000010011100011010000111101000110101101011010101110000000001001110110100100111111010110111111011110010111110001011011010101111111010110111000001000010001101000111110000110000010101010110100110000100 0011111010101011010000011010111111011100000111110000011101100111101110110100001111110100001101110011010001010000001100100001100011000100110001011011101011110101100000001000110101110000110000010110101100010111001111001101111101000100010000000110100000100111100101110111010001111101111010001001111011000110111011101100000110111010011100000101101111100001100110111001010000001000110110111111011101110010 0110001101010100101011010110110011111010110101100111100101000011001100111011111100100010000010100100110110011011100001101001101011011000101000000010110001011100101011001000100111010100110011101010011011101010101000011110010011111110000000011000001011111100000000101011101010010010010011100001101001010101000110100111110001000101101100001010011110100010100000000101011100010101000001100101000001010010 1110011110100111001011111000101111011011100101001101100110001101011110110011110001001111100010101111010110011111001011011011001100100000011101110011101011011100001101001100101101111100011111101110010001000100101001010100101010011111001011100101100111110010001100001100110011000100001000000000011000101010100000101010001000010110101101011010101100111100001000100011000101101111111011111001000000000011 0001101001010100001110000001010101000100101000110011000100001011011001001000100011100110010101011110101111110011111000111101110000100110011010100110010000001111110000101001010101111110001000001101101100100111010101110101001010001011010111010011001111100110001101111100001100111001110110001010011110111001000111011011011000101010100110100101100010010100001100101100001101110000100000001101111011001011 1000101000101000011111001010101011000110001001010101000001110110111010111101110101011000111101011111011100001100010110000111100000101111101000011110111011011001001010100111001110101001001101111100001101110111110011110100010100101010110100001101100001011010001111101101000001111000101110111010000111100011110010010000010010011011100100001010011101010000101100011111110110100011010001111110101001011110 0001100110111100111010110101000011111001110000100110000100011010010111011101000001101111000010110111110101111101111101111001011011100101110100001111000001010000010110111010111000001111010101000011000111101110011001111001010010110111000111000010110110000100010110011011100101010011100010001010011111111011100100110000001011011000001011000011110000001001100010000111101011101010000100010001011001110111 0101110000110101001100100011111000001110010111111110000111001110001101101011110000001001001110010100100101000011111111001000110011111101011110110010000101101110000110000100111010010110011100000000100100100101011001000111001010111101111011101101000010001001110000000100110010100010111110111100001000101111110010011001101001110000100011101000010001001111110010100101010011010000000000101000010110111010 0100101111001001100100100100000001110011011000111011010111000011111111010001110111110000101000001000001111010100110111010100011011110110010001101011000010001111011110100010001101110111101011111010110110000101010001101010000001000100110000100110001110011110100010111001011101101000001100111001110101011101110011000100111010110011010000010011111111101000001011011101110000110000000011111101001101101011 1101010011111111111111100011000110011011011110101010110001100111010110010111110010000111001100011010000111001010000001110011100010110011011101011110110001011110000101100111000001100100100101010101110010101011111000101110001000100000011011001001000001001110101101010111011110001110100010010100011001000100010001100001011110110101100101101110001111010001101000011000011010010111101001101111110111110100 0100000010100100011111101011010111111111000110100011010101101101010000111101011100001110110011010000011111110001010100100100000111001010100010110010001100110100010000011001001111110000001110111000111010110010110001111111010100101010110001001101001110010100010101010001011011101001111011110111011001100100010111001110101000101001001010111100110100100010100001101011110001101101100110110001011010100011 0010100111000000100010000001010110101110101100000111100110110001010101101010111111010010001010100000010100010100011010110010000001101011001110010001010010010001101101010001010100010110011101110101111100010000001010100110010011100011011100011011001011110001010101100100110110010000000001100001010010111101010011100110110110000111101011001111111000101110111001110010110100010111010110001000111101010101 1001100111110010001011111110010000100101000010001000101000001110100000001010111100011010100001000111100010000000100101111101101101100111111100111100101000011110111010101101110111000111011111101011010101110111111110010010001001100011110111100011011110100100111011011000111001100110111101110001110111111001010111111110101100111000101010110011111100010110001100001101111001011011011101111101100000010000 1101010010000111111000110011100001111010110100101100100011100000100010111110010100110110000000111111100000010011001111111001111001001010010010010010111110101010010011010101101100101111010010111111000100000100100010110000100000110010011010001011000110000000111000101111011100101010010101000100111011011110111111100111011100010010111111001101100101101111000011001111011111111111111010110110110111000111 0010000110010011110011011000001101111110110000000010000100100000000111010100000100011101110100100000011011011100001001010100011110111100100111010100100111001001011111000100100101100101001100101110111110110110110000101001101010000001100110000101000101011001001010111110001110011101111010001000111100110100011110100000010101100011100111011010100000001110010010010110100111000111100000100000000010000001 1101010001100010001111010010101111010100010001001010000001100010010001010000111100000001011001010000111000000100100000101011011110111001100110100110001010111001000000101101100100011110111000110001001110100000000111000111111010100111110011111010101010110010000110110010110101011000100000000101110110110010011100010000111000000101110110011011100010101100100010101100000110000010110000000110110100101000 1001110110010101001110110101000110110010110111011111111011000110110110001011110100010110011101000010010101111101011000011100010101011110100001001011111001100011111111011010110111010101010010100101001011011001110000101111010000100100111111101001100111100001011111011001000111000011011010110111101010110100010101110001000100001110011010011110010110111001010000100011100000010011000010001100110001000111 1011010110110001101000011011001001010000101111011101000011100110010010001110100011010001111110111011111000011110000101000110100011100011010010111011110111000011111111110101011111110100010011110010111010100000000110000110111101100010101100110101001110000011100011110111000110000100011011100010100100000000110000001000000011101011100001111000110010010111111111000001111000100001100100010110100011001001 0001000001111100110100001010101000110010110110011110000100011000010001001011101010010001111111001111111110100011010000110010000101001101110000010111110001000111101011111000011000101010000000001010100001000010100110100101001100000101011111101101101011111000100111100011000010110100011100010111000011001100011001100111101100011110111110001010000111010000010110111100011000011010011110111111001000110101 0110001000110000111111110011001000010100101000010100100101001011110111111000001101001010001111010111001001011000101101011101111001011010110111001000010010100001110101010101010000110010100010111111001010100100101100101100100011101001010111101101101111011010011010001110111001111111001010100100111011001110001011111110001100100111001100100010000011010110100001010110011011011110111011101101000000011001 1110011100100100110101101000111110000011110010010100010001000000001001001011001110101001100100110000010101111110010010101010010110010111101101101111100111001100000000101100001101100000001011101011111001111101110001011010101010101000011001000100100100111001100111110101101000000000010010001001100000011110010110101011101000100000101000000110000110110101100000000000010111101110111100001000000110101101 0011100110100000111010110100101000101001100010000001000110100001001111100011010100000110100111101000110010001011110000100110011111011100101111010111011011101010111010001011110000111100100010110001110010010000010100001001000010110000100101000111100100010000001101000110001100111000000100011010111001011101101010110111100101000001011111001001001001001110000010110111110000010011100011011010100001010001 0011100111100011001111111111001111101111101010001001101111111110010101001010100010101001011011000011011100010011000100101110000001110111111000111100111001001101011110101011111010000111010100111101010111011101110010101001111011001101010001100111011111011011100010100111000111110010111111010110010101000111001100011000010111111011111010000000101000001100000110001010011001111000000000011010001000100110 0101001101111101001001111111101010100101011000000100100110011001001011000111100000010111001010111011010101001010000101101011100110101000110110111101101111011110101001011111001010110001011000111110001111111000110010000110110010011010010001110101100111000000001110100100101000000011001001111100110111100110101010111100111011000101000100101010101100101101000001110110010010100011111010010000011110010100 0111100001000111011101110011001010000000001011001110010101001010000101110100010011001110110001101010001000000100000100001101001011101001101110011110100001110001011110010000110110000001001001101101000111011001111010100101000010101011101010100100011100110001101010011011110000100010100011001101101000011101110101000101111011001111100111000000111011000001010110011111000000111110011010111001001111110001 1101011000100011000110010010000001100000000010001010001100011000100111001011101010100001101011110111000010001001111101111110100000011110101111010001000100011011111010000100000100000000111011110001000011101111011011010001110001110110010110111011110001111111011010011000110011000101101010100111100011101101100001000011011001110000001001101011000011100110100111001111000111110110001000110100111011101000 1100010000111101110100001010011001010011011000101010010001100010010000001101111111111101011011101101011000010111100100111000001110101001010000100001100100111011101001111110101000101110010100011001010101011001100001101100101001100011011000010111011100100010011000011001101000100000111011101101011001000111111100110110111111010010110101111110100111101000000000001101100101000000111010000001010111000000 0101101110100111011100010001100001001101001111010010011001001010010110010110011010010101001100010110111101010111000101010111110010001011110001100100011110111011000000111110111101001001100000100010011111110101100000000110101111110110111010000000100011110100001110111101100111111010001011001110111001110001001010100011010101111100111011001100111111001101110011111011010100001111101001100011011100110110 1101011000101100011000100100000100011100100011111010011111101001010110011011001110100101111111001101001011110100010110110100011110010111011101100101000101100011111010001101010010000101001101010110011110100011001101111101010100101001101010110110111111010111010110100001001101100101001100100001010000101111011111110000010001101100111010010101110010000100101001001000110100100011101000101011101010111011 1100001001000110110101001100011111000100110100000011000101001001001101110111100100001111001111001000110110101101001011011001100010011100110000101011010100000101001100000111101111001001010000011110010111011000011011011100111111010111010011010110001011011101100101011010000110111110101000111000110110011101111101001101100011110000001111001011010101010110001110000101011110001100111010111000101000101110 1001000000100100001111100110011010011101110010110011010100101111110001001110000001000110011100110011110011011100001000010001011101110111110001010111111111100010110110001000001011110111111111011100101110110010011111011101110101101011000010111010110011010011110110100101110111100111001111100100011111011010000110111001001001010001100111100100100011110000001100111111000011110011010110001001001100110111 0010111010001110011000111011101000111011110001001111011011000110001001011000100010110001010011101010111100011111001101001110111000111010111100011001101101000101011010111010010101100010010100000101100110101101111101001001001101001101010101110011010110011100010010100110100011000110111110011110011011000110110111111110011101111000100100100101011001011100110001010010011011010001010110011100101110010100 1011001110101100111110110101001111111010111110010011111011011011001111111011010010000100111110101110101101010110110010011011010010010110011111010011011010111100011011101000111000100010000111011100101110101111011111010110110110101000110001101011011110110001101101011111010100001110000010001010101011110101111001000011110011101000011100100110101001001110000100011001001000101111110100010111011111011001 1001001000000111111101010010100000100111111010010100000010011000011110010100101110100111110011011011100100011010111010110111000100001011100001111111110100111111011010101010001111110111001100011101111001101001000110000000110010001000011001000001000110001111010101101000101000110110011011110101111001111101010110010100111011011100011000100100001111010111001010011111100010111011010110010011101101100110 0111110101111010001001101011100101001100101101111110010010111110010011111111101111000000000100000111111001010101000001000010101001111100010000101010101010101100000111100111111011111100111011001010001000001000101010000010100010111011110101101101110100011101001101110000101111011110111100100011111100001110101110111001011101110010001100001000110010111011011111010000011001110100100000000100101111010000 1101100110101001000111010100001001001001001010010100100010110000011101000001010011101111101010111111001001101100001001011010101101000001100000000001110101011111110111100110001011000101101100111111001010110110000001010000100110011111011001101001010111110110010001011111101000011000101010111100000010001111111000000011011000110010010101011111010111100101111000101101010111001010100000100000011010011010 0010111001111011000000110010111100101011001000001101111111110000100110001111011110101000100001010101100111011111011100111010101111000010001100110001000111011010100000010100010010010111001010110001100011000101111101010100001001001000100110101110110001001110101111001111100100110110110011110101011010011110011101011010000110001011111000000011001001111100100100110110110011110000011100010100010011000011 1011110011001001100000000110101101101011010001010101010100000010110000010111100011111101001111100111000111000101100010110101100111101100110111001010110100110011000001001001000100011001001101010101010000100001110011101110101101000111010100111100001101110001110101000010100010110011100000110101011101101111000111001010000010010110101110101100110110110111001000110100111100110100000111001001100101010100 1011110101111000101101100011011010010110100110101110011000001110000110000000000101010001100011011001000100110011110111001110101000111110011101100100001001110110100001101100010101111001001001010010100001100001110100111111010001011100101100010011011110110011100110011111110000111010111001010100010001100001000010000111010110011011010100011011100011001010111110101010011110110110101101001000000000111100
cTrader Algo

DataSeries系【cAlgo API】

10/28/2020 11/12/2020

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

データの並んだやつ

DataSeriesインターフェース

Barsから高値だけとか終値だけとか取り出すとこれが返ってきます

public interface DataSeries : IEnumerable<double>

関連するインターフェース:IndicatorDataSeries

一応、cAlgoで独自に定義されてるインターフェースですが、中身としては読み取り専用のdoubleの配列に単純なプロパティとメソッドを持たせたものです。

Last()以外のメソッドはFunctionsで拡張メソッドとして定義されてるんですが、使うだけなら普通のメンバと変わらす別に意識しないでで使えます。

 

プロパティ
(double) this[int index]

インデックスを指定して要素を取得します。基本的な配列の使い方です。

(int) Count

要素数を取得します。

(double) LastValue

最後の要素を取得します。Bars.~Pricesであれば一番最近の価格です。

 

メソッド
(double) Last(int index)

(index+1)個前の要素を返します。

(bool) HasCrossedAbove(DataSeries data, int period)

ローソク足過去period本の間に自身のデータがdataとクロスして上抜けたかどうかを返します。

(bool) HasCrossedAbove(double value, int period)

ローソク足過去period本の間に自身のデータがvalueを上抜けたかどうかを返します。

(bool) HasCrossedBelow(DataSeries data, int period)

ローソク足過去period本の間に自身のデータがdataとクロスして下抜けたかどうかを返します。

(bool) HasCrossedBelow(double value, int period)

ローソク足過去period本の間に自身のデータがvalueを下抜けたかどうかを返します。

(bool) IsRising()

最後の値が一つ前の値より上かどうか返します。

(bool) IsFalling()

最後の値が一つ前の値より下かどうか返します。

(double) Maximum(int period)

period間の最大値を求めます。

(double) Maximum(int period)

period間の最小値を求めます。

(double) Sum(int period)

period間の合計値を求めます。

 

 

TimeSeriesインターフェース

DataSeriesのDateTime版。Bars.OpenTimes用です。

public interface TimeSeries : IEnumerable<DateTime>

DataSeriesと同じようなもんですが、GetIndexByTime()というとっても使用頻度の高いメソッドを持ちます。

 

プロパティ
(DateTime) this[int index]

インデックスを指定して要素を取得します。基本的な配列の使い方です。

(int) Count

要素数を取得します。

(double) LastValue

最後の要素を取得します。一番最近のローソク足の開始時間になります。

 

メソッド
(int) GetIndexByTime(DateTime time)

timeが指すBarsのインデックスを返します。例えば1時間足で引数に13時20分が渡されると13時開始のBarのインデックスが返ります。未来の時間が渡されると最新のBarインデックスが返ります。

(int) GetIndexByExactTime(DateTime time)

timeに開始したBarsのインデックスを返します。timeぴったりに開始したローソク足が存在しないと結果は-1になります。例えば1時間足で引数に13時20分が渡されたら-1が返ります。未来の時間が渡されても-1が返ります。nullじゃないので注意。

(double) Last(int index)

(index+1)個前の要素を返します。

 

補足
Get~Timeメソッドの引数DataTimeにおける注意点

引数のプロパティDateTime.Kindの値が.Localだと例外が発生します。RobotのTimeZoneがUTC以外の場合はKindが.Utcでも例外が発生します。

DateTime.Kindの初期値は.UnSpecifiedなのでほとんどの場合問題ありませんが、DateTime.NowはKind.Localのため、現在時刻を使う場合は注意が必要です。

 

 

インジケータの表示用

インジケータの表示用に使われるのもこのDataSeriesを継承したものです。

 

IndicatorDataSeriesインターフェース

public interface IndicatorDataSeries : DataSeries, IEnumerable

DataSeriesを継承しており、特有のメンバはありません。つまりDataSeriesとプロパティ、メソッドはすべて一緒です。唯一の違いはthis[index]に値を代入できるようになってることです。

主な使われ方はIndicatorで[Output]属性つけて宣言しておいて、Calculate()内で表示させたい値を計算してthis[index]=valueのように値を代入します。[Output]属性つけとけば初期化はcTraderが勝手にやってくれます。

表示用以外に自分で使うために宣言することもできますが、インターフェースなのでnewでオブジェクトを作ることはできません。この場合はAlgoCreateDateSeries();を呼び出して初期化します。

 

プロパティ・メソッド
(double) this(int index) {get; set;}

インデックスを指定し要素を取得します。代入可能です。

DataSeriesのメソッドとプロパティすべて

上記参照

 

サンプルコード
IndicatorDataSeries myDataSeries;

//クラスじゃないのでこれはできない。 コンパイルエラー
//myDataSeries = new IndicatorDataSeries();

//これで初期化する
myDataSeries = CreateDataSeries();

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

新しいコメント

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

cTrader's Life

© 2025 ajinori