1111111101000000111010001011001010001001010111001000100001110001111011111011100001011010000001100010010011111010100110011101010010010111010111010110111011010110001010001000011000110100100011101010110000101011110101101111011001110101110110110100110100101001110111000010100011000111000011100100011111000100010000100010110001000010001101111111001010100011111111000000110001110101000011000011110001011000 1111001000000101110111010100111110111001100110101011010110001001110110111001101110000111111100011001101000000001001111101110110100101111000111000100010001101100100101110110000111100100010100101001110100110110111011000101101100010111010110101000001100110010101001001101011100100110000100111010001010011111100001001101101001100000110011000011111001001111110000011110000100001000000111110111110100101101 1001100010001010011000000011010010000111100011010111100100010001110000010100010000011011000111101101011111011011010100001000111001111110101100011000001000111001111010100011111111011000111010000101011000111110100111110100111010111111010111111010011000011111001101110101010111100100100010011011101011000001111110100001000011011011101101111000101110100101011100010110000011111101010101001100011100001011 1001011100100100010011011000000100001010100000101100110101000011001000011000011010100011101100010001100001011001110000011001111001011001011001011010011110010110110111101111000000110001101111100001101000010101101000100101000011010010001110010110000100000110011000011100111100111010010010100000101011010000001001101011110110011100011000010011001000011110111000000000110001111001000010011000100101110000 0010110110101001001000011100011001010101011110100010011101101101101001101000001110011001101100010011001011110001110010001110100111111010101111000100110100111100101000000101101001010111011011000101111111101111011100011111110001111100001101001110011101101010000111110011100000010010011001011011011111110001101111100000010000011110000011111101110000001100110100111100010011101001110010111001010100000011 0100101101010000000010111100000001100100111010100110001101010101101110011100000111110011100010101000100101001011000011101110110100000000111110011000110000110011110001100011110011000100000010000100100001011001100010110001111100010001101011010001011001001011111000100100011010010001111010000111011111100101101011111111110100101010100100010000111000000111100111001110111100101111010111111110101000010001 0111100010110110110001000010111011110101110110111101011100110101111001100010110000010100000110011110111000000001110100100001000011111101110000111011111011010010110111011101000000100011011011100011001100111110010001110100110110011000001010001101100010110000010001010110001100111101110110011001100011011001110100010101011110100011111000000001111111110111001000110001010001100010100000001000110101001110 1110100101100101010000111001001101000100111011110011111111011001100100101100001101000111011001011010110001010000001011101101011010000101011111111001110110110110010101101001010100101100101010010011100101111000000010000101110011010100111001111010011001011100011001001100011001001000111111010111000000000100000010110101011100011000110110011001000101101110111110001110011000101010110000100001110111111101 0011100101100010011001110101101000001001000010101110001000101101000011000011000011111010100111010101000010001100110001000001001111000100010011011010000111100110000111101110010011001011001110010101100011001100111011111111010011000011111000011001110111001101100001101001110010100010100011110010010111110010000011001111000111100100001011000011001101000110100111001101011010111011110001110101011100100101 0010101110110000010110000011110010001101111101001110110000101000000111011001100110111110001100111100001001010100111000111010000100000010001000000011010101010001100000111001101010011001000110110011100101111000010100010100000110000100110111111000000111010000001101011000001000111011010001011001011011100000001110111111011101000011111010101010101100100011000110101001001111011011010000100100011101100000 1110100111011100010101010010011110011110100010110010010111101111111101100010010110101111010111010011111111111011100001100100101110111001000111101011110011010110011000011110110100011010011110111010000111100101000110100010001001001110100011000101011100011000001101010001011011010110110110000011110000101001010001100101000001011110101100101100001011010001000111011111011110000011111000111101110101000011 0100101001111001100000110110010111101000000101111110100101011010110111111010000101101011111010010110111000000101110011010000000000001010010100011000000100101010011100001010101010100111001000000110111100111101111100110111100101001110001011101110110001111011101000111001011110000100110001111011001111111111000101011010101011111111111100111011001001110001111011101100010100000110100110110000110000001101 0001110001000111010111011010111111000111011011111011111000001000101001011011110001111011100010011101110111000110110100110101100101001001001110111010111101101111111100011000110100001010001100000100101000111011010101100000101011111000011101100011110110100111000000101000100110110011110000100001100101011101101100110011011000011101101000111000010010111010100101010011100001001010111110000111010110101101 1011001011100000000101010010101010100110101011010010101011100100101000111001001101011110010010000110001111011011111101010011101110110111101110111111100011101011110101001011110001011000110010101111100010011110000110000010100001110100101101001101101000100000010100101110110001001000000011010110010000110000111001101000001000001010101010110110110010110111001011111011101011110111111001000111000100011000 1011101010100001001100001101100100111110011000100000100100000010101010100000111101100000010001110010000010100111110111110010000000000011111111001011011010111011010100101111100111001011100000100100011110111011110001110100100010111100010000001101101111000001100100010001000100010111110000011000001001000111010010011001100111110101101001000100001110110011001111110100111111001001101111000011110001100011 0000111010000000100001100111111001000110100110110000101001011110111010100011011010001100101011111001011101000001100010001110101001100110000111001101111001101010011011000100000110001110010101000000001000100011101011000011000101111110010110000100110111011011111010110110000111110110001011001101111010110111110011110000010010110000001111111011011001100010001101011100001001111011011011000111110001111010 1010111101101000110001000011101000000110100001001011111001110111110110001101110000000001111010000110100001111001010011011010110000011001110110101010011001010101011101011000101101101010010110000001100100101110001001110101000010000110010000101011101101100000001110001010110000100111011001100011101111011101011011110000110101111001001010100011110000001010111011111011101011100010110000100011111101011111 1010110010000101111101101100000100111000010101000111010111010001011010001100000100101101110001101100111101011011100001001101110001001001100010011101011100001001000101000000010100101101010000110010000101101000101011111000011000101100011111111001011000000010101001010011010101000000110000110011100111110111110110101011000010100011000011001011100110111111110101111110000010010110101110101010010000001110 1101000010001100101000011000100100111110110010001011111010110001000001000011010100100011111100010100101010011110001011111001101010111100110000001010011101101011100001010001111100101011010010100111110000000111000100011000111110011110111010000011001001010101110011001100111011010100001000110000101000001110101101010101011011011100010111010000011011101110100001101111001001111011001010100001111110000011 0011111111000111110100101001101110111011111000100000011001100101111000111001101000000010010100100000011111111110001100110100000111010000001001110000101000100011011111100100100111111000111111011110011101010000110111111111001100100000111001011000000110000000111010111011011100111000101011101101101100111011011111000000110101010001000001111101011010010111100110001110111101000011010101011010100111110111 1111100000011111000100101010011110110011110101001001110001000011000101110110001001100111011010011010111101011100011001111001101001011100101111111111111110111111111110101000111111111110110011110101110110001010101010111100000001100111000100110000100001000011111110100101101010111000110110010000101110010111001010010101100110011111110110001001101111011110000101001111011001010100010001000111001011110010 0111011000001011001110011111100101101000011100000000011100111100100010111001101100010100110111100010110111110001111101101110111101110100101000011010010000010011101111010001110101101100100000100010001100001000011000111110010000001111010001011111000001111100110000100110100100110001101011101000111100000111011011100110011100000100001010000000000100001010110001100010010100101000011110001110110110111011 0011101001101010100101110101001011100100011010001110011101101001101100101111010111011110010111101010001110000111100001101100010001111101101011110101000001010011111110111010001000111011000101011011100110001011001111101101011101011110110010111001111101110011010010000001111101010111111001001001000100110111010010000101101000100010010011100010111100111110000111011000010110101111001100000101100001001001 0110011101000000000010101100011111011011001111011000000110000001010111001010100001110111110111101000100000110001001100100100100110110110111000111000110110010110000100100011010101110100110011101111001001010000010001111000000110011100011101001101101110100000001011110010100111010111000100111111011101000000011000011001010011010101100101010101101001001011111101011000100110111010111010010110100011101110 0011111001110011000110100011010100101011000110101010101001011101100000010101010001111010000100110001010100001010111001111110000110010110011010110100110010100011001111100100101110100110111000111100010111110110001101011010111000100111100010110101010100101010111010010010110100010100101100011110110111011011101000001001001010110101000000100001010101111111100111100000100000101001110010011100100100010010 1001011111010111011001011101100001100000011100101101111011010011100011000001101000110010010110101011100111110111001100000000110100000101011110010101110000110110111111101111101000000101011010111011010011010000000101011100111010001011011111000101011000100101000011001001011000001101111011010000101000000001001010010110100000000011001010010110010001101010001111010111001101011100101101011100101000110110 1001111001110010000101011111010000000100111010111101010101100100011011001001000000100011101001100001001101100010100110001001011111101111001001110111110000001101011011000000100011001110010011001110110100001000001101011111011100000000011011000110110011000011100001010111010010111010111100110011100000001010000001100011111011100000101100100111110110000101111010111100010011111100101101111101111010111110 0101110011110100000011001110111010000011001101100100011000000001101011100101101100110001110110010000100000001010010110111001000101111100010110001001000010110111000010101111001111111101011101110010010110011110111000011100101010110111011100110000010010011101111100010101110000000101111010101110100110010101101010111111011001101110011011100000110010001101000000110010001100110001011110110100100100101000 0111000011101100101010100100010111010110011101010001101101001001101010111110001111011100101111000011101001100100001111100110100001111100000010101111111001001110000001000011011000100010011011000100110111110000001011000001010010100010101010001100110111101110110100011010000100100101011010100100001110110010001000000110010111000000111011101101101101101111011011010001101100101110000100001011110110001011 1000001111110111111001100010010000110110001010010100101000101011001000001110100100101110110111111011110100100111100010010011101010110011110100001001011111001011011000100101000000110000000011101011000011001000101101001000011001011101100001000001101110010010001010110101000111101110110010111110111001111011000001011111011001110100110100110001111010010010000101110001010001101011011001101100001110101000 1101010100000011100011110010110001000100100100100000001000011111000011001010101100001101001111000010101111001000111100011010100111001111010111110111001001110110000101011010000110011111001010010110110001100011001010010110011001101010000010100110000011001001110000010011011110001001010111011001001010001110010000111111011101111011111011101110111111011010001000000010011110010100111111010011011101101001 1011000110010111100001011010010000001110000001011111111111101000001011001111010001101011001110000000100100011001100000110101110101011101010111011000001010001111001010001111000010001110001100111100011001000001100100111010010000111011001110010000101101111101100100000111010010110110011100101101100010001110101000000100011101110100101001011011011111000110010100011101000110010010111110000100011010111010 1111010100000011110010101111010100101111011011111111001111010001111001011101010110100011110000011100011111011101100100110000110110110010011111001110001011110111000000111010001010101110011010110001110111111010001100011101111010110011100111110111101101111111001111110100011111100011101010010111010100011001110101100100101111111011111001110110011111011100111101011011111100110101001111010000011011110101 1111011010011110000101001000110101000100111110001010100011000100100110010100110111110111000101001011101101100001001000001000000110000111011000011101010010111100000110111101110100100100101011001010011100000000000010100001010010011101001101010001011111000111100010111000010101100100001010100110101000111010111111100111111010000101011111001001111001001100101101000000010101010100000011001011101011001110 1011011110100100100101011011111010011110111001010011110100010000100110111010101010000010111110011010101011001001011101001100100010111111010010011100101000011001000011101001110000100101000101110101010011101010111011110001001100011000101111010000111111111100010010100011011110011111011101101010010110011110000000111000110111000000110000110010011010001000111000110010000101101001000010001001000101000110 0011011101101001011111111010110110011011001001101101001011100101000000000001011011111010001011001000000110111010000110000010000101100010010001111111110110100101011010000010011111100010010000000110111001100101000111011001100111001001000101000000100101100101100001000000011011111000000110110110100010010001000111001001111111111011001000101101111001101111101010010111001000100100000011100100000010110001 0111010111110101100011010111100110101111010101010000100101100110010011001101001000010101111100011111100001010101100100101011101010101011111010111101000100111001001010000100101001110111001101000111111111111101001001110110111101011011101010000001001100001010100100110011010000001000001000110100010110110111001001011101100001010101000011010010010001100110101100001101110110000110001111111001111111101010 1010110110011101001000100000000001011101010011110111100111111011101111111110000111011010110000011001000110001101101001010010001010011000000010100111110010000101011010100000010001011100010001111010011001110111101000111111010010010101001001011001111111101011111101000111011100010111000100110010010010011111100000001001000101010101111010101010110100011101001000101001110101101111010000110110011111100100 1100011100101110111111001001100010110011111100010100000100100110111111011110100010101110001101100001001011101110111000101111011111010000111011010000001110001111010101111100110111000111001111101110101110100000101100001101110000110111001101010110011101100010100111101011001000100110101000001001111011111101001100111111010010000000111101100110101011001011011100010001100001000111101100000000111001001001 0100101101010100011111101001111011000101000010101110101001010000101011100101001110101111101111010000011011001111100101000001111111110100110110001111101001101001110001010110000101000110001100101101011110101100011010111111011000001011101111010101100110001111100100111001111110010110000000110110000011000110101111111000000011111110100010111111000101110011010110100111100010110000101010011110011100110101 0111110100001110011110111100111011010100010100000010110110010101010100101101111100110110011101011011100000111010000010001110010101100100101001000010101001010011011111100000110010011010110010111100001011010100010101011101010001111010111101001001010000001111000010011100100100100101000011010000110111111111101010010101101101110110011111100010111001101001101011010111001001111011100011101111010100001110 0111110011010100010011001110011001011101100100111010111010010000111111111101000111100001100101000001101010001011100110111000011001011110101011101000010111101011010100011010000111001100101110010110110001111000001000010011100111110010010001101111010101100101111110001110000111110101001011111001111001101111010001100100111010110100101110110010011100011110000111110000110110101110011110101101110010100011 0010001101111111000101010000000011100111100111110010101010011001010010110000100100010001110000110011001110000011101001101101101110000100011101010111011100011110111000110010010011001101000100111111101111000111000000011110110101110010001011010100000100000010111110100001010101111000100111001100010010101110000100110111010111100111011100100100100011101011101011111001101110001100100001011111101001010000 1100101001011001001011100111101001001000110110110001001110100001110110101000111111100001000101100010000010110001010010101111011010100100011111001001001100100001010001001001100001111110100011010001000011100011101001001011110000111110111101111111011101101001001001011011100001110000111000101110001000001101001011001111111111011001010011011011000011110101100100110000110100011010100100000111010011010110 1000111111101101111110100011101100001011111001011111010001100010100110101110100000010100100100001001010010111110010111110110100110100000011100010010001110001000111010110110001100000101111101101100110110010000010101001111011111101100111101000010110011111111010010001000111110010111011111100110100100111010001001001111011101101110001100001110111110010000011100110100110010010101100000000011001100100111 0011110110001001101111011111101010101001101000101010111111110111000110011100000100011100010110100000011011111010011101000001001001111111011001011100100110010101110001101110110000100010111111110000110000001111110100011011110010111100011100101101011011101011010000001001110010100011100110010110000110010110101110010111110010000101010011100000101100100100111110110101000111010011111001011110101001010100 1110101001011000011101001010100011110110110000000001010000101001010000011110010101110001110010010010000101101000110011000101010110001011100001011111010011111100111001111100110100000110001011110010101101000011110101010101011101011010010111000000001001000000011000101111111011100100101010101010000110111001110000000110111001110010100110101101111000001101111010111100010010101000110000000101000101111110 0000100000111010001000000100011000111001000111111100010011010000011001111001010101110111101001010001111101011011001111111011010110010000101001100000001111100000001001011101000010100110001011110110101001011100010100010001010000111000111010000011101110101011011100111101100101111000101111000101111111110000100101100011001011010010001001001111110111100110001111011000001111100000010011101101010100001100 1100001110010110010111100010010001110001000001111010010101010010001100110110010100100111101001110111111000011110011101010000011000111001001110010010100000101010100100000010000001100011011011111111001001100000111101000111111000000011100101100111110011110010100010000010111010101010100001000110000000110101110111111101000000100111111010001010001100101001001011000100010011010011100010001111101000110111 1001101010010100001010000101110011010100011011100111000001100010110100011000110011011101110100010111100111010000000111010001011100010100001010101010101101000111101011111010111111011001111101100011110111101001100011100010110111001110100111001111101101001000100000100001000001110001100100110101010001101011000010100100010010011000011101011111111001111001101001100110100101100111000011010011110010000011 0110101100000010000100110100111110000111101000000010001100011101101110110101100011100000011111110100000111010101111100010001001110101001000000001111010100111001011100011000101101101111110000100010110010100100001100111000111010000010010000110000011010100111110000111010000111011100100010001100011111000110010011010110101111110001000010101000100010010100111011111100111110110010001001101011010000011010 0110110011111111011011100100110000011100000010010000111111111101011101111111100010000100110111000010011001010000111000010110001110101001100010100100001001110000101111110000100010001100101000101110110001111111000111010011111110000000101001101111010011110011101110000000110111110100010000101101010110111000110000111101001001101111110100100101100001010111101101001110001010011000100011101111100100111000 1101000000111011100101100010110001100110100101100111101101100011001100111010001101010010110111011101100101011111100010010101011010100001101110001000010010101111100000101111001010010000100110101001011111010101111100111001000001000010001011111001000101000101001001000100100001101100100111101001011011111011110110000010010100100100010000010111010111101110000101010101101010001110111000101111011001010010 1101100010110001011001100000011011101011100000111111111011010111111011111100001111100000101010110010000000010110001000101011100001110111101000111100111001001011111010110111010011101010010011000111101000011101000011100010101010000111101011100101011001000001011110001101001001011011101010100000000100110101011111000100100011100011001010110011011110010111011110111001010010100010111011111001001110111100 1011100100110100001000001011110101100011010010101110001011101100001110110110001001000001101100010100110110111001001010011011011110011101111100110000010110010000110000001010001110011010100000010101110100101010111000110010100000000011011010110110000011100100000010011110111111100101101100011101111100000000110001101100110110101111011100110010000110001100000000010110110011011100111110000011100011111101 1111111000101011101110111100000101111110110110110001010111001010101011010111011101110100101000000010011110010011011111001010111001100101100001111100001101000010101001001100000001100000100011110110110100111010001001000001100000100101011111110111011000010110111011110010101011101011001110100010100011010010001111011111101000101010010101100110000011010000110011111000000001110000001000111110100001100111 0111110001101000010110001011110111110000110101101001010000100100111110101110110110010000011011001000100011011000000000100111010011001111101110000011111011100011001110001011100111110011111000100010111000100001110111100101110110111011010110011101101010010100000010101000111011000010110010101100010010010101101111010111101000110100110100111101110101011000001011000100110101000100101100111100000001010101 0111011100100101010000110110011000011000111100101001100100111010000011110001110000000111101011111100111110101001001101110111111000111111101110110000010101111000000111011000101100001010100001000110011110110111001100100110000011001010101010011101101101001011011010000110100001010001000100000101000011011100100100010111100101001111100000000011111100110100010000111110101000000101011000101001100110100001 1100110100101101111010101010111101010111101101001001111110111000010000000000000011000000110011001111010011100000010100100000011010110001101111001101111000000000010001111011101000110011110110010001011011011101000110001011011110011100100000100100011000001100101011110101000110110111010010110011100111000001100100101011101111000001111010000110001100001110111111000000001100000111011111011000101011110111 0010101000001111111001010001110101111110000101011101101110011001000101110010010111101010011011110011011010000011010000011011010010000100010111000111011110001001100001000010010010100111010000100010111011010101011001110110000101010101010110001111000001100111010100100011010101111101100001100100001110101101011011111010100000001101011110100101011100111001111100101100000111101110011010001100101010010101 1000100010100110101100110101000010001011100110110011100010110000111011110001010110001001011001010011111001010000100110101110101011111110001100110001110100100011101000010010100111000110001101111010011000100011011101001111000010010111110110101100101111001101000100001101010001000000001010100100101111000100000011101001010110010101101110001011111100100011000110011110001111011111001001000101000000100110 0001010001111000001001100001010010000010000010010101011101111100001111001001000111110011111100000111010111011000000101100110011010100011011011110000101111010011010001001011111100011011000001001100011110111101010110100111100011101011111100111001101101110010111001000011110101110101111011011101111001101111010101011011101011011001000110000100010001000111100111100010001111110011111101001001011100010100 1000111111010001110111010111001111111100100001100001001000110100011100001011101000111010001111111010110100101111001100100010101011011111011010111010100001010001000000111101110101100110001000100101100001111010011001010011100111011100010000001111110110110001011100001101111100111110101110011011011110011101010110010010001111011010110001101101011100110111001010011110010101011000111011010011010001000001 1110100000010111101111111101101101100001001100001001100000110011111111011011100001101011110110100011100001101011101111010101100101001101001001100111111001001001000111101100011000101110100010001111000011100011100001011101101111111011001110111110011001000110010011011101111110100101011110001011000010101110100101111000011000000110101100011100010011100010111110100001110001100011001010001000101000110001 0110111100010000000101010100110110111000000100101111111110111100001101000000110100000001001111011110110001000001001001101001101100111111000011000001000000100100111101110101110111011111000111011011000110000100101100101100001110110011101111000111100101100100101110101100010100011001111000001010000111110111000001100010111010001001001010001101000001000011101011011101010100010111111011100011011011100111 1010001111000110110010100111100010100101100010000111001110001011001010011100101101101100100010001001111001000010101011100011001011101000010110111110010101001000010110010011000100110011010011010100000100111001010110011100011100111100100010111111101111100111111010001000111110001101010110000111011111000000110011001000010011101001001101000001111101010010011000110011101010011100010011100110110110010010 1001101001011001101101011101010100110101000110111100000100100111001001101111010000001110111011101001001100010111100001101010001100011001001010110010001111000101100111000111011101111010011110100110001111000100110011101111111010111101101100000011101000010100000000001111011100111001001110001010110001010100010110101101100001110111100101111001000001010001111010001101001110011000010111110011110000110101 1001010011101111001110011000011111101110110001101110110011111010100000000011001111111110010011111010010101001101110011011101101011011100010011101011101001101111101100110111010100110100001010011111001001111110110001110001010111001101001010010101111001000011100101001000010101000000111011101101011110001001000010011001001101001010010100011110011111100010100101001110000000101010101010101010111001111001 0010000101101101010000110011110110110111111000111000100110011011101011010000100110100000001011100110111010010101101111011111100000101110010111010011011001010110000010001100110111000100110011111111000011010011101111010000111001001011010000101001100011000111010000010101101011101100010100100111010000101010100001101111000010010110100101011010000101101101010000110010111101001000001011101011111010100111 1110001111011111100001100011101100111111101010000011111010101011110011111111101001000110011100101011000110101101110011001010011101000010100011111010011100000001101101001100111001101010000010011101111011111011101000001111111110011110101110001010111101011101000011010011011111000001110111010100100110001010001001110001000110110010000101010010101000000000110000111010101010001101100000010100111010110001 0001001111100101010101001110111010010111111010111001110010111100100000010010000110010101011000010001110010111100110101000110110000100101000000110110101001111010011100010011101110101010011000100100100001010111111000100011001111011011101111101000011000101100001111110010011001100011011100011011111010010010110100111000000111001100110101100001110111010100110101101111100001011011000111000011001101001010 0000101101100111001010010110110111010110011011001100111001100011100010101101000100110100011100000101001000000000100111110111001001110010011110011110101110001110011101111000000011001111110010100110100000011111000001111011111110010011101101000000000001100101011000100111001110000011001011101011101011001011101101001110011001011100001001011100001001000011111101111011011111011101000100011011100010011100 1000110100111110110010000111101100101010010111000101001000110001001111101000100110110000110000000101000000011101111000010010110101111111011010010100100011010111011010100111110100111000011010101110011000001111110110101100011000001010111111100111101110000110001010101000001100101100111010110100101111000101011011011000100011000001010100110111100111101011101001001110011101101100100100111011010011101101 0010101000101101010100011101000110101010100101100010000101100000000011000100000110100000010111000101111010111010010001001000000011001001110111100100110011010001101101101010101111011110110000101011010100111011010100100100101100000111110111000001000010110101000111001011010000010111001111101111100000010010101010000001111010110000110010111000110010001011110011000101111011010001000000101100010100110111 1110100110001001111110110000100110010101011011101001110011101010111110110101000011010101111111110101111100101100001000111110011000110000110101000001000010100101110000110110100001001110110110110001101011000111110011100011110001011111011101111110011111110101100001011011010011011011010011111001101110111011010111100000001000011100111011110100010110111110000111000011101111111010010000100011011001011011 1100100001100101010111001001100110111101000110011011100010010011110111111111011011000100101101001011111101001111110111110100011001111101101011011100110011101011010101010100111111101000110000101000101110000000101110001001001001001010101110001100001111000111101110110010111001000111111001010111110001101010101111110101111001111000000110010000100111011100100010010101101111011001000110111011000110111010 0001010000010011101100011000000111111101001001110111010011011011101100000000111011011001111011110001111001010010110101101010100011101100010111010110000010000101110010111001011111011011100001111111110010100000101000010101101000001011100001101010011001011111110001001010000001110001101001111000011101110000000010100001010111100100111110011000110001001000100010111000000101000000000011000010000101001101 1111000001111001100111001100010111111001100010000010111100001010011111010001010000101001101111010000111001011101000110100111101100100010011000000011100011010111101100010100000000100101100101010110100111111101011111011101111101000111010011001101001100100001100101101101110111011011011110101011101110101100000001000000011110111011101000111111100011110110010101110011001100010011001110010100111101010110 1011110101100001000110010100111111011011011000000100010111011011111101100111100001000101011100101100001001011011101111101001000000000110100100000011001100100010001101000100111001101100111011111010110100101011100001101010010101100100100000110110101011011001000000011111111000111001111100011001111100110010101110110100100000111100111101101011101001000010100101100110111010001110010011001001101000010100 0001111000010101100011000111110000010000001100011001101011111111011111000001011111100000100111101000110100101100000110000010101111100001101100000110110000111010010001001000011111001001110001100100101001010110100010101101101000000011110000110100110100101001001110100101011111101001001010111100010011011101111100100111010010110110100001010100000011110111101110110000000011100101001101001101111001000010 1110011101011100010001111101100100111111111100100000000000001011001111000111101010110110101000000011010001101111110000001111000100111000101101001101001000101111110101111110110001010001001011111001000000011111111001010101010011101011100101100001101101001101010111001101011110110010011000100011110011010110000001101101011100011011010011010000100010000100101110100100011101100100100110010111011101101010 1100011001110000110101110000010010101101110101110110000110111111110101100111101111110111000110011000100000000100000101010001101101011100110101010000110000101100101001110101111110010001010110110100100101010110010010011011011101111110100011010101101011011000000101000100100101100011001011100101100110100100101101110110010010101100000000100101111001110100011110110011101100001111100111101011111001110111 0111000000111001110100011010100010110110010110100100111000000110110010101111111101011101101001101010110101000101000011101010100101111011011111111011011010010000111011010001000010100110110011111000110001000001010111100000001001000000010100110100010010101101110100110010110110100110100110110110000111110111110011010011011111101011001001111100001101111001100010011000101000101111010101101000100010100010 0101101000111011011010001000000101010010001000110001001110011111010101110100010010001100001010100101000001100100111000101010100110110011000011100100000101100000110101101111001111001010101101010111110000111011001101011010111011111111001111110100001100111010001100011110111101000111110000100000010111010100110010001110001100111111011000011111010000011000110100010000001101011011101000000111110010000100 1001110001110100111000001101001001100001111110000000010110001100011101111000110001111010010101101110011000100011001110111100110010001111001100011101011101000101010110001101011110111001100101000011001000001100010111010011011000011011101101100001000010101000011000001101100011010001011010111100000111010111100101010110100001011110010010010000111111101011110001110011011010110111010101110001100011000001 0110011111010011001010100010101111111010010110110111100100110001100010111110001101011111000110110110000111101001011101111001001100101011001010111111000110001101001000010111110011000101111110101101000100010110100110111111101111000011011101001010000001101100011001011100011101101101101111001100111010100100100100011010100101100110110011111110010001100011100011011110010110101100111010011101010011111000 1111111101111001000111000111011100001001010110101000000101110000110110010110000000000111101000001001011100100110011000101111000011110100110100111100111011000100011100010011111100000101100011001110001000100111000100101111100110101100011111111001110110111100001001110111110011110001010100100111111101011111111011110001111000000011001000001110111000001010001000000111100101101110000101110100000000100000 1110110110111000110011000100110000000101111111100011100101101101011011010010010101010110111010000011110100010111110101001101010101011111001111000000001101100111010010111101100111000011000000000101101010010101011010010011010111000101100000010110100110001110010010000001001000110011010010001000101001000101010110010011100011000110000111111011110010111111011101000001011110011110110000010111011110111011 0111010001001100010001110111001010010110101001101000101010000001100011100100001100011001111101101011101010010110110010010010111100101011011101011010101101101001010111011110011011110111001001001011110000111111011101101011010000001100110100001010000000000011000000101000101001001000010111101001010000101111100110001110100010101001001000110011101010111001101001100011110110111100001110111111001000100110 0100000001000110011111001101100100100111001100110111001110001000001100000101100101110011111000100011001100101101011100000110010001011011001110001101110111111001000000000011001011010001100111111000111101100101101000110010000011001111010011000010011110110010100101010000000111001111000000101100010101010000010001010011111011001110010100101001011100110000101110101111110110010111100011000100101000001101 0010111111011000001100000000110110100110001001111001100000001010111110100100111000000110001101111011110100101100111111001011011010000000100010110011011011101000001100110001000000011001001101101101011111011001111000010111110111001000100011110110100101100101110010000000010100011001000100001111010110100110101110000110001000010110110111000001000101110011110010100110100010111011001000111100011110001110 0001010001001100110010001010011001011000101000100100001000111000111011101101001110110110111110100000010011100100010111011110100011010110100011101000101111111011000000000100100101110111011011100010010111000110100111000101110111100010101110110111000011100111110000001111001111011101010110110111000101010011110000100001100110011000010100010001111000010011000010000110001110000100001101011111011101011110 0010000000111000010011010100101110111111110011000101010110110101101101010110110111001000111100101101111010110100000000111000111001110011001001001110101111010000110101001110001110011000101110101100111111110011010010110010111111110000011010110001111000011001010110001111111011001000010011011111001111001111100011010000110100011001110100011101101111000011101010110010111110000000010110001111000011101011 0111011001001010110001101100101011101101110010010100101011000010001010001011110010011100010010100111010101100010001010110010000001001001011111000011001010101011000100100110000111100000100110110100011010100110101010110100111101111110010101001111111001001110111101110111101111000110111110001110001001100111110100100010111000000111010111111110100100111000110000111101001110000101110111010000110101000101 0111011100011010111111001101010000010111000011001000110110111000101010101000101111000111001000111110000101100001011101001011111001010100001100111111001100100101001110000010000101011000101110011011011001001100001111000001001111101001010000011011001001101100110011001111100100011111110111011110001100111010011011100001101110000111110011011110111110011010101010001111010101001011000010100100010010011110 1000010110100000000010111001101010100000000101010100101101110100011100100011101100001111001110001001000111111010000010110110001001011110110000100100100011010111110010001011110101000000110110111110110111001001010000011011010010111010100010111110110100111100110111110001100010000010111001011011000100011101110100110101101010101101101000001100010010010001111000111010001101100000000100110111100111001010 0110010100100110100010101100101000011001110110101100100101111000101000010110100010110110101110010001110101000001000010100010101111110000100101101000101001001010001110011000010011001000010111011000100011111100101111110011111100101101101100110001110000000111101111101001101111111101010011011010011000110111111101011110001000011010100000101111101110100011101001011011011010001011111010000011011111010100 1010001010011001010011111100010001110011000000110001111011000011111011001011110001101100001001100001000010101100111101101010110001010111100010010110011100101100101011110000110001101011001011001011010010001110110011100000010101000001011111011100010111000101001101001110110101011011101101110011111001001100101101101001101010000100001110101101010010000111101110111010011111010000010011011000010101110101 1111100101100111001110111101101000101111011011110010000110001000111011011110111100111101011010000110100000011001000100010101001010100110001011111111111110110000000110000111000011000100111010110001110011000101100111101100000011100111011101110100011011001110110110111110000010011010010000011011010101000100000001101111011011001011011101110100011100001100101100001011100100011001100101000110000000001011 1010110111000000101010101101101110110110010111001001011110001010010101111100010111100111111100101110110110001101000000001111111000010111000001100100011101110100011101100110110010111110111101010001101101001110101101110101101001001010010111110011011010100011110011010101001011101101011111101010100000010111100100011000100101010011000000010010101010101110010100011110000101111111001111101010111100011101
cTrader Algo

Line, PolyLine, Polygon【cAlgoAPI】

3/13/2021 3/30/2021

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

線と多角形

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

 

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

© 2026 ajinori