0100011101001011010110101101100101111011010101001010011100110000100011111011100101000101011100000010110000001010100001000101001111011110011000010001111111000000110010111011011101001100111000100100111111111111011001110011111111010010010011110000011110111111001010110010111111010100011011000010000000010101001001100110000011010011001100010011111110111111001111011001010110101010010110101011101001100011 0010011110000011100110010110101110001000100101011111001000100000000010000001010010001111111000011101100110111000010011000001110011110011011101001000110110110011000100111011011111101000001110011100011000011011100011110111001000010011010000011101010100110010010110011000001100000000110011011110010110100111011001110010001011010111110111110110111010101111100000000011010001110101101001011111101100111101 0000100111010110010000000010001010011110000101111101110010100101101001101101001011101111011101010100101101010110000110100111111001101010000110011101111000110100001100000011000100011000100111111100010110111010000101100000110011000111011111001100111011010100000101001000100111010011110101100110100100011101110001011000000101010111001110001010010111011001000110100111111001001110011101111011110010011100 0111001001001111000010011111111100010010001000001000000100101111001000011100100010101111111100011110110101100111000000111100110000110000110100110110010111111100011101100000101101010010101011101101010000001001111010001110011101101010000010001111100111111000000000000001011000011101010000010111010100110110000010010111000000010101010110110001101000010100010100110000011010000111010100001100010100100101 1011000111001011011111110100101110001100000000010101110101011100101010001001000001110011000001010110101110001101010110001110010001000011010101001000011110110010111101000011001111001100111100000000100111100100010100001100000111111000111111100010010110011001011100100000000100101110110010000010110011010110000010110101001101000010010000011111101011011010110010010101011100000000100000110000101010011010 0000010011111010001000001011101011000011000011101000111011010000011110111111001110100100001000110011011110110110000100101100111001111010000011011011001010001000000001110110010011100001011010100010110110000110110000101011010010001110101010110011100010100010000111001101011110000000101110011101111111111010001111110011000101110000001011101111010010000100100110110000010001100110000101111101000111100111 0001000111010100100001101110011011000000100100010111101010000001011101100010101100101001010100101110110100101011100011100111101111001101101111101011001110101001100111010001100100100100010101111101100101001101111001101110001011001100010011101001111001011100101100010010000100101011110001010010010010110100000010100001100000000011001010001010111000111000111000101111011100000100101000000011101001000110 0011000100010000101101100011000101101011010111001011100111100110001011100000111101010010100100010101110111011010101101010011111111011111100111100111101011101001100111000001000000100100011001000011111101001011100101111101110110001000011110110100111101101001111011001001110001011100111100000000100000011000111001011100000011100001010110111000111110101111101101010101010010001001111000000100100100010000 0110010111001100000100100011110000110001110001000000011111010010100100101000101011110101100000101010101011101001011100100100001010001010110011110111101011111011011010100010000101001101101001011101011111010101000100111000001010101000110100010000111011110011010111100011010110010101110100010111000011010110100111100111111111111101110101100110000011110101000011101001111110100111110011110001000101111111 0011101001111111010111000110001000001110110111110001100101101101011100111100101011110010000100110100011111001101011110100101011110011000100000001111101011001100101011010111110100011100010000001011101010111011100010010000110001101101110100011011001110101100011010111111000011000001000010010000000000011111110101000010000000000101010100001110100000100011100100000011010101010011100001111001101010100000 0010110010000011101000100100100000110100101011110001000100010101110011010101110100100001100111011010010101110111101001001111111000111100000101001010000101110111000010101010110101110001011000110110101001101110111110110010110111011100111111111000001100000110111001000101010111000011010110010101011111000000100000111011111010010001100100111111101101000010000110001101001011100000110100000010101100111001 0011000111101011010101101001111011111110100001100001100101100010111101001001101110001111111101011101001000100011110100101000100100011010111001011010001101001111101111111100000101110000010011101011000011001100001001010101111011111000011010100010010000010010000111001101010011011010111000101111111110101111100100111100111001000010100101101110001110010101110101110011101011000101000111000101101111111101 0100110000101100110010110010001101001101110100001100110001101110010110110011010000010110110101100010010110001000001010011101011111110000100011111010000000110010010000001101010101100000100111100010110010110000100101110010110000111101100011100011111110101001011101100000111011010110101001111000011000111111010111001100101001101100010000100010001010110011100011100111000101100110101111000011010101111011 0101000001001101011000011001010010100100101001011100011011011001010111001010011001000101111010111101000011011100110110010111000101101110010001101000000011010100010000100111100011000100111100001011000000100111011011010010000101000001011000101000001011110010001001011101100011100010111111110110111111011101011011011011111010000001111010101100010101110101001111111000100111011110010011110110000110000101 0101001010101011001000101010010001110100101100111111011100101011111010000101011101101001011100000101000010110101100110111010001111101111110010010101001100100001110011111110110110111001011000001011000101111100001001101001100001110110001101011011101111010011101010000001000011000001010100101001110011010000110101010010000011110010001001001111011011001010001101100111111001100111000000111001100110011010 0100010001101100110111000010001101101110110001110001111001000111101001110001010000100010111110111010011001010100100100101101101110101110111110110011100110111101011110000011000111100011011000100100111110010011011011010101100000111101011101101111100101011000100011110100111000011110100111010011110101011010001000010010010000000110111111111001111111000111000111010010100001011100101101100111001000010010 1000101110101001101100101001001110000100001001010111101111111000001010001011100011001011101110111111101111011001101110110100110111111100111110001100100101011001110110001011000110101010001101100101000010111111010101000011100010100001100010011000110010110111101111010101011000110110111101001000100011010001001011010011000111111111111111111100011101100011100111000110001010001111111111000100011111101001 1111011111100110010011001111111011111011001011111100100101011111001110110001110011011111111011011101000011110110110110001010011100110111011100111100001100110010011111110111101101100110110110010101000000010010110101000110110011110110100111111010010011011100101110101111001100101111001101111011001110101001001001001001110011110001010100100111101000111010011011011010001001110011101001000001001010100011 1100001111100111011011010111011000101100000001111010010011100010011110001111101011001101011011011001011011001111011100010101011001100111001101101001110101100010000100011000100010110100101001000010111110100000110001101111111010111111001100000001100010011110000010000100011101011001011101001001110100110010100001000110010101111110010011000101101100001011001011100001000001100111000000010100011110001011 1111001001010110111101010101100100110010010111101011001110001100011110110110010100011000010101011100011110110101111101001101110011101011110101010000000100000011110011010101101010010110101011010100111111011111010100101111110001111101001101101110001011010010001111110011011010010001001111101111010110101110011001111001000100001000101011111111100100110001100010010100011101000101111000001010111100111010 1010011110100111000000000110000001001011101000001011000111010001101011111100110101101010011111000101101010011100101000100010111001000010000100011100011110011110000000000010110110000011101010110101101010000110010000001010000001001101110011111011110111000011101010111000010110111010000010011111000001100111101000000000011010101000010110011110111110000100110101010010010110001100011110011110101111010011 1111010101010100110101011000011000010111001111110010111100011101011110100010101010110110111111010001000100101010110111010011001010101000100100111010111011101111010011000100111001000001000001010010000100001001100000000110100010110000101111101111110010011001011110110000000011111101110110001011100110110011010000000110010101000101010110101101101111001011010100001001100011000000000110001111110010100001 0101001010110100101011100110101101001111111010100011100101011010101010011101000001011011110001000111111001011000101000001111101001000001101001001001011000000100011101010010010001001000111101011001011010000110010110011110110000100001000011001100001000111011101001010001111011010011101100110110101110010111110001111110011110001101100010010010010001101001101110111001101011001100000100011111000100000000 0000111000110010101111010110000010110101001001111011111111010011101110011101001101110001000111001111101011100011010100101001110101011100011001110110110100000010001110001100000010111011011100010010010110011110010000001100010100000101111001011111011011000001011000101110001001110110101010101100111101001101111001010101011000110111011100111001010001001111001110101000000111111001010001001000110111001101 0001010000110001010011111111010101101111000100101010101101111000100110011010111001001001010001111101111000001001111111100101101011100001110000000010000101011001111110110010000001010101111011101110010111001111100001001010011001000011011101011101111110000010010000101101011111100111101101001000001011000011111001011110110100100110011000101011011111000100110000110011101001100011000110111001111010011110 0011011100000100000000101011100011100010101011110011010000110001011010101111010101010001101011111011101100001110010110010101010101110101000101100000100011000010100001100010011110111111111010000101100101101100000111111100100101000111010111111000100100101111001111001011111111011111110011000101110110001010010101000000110011000011011111000000100111100000100010010000000100110001000011101011100001101110 1011010000011000010010001011010001011110011011101000110111100000001101010011100110000001001110101011100001010100110001110101000010010000011010000101110110101100110100000110011001000101110001100110100000101001011110010010110011110010010110101000000011101100101011001111110000100010111110101100000001011111001010011101101011100001101000000001111101111110011111111001000011011011000010010001101111001011 0000100111111110101000100111011001011110011001011010101000000111110000101111011010010110100011100101100010100011010010000111001001001111101110011100000110101001010101110001000000001010010101000110010010001001101010100001101000010011101011111100111101011001000101111101111000110100001101100010011000010100011010110011111011001010111111011010101110011101100110110010100111000010101110100000110100100111 0000101111100000110101111101000011100111101110111100100011100110110101011111000001101001110111010011000111010101011101000001111000000000111011111111110110100011110011010100010001001111011101001111101111011001001000001010101011001100101100100001110000000111011110100000100011000111001111011111111111101110010001000001010100100000000011101110000101001111111000111100001100110011011010010010111011011000 1101010010000010100111110001111010100101110001101011010101111000001100111011000000001101110011110010101000111000100110101100001011011101001001101110111100100011011100110010101110111010000010010010100101100110111000110100101001111111101101011000011100110000100100010110010100101001101110001010001010000010110000111011100111000010111100110001011011011011101101001111111011101000000110001011111011010011 1101000000000111001101000011010001100110011110100100101000110110010010001011011101100111111000000110001001100000010110011111101010110100101101011111100001110000010100111001010100100000111011011001110100000111100111100011000001110010011010000001110111100001101101100110010000101000111100110010100111101110100010001110101100011100000101101100001111110100111100011010100101011100001001100101101110001111 1000000111010001101011111110000000011001001101011100110101011011010110010111110100101100011101100101100101010110011110101110101001000101111011100110111100101111110011000111011011011110000011011100001010010110100101101011001100001101110010101011111000101100111000001110100000011100010010100111110110010100110100111010011011100110011101010001010111101010001011000100011111011000001111111010111101100011 1110110000110101110110000011111110110100100101111101001000010010011110110100110101110100000110111010111010000101010111101101000011101100100000001000110100000101111110001001101010111001100011001111100100000100000101110111011110101001110011101111011111001111010110110010100011010110111011011100011111011100010100110111100110001101011110001110100000110010010011000000110100101011011101111011011001111100 1000001101110111011111011001000110111100010011100111000010011110101010111111011010110010101111100000010000011011010110100001110010110011011001110001011100100001110001000011010110010001010001000110100100001101110111001011001011000111010101001101111101111111100000011110111001100000001111000010101010011100100010111010011101010111000011000100100000001010101110101111100111011011010001100011100011010111 1111101101010010111000110101111001010000001101101111110010101010101001101111100111001000001010110001011100000100100000111110010001011110101100001000010111001111000001110010110011001111101001011101111001101000101000011110110111110101000101011110101111110101000011011010101011111101001001110100111010111110000100101100100001010100010111011011110111001101010000000000101100000001011010000110001111000000 0100100000110000110001100000010101110011011101100001110010100101111111000000111110010100010110000110000000111101000000000001011100101001000110100000111100010110111101010111011011111100111011111101101010001011000111001001110010110110010010101011010011111001111010001010111001111001100101100111000000100111110101110100111100011000111011101010101011101010011010111010110010100011111110010010001110011010 0110111100010001110000001110100000110110011001000001000011100010000111100001011000111111001101010000100101000010101110010111001100010000110100011101101010110000001110000100011001001101110110100000111000010001111010010101010110101011011111010101101101111010001000001011011010010111011110000000001010010100001001100110000100111011111011100110111100011111111101100111110001111110011101111100110000101111 1110110110110111110000010011010001110110000010111101101101010010111010000110100010011101010100000100001111101001000000010000111100000001100001111100011011001010001010101011000001010110011001011011011000000000101011001011111011101111101010101101000110110100011110101011010011000101100101010010001100101010100101000011101111011111011100011110010010100001100010010100101101110111011111100010111100001100 0101001000100010100010011010100011000011001111100010011101100111010111001101010111110101011100111001000000101000000010010100100110010001111010111010111001010111011100010110010010101001010110110010100100111110111100101110011000010111110101101101000000010000101010001010100111111000111110100101011000100111100011101100011001000011000011000001001010101000011011000101000101011101001110010111010010100000 1101001110100100000110000010001101110101001000100101001010110010001010011111000001011010111100000001110100001101001000011010011010010011011001111000011110111101100001101011110000001001001010000010111000100111010011101010000110111011000001111001001000000011100010110000111011010000111110100111110101001111010100010011111010100100001100011111111110110110000100111110001001111100000100111010110101011010 0100011001100110011000110111101111100110110100000110100010000001100000101100010010000110101001001110001010110110011111010101011101100101011001101110010011011110111000000111111110001111100000011110101101001000111100010101101101011111011101010011000101111100011001010101111000111001001110101011101110011111010101001110100101111101100000101101100000111101001001100011101100110100100011111000100000001110 0001100000011100110011010111111111010001111110100110101111111010000000000001011011001000011011010010111010010111010100010011011001010010110010000111011100101011110001011011101110001110000100100100110110011000110001000011101111110100110101000000101101001111000111011010110101001010000000011000000001100001000111001100101000100011101011010000111011011111011011110101010010110111010111001001101101011111 0110101001010000011001110111100101111110101010111110011101010111001110000111011100011000101010011000100011011100001110110110110111001011011011000100110001011010110101111100010101011111010111011110000000010101110010001101011101000001110011100101000010110000000010110100010100001011101100110010011111010100001110001010101011011110001101000111111011000100110000110000111001101000010111101111001111101011 0000000000100101001101000000011100100111000011110111011000001110101111010010100001010011010110100011010101010011100010101101001011001100001010111001101111011111111010110110100010100111110100110000101010000101101110100001011001010111111101001110011000011001111111010011100100111100111111010000011001110101110110111010011011100010000101010110101110111101011110000110110110101001111011111011111001010010 0110101000101100100011000110100000111001000000110010000111110010111101010100101010001000010001011101100000101111001011001001100110000100010011110011100010000001010000101100110011000111101100010001001011100000100101010001010011101000111000011000101100110011000000100111100101110000101010111011011110000011111101011001101100100100001001010111110101101001101011010101110111010011100101111011111001001000 1100100110101111101001010101111110111100110110111111111111010000111011000110110011100100001100111101101110011100000111001101111011100101111111100001111011110001101101111101100110011111010001111101001100100001111111110101111100000001100011111101110010001010011110110010101100100100000101110111010000010111011010111011100010101101010000101111011100101100001111000111100000011010111110011000110001110100 1001101101010011110110010101000010010100001010000101101010101010100011100010011000100101011111110101100000000010101000111100101111010000001100001011111010111001100110101001011011111111110011110101101101111000110101000101111111100000101111101101110101101101101100111001000111010110100110000100000011101111010100101000110101101110010001100110100101001111101000101000110101100010111111000001110000100000 1010110000001010111111100011110010111110100010110111000100110100100001101010100011101010111100110100000001000110101101100010001101011010001111110111010110111010110001001110110011111000000011011110001110001110000001111110000101111110101110001001100001000001111001001010110001100110110100000111101000001101011001101000101001001001011110001101001111111110011110011010110011111111100101101010001011001000 1000100101001010110010111100011111000011100111101010110110100000010101011001101101111100001100101010101011100010100000011110101010001111100101010010110110111001100000000100000110011000010101110000001100001000110101011101001111011000000101100111010000110000101101101101111011100000101010100100110010110000110010001111111100001010100110000101110111001111100100011010011110110000111001001010100111000100 0011010101111100011011000011011000100010111101101010001011100101001010001111111111010000101000101110011100010010010001000101010000000011110101111000101010010000111101011011001101100111010000001100111101000100101000101101111101001100010000110011001100101111011100100101010110111110001010011000001000010010010101000101010100001110111101101110101000001110000000101000010101010110011000100111010110111110 0110001100000111000111101010010101011110010000010010111011011100101001110001010001101001001011111101111100100101010010001011000100000010100101001010011011001100111100011111000010011011000011011000011011111011010111010111011100100100111110101011101101011100000111010110101001000111011101100100101110110010000011110100111110111110001111100010101000110001100010111000000001101001010010011001110111111101 0101110101110001011110111110001101111011001100000011110000100101010110111000011010101100011000000000100010111111111101101100110010110100111010110110011100000101001101100111001101001111101010111101111001100000011001010000001010010100001100101011011000010011101100001110110000011100111011111100100001110001010110110110111011001001100000101001010010011100100000111000101000010100111100111101000111101000 0010000001110010110111101100101010000000101011110101011101110110001001011100111100011000000000110100011110011100001011111010000011110110100110010010010000011101001111001010101000111001000100000011000011011100010001011110011011101000100000000001111110010101110000011110010011000101001111011111111101100101110100100100100101101110111001001000000010110111011100110110100111011010001100111101111000100011 1011010000111010101101111110100001000101100010000001110101100011110100011100010110011111110010101000100010110100100000001111101110010111001000010101001100110101010000001101110100110010101101101010011000100010010001110101001001011001111101101010101101010001101010111000001111111011011100111100011110100100001110010100111011001111000110000100110010001111110111111011111011101001001010110110011100000111 1100000100001111100000110100101111111000111100100100001000111011000101111001000001100011000011000001100000000101100110000101111011101001110111110111110000011010011010111100100111101000010110110111010100010111101111111110101011101011101111001111111110111110101011111101011011001101110100111010100001100101101100001100000011000000000001100101011101110101011100010010010011000000100101000111101001011100 0100010110000100000100001000101011111101100111110101111011111110010001000000010001101001110010011110010010000000010010000000011000101000010101010011000001010011011001110000110011010000011101001001001101100100100110010001010001001010000101001011111101111001001111100100000111010001110100011111000111101101010011000001000111110110111111111111111011001010101001010011011011001010010101011011110110100101 0011101000010111111111111000110011110001100110101011011100101101110111111110101010110110000100101000101010111100010001001001110000101110000000100010100000011110101011000001011000001111000011101110001100110001001000101000111111111101001111011000111010011100001101010100101001000000011100100001110100011110010001100001010100001101101001000011000010011001011011111011111001001111010110001110000011000100 0010010100101110001011010011110000100111011010110110100011101111100111011000000111001110000100010001110101111010111000001100000110100010000100010111110001010010101101001111010011110100001010010001100000011010111101100000100010000111111000110010110101111110100000000010011001000100001010010101110010110100000101001011001101111101010000011111011010000101111100100101110100111010011100000111001100111100 0010001101110000111001110111000001111111110111001001110101110110010100010001001000000000110101100000100110000111111010011011011010000011001111110000110001100101000100001011011011101110010110100001000111100011011000000011001110000110100101011000011001001111101011011111010011010101010100101101101110011011000101011000111010101101011101111111011011010000010001000010100100101000111000101000111111101010 0000111010011101010000100000110111000001101000011001011000001011100101111000000101100101001110000100001111011011110111100000000001001110010111011110111100000111011110110001001011110100100000110111010000010011110100011111101000000010101000100110011001111000100101100001000011101010101000101001111000000011110000111101111101111000111010011010001000100010011110101010100101100100011111111110111110100000 0100111101100100100110011000110111110100101100100111011010110111100101100011110101110010101001110101000011110111111100100100011001001001010000101001010010110110111000011101001010100101000100001011111000100100100010110010100110111000101100101011000100100111000000110111000100000101110011101100110100001000010110100011001100100110101011010000100010111101110101101110100111000110101010001101000011110010 1010010000111101101010110110101111101000110101011001101101000100110010001101111100101110010110101010010011100100101111111100101111110001011111010011111101001011001001000110101101010101011100100101001101011100000010010010001000000110111100011100111000011001010000001101100110100010111000101011011101100010000001100011011011111001010011100001001110101000110010001001110010110010101100010010110110000100 1110100100100010011001101000000111001000100100101101111101010001010011101011001101011010100000010010100011010110001110111101011101000011100010100110011111010101101111001011001101000111110101000001101110110110101011000110100110111100100111001100101111001111101000111000000010110000000110000011111001101110011110110111111100100000011001110100111010111100101110010111001111001001101000111111110011010100 0010111000000011001110111101000101010011100000100100100100111110111111000111110001100101010100111011001110011010111011001110011010011110001010100011110110110001110101010111000011110111010010001001100110110011100111100011100011000000101010000100010000101010010011110001011000001100110011001011111011111111000111001110110111101010000110011000010010011000101010101110101110000011101001011001111100001010 1000000010110110101011110110110100100110111010010011010111011010100011110110111011000101001111100101000100101100100001100010010111100011010010001110101010110001000001100001001010011100101101010010110111100110000011011001011101010001000111001111101101001001100110101001010001010110011111011001011110110110111011000000011010110011101011000000101001101110110001001010000010010110001110110000011000011010 1100100011011011100111000110000010001001100011100101100110100001010100000010101011100011101111111100010001110001011100000101111000110010010101010101000000001001110110010111100100100000110101011011011110100010011110110101011101000001100110100100011000110010111011011010111010010001001001111100100011111100100000001010001000100101000010111100101000011001111010110000000011010010111011100101111011011110 1011011110111010101001110000010010011001001101000010101011110011011010111000111111010100110110110001100010010000000000000110100010111010111101010001011111001101100011011010100111110000101110011111101110101101001000100100110101010000111100111000001001111111100010110101011110010001000101110101010000010111100010111000111111011010110100011011111000011100100100000011110011100010001100101010010111011100 0011110001000010100000111000100010100010100010100111100000001010111110000111111001000011100001000110010011101000110010101011100110001100000011110100100011001110110001111100100001001000110111001110000010010010101110111100000011100100000001111100111001111101001011001110110010001110111110101000100001100001001101110001000101001000100100101101110011101001011100001101101001000001111100101011010110011101 1011110011000100100010111110100001101101000010100100011011110001010000110011101011001110111100011101111100110000001111010110110010100110010011011100111011010100000000000110000001000000001011010011111010111001100100000100101100000010000100001000010100011001010000111100111011101000111110010001010011100010001000000101111101010110100111111100100111110000010001011100101100111101101100100010100000111001 0100111111111111011101100110100001110101001110100100110010111001010000010011001110111000111010101010000010111111010001111111101000101101010010110101010001110100001100011000011001111010111111111110001101111011111111101001101010110001011100001100100011001111101101011010010010001100001000100100110011111110111000001111000000111111001100011101101001100100111110111100100101101110001110001100111110101111 1011001001100100010000100100101101010011011000101001100100111110011100111100100111100000111100101111001111000000111010000110001101101011001101101011001000001011110010101100011001000000000111100000110111011000011101010010011011111100111010011000001101100101010001010000111000010001100110001110010001111101011011101101100001001001110111110110101110100110110110010000000011000110101101001100110000001000 0010100011011111011100010011100000100100110011000110101111001110110110100000100000110100110101011000010000010101010011010110101110111010011001011101100111100110010000010001010100011000011101000000011111111111000000101100011000110011001111010001110111000011111011001010000001100010111010100100010001111101110001001001001100110001010001000001000101101101101110011001110000101111010110101110000000010001 0111010100100001011101101000010100001010111010010110111101001001000011001011101001011010010111100100011011011010100110101001010010101001111001101001010100001100001110100011001010101011000111110000110111000000101100001101101101100010111111111101011100000011101000101111011100111010011000111100111000001010100110001000111101111101010110110110011001100111110001001000011110000001111111001100000010101011 0110000110010000000101001111010100110000011011111000110100110001110001001001010001101011100000000100011111110001111010011001101011000001101101100011001111100111011010011101011100011001001100010010001010011000101011010000110000111000000011101111111111011000011001110000100110000010000110111000111010011010010110101100111011100011110001100011110011011101001010110011000001110101100100001111111110110001 1111001101100000010001010110000011000010100101010011001111101010010111100101000100011001101101101101110101001101001001000000000010100110101001111111010001110011111000110100011111101000001011110111011101011100100100000010001000010101001101001001101111000001100010010011001100010000101101010011000011101001100001111100101001010011100010111100000111010101010010110010110110000110000000000000010001001110 0010000010100000001001011111100010011010001100001100000001110100110011010001111111110010010010111101001000111011010101000110101010111001011011100000011010000111101000000011010100101000111010100111111000101110000000101100101000001110100101111001101011111100100000111001011001111010011000000110000001011010001101110000101110000011100011011011011101000110000000010100001010000011000110000000100011101100 0001011110011010001111111111110111110000011101000101010001100111000100010010111011101111000100101100010100100111100101110111101000010111011000000010101111100010110000001111011010101101111000010001011111100001010100000101011110001101100000001011110101100100000011010110110111011000011010111101010000001110110011111001010010110101110011000001010000010111101100100011000111010001001001111011111101010010 1100101110011101001011111100011011111111111000111001000001100101010111011111110010101100011001010000100111110100010110100110011111011111001111111010000000010001101011100110111100001011101000010001101011011100110010001011101001011110100101010011111001100111010111111001111010100001010010001100011101100111110001000100111011011000000111010111111011011011110110101011100011101011010110011011011111010101 0001011000100111001000111011101100001101011011100010011110100010111101110001100101001001100100000011000111110011100101011001100111101110100110001011000001001001001010001111111100100011111100000100100100100010000011011010010110110011000010011110001111101110110100110101111010100000010010011010110011100100000111101110001111000111000110001111100100100101101100101110111011010011100100101000000110010000 1100011110101101011101100011000000001010010100011010110011100000010010001000100101111000110011101010110000010011011000110011110011011001001100001111001101111011001111000101110001000101010000010010110000101010101001000111101100010111000100111011111110001110001100000101100001101100101010010010101010011101100010000111010101001001000001100000111000010100101111000001010110001101001001010001000111110000 0100110101111100001110010101000101011011111110111100010001100101001110101000011110101010010010101100001001101000001101001011000111111001110010100001011100001100001001011001101110000001001110100110100010101101010101111101000011001010100111100000100110110001010000110111101000001000001011011101011000011100110000010000111010110010011111100001100111000110000101011111101010010110010100001001101100000011 0111000101011100010110100100001000011011110110001111101110100000010101110111011001111101001001101010100010110110011111100010101110100010110111101101011110101011011011011111000010001111001010011110100010010000100111111100001011011110011100010000001110101011011100100110110000001011010110010111011000001110111101001010011110111110000111100000011001101010100001100111110001111110110111111100111001100110 1100011100101101101000110100001111011101010101101100110111010010110110111010011110000011100010000010011101001101100001101000000100001000110100010101011101101110010110000000111011101000111110010111011001100010100101010110010111101101000110010000110010001000010001111100110110101011001011110011001110000000011110100110110000101111101000000001111000111100011010000111110001110100110011100100100100011001 1101000110011000000100101011011001101000010010010100010101101011011101000110011011010000100001110010010110000111110111110100110000110010110101101100011011001001101011011100100011101001110110011001000101100000110000001010010110110010100011001110000100111010110011110000111101011101111000110000000111000001010100001110011000000111011101100000111001010011000000001010011011011111110010101101100110001110 0000100100001110001100110110100011101001001100100101100111010101100010110000010011001111100001100110101011010100010010010100101111100000011110000101111010010010110111110110110001110010001010010011011011101000111111101010001001011110100000001101010001111110110010101100001110110101100000000000110010000111111111010111101000001010110100110101101010110111101011100100110110000111100110011110101111111101 0000000010110111111110011110010111000010001010001010000001011001110100101110001001001010100001110011111100110110110011111111110011110010100000011011011101001100001001100101011100111101011001110101100100100000101000101100000110101000100111111100001010000101110101000000101111010010101110110011101101101001010110110110101110010000001000110110101111011011010101010111100000111000011101101101010100110100 1111111110111011010101001111111001111110010001000000100011101011001110110010011101110111110100111001000000010100011100110100101001001110001110001000011101110010000110010011101000001111001100110011111001100101000100101010000100000110100100101101000100001101101110101000110101001011110011011001111000000111100111110000001010010000001001101010101111000100010110110111100100110110101111111000110000011110 0111011101000011100110010100011000001110011011100011100101101101010011010010000110010110111110110010001100011101110100000100011101000111110110110010011110110010100010000100100000100000011011010110011101111101110001101010011111001111000100000011100010100100100011100010101101000001010100010000000100111000010111111011000101101010100010011101001110011110000110001101011010001110111100011111001100100100 0101001111110011100001100111011000011010010000100010011000110101101011011110011001000110101010010010100100000101000110011000010101111000100100000110101010000010010000000101000101100101100100010110110000001001101100100110011101001110011001010001100110011111110010000010011100001101101001011001101110001010010010111101010111110011100010011100000000011100100111100111000110010010100110100010001010111000 1110100111011100100010101001011100101110010111011100000010111111011000110100011011011000100100110111011100001110001001000110101111011010110010001100101011100110111100011010100010100101011001011001000010101100111101000010001101010100000111011001011001110100100111011110000011011001011011000110101010000000011011001110001001000100100000111100010110100101100100010010100010110011110010101000100001000111 1110111010001010011110011101110110100000100011010111100011111100011111101100011111011010101100011100011000001110100110000010011111010000110010110110011000010010111001100110011111011111011100000110111110110110111110110011101011010101000100010010110000010010101001001011001011101111110010000101100100100000111000111111111000101110101101101001101100011111100110010111101101101101110011101101000010111000 1001000101001001001000000010001111010010011010001010101111011100010111110100101011011110000011010010001011000010001001001101101110100101101101101101010101110111111010001011010001011111001000001100010010101110011111001001000101110001010000011001101011101111100110100001001010011101001110000010100110010000000011000111001111100100011110001000010110001110011010000001000101101101001011001110001110100010 1101110011110011101001100010011110110011111111100110000100000100000000110110001101111110011000101101111000010110000100111010100111100011111101011001100011000011110101011001110110111110100100100101110111000011111100110001100011010001101111000100101011110011001000111100010101111010011100001110101101001011001110110100100111010111001111000110000010110111110111111001100111000011100011000111110010001000 1000100000001011111011100000001010100010010101110110010111100101000000000110111111001000011111110101000111111000100001010110001110101110101100111000010000001011101011000011000001100010101001101000101111100100100001110111000110101111010101010100010011011010101011100011010110110000111000000010010110111101011001101000001101100100010110001101011000000100001110101000011001001001101011001000110111111001 0000010110110101111000011010001011111010101101011000001000110000011111111001111010101110010000010110010101001010011010101111111011001000101000011000111100000110110011111000111110111100010000011000101110101010001101001001100011010011001111100101001000110111100011111010010010011101100000110100110111001010110001100000010001101101110001110110011000011100100001110000100111100010110000110111011001001010 1100001101010000001000001110010100011110100001100111001111101101001010001110101010100001101011111001101110100010010010000010110101010010001011011100011001001110111000110001111111110101111001101011011001100001110100000100101011110001011001011111110111010111010111001101101111001001001011100101101101010100101010110000111010001100110101100100110111110100000011101011010101110000011101100101100101001010 0100000000010011101110001101100011110010100101101101010100101000001100001101100101010100001101001001000000001011001101101101101100000100111110001010111011100110100001110011001010101010110111010100001010001011111001101001001111111011011110101010000001001110010001110100111110010001001101101001000100000110001101011000111010010100100111111111001000101010110111100110110000110001001111110000010111101101 0001010101111100000011001001110111001100011101010110001011011000111001101111100010110100100000001111100011010111111001110001100001001110000011100001101101110111001111001010010010111100111001000110010100101100010010100010000011110001011100001110011110000110000000100000100110010100001001110110101010010000100111101011110100010011000000010111010001100101001000101000100001100000111101111000011111001011 0110101110001010010101001100010011111111110101000110111100110100111000001101110101011101000110101011100110010110010001111100101000101110111111001111111000001111100001001110100100011011110101100001100110000111100100110111010011000111110010011101100111111000100111101010101101001110110000110001000111111001000001110001000001000111101010101001001110101100100100000011011101000000001111100010100001011100 0100010010110100101000101011101110011000011000110101000100001110001100000010110101011001101011110000100111111111010001011010000000101000011011111000000000010001010110110111111100010111110000110011110001011100001110100100101111101000101101110010111101001001100101011000110001110010000011111111100100000111011111011101010011001110010100011000001111100010110100010001100000100111101000111010001110001010
cTrader Algo

StackPanel WrapPanel DockPanel【cAlgoAPI】

2/28/2021 3/29/2021

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

パネル色々

Canvasよりもこっちの3種のパネルの方がよく使います。

Canvasでは子要素の各コントロール内で厳密な座標を指定して配置しましたが、ここで紹介する~Panelは自動的にいい感じに並べてくれます

これらのPanelではCanvasと異なりAddChildを呼び出す順番によって子要素の配置が変わるため、ここは注意が必要です。

また、ほとんどのコントロールでVerticalAlignmentとHorizontalAlignmentのデフォルト値はCenterとなっているのですが、StackPanelとWrapPanelは一部異なりますのでご注意ください。

 

 

StackPanelクラス

子要素のコントロールを上から下、もしくは左から右に一列にずらっと並べます

public class StackPanel : Panel

個人的にさらっとサンプル作るときとかは一番よく使います。

 

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

子要素を並べる向きを取得、設定します。初期値はVertical(上から下)です。

OrientationがVerticalの場合はVerticalAlignmentの初期値がTopに、Horizontalの場合はHorizontalAlignmentの初期値はLeftになります。(明示的に指定して上書きは可能)

 

サンプルコード
// ボタンたくさん作る
var buttons = new Button[20];
for(int i=0; i<buttons.Length; i++) {
    buttons[i] = new Button {
        Text = (i+1).ToString(),
        Width = 50,
        Margin = 3,
    };
}

// パネル作る
var panel = new StackPanel {
    Orientation = Orientation.Horizontal,
    VerticalAlignment = VerticalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center,
};

//配置
foreach(var button in buttons) {
    panel.AddChild(button);
}
Chart.AddControl(panel);

こんな見た目になります。(わかりやすくするため、あえて小さめのチャートで実行させてます。)

20個のボタンが横一列に並びきらずに左右にはみ出てしまっています。

 

 

WrapPanelクラス

StackPanelとだいたい同じように縦か横にずらっと並べますが、子要素のコントロールを並べていって、一定以上の幅(高さ)を超えると折り返します

StackPanelのようにはみ出すことがありません。また、子要素を配置するセルの大きさも指定できます。

public class WrapPanel : Panel

 

 

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

子要素を並べる向きを取得、設定します。初期値はHorizontal(左から右)です。StackPanelと異なります。

なお、OrientationにかかわらずVerticalAlignmentの初期値はTop、HorizontalAlignmentの初期値はLeftです。

(int) ItemWidth {get; set;}

子要素を配置するスペース一つ当たりの横幅を取得、設定します。

(int) ItemHeight {get; set;}

子要素を配置するスペース一つ当たりの高さを取得、設定します。

 

サンプルコード
// ボタンたくさん作る
var buttons = new Button[20];
for(int i=0; i<buttons.Length; i++) {
    buttons[i] = new Button {
        Text = (i+1).ToString(),
        Width = 50,
        Margin = 3,
    };
}

// パネル作る
var panel = new WrapPanel {
    Orientation = Orientation.Horizontal,
    VerticalAlignment = VerticalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center,
    ItemWidth = 100,
    ItemHeight = 30,
};

//配置
foreach(var button in buttons) {
    panel.AddChild(button);
}
Chart.AddControl(panel);

こんな見た目になります。

ちなみに先ほどのコードのStackPanel→WrapPanelに変更し、ItemWidthとItemHeightの記述を加えただけです。

ItemWidthとItemHeightを指定したため、先ほどよりも余裕をもって並べられており、チャート右端で自動的に折り返しています。

各ボタンの幅はButtonのWidthで指定した通りで、ItemWidthに合わせて余白をあけて並んでいますが、ボタンの高さは指定していないため、ItemHeightに合わせて引き伸ばされます。

なお、WrapPanelではButton側でHorizontalAlignmentやVerticalAlignmentを設定してあげれば与えられたスペース内での配置調整が可能です。

 

 

DockPanelクラス

子要素内のDockプロパティでコントロールをどっち方向に詰め込むか指定して配置します。

public class DockPanel : Panel

 

プロパティ
(bool) LastChildFill {get; set;}

最後に配置された子要素で残りのスペースを埋め尽くすかどうかを取得、設定します。

 

サンプルコード
// ボタンたくさん作る
var buttons = new Button[20];
for (int i = 0; i < buttons.Length; i++) {
    buttons[i] = new Button {
        Margin = 3,
        Dock = (Dock)(i%4),
        Text = (i + 1).ToString() + ":" + ((Dock)(i % 4)).ToString(),
    };
}

// パネル作って配置
var panel = new DockPanel {
    VerticalAlignment = VerticalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center,
};
foreach (var button in buttons) {
    panel.AddChild(button);
}
Chart.AddControl(panel);

子要素ボタンのDockプロパティ設定のところがわかりにくいかもしれませんが、一つ目がLeft、2つ目がTop、3つ目がRight、4つ目がBottom、5つ目がLeft・・・と順番に設定してると思ってください。

こうなります。ぐるぐる~。

ボタン番号の後ろに表示されてるのがDockプロパティの値です。DockPanelという四角い箱に、1から順にDockで指定された方向に詰め込んでいった感じです。・・・伝わりますでしょうか。

順番に配置していくとこんな感じです。なお、別にcAlgo特有のものではなく、C#WPFのDockPanelと考え方は同じですのでわからない場合は検索してみてください。(丸投げ)

 

 

関連する列挙型

Orientation列挙型

StackPanelとWrapPanelがプロパティとして持ち、並べる方向を表します。

Horizontal 横方向
Vertical 縦方向

 

 

Dock列挙型

DockPanelで詰め込む方向を表します。コントロール子要素側(ControlBaseクラス)がプロパティとして持ちます。このプロパティはDockPanelに配置されたときのみ有効です。

Top 上方向
Bottom 下方向
Left 左方向
Right 右方向

 

Canvasで作った発注パネルを作り直す

Canvasのサンプルコードで簡単な発注パネルを作りました。

Canvasでのレイアウト設定部分はこんな感じでした。

            // ボリュームテキストボックス
            var volume = new TextBox {
                Text = "1000",
                Left = 10,
                Top = 10,
                Width = 90,
                Height = 20,
            };

            //売買ボタン
            var buy = new Button {
                Text = "Buy",
                Width = 40,
                Height = 20,
                Left = 10,
                Top = 40,
            };
            var sell = new Button {
                Text = "Sell",
                Width = 40,
                Height = 20,
                Left = 60,
                Top = 40,
            };

            //canvas作って配置
            var canvas = new Canvas {
                BackgroundColor = Color.White,
                Width = 110,
                Height = 70,
            };
            canvas.AddChild(volume);
            canvas.AddChild(buy);
            canvas.AddChild(sell);
            Chart.AddControl(canvas);

これを今回説明したPanelで作り直してみます。

 

DockPanelバージョン

こうなります。(Canvas記事サンプルコードのレイアウト部分だけこれに入れ替えれば動きます)

            // ボリュームテキストボックス
            var volume = new TextBox {
                Text = "1000",
                Margin = 5,
                Dock = Dock.Top,
            };

            //売買ボタン
            var buy = new Button {
                Text = "Buy",
                Margin = 8,
                Dock = Dock.Left,
            };
            var sell = new Button {
                Text = "Sell",
                Margin = 8,
                Dock = Dock.Right
            };

            //panel作って配置
            var panel = new DockPanel {
                BackgroundColor = Color.White,
                Width = 110,
                Height = 70,
            };
            panel.AddChild(volume);
            panel.AddChild(buy);
            panel.AddChild(sell);
            Chart.AddControl(panel);

見た目。

厳密には少し違いますが、だいたい同じです。子要素ではサイズも位置も自動調整に任せて、MarginとDockだけ指定してるところがポイントです。コード量も減ってますし、ちょっとしたレイアウト調整がこっちの方が圧倒的に楽になります。

 

StackPanel、WrapPanelバージョン

おおむね同じですが。

            // ボリュームテキストボックス
            var volume = new TextBox {
                Text = "1000",
                Margin = 5,
            };

            //売買ボタン
            var buy = new Button {
                Text = "Buy",
                Margin = 8,
            };
            var sell = new Button {
                Text = "Sell",
                Margin = 8,
            };

            //panel作って配置
            var panel = new StackPanel {
                BackgroundColor = Color.White,
                Width = 110,
                Height = 70,
            };
            var buttonPanel = new WrapPanel();
            buttonPanel.AddChild(buy);
            buttonPanel.AddChild(sell);
            panel.AddChild(volume);
            panel.AddChild(buttonPanel);
            Chart.AddControl(panel);

DockPanelバージョンとほぼ同じですが、子要素のDock指定がなくなって、配置部分ではPanelを2つ用意して組み合わせています。見た目は同じ。

コードではStackPanelとWrapPanelを使ってますが、たいした意味はありません。(Orientation指定を省略したかっただけ。)両方ともStackPanelもしくはWrapPanelでも構いません。

 

いずれにしても、Canvasで作った場合と比べてすっきりした記述になる上、いじってみた人はレイアウト調整もやりやすくなってるのがわかると思います。基本的にはこれら3つのPanelを利用しましょう。


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

新しいコメント

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

cTrader's Life

© 2026 ajinori