0110110000001100111011111001110100001111011000010110101101001010001101000011111010101010011110011001000100111011000111100010000111001101100100001010001111111011101101000000101100100111011110001101001110001110110001100110110011110101110101111000100101100010100001111101111110001001100000111000111011000110111000011100111110011011000001001010110010111110010001110011000110110000001110001101100100110011 1101111111111111011111010100000010010111001001101000100000111001010011011011101001101111011001010110000111101100001101001111111010001100000111101110101011101101110101111001100011110011001100101100101010010010001001001000001110111101001000001110100100010111010111011101111001001000101101011100100101100110000011001111101110111001101100110000001110100000101011111100010011111001001000010110110010011111 1010101101101011101001110011101001011100001001000001101011001001010111110000010100101000100011010011111100111010011100100000011000001110111101100111110110111000001101001010001101101000010101111010010101100011101100010110011111100101001101011100000000111001000001010000110001111101010011111101100010000001011101000011110000101100011101111100000110110011001000111011011100111110010010101110100000001010 1100000010101000110100001101101000010111011110111011101110010010010111110111100001000111011011001111101000000111111011010100000000001111100010101011110101100001101000000110000111000110101100101011011001101010110101010000001101101000010101110001110001011010110111101010010100111011010111000100010100101010001100100101000000110001110111111100011001010010110011001011111111010000101100111000101000101010 1011001100101101111100010111000111011010100000011000000110000111001110000011000000110000010011001101010101100100000010101100100000101001000110111011101010001011010110010010111110101001010111010011100111001001011100101001010011100001011111001111101100011111111101010111000100011111001000101010101011001100011111001000001101100011100101101110100001101110101100110111000101000001001010010101001011000110 0000001010000110101101110001001101001011110001000011001011100101111101111001000011011111010101001101101111010010111010010010111001011011101011010010101000101011111010111001100011011011111001101011101001110010011101100011010101101001000010101000101100110101011111010100110101111010101111111000111001001011100110101101110100110000101110010101010100111010100111100000001010100111000011010011111110001101 0011011100011010000001001101110110110000111000110010001101110000011010100100101001010000011011010010001110001000010000001101100100101101010101110111111011100010110011010110000011101110111111100010000101110111001001111111000011000111000011001001001100111100111010010000110110000100000000101001011010011111000011010100001011111111001110101111010100001010110011110010010101100001100111111101100010110100 0110010101010010100000111001111101111011110010000000001111110110111001000010111010101110100010111111110100110111101111111011011101011101110101111100011010000011011011000101100101101010100111101000110001011100011010111000110111010101000110010101001100001011010000010111110111111011110100000000011001010010011110000000000000010011101000011000100101110010111011001001111111010110110001001010110011110111 1000100000001001100011100010100011010011011010111100101010111011011000111111010110110000110000111111001001011101010111110111010011110101001110001101101010010001001100011010001000001001110110110110110100010011100011100111011010101000010001100101110010111110000111000100000100110100011011111111110000000101001000001010101100111111000011100100111100000010000011010110110000000000000000000010111101011001 1000111100110010011111110010111000000010100100001011011111010011111011001110001100110011001111000011010101000110101100110000100110100001111110111010100010010001100001111110010101100010111000010011110101110110110111001000100001110100101100100111110001010011000001001101111111011010001100001101000111111010100011100000011100100111010011101100110000011010000111111011101100001100011110100001100011100110 1100010111100111100100111111100101010000110100100001110010100111101011101000001110011000101111111000001001110010100111110001110001011111000111010011100001011100101001110110011001000010100010001010100100011101101001110011111111000111000100011101010010100011110111011100001010101101010000001000101011111001100101101001010110101001000011111000101000101101110010000100001011110010011101010110101110110110 0000011000110110110011111111010001010111001110001010000010000000100100101100111110010011111110000000001110011000010011111101100110100001001000011000001010100110111110010100111101011111010101111101111111000001111100111001100011011011000011011101000010010000000110110001111001001111110010110001000110000001111100011000101110110011111111001000111001101110010010000110010000111101111011111100100010001110 1011011111101011000001110100110100010110011000001100100000110100111001001010011011100001001100000100001000100001100101000111101110001101100001100110001110111010001100101111001101010000000110101001111001001000001101110011000001101111000011000001011011011011111110110001011100010110100001101010011100011000101001011010100010010111000010000100000101010000001010011000011100010110110011001110011111001001 0111010110111011000010100000100000010100001001001100000000111000011110101011101100101000111001001001001110011101100101000001011101110111111111000101110101000000001000110011000000000101101010010101011011000011010100111100111100010010111010111101110010001110100111011000010101100110100101010101010111010111100111011011011100001000011110011011010101101100010000111010100010011001010001011010010000000100 0101001101100010010110010101110001011000111100000101000110010100111111000101011001101110001101001101111100000001001011001000001111001101100111011100011111010000011011101110111101011111101001110010111100110010100000010000110100001000111110011001110011001001111111010011111100111101011001010010101011010111110111001010111101110010000100111011111111111101010011000010101101110000111010100100001010000101 0100000001111100010100111110010100101011010110001100000001110111001101011011111001101011011111011111000011111011011101001011001110110011101100110001001011100101101010001001010100101001110010000011010111100010000111000101001011011100001000111101111110101001011001010001110111000101000000001110000001110110111000010001110011111000101111101101100110100110100110001100001110101101100100010011001110001110 0110101111011001110000101010110111110000111110101100111101111100011111010011101100001001010011011110011110101100010100110011000111111111110110110101011110101101000100011101111010100001011001000101001000111110110100110010100010011000101110110011100100000001111011001110110011011111011010001011010100001110001000011110011001011111110101000110010111001100101011101101111011000000101101000111001001101100 1011010000010001010110100010101110111001010110000110111100010110000000001010110000101111100100011111000000101111001010011010001110010011000101000000100001000010101101010101001010011001110011100011100011111100011010100001001000110100100011011111110101001000010101011111000111010101100010100101100001001010010110001111101011100101111101110101111011010001100011010001111011100110001110011100000010110100 1110001010100000011001100011100101110111110100100011001010100111011110110001110110110000000010011011011011100101110010101100001011010111010001101110101001001001010101001100100110000101111001111110100000110000010011110111110100110011101000001111010010100000010111011100010011111110011111001010101000011111011000010100011110100010111010000101101001010010100011001011111111011001110010010100001011001101 0000111000101001000000011010011111101011000101000110100111000101001111000110010100011011110110111101000111010001101000111110011011111010010000101100010011100001011111110111101001011110000110011001000000100100100001010001100101100110001011111110110010110111000011101101100111100000000111001110110101010100010101111100000110000010111100101111010110000101101101011100101110110000011000010011111011011111 1101111111100101000100000001001001001000111000000101100111011000111110011010000001110111011000001010111011010100110010111101011010000110101000100101011101101000101110000111010110000111011111110110000010110101010011101000101100110000101000000001010011000001101101000000110001010000111000100101010100101011110010010010000111011010101110100111101111001100111000111101001011111110011100011110101011110011 1001100101110111000110101000100110110110010001111111011110001000011100000000100001100001100100000001010010001001111000010100110001111000101001100101100000010100110110110100001101001001000111011010100101101000000110101010010101101011101000110111001100001100101111110110101011110001000100001000111111010001001001000010101101000110010001011111000000101001101000000110101011100111110101111000100010010101 1010001010101001010010101110000111000011011001101010101101000110010100100001110011111010011011001000011010010111001100110100101010001001010101100001001001100110100100101000111111000101110111100111000010010100101000101010001111100100001101010000111001000011111110101100110010100000110100110111100000001111001011100001011001111111011001111101000001100100111010100001101101111011010100111001110011010101 0011100111010010000100011011000111100011111010000001100001110010111010110101011001110011111001000010010010100101001110101001100101010000110101000000001000011011101010110000001010111000010011100111101110001000110010010001011000101100100010001000101110000000010000100001010001110000110010111010101111011101111001111111100111110110011111000011100100111101100111001000000000101111110101110000010010010111 1000110010011110110000110011010000011011110111000100010111000010111011110011000001000100110010010101000100010110011010011111111101101110000001000111111111000101010110010001011000100110101011000111110111111110001111110010100101100001101111101101000100001111111110101011101110101101110010010101110010011101110001011001101011100111110110001011010111010011010111001011101100001011111110111111001011101010 0110011011110111100101010100000011111110001110101101101111101011101110110001111110110000011000001010110010101001100111100011111100001010100010000010011110100100110011010000011111001001111101001111101100001011010100010000001010110101010100011000010100101100000010001100101011100000010000001011011111101100110000101110110011101111000011111011001100000111110100010100110100111000010011111011110000001101 1000001001110111001011011011101110111010111000011001100100101110001110101110111101011001101100000010001101111001110100011010010110100110111110101100011010110011100011100101001111011010011000010101001011011001110110111110011100111111010110001001000110000001001101101110100110100011110010100010000011101000110110001101011101100011011101010101100011011000001011111001100000101111110000110111110011101111 0010100111101100000110011001011111111111101011101110011011110010010011100000101100010011101101000001111111001010000001101101101111011110001001010000000111100110011000000101111110011101111001100101110001000001010010001100000111010000011010010010110010100001010010010101000111000010110110101011111110110101110100010011011001000100101001111001001010010110010101101010101011001100111001001111100000000110 0011001110001011110110001010001100110001100101010100001111110001010010010100011111010111010000011010010000111111101110101110110011000000011011100110001101011101111100001110100000100100110100010001100101001011000011100011111111000010110111011010000100011000110100011111001010010110110100100000000000111011001010001001110111010000000101011101100011010110000011110001111110000110001010011010010001000011 1000010000011110001110100111011101111110000000010110010111111111100111011111000001110010111110011110010110111010111110011001100011101000000100011000011110101011110100011101110111110000001111110000101010101101110100010101100011001000001001000101101000111000100011001110100010000111001000001011100000001000000010101001010110000111111001110000000011100000100001100001111110000001111110110110110010001000 0000000110000001011110001110101111000010001100110111110000110000001110010100000011110010100001000101001001000111100011111011110000101010010100101011001010101110001000110000010011111101000100001101101011010011100010010100000101101011011101010110110001101101000010010001000101111100000010110100000100110000111001100111011000000100100100101000101000000000010001011011101010111010100000101000011010111111 1011111011010111101001011111110110001110011110110100010010010111011000110000011101000110000100011010001101101101001001110110010001110111011110000000011101010000111100010101101000100111110101101100100011101001100010111011000100000010100110001010000101010110101110111111100101110101000000111011000100111000001011010001100000101111110111010000010001110111100010111001000011001110100000011000010011110011 0101110110001100001011000010100000100101001011111010101011101000001010001011110011110001001010111100010101011000100110010001101110011110010001000000110010110001011111001010000010100001001000111111111111001001011101010000111111000111011100011101110101111110110010001001111110110110011000000000110001001001100100101011001101011101110000110101010110000001110111011101000100000110101011110100011110010110 1101000110110110110011110011110100000101000101011111111011111011101001101110010111100000001011101011010010001101110011000000110101110000110011111001111000001010010100010101110110111101010101010111010000101011001100001110000100101000000010100000011010100110110101001000011011101101011011101000110111101101010000101000111000101111011100100010000100111000011111010011010000101000010111011110100001010111 1010101100111001111010011111011111101011101111011101111101110110111001101000001011001001001001011000101110001000111110001111011000101111001010110010110101110000110000001010111001100010101010110111101111111110101101000010011111010001100111001001111010111011111101111110101011000101000100000001011001100010101111011000010110011111101010010001001000010110110100101011101011010000100010111001010010111111 1000101101111010010100101000010001111001101101000110110100001001001000011110111011110110001000011101100011110100000101011000011111001001010010111100010001111111001110110100101101111001110101010011110100001001011010111000010011010011001101000001010010011001110111111001000000110011011000111011111110110111000010010100000011111110110101001010101001001001000101001000111101011001101110000011101101000010 0010000010110010111011100011010100101100100011001100000001110101111000000001111110000111101100100101100111000001111000110111001000111011000111100010111000000100011100110110011000111010100110010000000011110001010111010100000111001011010110111100101000001011010111111111101000111001001110010110010011011100100100010110011110111001111011011101101000101001001110110001001001110111011000011001000001001110 0010100110110011000001011101001000111000101010001101110111000110010001101000010100101111100111101100111000101100000001101010010110000111011010000010000111111111001001100101001111001001100101110011000111010111111010011111101101010111110111110111010000000101000001011001111001000010111010011101010100110110010011101001011100011001101101110110011000111000111110011110001010010000011001010101100100110101 0010010010100101001101011000100111101001000100110011000111011000011000001011011000100011011101110011111011010011011111000001011100100001101011110100001100011100000101110000011011110001111101101110100101000001000101111111111111110110111100101000000100111111010100111110011010001010000100110001110010011111000010010100110111111010101011000010000101011000001110000011001111000010101100011100100110110000 1001000111011011000011000010000101011000001110111001101100011001100101010110010011010111111000101001111011000100011010100010000101101011000100001010001000010101000111010111001100110011100000011001110011010111001111110111111001000100100001100001000001011110111110011111000001011101100010011001101110011001111011000001010110101011000001000001010010010001010101100010111111010110111100000001100000111010 1101011011010111000010101001100011010000011101000011000111101010001000111011111110010110000000011100101010011101100001010100110111001001010011110010110011110011100101010101011011101000011010101111001100101100001010011000010001010100110111000110110011101101011001111011000110011010101000100011011000100010000011011011010110100011100110001001100000001100111010000001011011110001101011101101010001100000 0110110011110100010111000011010010110011011101111110111100010011000011110001001101000011011011001001100011010110000011010011111010011000110110111101100101010001000000110010011100001110111111000111100101000110110000010110011101111010100010100001110011111001111000101010011110100010100101100111011000100101000110001110101010000100110110101000110011100001110011000010110000011011100010000110110001100000 1110111001111110100000010011010000001011110010010001110111001011010111101000100010000001001000111101011000000000111110010010101100000100110111011011101000001110100110111011100100010000011110101110011110110100100111101100100100110100000011000010111111110000110001110100010100011111110011110010100110010011111000010100011001010110101000011011000011100100111010111001111010110000100100011010011110001111 0011101100001000010000000111001110100010111001011111110100111100011111001101011010010000110010010001110110000110001011000000101010010100001001010100111111100101101100001101100110100000000011101100011010111100100011011010111110001001011111000000100110010111110101010101001111111011001001011000100101000100000000101011010010010111100111100010010011010000100001011001010111111100110110011100101110001000 1101111110010011011010001010110101110100100001101011110000011110101110011100100110111111001111111011000100111111111011110100100001111001111101000000100111111101100000011000001010110110100010111011000001100101000100100011111000101101010101101000010010100000000101000001000110100011001110001101001110011111000011101011000000111101101111001101100011010000111101110100101000010000000101101110011011101011 1111111110110011111011000000110010101001010000110010011100110010100100000111010001111011011111110011100001111110110110010110010011001110011110001010001000111010100010000101111001010011101011000100100111000001000000111000010111111011110011100111001001101000100000111111000111101010110010011011110011100010000000001111011010011010110101100000010000110101101100010110100101000101110011101001111101000000 1110100001101101100111101001101101110101000011100110010101001010101111110101110011000111110100101110101001100000000011000010010101101010100100000101110110100000011110010000011111110110101001000001101001111101101111111100011101000010011111101000010001100100001101110110110111110010100111110010100011000010001000101100110011101100000000000010000110011010011100011011101101100001010101100100101100111011 1100111110101111100110111000111110001001100010010010110101011101110001111101010100101010000001100111001111111100001110001101001111001001100100110000100101010110011110001110110110001011101010111001010011000000110000110010101001111101010100010110000000001100100111010110100100001110110100110100010000111010000010111011011011111001101011010111101110010010001111011111001011001100111001011010111011001000 0100011110101000001110000110010101001010000101110001111001000100100010001011101000110011111101101101000000000110000000101000101011100001011101011111010000010010100101011010111010111000000100111010011000011000100100100111001100000101001111101110010011011111110101110110101000111111001111001000101100111010111101110110000001010010001000010100000011000001111111000000100111001010011000011001101011100001 0000000100011010111101011110110111111000101011111000111111111010110001100000000101010000000110111011000110101011111101010111000010001100001001001000100100111110101010101111110011111111101111011111000001010010000010110001000010100010101111011000111110101110011011011101101111001100101011101110101110111010000111011111000110110000111110110001000101101100000110000100000111010010001111000011110011011011 0000100111000111010101100011101101110011001100100111110101110010101010000000000101011111010101000000000000100111001011011111110010011111110100010100110010000101011000011110010011110000100110001011101010110011110111010011010000100001011001000011000011101111110010111101111110011100011100101100011100101100111101111111000001000010111110010000011110111110111101010010001101010001100101110110001011111011 1010100111110100011001010011101111010010011011010011101110101001110001101111100110111110010111111110111000110110001011111001010111111001101111001101000101011000111001110010100001001011010111100100011111000001111011001000000100000100000110000001010110110111101101000001010010000101001101101000010100101101001010111101001100010010100000110101000001100100110001100000001110000110001110001101100111100101 0100111111010110100000101001000001001010000000001100010101010100101000100001111011000101001100100111100001001110100000010000101100010110110111011110011001000110011000000101011001111001101111010001111101001000001001010100001011110000101101001110000101101010110101101100000000110001010010010101100010111101101001010110010110101100101011100111001111110011100000011111100001010000101000111010000101010001 1010111111001101011100011110010011010000111001110101101011100101111000110101100101101110110000000001000101100110000101111000111010110001000000000100011010110011001001000101111111111010110011010000010111000100001011100010111000111010101110010111111101011101001101100010111111111001100101010111111111100011111110001001110010010011001001100111011001110100101100110100011000100010110101001101111000110011 1011111011111100001110110110010010111110010110010111010100001010111001000110001010001110001001010101011100110101011101101011011010100101001111001110001011101111111000101001010001001101001111000000000110011010101101110011011100110000100001110111101000000011111001011000101011111111011100110100011101011010000001100011011100100100000000011010000100010001000111100000100001111001110011101010000010001000 1110010101101111011010111010010011000001010111101110001000111001000001111001110010010001001110111001111100101111110010010001111100110111100101101100111110100010110000001011001001000000110010101011111000011111111001111110011100110010101011000000101010110011110010110111100000001010001110001110111101010101010010110100101110010011011111000110100010011110101000001010101010000101010011000110000111110100 1000110010110101001100101010000010110110110010101010001010011000100101111110100100011011010100011101011010001010111111001110111110010100111001010010111001110111011111100110000010111010101001010010100011001010110101000011101010001001111101001001100101010000100010111001110100000010011000000101000111110000110101011011000010000100001000101001111011000100100001010110110110101010000100101100101010101011 1111101011001000010011011100100010101110010000010011110000101100011111100101000011001011000111000001100101100110100010110101010111111111001110001010011010110110011011101110011011111011100110000000011001011101110100100111111000010001011101010101001000011101101110011100110001001110000000000011010111100111100101110101011001111111110010111110001100000100110110111011101110100110010000100000010010000101 0111011000011011110000000111011111010011000111110100100101100000000001100001110110100101101010101110010101101001101010100101010101111011001100001010101100011001110100100001110010011000110100001101000000101111100101011100111001111010101000010100010111011100011011111001101000000000010011100010011010010100011001111010101111100000011011111110111100011001001011110111101101100001011101110001111101100110 0000111001101001001011111010010100011010110000011010001100111110011101001110111110101110110010100100010000100000100110110011010110101101111100001100111100000010100100111011000011000000001000001001000001101001000110100111001010000011110111101010010011011000101100011100000111110010100111000111011001101101110000110000011000100001011100001000010000011001001001000110101010110100101010111100100110000001 1011001010011100101000101001000101010110001000000001111100000010100110010000010010000111101010010111111010100010110110010001001001110000010101110000101101000100010110001101101001110010110111111001111001001000010111111001100101100011000011101010111110000101101101001101101101100010110100110110110011111010100000001101101010100000001101101100100010010100111000001101100010111101001001010010110000010010 1010011101111000010000110010010000000111010110010101100111011101101100101010000011001000011011110001101110000000110101010000100100001101100000101101111100010000000111110001001001011100101010100111100000101000110001001110010001000110011110011010000000111011101011111111000110101001101010000110010010101000010010001001100000111011100010001111110001001100010111011000110000101100000000011000011110000000 1110100101001101111111010011011000100110011000010010100011110111001000111101000011111100100111101101001011101010110001101010110000100110010110110101010100100101011101000010010101010100100010010101100110100010010001001001010011101110011001101000011010100000111001011011010001011000100000011111111010010010001010110010000111100000001000100000010111110100011000111010101100010000100010110100111111001010 0001011111001110010111100010000001001111111101001010111110000110100111110010100000100001011101110000011000001001100011110010011100111101001000011100100111011001010111011000101010010011001011011011110010001101001011011010011110001100011001110111101010000111110011001010010001101011101100011010000101010101010101110000010011110001100001000101010010001100100111000111111001100100101100000001010001110011 0010110010000100010011010001011110101101000001000010011010100010110110011001001100010001101010110110100010111001111110011110110101100111001100010011111111011111111101110111011011111011101101111111011111110001001111011111001001001111111101101011111100100101011101010001101011111110111100111011100011111000111001011011011000001110100011101111010111101110011011010010110011101000000101010101110111111000 1000010101010100010110101101111110101011001010001010001111111101001011101111001011111110101100011000011010100001010100001010100111110001000000111111100010010110101110110000001101011110110110110001101100110000000110010110111001000100011101011101100010111000010101011101111110100111000111100110011101001011100001100100010100010101000110001000001011000010100101011111100001110010001001100010100101111110 1011110110101101101110010110000110100100001101110111001000111001101010110001011000100000011010001111110111100011101010110101111010010010000100010100010011110101111110001100111100111100110001100111110000001100001010100000101000111100101010011101100000100011001101111110000000010011101110001010110000010100100110001101000111011000110110000001011011110101100110110000010010011101010111011000010100011010 1011011011000010111001010101010110001101101010010110011101111101100100011011001111110010111010101001101101010001101110011101000000010111000110110001011000100111001011111000001100101101011100001100101001110110000110000010011101111100101110011000000111110100010001100111100001011111110110001111001011011101011111110101001101100111011111001110101110100001110000000000001000101111111111001010001011011111 0101100111110001010101011010001001101010110111010010100111100000111001001001111010100100100100111100111111101100100001111001001100010000001110110111110110011000101111111110010011101101001110001010101111001100111100011000111001011110001100000111101001110101010110101100101101001011011011010101010011111111110000010111011100010111001011110000011111001000001011111111101000100110010110111110110100111111 1011010000001011101000011000010000010100101101001100000001001000001101000111100111000101101010010000101000011110011111011010101011110010011110000001001001101101000010110100011000111101011101111010110100010001111010000010101011011110010110000011110111110001100010001000101001000000001001100101110100000101000110110000111000011101110100001010111001010001001101001100011110100100111011100111111011000001 1000000001001111100011000100101010001000110110011010100101100010011001101010111000111001000110001000000100000101101101100011001001111000001100000001110100101010001111101101000000101000100010101001001011110001110100100000000101110111101100100010101101001000000100000011000100101000101000110100110101011110000001110110011001101011110100011001010000001111101100100101111011111111001100110111011101010010 1100011111111110001011100101010110000111111011110101110110000011111100011100000010110110011001001110011000010001110111010010001100100001101011111010100001000010011111010110011000101100110001111010101011000110101111010001000000101011010001110000111001101010010110000011110101000010101111111101100100100110010100100001110111000010000100111010101011101100000100101110011101010100011001001110011111000101 0111100011111111001100101100101101000101010010001101110110000110101100101100010000110000101001000100110100101011000100111110111010111000100001011100100001101111101001000001110111110011000011011010011111010101011010100000011011000001101110111000101111001010101101100001010111111000010100010111011100010101010000110111100010111100011011111000000000101010110100101001101000010111011100100110110010111011 1000100010011010001111010010110110011100010101000010101110110101100101111101001101111101000010110001100001111110010100101000010001001100001011111110100001000110000001000100010000111010010000110100100001111000001111010110100111111010001100101111111010010101101111110010011101000001001011011111111111100101001111101010101111110100010011101000001010010111111011000010001111010110101001000011110011011011 0100000011101101101111101110001010100100100000011110110011101011100110101111011110011010010011100111110101010001101100101010111011011100001000000100111000110110110001111011110100100011001110000101101001011000011101011001001001111011001101010111110110101001011101100001100001001010010100001011100000001110010011001011001100000000111101111011011110110101111110010100011111000000010101000011000000101110 1010100010100111000010011111110011010011111000010000001100111110110110110001011001101101001100010001001000011010100100011010010100100101111010011000111010111101111010101110010100111001011011100000000100011111111100111011100100111101011111110111110011100001111110110010110001100001100010011000000010011001001000010011110000011110010111011101101101000010001111001010111101100100100010001111100000111100 1111100111111011101001111100110011011100101110010101001001010001001011000110001000010111010000001100001111011001100001011101000000101011100110110111110001110110101010010000010010010001111001101110001010101001011100100001001100001000111110111110011111101001101000000100110101010000100000111110011001110000100010011100011110100111001100111101100000001110011111110010010101000000010100110110000111000001 1110110100100010111000000110001000111001110001011010101000011100010110010000110101011001001000110001110111101001001110000110000110111011111000111000010101111010011101100101110101000101111011101101000000110010011101101001101001010100100111010010110011100111101101101001110111011010111110000110101100111001100010101111101000001100011000111110011100001011001011110100111100100000100110011101000011100100 1100101010100100111101001001100001100010000110011111110000101001000111001110011010101011100110111011101100101111110101000010000010010001010010000011011010001010100111101101010111110000001110000101111010111000000001010001111111110001110000011000111011110101001111011010011110111010001110000101111010100101011110010110000100111111011100011100011110010100000001100111111001000011101011110100000001101011 1010100101110011100001100011110010100010101111110011111111100010010001011110011001011100011011100001000111111001000000110010111100111001111010100100110001001101000001011001010101001101010011011010101101101100011101001001001111110010110001001010011011010100000010000001101110111111100001100110100000111011100110010100010010111110000000001101001101000011001110111010000111111110101011100111001110011111 1011011101001101111010100101100000110101100110001100101110101111000101101001100000110001001011100111001100110010110110101101001101000110001111100101111100110001101000010110111100011110010000001010110101010101101111100100100000110000111000101010100000101011000110000100111011100011100001010001000100011101101101011001001110011110000011100110000001000110011010011111100010101001010101101001000001010110 0100101111001001101111000110001111111000001011000110011000100010110100010101101110110010111010011010101001100011000000100101111101010111001010110000111001000111110111100101000111111100000011000010111001011010101010001101101110101000000010101100101111001100111011110101110011110111101001011011001111010010110001010010100101111011100101111101010111010101110001001010001101010101011100000000010111111000 0011110100100100010001001011010101110110101011101110101101010010001100111010011100010110101101000110000001111000101000010111110000101001011100101111101000011000100110000101000111100001100100101011111100011110111110100111111111111100011110000010000111100101101010110001101111110010011000001110000010101001010110110001001111000011101100111111000111011000100001100110000100101001010010100001111000101010 0010000001011111011110001110111100100011010100011100101001001111111001111101001011010110011100011011001111111010011110000111111100011011100100100010110110000000010001111100000010001101000111100111111001101010100110100001000111110001111110001001001001101010100111100100011101011011010000111001001000101111000011111010100110010000110100110011011011111111110101011110100010000010000000001010101001101010 0011111111111110001110101000101111110111000001100110111101001100100101001111101010000100100010010011111111100001101100100111110101101011001000101010100001000101100111101000010111101001011101111101111000100010100101111111101001101011000000010110011101100110111101001111100001010101100001101000110010011000001001000000001001111001101010101110100110011010001011001011111011100010010010100010100100001010 0011001011110110100101101100111111110000001011100001001100010110011110100000000100111010000011111000111011011001000011001001101101111001110100100001111100011000011100010011000010101011011010111110101010000111110001101010000110100100011000000010000111000100001010101110111011010010011010110100000101001100011101111110101000001100001100100101101001010001101000110011001101101011000110111011101001000100 1101001000111111110000011010001101001011010000100100101110011110111100001110001010101110011110010001010011001000100100110010000100111110101100011010010010111100110100010010100001011110000010111100111111011001100110001100110010101101101001111110100101001010001011110011111110011100101100100010101100011000010010111110111110111110100111011100010101111000100110000010000101101001010101000111110000010111 1100000000000010101010000110011010000111011000100001011010000110011100001110011010011011101000011110100011100100001111111001000111011110010111110101000111111010011010101011101101010011101111111000000000110111110010010100111110111101100010101100110101000111000110110010011111000110001011110111001001000110001111101101111001110100011111000101100000000100111111100001000101101110111001100100101100001010 0110011100101011101101000111001101010100101100011011011011101011001000111111001111110000100000111100001000111101111101010011011101111001111011001100100100110111001010101110001100011110001000000101100000101000000001110000110100011100110100100011001001100100010111101000000111100010101011111001011001110110010011000000110101110010110000111000111011100001100000000010011011111101000110111011111011101110 0011011000000000000001010011011110110100110011011100100011010111010010101011011000111111111011111001101011110010110100001100010000000100010101001111111001101101000111001100111111101000101100011011001010011011100101100111001101001011111010100000011010100000010110000110011000010101001010100111110100101101100010000001010010100001111100001100100100000011110110101111111100111111011101100111110000000101 0100111000100010110101110111110001010010100001011000010010111011101101110010001110010110110101110001101010100110100100011111001010001111111001011000011110101000100101010101010000101101101000101010110101100111111000001001110000000001110101101100011111001111011101101011010001111010000100110101000010101100111111011101111001010100010011011111000100110111101111110101110110111100011101101111000110100111 1111001111111010000100101000000011110010000001011110101011001001011111000101101101101011101010001100100110110010100000010110000110000111100101010110011001100000000011001011111100100001011111110101010100000000010010110010111100011100100010100100010100111111001110010000001110100101100100000101010100101111000000100111011010011100010001100111010001001001010111000110000100100101100110100101000000100000 0100101011001000100100000011010000011100110000001111110100010010001101001110011000010111001111000001001101001100111110100100001001111100100000111111101000011100011111001011111011000101100010110010000011111111101001111100000100111111110101101111010011011010101100001101001100101010110110111001000110111010011010011001001011101011110011011011010110110010010100011101000100110011000101000110001001101101 0000010010010111011110111010111110011111000010100100001110011110101001010011110100111001100011001111000001111100100110111111101000110001011101010011011010111101111010000110000110110000011000100111000000000111011111110010101100101010010101110110111100110110110111010011000000101001000010001010111110111010111111110100101111000001111110010100110001101000000011011011100001000000111100110110100101001001 0011110101101010101110001001111001101001110100101110010111000110101000001111001010011000100111101110011100101000101100101111011100111111100001101000010101101100110100110101111000010110011011011000101111001100101110110001110000110100001110101000111010000011110010000100011000001101111111100110101100111110110010101001110101010110100111011110110110100010000010011110000011111010101100001011010101111011 1001011000111010010001001111100010011010000010011100011000100001010101011010111010111000011101000001001110101001111000000000011001000010011000010110100111010110100000111101001100011011110111111110011011100011100011001001110011000111101011001011011110100100000101011000101000000011000101000110110100010010110000000011001011111011000100110101001101000001100110011011110000000001100000001100001001011010 0011001111110010101010110011001010111010001000111000000110110001011101101101000111101011001000110001111011101000100110100011101010100110100011010010101101010000101010100111011100101011010101100101010001111101110000111011011001110101011110011111001011011101100101100000100110011111001111100010101111011110111110011110011001111010000110111101101101000111010000000101011110011000100111000000010110101100 1110010101101111101011100010100010101100110101100111011101010010000110010000100011101111100011000101011111100101110000000000010010110111011111001110101101110100101000100101010111000100010111011011101011100011011111010110001001111100000100111101000011100111100100011101001000011000101100001010101000110110101111111010010110100000101011111101110111110111011100101010011110100011010000100110100100011000 0100000010111101001010100000101000101111010000100101011001111100000100010001000001110100000010001100010101000000110101000110000011001111101100010111000001000011101001010010101101000110110000111011000010100110010101001001000110000100011000000010000011100001001101000011110010100100011001011000001110100011100011100110010010001011010010010100111000001111011111000000101111111100101111100101110001010110 0001110000011111010001010000110000011110111011100111011100011111101011010000011010111110111100111001101000001011111011011111100100101110000101100010101111110011100111001110111111010110101011101110111101101110000001000110000010011010000000100001001110100000010001010010100111110001101101110000001101000101000101001000101100000011010000001100100110110101011100101111011101101101000111010011101110111011
cTrader Algo

Line, PolyLine, Polygon【cAlgoAPI】

3/13/2021 3/30/2021

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

線と多角形

線や多角形を描くことができます。うまく使えば簡単なアイコンなどはプログラム内で作成できてしまいます。

 

Lineクラス

1本の線です。

public class Line : Shape

 

プロパティ
(double) X1 {get; set;}

始点のX座標を取得、設定します。

(double) X2 {get; set;}

終点のX座標を取得、設定します。

(double) Y1 {get; set;}

始点のY座標を取得、設定します。

(double) Y2 {get; set;}

終点のY座標を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineCap参照。

 

 

Polylineクラス

複数のつながった線です。

public class Polyine : Shape

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineJoin参照

 

 

Polygonクラス

多角形です。Polylineの始点と終点をつなげただけのものです。

public class Polygon : Shape

プロパティもPolylineと全く同じです。

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記FillRule参照。

 

 

Pointクラス

PolylineとPolygonの座標を表すためのオブジェクトです。

public class Point : Object

 

コンストラクタ
Point(double x, double y)

x座標とy座標を指定してオブジェクトを作れます。

 

プロパティ
(double) X {get; set;}

x座標を取得、設定します。

(double) Y {get; set;}

y座標を取得、設定します。

 

 

関連する列挙型

PenLineCap列挙型

線や点線の終端形を表します。線の端にキャップをかぶせるイメージです。ぶっとい線じゃないと違いがわかりません

Flat 終端なし。デフォルト。
Square 四角
Round
Triangle 三角

 

サンプルコード

Func<PenLineCap, Line> line = cap => 
    new Line {
        StrokeColor = Color.White,
        StrokeThickness = 30,
        X1 = 20,
        Y1 = 10,
        X2 = 80,
        Y2 = 10,
        StrokeStartLineCap = cap,
        StrokeEndLineCap = cap,
        Margin = 10,
    };
var flat = line(PenLineCap.Flat);
var square = line(PenLineCap.Square);
var round = line(PenLineCap.Round);
var triangle = line(PenLineCap.Triangle);

var panel = new StackPanel();
panel.AddChild(flat);
panel.AddChild(square);
panel.AddChild(round);
panel.AddChild(triangle);
Chart.AddControl(panel);

上から順にFlat,Square,Round,Triangleです。

FlatとSquareは見た目の形は同じですが、Squareは四角いキャップをかぶせてるので線が少し長く表示されます。

 

 

PenLineJoin列挙型

2本の線の接合部分の形を表します。これもぶっとい線じゃないと違いがわかりません

Miter 普通。デフォルト。
Bevel 斜め切り落とし。
Round 丸。

 

サンプルコード

Func<PenLineJoin, Polyline> line = join =>
    new Polyline {
        StrokeColor = Color.White,
        Points = new Point[] {new Point(50, 10), new Point(10, 10), new Point(10,50)},
        StrokeThickness = 30,
        StrokeLineJoin = join,
        Margin = 10,
    };
var miter = line(PenLineJoin.Miter);
var bevel = line(PenLineJoin.Bevel);
var round = line(PenLineJoin.Round);
var panel = new WrapPanel();
panel.AddChild(miter);
panel.AddChild(bevel);
panel.AddChild(round);
Chart.AddControl(panel);

左からMiter,Bevel,Roundです。

 

 

FillRule列挙型

polylineやpolygonの塗りつぶし方式を表します。polylineも閉じた線とみなして判定します。

EvenOdd 領域内の任意の点から無限に伸びた光線を跨いだ線の数を数え、それが奇数であれば内側とみなし塗りつぶします。偶数であれば塗りつぶしません。
Nonzero 領域内の任意の点から無限に伸びた光線を左から右に跨いだ線の数と右から左に跨いだ線の数が異なる場合、内側とみなしぬりつぶします。

説明は私のざっくりとした意訳です。わかりにくくて申し訳ないですが、丁寧に訳してもたぶん同じくらいわかりにくいです。

cAlgo特有のものではないのでちゃんと知りたい場合はMSDNのFillRuleの説明探した方が早いかもしれません。

 

サンプルコード

Func<FillRule, Polygon> polygon = rule => 
    new Polygon {
    Points = new Point[] { new Point(0, 20), new Point(40, 20), new Point(10, 50), new Point(20, 0), new Point(30, 50) },
    StrokeColor = Color.Red,
    FillColor = Color.Yellow,
    FillRule = rule,
    Margin = 10,
    };

var evenodd = polygon(FillRule.EvenOdd);
var nonzero = polygon(FillRule.Nonzero);
var panel = new WrapPanel();
panel.AddChild(evenodd);
panel.AddChild(nonzero);
Chart.AddControl(panel);

 

左がEvenOdd、右がNonzeroです。

よくわからなければ中身全部塗りつぶしたければNonzeroと思ってもらえれば(cAlgoでは)だいたい大丈夫です。

 
 
 
 

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

新しいコメント

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

cTrader's Life

© 2025 ajinori