@NonNull
	public byte[] getEncoded(final boolean withCompression) {
		if (isInfinity()) {
			return new byte[1]; // [ 0x00 ]
		}

		// 32 bytes
		final byte[] vx = BigIntegerUtils.integerToBytes(x.toBigInteger());
		byte[] bytes;
		if (withCompression) {
			bytes = new byte[33];
			if (y.toBigInteger().testBit(0)) {
				bytes[0] = 0x03;
			} else {
				bytes[0] = 0x02;
			}
			System.arraycopy(vx, 0, bytes, 1, 32);

		} else {

			// 32 bytes
			final byte[] vy = BigIntegerUtils.integerToBytes(y.toBigInteger());
			bytes = new byte[65];

			bytes[0] = 0x04;
			System.arraycopy(vx, 0, bytes, 1, 32);
			System.arraycopy(vy, 0, bytes, 33, 32);
		}
		return bytes;
	}