diff --git a/.github/workflows/block_merge.yml b/.github/workflows/block_merge.yml index e32fcf34a..650084583 100644 --- a/.github/workflows/block_merge.yml +++ b/.github/workflows/block_merge.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Check first line - uses: gsactions/commit-message-checker@v1 + uses: gsactions/commit-message-checker@16fa2d5de096ae0d35626443bcd24f1e756cafee # v2.0.0 with: pattern: '^(feat|fix|test|bench|docs|chore|refactor|perf)\((compiler|backend|frontend|optimizer|tools|ci|common).*\): ' flags: 'gs' diff --git a/.github/workflows/compiler_benchmark.yml b/.github/workflows/compiler_benchmark.yml index 18ff1dad4..46941df09 100644 --- a/.github/workflows/compiler_benchmark.yml +++ b/.github/workflows/compiler_benchmark.yml @@ -47,13 +47,8 @@ jobs: run: | echo "BENCH_DATE=$(date --iso-8601=seconds)" >> "${GITHUB_ENV}" - # SSH private key is required as some dependencies are from private repos - - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Fetch submodules - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 submodules: recursive @@ -100,7 +95,7 @@ jobs: make ${{ env.BENCHMARK_TARGET }} - name: Upload raw results artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: compiler_${{ github.sha }}_raw path: compilers/concrete-compiler/compiler/benchmarks_results.json @@ -120,13 +115,13 @@ jobs: --throughput - name: Upload parsed results artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: compiler_${{ github.sha }} path: ${{ env.RESULTS_FILENAME }} - name: Checkout Slab repo - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: zama-ai/slab path: slab diff --git a/.github/workflows/compiler_build_and_test_cpu.yml b/.github/workflows/compiler_build_and_test_cpu.yml index 1e9bc59a4..13524d584 100644 --- a/.github/workflows/compiler_build_and_test_cpu.yml +++ b/.github/workflows/compiler_build_and_test_cpu.yml @@ -45,12 +45,6 @@ jobs: echo "Request ID: ${{ inputs.request_id }}" echo "Matrix item: ${{ inputs.matrix_item }}" - # A SSH private key is required as some dependencies are from private repos - - name: Set up SSH agent - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Set up env run: | echo "HOME=/home/ubuntu" >> "${GITHUB_ENV}" @@ -58,7 +52,7 @@ jobs: echo "SSH_AUTH_SOCK_DIR=$(dirname $SSH_AUTH_SOCK)" >> "${GITHUB_ENV}" - name: Fetch repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -70,7 +64,7 @@ jobs: run: mkdir build - name: Build compiler - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 id: build-compiler with: registry: ghcr.io @@ -86,16 +80,16 @@ jobs: ${{ env.DOCKER_GPU_OPTION }} shell: bash run: | - rustup toolchain install nightly-2024-01-31 + rustup toolchain install nightly-2024-07-01 set -e cd /concrete/compilers/concrete-compiler/compiler rm -rf /build/* - make DATAFLOW_EXECUTION_ENABLED=ON CCACHE=ON Python3_EXECUTABLE=$PYTHON_EXEC BUILD_DIR=/build all build-end-to-end-dataflow-tests + make DATAFLOW_EXECUTION_ENABLED=ON CCACHE=ON Python3_EXECUTABLE=$PYTHON_EXEC BUILD_DIR=/build all echo "Debug: ccache statistics (after the build):" ccache -s - name: Build compiler Dialects docs and check diff - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 id: build-compiler-docs with: registry: ghcr.io @@ -127,7 +121,7 @@ jobs: run: echo "MINIMAL_TESTS=ON" >> $GITHUB_ENV - name: Test compiler - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 with: registry: ghcr.io image: ${{ env.DOCKER_IMAGE_TEST }} @@ -140,13 +134,13 @@ jobs: shell: bash run: | set -e - rustup toolchain install nightly-2024-01-31 + rustup toolchain install nightly-2024-07-01 cd /concrete/compilers/concrete-compiler/compiler pip install pytest dnf install -y libzstd libzstd-devel sed "s/pytest/python -m pytest/g" -i Makefile mkdir -p /tmp/concrete_compiler/gpu_tests/ - make MINIMAL_TESTS=${{ env.MINIMAL_TESTS }} DATAFLOW_EXECUTION_ENABLED=ON CCACHE=ON Python3_EXECUTABLE=$PYTHON_EXEC BUILD_DIR=/build run-tests run-end-to-end-dataflow-tests + make MINIMAL_TESTS=${{ env.MINIMAL_TESTS }} DATAFLOW_EXECUTION_ENABLED=ON CCACHE=ON Python3_EXECUTABLE=$PYTHON_EXEC BUILD_DIR=/build run-tests chmod -R ugo+rwx /tmp/KeySetCache - name: Analyze logs @@ -155,7 +149,7 @@ jobs: ls -1 | xargs grep -H "WARNING RETRY" | sed -e "s/.log.*//g" | uniq -c | sed -re "s/ *([0-9]*) (.*)/::warning ::Test \2 retried \1 times/g" | cat # - name: Archive python package - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 # with: # name: concrete-compiler.whl # path: build/wheels/concrete_compiler-*-manylinux_{{ env.GLIB_VER }}_x86_64.whl diff --git a/.github/workflows/compiler_build_and_test_cpu_distributed.yml b/.github/workflows/compiler_build_and_test_cpu_distributed.yml index 328f6727c..0d7560d8b 100644 --- a/.github/workflows/compiler_build_and_test_cpu_distributed.yml +++ b/.github/workflows/compiler_build_and_test_cpu_distributed.yml @@ -47,7 +47,7 @@ jobs: docker system prune -af - name: Fetch repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 submodules: recursive @@ -74,13 +74,14 @@ jobs: cd compilers/concrete-compiler/compiler rm -rf /shared/build make HPX_DIR=/shared/hpx install-hpx-from-source - make HPX_DIR=/shared/hpx BUILD_DIR=/shared/build CCACHE=ON DATAFLOW_EXECUTION_ENABLED=ON BINDINGS_PYTHON_ENABLED=OFF CUDA_SUPPORT=${{ env.CUDA_SUPPORT }} build-end-to-end-dataflow-tests + make HPX_DIR=/shared/hpx BUILD_DIR=/shared/build CCACHE=ON DATAFLOW_EXECUTION_ENABLED=ON BINDINGS_PYTHON_ENABLED=OFF CUDA_SUPPORT=${{ env.CUDA_SUPPORT }} build-end-to-end-tests - name: Run end-to-end benchmarks run: | set -e cd compilers/concrete-compiler/compiler - make BUILD_DIR=/shared/build run-end-to-end-distributed-tests + rm -rf /shared/KeyCache + make BUILD_DIR=/shared/build KEY_CACHE_DIRECTORY=/shared/KeyCache run-end-to-end-distributed-tests - name: Instance cleanup run: | diff --git a/.github/workflows/compiler_build_and_test_gpu.yml b/.github/workflows/compiler_build_and_test_gpu.yml index f31a5afe2..ed9ea0075 100644 --- a/.github/workflows/compiler_build_and_test_gpu.yml +++ b/.github/workflows/compiler_build_and_test_gpu.yml @@ -45,12 +45,6 @@ jobs: echo "Request ID: ${{ inputs.request_id }}" echo "Matrix item: ${{ inputs.matrix_item }}" - # A SSH private key is required as some dependencies are from private repos - - name: Set up SSH agent - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Set up env # "Install rust" step require root user to have a HOME directory which is not set. run: | @@ -58,7 +52,7 @@ jobs: echo "SSH_AUTH_SOCK_DIR=$(dirname $SSH_AUTH_SOCK)" >> "${GITHUB_ENV}" - name: Fetch repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -70,7 +64,7 @@ jobs: run: mkdir build - name: Build and test compiler - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 id: build-compiler with: registry: ghcr.io @@ -86,7 +80,7 @@ jobs: --gpus all shell: bash run: | - rustup toolchain install nightly-2024-01-31 + rustup toolchain install nightly-2024-07-01 set -e cd /concrete/compilers/concrete-compiler/compiler rm -rf /build/* diff --git a/.github/workflows/compiler_format_and_linting.yml b/.github/workflows/compiler_format_and_linting.yml index fecf12af5..e1a7f069f 100644 --- a/.github/workflows/compiler_format_and_linting.yml +++ b/.github/workflows/compiler_format_and_linting.yml @@ -8,7 +8,7 @@ jobs: FormattingAndLinting: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Format with clang-format (Cpp) run: | sudo apt install moreutils @@ -34,6 +34,6 @@ jobs: CheckLicense: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Check if sources include the license header run: .github/workflows/scripts/check_for_license.sh diff --git a/.github/workflows/compiler_macos_build_and_test.yml b/.github/workflows/compiler_macos_build_and_test.yml index c26732603..874eba80c 100644 --- a/.github/workflows/compiler_macos_build_and_test.yml +++ b/.github/workflows/compiler_macos_build_and_test.yml @@ -24,12 +24,7 @@ jobs: runson: ["aws-mac1-metal", "aws-mac2-metal"] runs-on: ${{ matrix.runson }} steps: - # A SSH private key is required as some dependencies are from private repos - - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -45,7 +40,7 @@ jobs: - name: Cache compilation (push) if: github.event_name == 'push' - uses: actions/cache@v3 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: /Users/runner/Library/Caches/ccache key: ${{ runner.os }}-${{ runner.arch }}-compilation-cache-${{ github.sha }} @@ -54,7 +49,7 @@ jobs: - name: Cache compilation (pull_request) if: github.event_name == 'pull_request' - uses: actions/cache@v3 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: /Users/runner/Library/Caches/ccache key: ${{ runner.os }}-${{ runner.arch }}-compilation-cache-${{ github.event.pull_request.base.sha }} diff --git a/.github/workflows/compiler_publish_docker_images.yml b/.github/workflows/compiler_publish_docker_images.yml index b0ed439c8..5315a592f 100644 --- a/.github/workflows/compiler_publish_docker_images.yml +++ b/.github/workflows/compiler_publish_docker_images.yml @@ -49,12 +49,8 @@ jobs: echo "AMI: ${{ inputs.instance_image_id }}" echo "Type: ${{ inputs.instance_type }}" echo "Request ID: ${{ inputs.request_id }}" - # SSH private key is required as some dependencies are from private repos - - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -66,7 +62,6 @@ jobs: - name: Build Image run: | DOCKER_BUILDKIT=1 docker build --no-cache \ - --ssh default=${{ env.SSH_AUTH_SOCK }} \ --label "commit-sha=${{ github.sha }}" -t ${{ matrix.image }} -f ${{ matrix.dockerfile }} . - name: Tag and Publish Image @@ -88,7 +83,7 @@ jobs: IMAGE: ghcr.io/zama-ai/hpx steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 @@ -98,7 +93,7 @@ jobs: - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v44 + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c # v44.5.24 - name: Login id: login @@ -127,7 +122,7 @@ jobs: dockerfile: docker/Dockerfile.cuda-118-env steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 @@ -137,7 +132,7 @@ jobs: - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v44 + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c # v44.5.24 - name: Login id: login diff --git a/.github/workflows/concrete_cpu_test.yml b/.github/workflows/concrete_cpu_test.yml index 598f7cff6..01650936b 100644 --- a/.github/workflows/concrete_cpu_test.yml +++ b/.github/workflows/concrete_cpu_test.yml @@ -16,17 +16,17 @@ jobs: env: RUSTFLAGS: -D warnings steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Rust install - uses: actions-rs/toolchain@v1 + uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7 with: - toolchain: nightly-2024-01-31 + toolchain: nightly-2024-07-01 override: true components: rustfmt, clippy - name: Download cargo cache - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3 - name: Formatting run: | @@ -63,13 +63,13 @@ jobs: env: RUSTFLAGS: -D warnings steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup rust toolchain for concrete-cpu uses: ./.github/workflows/setup_rust_toolchain_for_concrete_cpu - name: Download cargo cache - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3 - name: Tests run: | @@ -81,13 +81,13 @@ jobs: env: RUSTFLAGS: -D warnings steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup rust toolchain for concrete-cpu uses: ./.github/workflows/setup_rust_toolchain_for_concrete_cpu - name: Download cargo cache - uses: Swatinem/rust-cache@v2 + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3 - name: Tests run: | diff --git a/.github/workflows/concrete_ml_tests.yml b/.github/workflows/concrete_ml_tests.yml index cbb46e899..6b02da9f9 100644 --- a/.github/workflows/concrete_ml_tests.yml +++ b/.github/workflows/concrete_ml_tests.yml @@ -38,11 +38,6 @@ jobs: echo "Request ID: ${{ inputs.request_id }}" echo "User Inputs: ${{ inputs.user_inputs }}" - - name: Set up SSH agent - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Set up GitHub environment run: | echo "HOME=/home/ubuntu" >> "${GITHUB_ENV}" @@ -50,7 +45,7 @@ jobs: echo "SSH_AUTH_SOCK_DIR=$(dirname $SSH_AUTH_SOCK)" >> "${GITHUB_ENV}" - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -65,7 +60,7 @@ jobs: run: mkdir build - name: Build wheel - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 id: build-compiler-bindings with: registry: ghcr.io @@ -104,7 +99,7 @@ jobs: deactivate - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/concrete_python_benchmark.yml b/.github/workflows/concrete_python_benchmark.yml new file mode 100644 index 000000000..25b851218 --- /dev/null +++ b/.github/workflows/concrete_python_benchmark.yml @@ -0,0 +1,125 @@ +name: Concrete Python Benchmark + +on: + workflow_dispatch: + schedule: + - cron: "0 1 * * SAT" + +env: + DOCKER_IMAGE: ghcr.io/zama-ai/concrete-compiler + GLIB_VER: 2_28 + +jobs: + setup-instance: + name: Setup Instance + runs-on: ubuntu-latest + outputs: + runner-name: ${{ steps.start-instance.outputs.label }} + steps: + - name: Start instance + id: start-instance + uses: zama-ai/slab-github-runner@447a2d0fd2d1a9d647aa0d0723a6e9255372f261 + with: + mode: start + github-token: ${{ secrets.SLAB_ACTION_TOKEN }} + slab-url: ${{ secrets.SLAB_BASE_URL }} + job-secret: ${{ secrets.JOB_SECRET }} + backend: aws + profile: m7i-cpu-bench + + concrete-python-benchmarks: + name: Run Concrete Python Benchmarks + needs: setup-instance + runs-on: ${{ needs.setup-instance.outputs.runner-name }} + steps: + - name: Checkout + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + submodules: recursive + fetch-depth: 0 + + - name: Benchmark + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 + id: build-compiler-bindings + with: + registry: ghcr.io + image: ${{ env.DOCKER_IMAGE }} + username: ${{ secrets.GHCR_LOGIN }} + password: ${{ secrets.GHCR_PASSWORD }} + options: >- + -v ${{ github.workspace }}:/concrete + -v ${{ github.workspace }}/build:/build + -v ${{ env.SSH_AUTH_SOCK }}:/ssh.socket + -e SSH_AUTH_SOCK=/ssh.socket + ${{ env.DOCKER_GPU_OPTION }} + shell: bash + run: | + set -e + + rustup toolchain install nightly-2024-07-01 + rm -rf /build/* + + export PYTHON=${{ format('python{0}', matrix.python-version) }} + echo "Using $PYTHON" + + dnf -y install graphviz graphviz-devel + + cd /concrete/frontends/concrete-python + make PYTHON=$PYTHON venv + source .venv/bin/activate + + cd /concrete/compilers/concrete-compiler/compiler + make BUILD_DIR=/build CCACHE=ON DATAFLOW_EXECUTION_ENABLED=ON Python3_EXECUTABLE=$(which python) python-bindings + + echo "Debug: ccache statistics (after the build):" + ccache -s + + cd /concrete/frontends/concrete-python + + export COMPILER_BUILD_DIRECTORY="/build" + export PROGRESS_MACHINE_NAME="m7i.48xlarge" + + make benchmark + make process-benchmark-results-for-grafana + + deactivate + + - name: Checkout Slab repo + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + with: + repository: zama-ai/slab + path: slab + token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} + + - name: Send data to Slab + shell: bash + run: | + echo "Computing HMac on results file" + SIGNATURE="$(slab/scripts/hmac_calculator.sh frontends/concrete-python/progress.processed.json '${{ secrets.JOB_SECRET }}')" + + cd frontends/concrete-python + + echo "Sending results to Slab..." + curl -v -k \ + -H "Content-Type: application/json" \ + -H "X-Slab-Repository: ${{ github.repository }}" \ + -H "X-Slab-Command: store_data_v2" \ + -H "X-Hub-Signature-256: sha256=${SIGNATURE}" \ + -d @progress.processed.json \ + ${{ secrets.SLAB_URL }} + + teardown-instance: + name: Teardown Instance + if: ${{ always() && needs.setup-instance.result != 'skipped' }} + needs: [ setup-instance, concrete-python-benchmarks ] + runs-on: ubuntu-latest + steps: + - name: Stop instance + id: stop-instance + uses: zama-ai/slab-github-runner@447a2d0fd2d1a9d647aa0d0723a6e9255372f261 + with: + mode: stop + github-token: ${{ secrets.SLAB_ACTION_TOKEN }} + slab-url: ${{ secrets.SLAB_BASE_URL }} + job-secret: ${{ secrets.JOB_SECRET }} + label: ${{ needs.setup-instance.outputs.runner-name }} diff --git a/.github/workflows/concrete_python_checks.yml b/.github/workflows/concrete_python_checks.yml index cc38e453c..87b9aafb6 100644 --- a/.github/workflows/concrete_python_checks.yml +++ b/.github/workflows/concrete_python_checks.yml @@ -7,7 +7,7 @@ jobs: Checks: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Pre-Commit Checks run: | sudo apt install -y graphviz libgraphviz-dev diff --git a/.github/workflows/concrete_python_push_docker_image.yml b/.github/workflows/concrete_python_push_docker_image.yml index 3126d0dbb..ffa8437bd 100644 --- a/.github/workflows/concrete_python_push_docker_image.yml +++ b/.github/workflows/concrete_python_push_docker_image.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Get version from tag run: | @@ -34,7 +34,7 @@ jobs: docker image build -t ${{ env.DOCKER_IMAGE_NAME }} --build-arg version=${{ env.VERSION }} -f ${{ env.DOCKER_FILE }} empty_context - name: Login to Docker Hub - uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/concrete_python_release.yml b/.github/workflows/concrete_python_release.yml index fd330c6f7..750cbe4fb 100644 --- a/.github/workflows/concrete_python_release.yml +++ b/.github/workflows/concrete_python_release.yml @@ -50,7 +50,7 @@ jobs: echo "HOME=/home/ubuntu" >> "${GITHUB_ENV}" - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive fetch-depth: 0 @@ -73,7 +73,7 @@ jobs: run: cp frontends/concrete-python/version.txt frontends/concrete-python/concrete/fhe/version.py - name: Build wheel - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 id: build-compiler-bindings with: registry: ghcr.io @@ -90,7 +90,7 @@ jobs: run: | set -e - rustup toolchain install nightly-2024-01-31 + rustup toolchain install nightly-2024-07-01 rm -rf /build/* export PYTHON=${{ format('python{0}', matrix.python-version) }} @@ -116,7 +116,7 @@ jobs: deactivate - name: Upload wheel - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: ${{ format('wheel-{0}-linux-x86', matrix.python-version) }} path: frontends/concrete-python/dist/*manylinux*.whl @@ -131,7 +131,7 @@ jobs: runs-on: ${{ matrix.runs-on }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive fetch-depth: 0 @@ -193,7 +193,7 @@ jobs: deactivate - name: Upload wheel - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: ${{ format('wheel-{0}-{1}', matrix.python-version, matrix.runs-on) }} path: frontends/concrete-python/dist/*macos*.whl @@ -206,7 +206,7 @@ jobs: outputs: hash: ${{ steps.hash.outputs.hash }} steps: - - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: path: frontends/concrete-python/dist pattern: wheel-* @@ -230,20 +230,20 @@ jobs: needs: [build-linux-x86, build-macos, provenance] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: path: wheels pattern: 'wheel-*' merge-multiple: true - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: pattern: '*.intoto.jsonl' - # When building a new tag, create a new draft release. + # When building a new public tag, create a new draft release. - name: create draft release - if: ${{ env.RELEASE_TYPE == 'public' || env.RELEASE_TYPE == 'nightly' }} + if: ${{ env.RELEASE_TYPE == 'public'}} run: | export TAG=$(git describe --tags --abbrev=0) echo $TAG @@ -278,7 +278,7 @@ jobs: -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/zama-ai/concrete/actions/workflows/concrete_python_push_docker_image.yml/dispatches \ - -d "{\"ref\": \"$TAG\", \"inputs\": {\"tag\":\"$TAG\"}}" + -d "{\"ref\": \"$TAG\", \"inputs\": {\"tag\":\"v$TAG\"}}" test-linux-x86: needs: [build-linux-x86] @@ -289,16 +289,16 @@ jobs: runs-on: ${{ github.event.inputs.runner_name }} steps: - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 with: python-version: ${{ matrix.python-version }} - name: Download wheels - uses: actions/download-artifact@v4 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: ${{ format('wheel-{0}-linux-x86', matrix.python-version) }} path: ${{ format('wheel-{0}-linux-x86', matrix.python-version) }} - name: Checkout the repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive path: repo @@ -339,12 +339,12 @@ jobs: runs-on: ${{ matrix.runs-on }} steps: - name: Download wheels - uses: actions/download-artifact@v4 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: ${{ format('wheel-{0}-{1}', matrix.python-version, matrix.runs-on) }} path: ${{ format('wheel-{0}-{1}', matrix.python-version, matrix.runs-on) }} - name: Checkout the repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive path: repo diff --git a/.github/workflows/concrete_python_release_gpu.yml b/.github/workflows/concrete_python_release_gpu.yml index 1f0ff0525..5205996d5 100644 --- a/.github/workflows/concrete_python_release_gpu.yml +++ b/.github/workflows/concrete_python_release_gpu.yml @@ -51,7 +51,7 @@ jobs: echo "HOME=/home/ubuntu" >> "${GITHUB_ENV}" - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive fetch-depth: 0 @@ -74,7 +74,7 @@ jobs: run: cp frontends/concrete-python/version.txt frontends/concrete-python/concrete/fhe/version.py - name: Build wheel - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 id: build-compiler-bindings with: registry: ghcr.io @@ -90,7 +90,7 @@ jobs: run: | set -e - rustup toolchain install nightly-2024-01-31 + rustup toolchain install nightly-2024-07-01 rm -rf /build/* export PYTHON=${{ format('python{0}', matrix.python-version) }} @@ -104,7 +104,7 @@ jobs: cd /concrete/compilers/concrete-compiler/compiler make BUILD_DIR=/build CCACHE=ON DATAFLOW_EXECUTION_ENABLED=OFF Python3_EXECUTABLE=$(which python) \ - CUDA_SUPPORT=ON CUDA_PATH=${{ env.CUDA_PATH }} python-bindings + CUDA_SUPPORT=ON TIMING_ENABLED=ON CUDA_PATH=${{ env.CUDA_PATH }} python-bindings echo "Debug: ccache statistics (after the build):" ccache -s @@ -117,7 +117,7 @@ jobs: deactivate - name: Upload wheel - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: ${{ format('wheel-{0}-linux-x86', matrix.python-version) }} path: frontends/concrete-python/dist/*manylinux*.whl @@ -126,10 +126,12 @@ jobs: push: needs: [build-linux-x86] runs-on: ubuntu-latest + outputs: + wheel_version: ${{ steps.version.outputs.wheel_version }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: path: wheels merge-multiple: true @@ -155,10 +157,17 @@ jobs: # update indexes and invalidate cloudfront cache python .github/workflows/scripts/s3_update_html_indexes.py + - name: Output Wheel Version + id: version + run: | + export VERSION=`ls ./wheels/*manylinux* | head -n1 | cut -d "-" -f2` + echo "VERSION=$VERSION" + echo "wheel_version=$VERSION" >> "$GITHUB_OUTPUT" + test-gpu-wheel: needs: [push] uses: ./.github/workflows/start_slab.yml secrets: inherit with: command: concrete-python-test-gpu-wheel - user_inputs: "TODO" + user_inputs: "${{ needs.push.outputs.wheel_version }}" diff --git a/.github/workflows/concrete_python_test_gpu_wheel.yml b/.github/workflows/concrete_python_test_gpu_wheel.yml index 2f0d6f789..2569b02cd 100644 --- a/.github/workflows/concrete_python_test_gpu_wheel.yml +++ b/.github/workflows/concrete_python_test_gpu_wheel.yml @@ -35,16 +35,15 @@ jobs: runs-on: ${{ github.event.inputs.runner_name }} steps: - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 with: python-version: ${{ matrix.python-version }} - # TODO: specify CP version - name: Install CP - run: pip install --pre --extra-index-url https://pypi.zama.ai/gpu/ concrete-python + run: pip install --pre --extra-index-url https://pypi.zama.ai/gpu/ "concrete-python==${{ env.CP_VERSION }}" - name: Checkout the repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: path: repo diff --git a/.github/workflows/concrete_python_test_macos.yml b/.github/workflows/concrete_python_test_macos.yml index 40d1f7297..5136208e0 100644 --- a/.github/workflows/concrete_python_test_macos.yml +++ b/.github/workflows/concrete_python_test_macos.yml @@ -21,13 +21,8 @@ jobs: runs-on: ${{ matrix.machine }} steps: - - name: Set up SSH agent - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -41,7 +36,7 @@ jobs: - name: Cache Compilation (push) if: github.event_name == 'push' - uses: actions/cache@v3 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: /Users/runner/Library/Caches/ccache key: ${{ runner.os }}-${{ runner.arch }}-compilation-cache-${{ github.sha }} @@ -50,7 +45,7 @@ jobs: - name: Cache Compilation (pull_request) if: github.event_name == 'pull_request' - uses: actions/cache@v3 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: /Users/runner/Library/Caches/ccache key: ${{ runner.os }}-${{ runner.arch }}-compilation-cache-${{ github.event.pull_request.base.sha }} diff --git a/.github/workflows/concrete_python_tests_linux.yml b/.github/workflows/concrete_python_tests_linux.yml index 98433d936..18311259b 100644 --- a/.github/workflows/concrete_python_tests_linux.yml +++ b/.github/workflows/concrete_python_tests_linux.yml @@ -42,11 +42,6 @@ jobs: echo "Type: ${{ inputs.instance_type }}" echo "Request ID: ${{ inputs.request_id }}" - - name: Set up SSH agent - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Set up GitHub environment run: | echo "HOME=/home/ubuntu" >> "${GITHUB_ENV}" @@ -54,7 +49,7 @@ jobs: echo "SSH_AUTH_SOCK_DIR=$(dirname $SSH_AUTH_SOCK)" >> "${GITHUB_ENV}" - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: submodules: recursive token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} @@ -66,7 +61,7 @@ jobs: uses: ./.github/workflows/setup_rust_toolchain_for_concrete_cpu - name: Build bindings - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 if: ${{ !contains(inputs.instance_type, 'p3') }} id: build-compiler-bindings with: @@ -81,7 +76,7 @@ jobs: -e SSH_AUTH_SOCK=/ssh.socket shell: bash run: | - rustup toolchain install nightly-2024-01-31 + rustup toolchain install nightly-2024-07-01 set -e rm -rf /build/* @@ -98,7 +93,7 @@ jobs: ccache -s - name: Test - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 if: ${{ !contains(inputs.instance_type, 'p3') }} with: registry: ghcr.io @@ -124,7 +119,7 @@ jobs: KEY_CACHE_DIRECTORY=./KeySetCache make pytest - name: Build bindings gpu - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 if: ${{ contains(inputs.instance_type, 'p3') }} id: build-compiler-bindings-gpu with: @@ -155,7 +150,7 @@ jobs: ccache -s - name: Test gpu - uses: addnab/docker-run-action@v3 + uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 if: ${{ contains(inputs.instance_type, 'p3') }} with: registry: ghcr.io diff --git a/.github/workflows/linelint.yml b/.github/workflows/linelint.yml index be791bb5e..616f04d40 100644 --- a/.github/workflows/linelint.yml +++ b/.github/workflows/linelint.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Linelint uses: fernandrone/linelint@0.0.4 id: linelint diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 24ecd03c7..830d24a01 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,20 +39,20 @@ jobs: push-main: ${{ steps.github.outputs.push-main }} steps: - name: Checkout the repository - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 token: ${{ secrets.CONCRETE_ACTIONS_TOKEN }} - name: Get changed files in the concrete-compiler directory id: compiler - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./compilers/concrete-compiler/** - name: Get changed files for concrete-optimizer id: optimizer - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: | ./compilers/concrete-optimizer/** @@ -60,43 +60,43 @@ jobs: - name: Get changed files in the concrete-cpu directory id: concrete-cpu - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./backends/concrete-cpu/implementation/** - name: Get changed files in the concrete-python directory id: concrete-python - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./frontends/concrete-python/** - name: Check if compiler_build_and_test_cpu workflow has changed id: concrete-compiler-cpu-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/compiler_build_and_test_cpu.yml - name: Check if compiler_build_and_test_gpu workflow has changed id: concrete-compiler-gpu-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/compiler_build_and_test_gpu.yml - name: Check if compiler_format_and_linting.yml workflow has changed id: concrete-compiler-format-and-linting-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/compiler_format_and_linting.yml - name: Check if compiler_macos_build_and_test workflow has changed id: concrete-compiler-macos-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/compiler_macos_build_and_test.yml - name: Check if compiler_publish_docker_images workflow has changed id: concrete-compiler-docker-images-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: | ./.github/workflows/compiler_publish_docker_images.yml @@ -104,31 +104,31 @@ jobs: - name: Check if concrete_cpu_test workflow has changed id: concrete-cpu-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/concrete_cpu_test.yml - name: Check if concrete_python_checks workflow has changed id: concrete-python-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/concrete_python_checks.yml - name: Check if optimizer workflow has changed id: concrete-optimizer-workflow - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./.github/workflows/optimizer.yml - name: Get changed files in the concrete-cpu directory id: concrete-cpu-api - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./backends/concrete-cpu/implementation/include/** - name: Get changed files in the concrete-cuda directory id: concrete-cuda-api - uses: tj-actions/changed-files@e5ce44a30190a3af4c81b960587845596e2300ca + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c with: files: ./backends/concrete-cuda/implementation/include/** @@ -252,7 +252,7 @@ jobs: # Concrete-ML tests ############################# concrete-ml-tests-linux: needs: file-change - if: needs.file-change.outputs.concrete-python == 'true' || needs.file-change.outputs.push-main + if: needs.file-change.outputs.concrete-python == 'true' || needs.file-change.outputs.compiler == 'true' || needs.file-change.outputs.push-main uses: ./.github/workflows/start_slab.yml secrets: inherit with: diff --git a/.github/workflows/markdown_link_check.yml b/.github/workflows/markdown_link_check.yml index 3a4c8aa2a..a428b1259 100644 --- a/.github/workflows/markdown_link_check.yml +++ b/.github/workflows/markdown_link_check.yml @@ -4,6 +4,7 @@ on: pull_request: paths: - '**.md' + - .github/workflows/markdown_link_check.yml push: branches: - main @@ -13,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - - uses: gaurav-nelson/github-action-markdown-link-check@v1 + - uses: gaurav-nelson/github-action-markdown-link-check@5c5dfc0ac2e225883c0e5f03a85311ec2830d368 # v1 with: use-quiet-mode: 'yes' use-verbose-mode: 'yes' diff --git a/.github/workflows/ml_benchmark_subset.yml b/.github/workflows/ml_benchmark_subset.yml index d9c11441c..139122ece 100644 --- a/.github/workflows/ml_benchmark_subset.yml +++ b/.github/workflows/ml_benchmark_subset.yml @@ -46,13 +46,8 @@ jobs: run: | echo "BENCH_DATE=$(date --iso-8601=seconds)" >> "${GITHUB_ENV}" - # SSH private key is required as some dependencies are from private repos - - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.CONCRETE_CI_SSH_PRIVATE }} - - name: Fetch submodules - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 submodules: recursive @@ -86,7 +81,7 @@ jobs: make BINDINGS_PYTHON_ENABLED=OFF ML_BENCH_SUBSET_ID=${{ inputs.matrix_item }} run-mlbench-subset - name: Upload raw results artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: ${{ github.sha }}_raw path: compiler/benchmarks_results.json @@ -105,13 +100,13 @@ jobs: --bench-date "${{ env.BENCH_DATE }}" - name: Upload parsed results artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: name: ${{ github.sha }} path: ${{ env.RESULTS_FILENAME }} - name: Checkout Slab repo - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: zama-ai/slab path: slab diff --git a/.github/workflows/optimizer.yml b/.github/workflows/optimizer.yml index 1a6f67d12..449ac6f80 100644 --- a/.github/workflows/optimizer.yml +++ b/.github/workflows/optimizer.yml @@ -24,7 +24,7 @@ jobs: env: RUSTFLAGS: -D warnings steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Setup" uses: ./.github/workflows/optimizer_setup @@ -56,7 +56,7 @@ jobs: benchmarks: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Setup" uses: ./.github/workflows/optimizer_setup @@ -73,7 +73,7 @@ jobs: # for artifacts restrictions see https://github.com/actions/download-artifact/issues/3 # for cache restrictions see https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#restrictions-for-accessing-a-cache # and https://github.com/actions/cache/issues/692 - uses: dawidd6/action-download-artifact@v5 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 with: github_token: ${{ secrets.GITHUB_TOKEN }} workflow_conclusion: "" @@ -83,7 +83,7 @@ jobs: path: ./benchmark - name: Save benchmark result to file - uses: benchmark-action/github-action-benchmark@v1 + uses: benchmark-action/github-action-benchmark@4de1bed97a47495fc4c5404952da0499e31f5c29 # v1.20.3 with: tool: 'cargo' output-file-path: ./compilers/concrete-optimizer/bench_result.txt @@ -96,7 +96,7 @@ jobs: summary-always: true - name: Upload benchmark data - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 with: path: ./benchmark name: ${{ runner.os }}-benchmark diff --git a/.github/workflows/optimizer_setup/action.yml b/.github/workflows/optimizer_setup/action.yml index 8e0b1814c..d5887aa7d 100644 --- a/.github/workflows/optimizer_setup/action.yml +++ b/.github/workflows/optimizer_setup/action.yml @@ -7,15 +7,9 @@ runs: using: "composite" steps: - name: Rust install - uses: actions-rs/toolchain@v1 + uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7 with: toolchain: stable - name: Download cargo cache - uses: Swatinem/rust-cache@v2 - - # A SSH private key is required as some dependencies are from private repos - - name: Set ssh keys - uses: webfactory/ssh-agent@v0.6.0 - with: - ssh-private-key: ${{ inputs.ssh_private_key }} + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3 diff --git a/.github/workflows/refresh_zama_pypi.yml b/.github/workflows/refresh_zama_pypi.yml index 72a237db2..787178d63 100644 --- a/.github/workflows/refresh_zama_pypi.yml +++ b/.github/workflows/refresh_zama_pypi.yml @@ -7,7 +7,7 @@ jobs: refresh: runs-on: ubuntu-latest steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v3 - name: Update index and invalidate cache env: diff --git a/.github/workflows/setup_rust_toolchain_for_concrete_cpu/action.yml b/.github/workflows/setup_rust_toolchain_for_concrete_cpu/action.yml index 7deb2dbfd..a94b9d78a 100644 --- a/.github/workflows/setup_rust_toolchain_for_concrete_cpu/action.yml +++ b/.github/workflows/setup_rust_toolchain_for_concrete_cpu/action.yml @@ -2,7 +2,7 @@ runs: using: "composite" steps: - name: Install rust - uses: actions-rs/toolchain@v1 + uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7 with: - toolchain: nightly-2024-01-31 + toolchain: nightly-2024-07-01 override: true diff --git a/.github/workflows/start_slab.yml b/.github/workflows/start_slab.yml index 07aac3ef6..67bc437f4 100644 --- a/.github/workflows/start_slab.yml +++ b/.github/workflows/start_slab.yml @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout concrete - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 0 @@ -39,7 +39,7 @@ jobs: echo "GIT_REF=${{ github.ref_name }}" >> $GITHUB_ENV - name: Checkout Slab repo - uses: actions/checkout@v3 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: zama-ai/slab path: slab diff --git a/README.md b/README.md index 395e58908..23c3a236a 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ assert result == add(2, 6) - [[Video tutorial] How To Get Started With Concrete - Zama's Fully Homomorphic Encryption Compiler](https://www.zama.ai/post/how-to-started-with-concrete-zama-fully-homomorphic-encryption-compiler) - [The Encrypted Game of Life in Python Using Concrete](https://www.zama.ai/post/the-encrypted-game-of-life-using-concrete-python) - [Encrypted Key-value Database Using Homomorphic Encryption](https://www.zama.ai/post/encrypted-key-value-database-using-homomorphic-encryption) -- [SHA-256 Implementation Using Concrete](https://github.com/zama-ai/concrete/blob/main/docs/application-tutorial/sha256.ipynb) +- [SHA-256 Implementation Using Concrete](https://github.com/zama-ai/concrete/blob/main/frontends/concrete-python/examples/sha256/sha256.ipynb) *Explore more useful resources in [Concrete tutorials](https://docs.zama.ai/concrete/v/main-1/tutorials/see-all-tutorials) and [Awesome Zama repo](https://github.com/zama-ai/awesome-zama?tab=readme-ov-file#concrete). If you have built awesome projects using Concrete, please let us know and we will be happy to showcase them here!* diff --git a/backends/concrete-cpu/implementation/Cargo.lock b/backends/concrete-cpu/implementation/Cargo.lock index 15c6af49e..837c4aecb 100644 --- a/backends/concrete-cpu/implementation/Cargo.lock +++ b/backends/concrete-cpu/implementation/Cargo.lock @@ -45,6 +45,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -59,9 +68,9 @@ checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "cast" @@ -170,14 +179,14 @@ dependencies = [ "cbindgen", "concrete-cpu-noise-model", "concrete-csprng", - "concrete-fft 0.2.1", + "concrete-fft", "concrete-security-curves", "criterion", "dyn-stack", "libc", "num-complex", "once_cell", - "pulp 0.10.4", + "pulp", "rayon", "readonly", "tfhe", @@ -193,9 +202,9 @@ dependencies = [ [[package]] name = "concrete-csprng" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7080e711c39c3dda834604f7c31f4634a38b8dddeb9f24db5d7801751415ad" +checksum = "90518357249582c16a6b64d7410243dfb3109d5bf0ad1665c058c9a59f2fc4cc" dependencies = [ "aes", "libc", @@ -204,29 +213,26 @@ dependencies = [ [[package]] name = "concrete-fft" -version = "0.2.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab720f85aa80be9d78fba5a941458ec50d97c7856aced76707f0bf227a0c6ca" +checksum = "3144f883422ee22c65d4f408c11b3406513eadc0d50b3d65bfadcb97852817e0" dependencies = [ "aligned-vec", "bytemuck", "dyn-stack", "num-complex", - "pulp 0.11.11", + "pulp", + "serde", ] [[package]] -name = "concrete-fft" -version = "0.3.0" +name = "concrete-ntt" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb823cf0c7a83ac8f7e38bcda73d754fb8f57797f342cdd7c20a61a1db8b058" +checksum = "b4f4643dbd5de069e099122ae6c2bbd3db70d69ffec348dfc228448d635f949e" dependencies = [ "aligned-vec", - "bytemuck", - "dyn-stack", - "num-complex", - "pulp 0.11.11", - "serde", + "pulp", ] [[package]] @@ -387,6 +393,17 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "half" version = "1.8.2" @@ -500,9 +517,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "linux-raw-sys" @@ -527,9 +550,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" dependencies = [ "bytemuck", "num-traits", @@ -573,6 +596,12 @@ version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "plotters" version = "0.3.5" @@ -612,30 +641,14 @@ dependencies = [ [[package]] name = "pulp" -version = "0.10.4" +version = "0.18.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284c392c810680912400c6f70879a8cde404344db6b68ff52cc3990c020324d1" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "pulp" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "866e8018d6397b0717100dd4a7948fc8cbc8c4b8ce3e39e98a0e1e878d3ba925" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "pulp" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ff10f8f3224a1cab64371fbab0fff9b9cb5892076eb9032dc825c2e50894e4" +checksum = "0ec8d02258294f59e4e223b41ad7e81c874aa6b15bc4ced9ba3965826da0eed5" dependencies = [ "bytemuck", + "libm", "num-complex", + "reborrow", ] [[package]] @@ -647,6 +660,15 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "rayon" version = "1.7.0" @@ -835,19 +857,47 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "tfhe" -version = "0.4.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9c5cc5c4a1bd0bcfc2e7a3e83a8851dab02ff59d63ca8bc17da0e069498f71" +checksum = "273f968d322dd02cd76a51fe8e2312b5807631d33e99ea06ccfd8034d558c562" dependencies = [ "aligned-vec", + "bincode", "bytemuck", "concrete-csprng", - "concrete-fft 0.3.0", + "concrete-fft", + "concrete-ntt", "dyn-stack", "itertools 0.11.0", - "pulp 0.13.2", + "paste", + "pulp", + "rand_core", "rayon", "serde", + "tfhe-versionable", +] + +[[package]] +name = "tfhe-versionable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7977829d8b2d59a16d9780ffbf8e4084a8d67f32c0e557b647136d094d391b2" +dependencies = [ + "aligned-vec", + "num-complex", + "serde", + "tfhe-versionable-derive", +] + +[[package]] +name = "tfhe-versionable-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754aede9c522d81d852b46714d42137d307f418b8b6eed4db03d1466080f4f9d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.22", ] [[package]] @@ -897,6 +947,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.87" diff --git a/backends/concrete-cpu/implementation/Cargo.toml b/backends/concrete-cpu/implementation/Cargo.toml index c40861b16..066512e1d 100644 --- a/backends/concrete-cpu/implementation/Cargo.toml +++ b/backends/concrete-cpu/implementation/Cargo.toml @@ -10,18 +10,18 @@ crate-type = ["lib", "staticlib"] [dependencies] -concrete-csprng = { version = "0.4", optional = true, features = [ +concrete-csprng = { version = "0.4.1", optional = true, features = [ "generator_fallback", ] } concrete-cpu-noise-model = { path = "../noise-model/" } concrete-security-curves = { path = "../../../tools/parameter-curves/concrete-security-curves-rust" } libc = { version = "0.2", default-features = false } -pulp = { version = "0.10", default-features = false } +pulp = { version = "0.18.8", default-features = false } dyn-stack = { version = "0.9", default-features = false } readonly = "0.2" aligned-vec = { version = "0.5", default-features = false } -concrete-fft = { version = "0.2.1", default-features = false } -bytemuck = "1.12" +concrete-fft = { version = "0.4.1", default-features = false } +bytemuck = "1.14.3" num-complex = { version = "0.4", default-features = false, features = [ "bytemuck", ] } @@ -29,16 +29,16 @@ num-complex = { version = "0.4", default-features = false, features = [ rayon = { version = "1.6", optional = true } once_cell = { version = "1.16", optional = true } -tfhe = { version = "0.4", features = [] } +tfhe = { version = "0.7", features = [] } [target.x86_64-unknown-unix-gnu.dependencies] -tfhe = { version = "0.4", features = ["x86_64-unix"] } +tfhe = { version = "0.7", features = ["x86_64-unix"] } [target.aarch64-unknown-unix-gnu.dependencies] -tfhe = { version = "0.4", features = ["aarch64-unix"] } +tfhe = { version = "0.7", features = ["aarch64-unix"] } [target.x86_64-pc-windows-gnu.dependencies] -tfhe = { version = "0.4", features = ["x86_64"] } +tfhe = { version = "0.7", features = ["x86_64"] } [features] default = ["parallel", "std", "csprng"] diff --git a/backends/concrete-cpu/implementation/src/c_api/bootstrap.rs b/backends/concrete-cpu/implementation/src/c_api/bootstrap.rs index 717b391c1..7576c1003 100644 --- a/backends/concrete-cpu/implementation/src/c_api/bootstrap.rs +++ b/backends/concrete-cpu/implementation/src/c_api/bootstrap.rs @@ -73,14 +73,14 @@ pub unsafe extern "C" fn concrete_cpu_init_lwe_bootstrap_key_u64( &lwe_sk, &glwe_sk, &mut bsk, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ), Parallelism::Rayon => par_generate_lwe_bootstrap_key( &lwe_sk, &glwe_sk, &mut bsk, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ), } @@ -151,14 +151,14 @@ pub unsafe extern "C" fn concrete_cpu_init_seeded_lwe_bootstrap_key_u64( &lwe_sk, &glwe_sk, &mut bsk, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), seeder, ), Parallelism::Rayon => par_generate_seeded_lwe_bootstrap_key( &lwe_sk, &glwe_sk, &mut bsk, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), seeder, ), } diff --git a/backends/concrete-cpu/implementation/src/c_api/keyswitch.rs b/backends/concrete-cpu/implementation/src/c_api/keyswitch.rs index abc5c5246..86d9a82c9 100644 --- a/backends/concrete-cpu/implementation/src/c_api/keyswitch.rs +++ b/backends/concrete-cpu/implementation/src/c_api/keyswitch.rs @@ -53,7 +53,7 @@ pub unsafe extern "C" fn concrete_cpu_init_lwe_keyswitch_key_u64( &input_key, &output_key, &mut ksk, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ) }); @@ -110,7 +110,7 @@ pub unsafe extern "C" fn concrete_cpu_init_seeded_lwe_keyswitch_key_u64( &input_key, &output_key, &mut seeded_ksk, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), seeder, ) }); diff --git a/backends/concrete-cpu/implementation/src/c_api/secret_key.rs b/backends/concrete-cpu/implementation/src/c_api/secret_key.rs index 9d9581413..ed97f9aea 100644 --- a/backends/concrete-cpu/implementation/src/c_api/secret_key.rs +++ b/backends/concrete-cpu/implementation/src/c_api/secret_key.rs @@ -53,7 +53,7 @@ pub unsafe extern "C" fn concrete_cpu_encrypt_lwe_ciphertext_u64( &lwe_sk, &mut lwe_out, Plaintext(input), - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ); }); @@ -95,7 +95,7 @@ pub unsafe extern "C" fn concrete_cpu_encrypt_seeded_lwe_ciphertext_u64( &lwe_sk, &mut seeded_lwe_ciphertext, Plaintext(input), - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), seeder, ); *seeded_lwe_out = seeded_lwe_ciphertext.into_scalar(); @@ -145,7 +145,7 @@ pub unsafe extern "C" fn concrete_cpu_encrypt_ggsw_ciphertext_u64( &glwe_sk, &mut ggsw_out, Plaintext(input), - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ); }); diff --git a/backends/concrete-cpu/implementation/src/c_api/wop_pbs.rs b/backends/concrete-cpu/implementation/src/c_api/wop_pbs.rs index 753b19c71..d649403d2 100644 --- a/backends/concrete-cpu/implementation/src/c_api/wop_pbs.rs +++ b/backends/concrete-cpu/implementation/src/c_api/wop_pbs.rs @@ -71,14 +71,14 @@ pub unsafe extern "C" fn concrete_cpu_init_lwe_circuit_bootstrap_private_functio &mut fpksk_list, &input_key, &output_key, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ), Parallelism::Rayon => par_generate_circuit_bootstrap_lwe_pfpksk_list( &mut fpksk_list, &input_key, &output_key, - Variance::from_variance(variance), + Gaussian::from_dispersion_parameter(Variance::from_variance(variance), 0.0), &mut *(csprng as *mut EncryptionRandomGenerator), ), } diff --git a/backends/concrete-cpu/implementation/src/lib.rs b/backends/concrete-cpu/implementation/src/lib.rs index 001c0bfc6..f4d6d4741 100644 --- a/backends/concrete-cpu/implementation/src/lib.rs +++ b/backends/concrete-cpu/implementation/src/lib.rs @@ -1,5 +1,4 @@ #![allow(clippy::missing_safety_doc, dead_code)] -#![cfg_attr(feature = "nightly", feature(stdsimd))] #![cfg_attr(feature = "nightly", feature(avx512_target_feature))] extern crate alloc; diff --git a/backends/concrete-cuda/implementation/src/bootstrap_amortized.cu b/backends/concrete-cuda/implementation/src/bootstrap_amortized.cu index 7ac1eabb8..15f3aaefe 100644 --- a/backends/concrete-cuda/implementation/src/bootstrap_amortized.cu +++ b/backends/concrete-cuda/implementation/src/bootstrap_amortized.cu @@ -1,3 +1,4 @@ +#include #include "bootstrap_amortized.cuh" /* @@ -85,6 +86,8 @@ void scratch_cuda_bootstrap_amortized_32(void *v_stream, uint32_t gpu_index, input_lwe_ciphertext_count, max_shared_memory, allocate_gpu_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -141,6 +144,8 @@ void scratch_cuda_bootstrap_amortized_64(void *v_stream, uint32_t gpu_index, input_lwe_ciphertext_count, max_shared_memory, allocate_gpu_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -216,6 +221,8 @@ void cuda_bootstrap_amortized_lwe_ciphertext_vector_32( lwe_idx, max_shared_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -353,6 +360,8 @@ void cuda_bootstrap_amortized_lwe_ciphertext_vector_64( lwe_idx, max_shared_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } diff --git a/backends/concrete-cuda/implementation/src/bootstrap_low_latency.cu b/backends/concrete-cuda/implementation/src/bootstrap_low_latency.cu index ca4a237a6..9ae3f6f51 100644 --- a/backends/concrete-cuda/implementation/src/bootstrap_low_latency.cu +++ b/backends/concrete-cuda/implementation/src/bootstrap_low_latency.cu @@ -1,3 +1,4 @@ +#include #include "bootstrap_fast_low_latency.cuh" #include "bootstrap_low_latency.cuh" /* @@ -100,6 +101,8 @@ uint64_t get_buffer_size_bootstrap_low_latency_64( input_lwe_ciphertext_count, max_shared_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); return 0; break; } @@ -244,6 +247,8 @@ void scratch_cuda_bootstrap_low_latency_32( allocate_gpu_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -377,6 +382,8 @@ void scratch_cuda_bootstrap_low_latency_64( allocate_gpu_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -527,6 +534,8 @@ void cuda_bootstrap_low_latency_lwe_ciphertext_vector_32( num_samples, num_lut_vectors, max_shared_memory); break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -744,7 +753,10 @@ void cuda_bootstrap_low_latency_lwe_ciphertext_vector_64( (uint64_t *)lwe_array_in, (double2 *)bootstrapping_key, pbs_buffer, glwe_dimension, lwe_dimension, polynomial_size, base_log, level_count, num_samples, num_lut_vectors, max_shared_memory); + break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } diff --git a/backends/concrete-cuda/implementation/src/bootstrap_multibit.cu b/backends/concrete-cuda/implementation/src/bootstrap_multibit.cu index 1e130fadb..98c9292d5 100644 --- a/backends/concrete-cuda/implementation/src/bootstrap_multibit.cu +++ b/backends/concrete-cuda/implementation/src/bootstrap_multibit.cu @@ -1,3 +1,4 @@ +#include #include "bootstrap_fast_multibit.cuh" #include "bootstrap_multibit.cuh" #include "bootstrap_multibit.h" @@ -172,6 +173,8 @@ void cuda_multi_bit_pbs_lwe_ciphertext_vector_64( } break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } @@ -311,6 +314,8 @@ void scratch_cuda_multi_bit_pbs_64( } break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } } diff --git a/backends/concrete-cuda/implementation/src/crypto/bootstrapping_key.cuh b/backends/concrete-cuda/implementation/src/crypto/bootstrapping_key.cuh index 0c0ddbac0..94c425b31 100644 --- a/backends/concrete-cuda/implementation/src/crypto/bootstrapping_key.cuh +++ b/backends/concrete-cuda/implementation/src/crypto/bootstrapping_key.cuh @@ -8,6 +8,7 @@ #include "polynomial/polynomial.cuh" #include #include +#include __device__ inline int get_start_ith_ggsw(int i, uint32_t polynomial_size, int glwe_dimension, @@ -235,6 +236,8 @@ void cuda_convert_lwe_bootstrap_key(double2 *dest, ST *src, void *v_stream, } break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } @@ -446,6 +449,8 @@ void cuda_fourier_polynomial_mul(void *_input1, void *_input2, void *_output, } break; default: + errx(EXIT_FAILURE, "polynomial size %u is not supported. Supported values " + "are: 256, 512, 1024, 2048, 4096, 8192, 16384.", polynomial_size); break; } cuda_drop_async(buffer, stream, gpu_index); diff --git a/ci/scripts/make_apidocs.sh b/ci/scripts/make_apidocs.sh index dd2791bcb..378fc6879 100755 --- a/ci/scripts/make_apidocs.sh +++ b/ci/scripts/make_apidocs.sh @@ -31,20 +31,6 @@ pip install lazydocs .venvtrash/bin/lazydocs --output-path="../docs/dev/api" --overview-file="README.md" --src-base-url="../../" --no-watermark concrete cd - -# Add the files in the summary -FILES=$(cd docs && find dev/api -name "*.md") - -TMP_FILE=$(mktemp /tmp/apidocs.XXXXXX) -rm -rf "$TMP_FILE" -touch "$TMP_FILE" - -for f in $FILES -do - filename=$(echo "$f" | rev | cut -d '/' -f 1 | rev) - - echo " * [$filename]($f)" >> "$TMP_FILE" -done - rm -rf "$FRESH_DIRECTORY" # New files? diff --git a/ci/scripts/test_cml.sh b/ci/scripts/test_cml.sh index 466f0d5cb..a00445e79 100755 --- a/ci/scripts/test_cml.sh +++ b/ci/scripts/test_cml.sh @@ -206,6 +206,9 @@ then git diff fi +# Update the pandas files in CML +make update_encrypted_dataframe + # Launch CML tests with pytest (and ignore flaky ones) # As compared to regular `make pytest`, known flaky errors from Concrete ML are simply ignored # and coverage is disabled diff --git a/ci/slab.toml b/ci/slab.toml index e97d595da..0a42840d0 100644 --- a/ci/slab.toml +++ b/ci/slab.toml @@ -1,32 +1,42 @@ +# This is the new version of Slab that handles multi backend providers. +[backend.aws.m7i-cpu-bench] +region = "eu-west-1" +image_id = "ami-002bdcd64b8472cf9" # Based on Ubuntu 22.4 +instance_type = "m7i.48xlarge" +security_group = ["sg-0e55cc31dfda0d8a7", ] + [profile.m7i-cpu-bench] region = "eu-west-1" image_id = "ami-002bdcd64b8472cf9" # Based on Ubuntu 22.4 instance_type = "m7i.48xlarge" +security_group= ["sg-0e55cc31dfda0d8a7", ] [profile.m7i-cpu-test] region = "eu-west-1" image_id = "ami-002bdcd64b8472cf9" instance_type = "m7i.16xlarge" +security_group= ["sg-0e55cc31dfda0d8a7", ] [profile.m7i-metal] region = "eu-west-1" image_id = "ami-002bdcd64b8472cf9" instance_type = "m7i.metal-24xl" +security_group= ["sg-0e55cc31dfda0d8a7", ] [profile.gpu-bench] region = "us-east-1" image_id = "ami-08e27480d79e82238" instance_type = "p3.2xlarge" subnet_id = "subnet-8123c9e7" -security_group= ["sg-0f8b52622a2669491", ] +security_group= ["sg-017afab1f328af917", ] # Docker is well configured for test inside docker in this AMI [profile.gpu-test] region = "us-east-1" -image_id = "ami-0c4773f5626d919b6" +image_id = "ami-0257c6ad39f902b5e" instance_type = "p3.2xlarge" subnet_id = "subnet-8123c9e7" -security_group= ["sg-0f8b52622a2669491", ] +security_group= ["sg-017afab1f328af917", ] # It has CUDA Driver (<=12.5) and Docker installed [profile.gpu-test-ubuntu22] @@ -34,13 +44,14 @@ region = "us-east-1" image_id = "ami-05385e0c3c574621f" instance_type = "p3.2xlarge" subnet_id = "subnet-8123c9e7" -security_group= ["sg-0f8b52622a2669491", ] +security_group= ["sg-017afab1f328af917", ] [profile.slurm-cluster] region = "eu-west-3" image_id = "ami-0bb5bb9cb747b5ddd" instance_id = "i-0e5ae2a14134d6275" instance_type = "m6i.8xlarge" +security_group= ["sg-02dd8470fa845f31b", ] ################################################# # Compiler commands @@ -121,5 +132,5 @@ check_run_name = "Concrete Python Release (GPU)" [command.concrete-python-test-gpu-wheel] workflow = "concrete_python_test_gpu_wheel.yml" -profile = "gpu-test-ubuntu22" +profile = "gpu-test" check_run_name = "Concrete Python Test GPU Wheel" diff --git a/compilers/concrete-compiler/compiler/CMakeLists.txt b/compilers/concrete-compiler/compiler/CMakeLists.txt index 6984a89b6..a073bc68c 100644 --- a/compilers/concrete-compiler/compiler/CMakeLists.txt +++ b/compilers/concrete-compiler/compiler/CMakeLists.txt @@ -136,7 +136,7 @@ ExternalProject_Add( DOWNLOAD_COMMAND "" CONFIGURE_COMMAND "" OUTPUT "${CONCRETE_CPU_STATIC_LIB}" BUILD_ALWAYS true - BUILD_COMMAND cargo +nightly-2024-01-31 build --release --features=nightly + BUILD_COMMAND cargo +nightly-2024-07-01 build --release --features=nightly BINARY_DIR "${CONCRETE_CPU_DIR}" INSTALL_COMMAND "" LOG_BUILD ON diff --git a/compilers/concrete-compiler/compiler/Makefile b/compilers/concrete-compiler/compiler/Makefile index f45316c4c..e10e88a49 100644 --- a/compilers/concrete-compiler/compiler/Makefile +++ b/compilers/concrete-compiler/compiler/Makefile @@ -329,19 +329,9 @@ run-end-to-end-tests-gpu: build-end-to-end-test generate-gpu-tests --backend=gpu \ $(FIXTURE_GPU_DIR)/*.yaml -## end-to-end-dataflow-tests - -build-end-to-end-dataflow-tests: build-initialized - cmake --build $(BUILD_DIR) --target end_to_end_jit_auto_parallelization - cmake --build $(BUILD_DIR) --target end_to_end_jit_distributed - cmake --build $(BUILD_DIR) --target end_to_end_jit_aes_short - -run-end-to-end-dataflow-tests: build-end-to-end-dataflow-tests - $(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_auto_parallelization - $(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_distributed +## end-to-end-distributed-tests run-end-to-end-distributed-tests: $(GTEST_PARALLEL_PY) build-end-to-end-tests generate-cpu-tests - srun -n4 -c8 --kill-on-bad-exit=1 $(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_distributed srun -n4 -c8 --kill-on-bad-exit=1 $(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_test \ --optimizer-strategy=dag-mono --dataflow-parallelize=1 \ $(FIXTURE_CPU_DIR)/*round*.yaml $(FIXTURE_CPU_DIR)/*relu*.yaml $(FIXTURE_CPU_DIR)/*linalg*.yaml @@ -562,8 +552,6 @@ FORCE: run-unit-tests \ run-python-tests \ build-end-to-end-tests \ - build-end-to-end-dataflow-tests \ - run-end-to-end-dataflow-tests \ run-random-end-to-end-tests-for-each-options \ opt \ mlir-opt \ diff --git a/compilers/concrete-compiler/compiler/README.md b/compilers/concrete-compiler/compiler/README.md index 6223f5ed0..3a3d42277 100644 --- a/compilers/concrete-compiler/compiler/README.md +++ b/compilers/concrete-compiler/compiler/README.md @@ -148,6 +148,9 @@ You can create a tarball containing libs, bins, and include files for the tools ### Build the Python Package +> [!IMPORTANT] +> The wheel built in the following steps is for `concrete-compiler` (which doesn't have the frontend layer) and not `concrete-python`. If you are interested in the `concrete-python` package, then you should build it from [here](https://github.com/zama-ai/concrete/tree/main/frontends/concrete-python) instead. + Currently supported platforms: - Linux x86_64 for python 3.8, 3.9, 3.10, and 3.11 diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/IR/FHEOps.td b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/IR/FHEOps.td index 56242b413..9ab387127 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/IR/FHEOps.td +++ b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/IR/FHEOps.td @@ -19,7 +19,7 @@ include "concretelang/Dialect/FHE/Interfaces/FHEInterfaces.td" class FHE_Op traits = []> : Op; -def FHE_ZeroEintOp : FHE_Op<"zero", [Pure, ConstantNoise]> { +def FHE_ZeroEintOp : FHE_Op<"zero", [Pure, ZeroNoise]> { let summary = "Returns a trivial encrypted integer of 0"; let description = [{ @@ -34,7 +34,7 @@ def FHE_ZeroEintOp : FHE_Op<"zero", [Pure, ConstantNoise]> { let results = (outs FHE_AnyEncryptedInteger:$out); } -def FHE_ZeroTensorOp : FHE_Op<"zero_tensor", [Pure, ConstantNoise]> { +def FHE_ZeroTensorOp : FHE_Op<"zero_tensor", [Pure, ZeroNoise]> { let summary = "Creates a new tensor with all elements initialized to an encrypted zero."; let description = [{ @@ -52,7 +52,7 @@ def FHE_ZeroTensorOp : FHE_Op<"zero_tensor", [Pure, ConstantNoise]> { let results = (outs Type.predicate, HasStaticShapePred]>>:$tensor); } -def FHE_AddEintIntOp : FHE_Op<"add_eint_int", [Pure, BinaryEintInt, DeclareOpInterfaceMethods]> { +def FHE_AddEintIntOp : FHE_Op<"add_eint_int", [Pure, BinaryEintInt, AdditiveNoise, DeclareOpInterfaceMethods]> { let summary = "Adds an encrypted integer and a clear integer"; let description = [{ @@ -85,7 +85,7 @@ def FHE_AddEintIntOp : FHE_Op<"add_eint_int", [Pure, BinaryEintInt, DeclareOpInt let hasFolder = 1; } -def FHE_AddEintOp : FHE_Op<"add_eint", [Pure, BinaryEint, DeclareOpInterfaceMethods]> { +def FHE_AddEintOp : FHE_Op<"add_eint", [Pure, BinaryEint, AdditiveNoise, DeclareOpInterfaceMethods]> { let summary = "Adds two encrypted integers"; let description = [{ @@ -117,7 +117,7 @@ def FHE_AddEintOp : FHE_Op<"add_eint", [Pure, BinaryEint, DeclareOpInterfaceMeth let hasVerifier = 1; } -def FHE_SubIntEintOp : FHE_Op<"sub_int_eint", [Pure, BinaryIntEint]> { +def FHE_SubIntEintOp : FHE_Op<"sub_int_eint", [Pure, BinaryIntEint, AdditiveNoise]> { let summary = "Subtract an encrypted integer from a clear integer"; let description = [{ @@ -149,7 +149,7 @@ def FHE_SubIntEintOp : FHE_Op<"sub_int_eint", [Pure, BinaryIntEint]> { let hasVerifier = 1; } -def FHE_SubEintIntOp : FHE_Op<"sub_eint_int", [Pure, BinaryEintInt, DeclareOpInterfaceMethods]> { +def FHE_SubEintIntOp : FHE_Op<"sub_eint_int", [Pure, BinaryEintInt, AdditiveNoise, DeclareOpInterfaceMethods]> { let summary = "Subtract a clear integer from an encrypted integer"; let description = [{ @@ -182,7 +182,7 @@ def FHE_SubEintIntOp : FHE_Op<"sub_eint_int", [Pure, BinaryEintInt, DeclareOpInt let hasFolder = 1; } -def FHE_SubEintOp : FHE_Op<"sub_eint", [Pure, BinaryEint, DeclareOpInterfaceMethods]> { +def FHE_SubEintOp : FHE_Op<"sub_eint", [Pure, BinaryEint, AdditiveNoise, DeclareOpInterfaceMethods]> { let summary = "Subtract an encrypted integer from an encrypted integer"; let description = [{ @@ -214,7 +214,7 @@ def FHE_SubEintOp : FHE_Op<"sub_eint", [Pure, BinaryEint, DeclareOpInterfaceMeth let hasVerifier = 1; } -def FHE_NegEintOp : FHE_Op<"neg_eint", [Pure, UnaryEint, DeclareOpInterfaceMethods]> { +def FHE_NegEintOp : FHE_Op<"neg_eint", [Pure, UnaryEint, AdditiveNoise, DeclareOpInterfaceMethods]> { let summary = "Negates an encrypted integer"; diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/Interfaces/FHEInterfaces.td b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/Interfaces/FHEInterfaces.td index dc9f53122..e60be26b8 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/Interfaces/FHEInterfaces.td +++ b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/FHE/Interfaces/FHEInterfaces.td @@ -37,6 +37,22 @@ def ConstantNoise : OpInterface<"ConstantNoise"> { let cppNamespace = "mlir::concretelang::FHE"; } +def ZeroNoise : OpInterface<"ZeroNoise"> { + let description = [{ + An operation outputs a ciphertext with zero noise. + }]; + + let cppNamespace = "mlir::concretelang::FHE"; +} + +def AdditiveNoise : OpInterface<"AdditiveNoise"> { + let description = [{ + An n-ary operation whose output noise is the unweighted sum of all input noises. + }]; + + let cppNamespace = "mlir::concretelang::FHE"; +} + def UnaryEint : OpInterface<"UnaryEint"> { let description = [{ A unary operation on scalars, with the operand encrypted. @@ -63,7 +79,7 @@ def UnaryEint : OpInterface<"UnaryEint"> { if (auto operandTy = dyn_cast($_op->getOpOperand(0).get().getType())) { return operandTy.getElementType(); } else return $_op->getOpOperand(0).get().getType(); - }]> + }]> ]; } @@ -124,8 +140,8 @@ def Binary : OpInterface<"Binary"> { if (auto cstOp = llvm::dyn_cast_or_null($_op-> getOpOperand(opNum).get().getDefiningOp())) return cstOp->template getAttrOfType("value").template getValues(); - else return {}; - }]>, + else return {}; + }]>, ]; } diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/CMakeLists.txt b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/CMakeLists.txt index 7927b605a..fa8842fb0 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/CMakeLists.txt +++ b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(Interfaces) add_subdirectory(IR) +add_subdirectory(Transforms) diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/CMakeLists.txt b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/CMakeLists.txt new file mode 100644 index 000000000..30c52b581 --- /dev/null +++ b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/CMakeLists.txt @@ -0,0 +1,3 @@ +set(LLVM_TARGET_DEFINITIONS Passes.td) +mlir_tablegen(Passes.h.inc -gen-pass-decls -name Transforms) +add_public_tablegen_target(ConcretelangSDFGTransformsPassIncGen) diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/Passes.h b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/Passes.h new file mode 100644 index 000000000..d0f02f484 --- /dev/null +++ b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/Passes.h @@ -0,0 +1,26 @@ +// Part of the Concrete Compiler Project, under the BSD3 License with Zama +// Exceptions. See +// https://github.com/zama-ai/concrete/blob/main/LICENSE.txt +// for license information. + +#ifndef CONCRETELANG_SDFG_TRANSFORMS_PASS_H +#define CONCRETELANG_SDFG_TRANSFORMS_PASS_H + +#include +#include +#include +#include +#include + +#define GEN_PASS_CLASSES +#include + +namespace mlir { +namespace concretelang { + +std::unique_ptr createSDFGBufferOwnershipPass(); + +} // namespace concretelang +} // namespace mlir + +#endif diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/Passes.td b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/Passes.td new file mode 100644 index 000000000..1d65b449f --- /dev/null +++ b/compilers/concrete-compiler/compiler/include/concretelang/Dialect/SDFG/Transforms/Passes.td @@ -0,0 +1,17 @@ +#ifndef CONCRETELANG_SDFG_PASSES +#define CONCRETELANG_SDFG_PASSES + +include "mlir/Pass/PassBase.td" + +def SDFGBufferOwnership : Pass<"SDFGBufferOwnership", "mlir::ModuleOp"> { + let summary = + "Take ownership of data passed to SDFG operators."; + + let description = [{ As data used in SDFG operators, in particular + PUT operations, can be used asynchronously, deallocation must be + handled by the runtime if we take ownership. This pass removes + explicit deallocation calls where no other uses of the data exist + and makes copies otherwise, letting the runtime handle + deallocation when appropriate.}]; } + +#endif diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/DFRuntime.hpp b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/DFRuntime.hpp index 92b8f3a62..61f0c608f 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/DFRuntime.hpp +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/DFRuntime.hpp @@ -25,6 +25,8 @@ bool _dfr_is_jit(); bool _dfr_is_root_node(); bool _dfr_use_omp(); bool _dfr_is_distributed(); +void _dfr_run_remote_scheduler(); +void _dfr_register_lib(void *dlh); typedef enum _dfr_task_arg_type { _DFR_TASK_ARG_BASE = 0, diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/GPUDFG.hpp b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/GPUDFG.hpp new file mode 100644 index 000000000..db51c860a --- /dev/null +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/GPUDFG.hpp @@ -0,0 +1,28 @@ +// Part of the Concrete Compiler Project, under the BSD3 License with Zama +// Exceptions. See +// https://github.com/zama-ai/concrete/blob/main/LICENSE.txt +// for license information. + +#ifndef CONCRETELANG_GPUDFG_HPP +#define CONCRETELANG_GPUDFG_HPP + +#ifdef CONCRETELANG_CUDA_SUPPORT +#include "bootstrap.h" +#include "device.h" +#include "keyswitch.h" +#include "linear_algebra.h" + +#endif + +namespace mlir { +namespace concretelang { +namespace gpu_dfg { + +bool check_cuda_device_available(); +bool check_cuda_runtime_enabled(); + +} // namespace gpu_dfg +} // namespace concretelang +} // namespace mlir + +#endif diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/key_manager.hpp b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/key_manager.hpp index a17a0f21e..1bee82c5b 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/key_manager.hpp +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/key_manager.hpp @@ -109,10 +109,8 @@ struct RuntimeContextManager { bool allocated = false; bool lazy_key_transfer = false; - RuntimeContextManager(bool lazy = false) : lazy_key_transfer(lazy) { - context = nullptr; - _dfr_node_level_runtime_context_manager = this; - } + RuntimeContextManager(bool lazy = false) + : context(nullptr), lazy_key_transfer(lazy) {} void setContext(void *ctx) { assert(context == nullptr && diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/stream_emulator_api.h b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/stream_emulator_api.h index 90f8fd244..795bdc33b 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/stream_emulator_api.h +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/stream_emulator_api.h @@ -83,7 +83,8 @@ uint64_t stream_emulator_get_uint64(void *stream); void *stream_emulator_make_memref_stream(const char *name, stream_type stype); void stream_emulator_put_memref(void *stream, uint64_t *allocated, uint64_t *aligned, uint64_t offset, - uint64_t size, uint64_t stride); + uint64_t size, uint64_t stride, + uint64_t data_ownership); void stream_emulator_get_memref(void *stream, uint64_t *out_allocated, uint64_t *out_aligned, uint64_t out_offset, uint64_t out_size, uint64_t out_stride); @@ -93,7 +94,8 @@ void *stream_emulator_make_memref_batch_stream(const char *name, void stream_emulator_put_memref_batch(void *stream, uint64_t *allocated, uint64_t *aligned, uint64_t offset, uint64_t size0, uint64_t size1, - uint64_t stride0, uint64_t stride1); + uint64_t stride0, uint64_t stride1, + uint64_t data_ownership); void stream_emulator_get_memref_batch(void *stream, uint64_t *out_allocated, uint64_t *out_aligned, uint64_t out_offset, uint64_t out_size0, diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/time_util.h b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/time_util.h index 0a2ca928b..ffb095fb7 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/time_util.h +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/time_util.h @@ -10,40 +10,156 @@ #include #include +#include +#include #include #include "concretelang/Runtime/DFRuntime.hpp" #define TIME_UTIL_CLOCK CLOCK_MONOTONIC +namespace mlir { +namespace concretelang { +namespace time_util { + +extern bool timing_enabled; +extern struct timespec timestamp; + +} // namespace time_util +} // namespace concretelang +} // namespace mlir + static inline int timespec_diff(struct timespec *, const struct timespec *, const struct timespec *); +#define CONCRETELANG_ENABLE_TIMING() \ + do { \ + assert(clock_gettime(TIME_UTIL_CLOCK, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + char *env = getenv("CONCRETE_TIMING_ENABLED"); \ + if (env != nullptr) \ + if (!strncmp(env, "True", 4) || !strncmp(env, "true", 4) || \ + !strncmp(env, "ON", 2) || !strncmp(env, "on", 2) || \ + !strncmp(env, "1", 1)) \ + mlir::concretelang::time_util::timing_enabled = true; \ + } while (0) + #define BEGIN_TIME(p) \ do { \ - assert(clock_gettime(TIME_UTIL_CLOCK, (p)) == 0); \ + if (mlir::concretelang::time_util::timing_enabled) { \ + assert(clock_gettime(TIME_UTIL_CLOCK, (p)) == 0); \ + } \ } while (0) #if CONCRETELANG_DATAFLOW_EXECUTION_ENABLED #define END_TIME(p, m) \ do { \ - struct timespec _end_time_tv; \ - assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ - assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ - std::cout << "[NODE \t" << _dfr_debug_get_node_id() << "] \t" << (m) \ - << " time : \t" << (p)->tv_sec << "." << (p)->tv_nsec \ - << " seconds.\n" \ - << std::flush; \ + if (mlir::concretelang::time_util::timing_enabled) { \ + struct timespec _end_time_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ + assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ + struct timespec _timestamp_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_timestamp_tv) == 0); \ + assert(timespec_diff(&_timestamp_tv, &_timestamp_tv, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + std::cout << "[Timing logs][" << time_in_seconds(&_timestamp_tv) \ + << "] -\t"; \ + std::cout << "[NODE \t" << _dfr_debug_get_node_id() << "] \t" << (m) \ + << " time : \t" << time_in_seconds((p)) << " seconds.\n" \ + << std::flush; \ + } \ + } while (0) +#define END_TIME_C(p, m, c) \ + do { \ + if (mlir::concretelang::time_util::timing_enabled) { \ + struct timespec _end_time_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ + assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ + struct timespec _timestamp_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_timestamp_tv) == 0); \ + assert(timespec_diff(&_timestamp_tv, &_timestamp_tv, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + std::cout << "[Timing logs][" << time_in_seconds(&_timestamp_tv) \ + << "] -\t"; \ + std::cout << "[NODE \t" << _dfr_debug_get_node_id() << "] \t" << (m) \ + << " [" << (c) << "] time : \t" << time_in_seconds((p)) \ + << " seconds.\n" \ + << std::flush; \ + } \ + } while (0) +#define END_TIME_C_ACC(p, m, c, acc) \ + do { \ + if (mlir::concretelang::time_util::timing_enabled) { \ + struct timespec _end_time_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ + assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ + timespec_acc((acc), (p), (acc)); \ + struct timespec _timestamp_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_timestamp_tv) == 0); \ + assert(timespec_diff(&_timestamp_tv, &_timestamp_tv, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + std::cout << "[Timing logs][" << time_in_seconds(&_timestamp_tv) \ + << "] -\t"; \ + std::cout << "[NODE \t" << _dfr_debug_get_node_id() << "] \t" << (m) \ + << " [" << (c) << "] time : \t" << time_in_seconds((p)) \ + << " (total : " << time_in_seconds((acc)) << " )" \ + << " seconds.\n" \ + << std::flush; \ + } \ } while (0) #else #define END_TIME(p, m) \ do { \ - struct timespec _end_time_tv; \ - assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ - assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ - std::cout << (m) << " time : \t" << (p)->tv_sec << "." << (p)->tv_nsec \ - << " seconds.\n" \ - << std::flush; \ + if (mlir::concretelang::time_util::timing_enabled) { \ + struct timespec _end_time_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ + assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ + struct timespec _timestamp_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_timestamp_tv) == 0); \ + assert(timespec_diff(&_timestamp_tv, &_timestamp_tv, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + std::cout << "[Timing logs][" << time_in_seconds(&_timestamp_tv) \ + << "] -\t"; \ + std::cout << (m) << " time : \t" << time_in_seconds((p)) \ + << " seconds.\n" \ + << std::flush; \ + } \ + } while (0) +#define END_TIME_C(p, m, c) \ + do { \ + if (mlir::concretelang::time_util::timing_enabled) { \ + struct timespec _end_time_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ + assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ + struct timespec _timestamp_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_timestamp_tv) == 0); \ + assert(timespec_diff(&_timestamp_tv, &_timestamp_tv, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + std::cout << "[Timing logs][" << time_in_seconds(&_timestamp_tv) \ + << "] -\t"; \ + std::cout << (m) << " [" << (c) << "] time : \t" << time_in_seconds((p)) \ + << " seconds.\n" \ + << std::flush; \ + } \ + } while (0) +#define END_TIME_C_ACC(p, m, c, acc) \ + do { \ + if (mlir::concretelang::time_util::timing_enabled) { \ + struct timespec _end_time_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_end_time_tv) == 0); \ + assert(timespec_diff((p), &_end_time_tv, (p)) == 0); \ + timespec_acc((acc), (p), (acc)); \ + struct timespec _timestamp_tv; \ + assert(clock_gettime(TIME_UTIL_CLOCK, &_timestamp_tv) == 0); \ + assert(timespec_diff(&_timestamp_tv, &_timestamp_tv, \ + &mlir::concretelang::time_util::timestamp) == 0); \ + std::cout << "[Timing logs][" << time_in_seconds(&_timestamp_tv) \ + << "] -\t"; \ + std::cout << (m) << " [" << (c) << "] time : \t" << time_in_seconds((p)) \ + << " (total : " << time_in_seconds((acc)) << " )" \ + << " seconds.\n" \ + << std::flush; \ + } \ } while (0) #endif @@ -57,6 +173,13 @@ static inline double get_thread_cpu_time(void) { return _t; } +static inline double time_in_seconds(struct timespec *_tv) { + double _t; + _t = _tv->tv_sec; + _t += _tv->tv_nsec * 1e-9; + return _t; +} + static inline int timespec_diff(struct timespec *_result, const struct timespec *_px, const struct timespec *_py) { @@ -86,10 +209,23 @@ static inline int timespec_diff(struct timespec *_result, return _x.tv_sec < _y.tv_sec; } +static inline void timespec_acc(struct timespec *_result, + const struct timespec *_px, + const struct timespec *_py) { + struct timespec _x, _y; + _x = *_px; + _y = *_py; + _result->tv_sec = _x.tv_sec + _y.tv_sec; + _result->tv_nsec = _x.tv_nsec + _y.tv_nsec; +} + #else // CONCRETELANG_TIMING_ENABLED +#define CONCRETELANG_ENABLE_TIMING() #define BEGIN_TIME(p) #define END_TIME(p, m) +#define END_TIME_C(p, m, c) +#define END_TIME_C_ACC(p, m, c, acc) #endif // CONCRETELANG_TIMING_ENABLED #endif diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/utils.h b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/utils.h new file mode 100644 index 000000000..71c1fb39b --- /dev/null +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/utils.h @@ -0,0 +1,21 @@ +// Part of the Concrete Compiler Project, under the BSD3 License with Zama +// Exceptions. See +// https://github.com/zama-ai/concrete/blob/main/LICENSE.txt +// for license information. + +#ifndef CONCRETELANG_RUNTIME_UTILS_H +#define CONCRETELANG_RUNTIME_UTILS_H + +#include "llvm/Support/TargetSelect.h" + +namespace mlir { +namespace concretelang { + +// Mainly a wrapper to some LLVM functions. The reason to have this wrapper is +// to avoid linking conflicts between the python binary extension, and LLVM. +void LLVMInitializeNativeTarget(); + +} // namespace concretelang +} // namespace mlir + +#endif diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/workfunction_registry.hpp b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/workfunction_registry.hpp index 5283ab3e1..5a879a26c 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Runtime/workfunction_registry.hpp +++ b/compilers/concrete-compiler/compiler/include/concretelang/Runtime/workfunction_registry.hpp @@ -21,13 +21,11 @@ namespace concretelang { namespace dfr { struct WorkFunctionRegistry; -namespace { -static void *dl_handle; -static WorkFunctionRegistry *_dfr_node_level_work_function_registry; -} // namespace +extern WorkFunctionRegistry *_dfr_node_level_work_function_registry; +extern void *dl_handle; struct WorkFunctionRegistry { - WorkFunctionRegistry() { _dfr_node_level_work_function_registry = this; } + WorkFunctionRegistry() = default; wfnptr getWorkFunctionPointer(const std::string &name) { std::lock_guard guard(registry_guard); diff --git a/compilers/concrete-compiler/compiler/include/concretelang/Support/CompilerEngine.h b/compilers/concrete-compiler/compiler/include/concretelang/Support/CompilerEngine.h index ae56ea941..a9fbfcc97 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/Support/CompilerEngine.h +++ b/compilers/concrete-compiler/compiler/include/concretelang/Support/CompilerEngine.h @@ -26,8 +26,6 @@ using concretelang::protocol::Message; namespace mlir { namespace concretelang { -bool getEmitGPUOption(); - /// Compilation context that acts as the root owner of LLVM and MLIR /// data structures directly and indirectly referenced by artefacts /// produced by the `CompilerEngine`. diff --git a/compilers/concrete-compiler/compiler/include/concretelang/TestLib/TestProgram.h b/compilers/concrete-compiler/compiler/include/concretelang/TestLib/TestProgram.h index 070a13759..5e3be1637 100644 --- a/compilers/concrete-compiler/compiler/include/concretelang/TestLib/TestProgram.h +++ b/compilers/concrete-compiler/compiler/include/concretelang/TestLib/TestProgram.h @@ -23,6 +23,7 @@ #include #include #include +#include using concretelang::clientlib::ClientCircuit; using concretelang::clientlib::ClientProgram; @@ -220,37 +221,32 @@ private: auto new_path = [=]() { llvm::SmallString<0> outputPath; llvm::sys::path::append(outputPath, rootFolder); - std::string uid = std::to_string( - std::hash()(std::this_thread::get_id())); + auto pid = getpid(); + std::string uid = std::to_string(pid); uid.append("-"); uid.append(std::to_string(std::rand())); llvm::sys::path::append(outputPath, uid); return std::string(outputPath); }; - // Macos sometimes fail to create new directories. We have to retry a few - // times. - for (size_t i = 0; i < 5; i++) { - auto pathString = new_path(); - auto ec = std::error_code(); - llvm::errs() << "TestProgram: create temporary directory(" << pathString - << ")\n"; - if (!std::filesystem::create_directory(pathString, ec)) { - llvm::errs() << "TestProgram: fail to create temporary directory(" - << pathString << "), "; - if (ec) { - llvm::errs() << "already exists"; - } else { - llvm::errs() << "error(" << ec.message() << ")"; - } + auto pathString = new_path(); + auto ec = std::error_code(); + llvm::errs() << "TestProgram: create temporary directory(" << pathString + << ")\n"; + if (!std::filesystem::create_directory(pathString, ec)) { + llvm::errs() << "TestProgram: fail to create temporary directory(" + << pathString << "), "; + if (ec) { + llvm::errs() << "already exists"; } else { - llvm::errs() << "TestProgram: directory(" << pathString - << ") successfully created\n"; - return pathString; + llvm::errs() << "error(" << ec.message() << ")"; } + assert(false); + } else { + llvm::errs() << "TestProgram: directory(" << pathString + << ") successfully created\n"; + return pathString; } - llvm::errs() << "Failed to create temp directory 5 times. Aborting...\n"; - assert(false); } }; diff --git a/compilers/concrete-compiler/compiler/lib/Bindings/Python/CompilerAPIModule.cpp b/compilers/concrete-compiler/compiler/lib/Bindings/Python/CompilerAPIModule.cpp index 6d226364b..332e6759f 100644 --- a/compilers/concrete-compiler/compiler/lib/Bindings/Python/CompilerAPIModule.cpp +++ b/compilers/concrete-compiler/compiler/lib/Bindings/Python/CompilerAPIModule.cpp @@ -12,6 +12,7 @@ #include "concretelang/Common/Keysets.h" #include "concretelang/Dialect/FHE/IR/FHEOpsDialect.h.inc" #include "concretelang/Runtime/DFRuntime.hpp" +#include "concretelang/Runtime/GPUDFG.hpp" #include "concretelang/ServerLib/ServerLib.h" #include "concretelang/Support/logging.h" #include @@ -462,6 +463,14 @@ void initDataflowParallelization() { mlir::concretelang::dfr::_dfr_set_required(true); } +bool checkGPURuntimeEnabled() { + return mlir::concretelang::gpu_dfg::check_cuda_runtime_enabled(); +} + +bool checkCudaDeviceAvailable() { + return mlir::concretelang::gpu_dfg::check_cuda_device_available(); +} + std::string roundTrip(const char *module) { std::shared_ptr ccx = mlir::concretelang::CompilationContext::createShared(); @@ -673,6 +682,8 @@ void mlir::concretelang::python::populateCompilerAPISubmodule( m.def("terminate_df_parallelization", &terminateDataflowParallelization); m.def("init_df_parallelization", &initDataflowParallelization); + m.def("check_gpu_runtime_enabled", &checkGPURuntimeEnabled); + m.def("check_cuda_device_available", &checkCudaDeviceAvailable); pybind11::enum_(m, "Backend") .value("CPU", mlir::concretelang::Backend::CPU) @@ -957,6 +968,7 @@ void mlir::concretelang::python::populateCompilerAPISubmodule( ::concretelang::serverlib::ServerLambda lambda, ::concretelang::clientlib::PublicArguments &publicArguments, ::concretelang::clientlib::EvaluationKeys &evaluationKeys) { + pybind11::gil_scoped_release release; SignalGuard signalGuard; return library_server_call(support, lambda, publicArguments, evaluationKeys); @@ -1238,6 +1250,7 @@ void mlir::concretelang::python::populateCompilerAPISubmodule( ::concretelang::clientlib::PublicArguments &publicArguments, ::concretelang::clientlib::EvaluationKeys &evaluationKeys) { SignalGuard signalGuard; + pybind11::gil_scoped_release release; auto keyset = evaluationKeys.keyset; auto values = publicArguments.values; GET_OR_THROW_RESULT(auto output, circuit.call(keyset, values)); @@ -1268,6 +1281,7 @@ void mlir::concretelang::python::populateCompilerAPISubmodule( [](::concretelang::clientlib::ValueExporter &exporter, size_t position, int64_t value) { SignalGuard signalGuard; + pybind11::gil_scoped_release release; auto info = exporter.circuit.getCircuitInfo() .asReader() @@ -1288,6 +1302,7 @@ void mlir::concretelang::python::populateCompilerAPISubmodule( size_t position, std::vector values, std::vector shape) { SignalGuard signalGuard; + pybind11::gil_scoped_release release; std::vector dimensions(shape.begin(), shape.end()); auto info = exporter.circuit.getCircuitInfo().asReader().getInputs()[position]; @@ -1363,6 +1378,7 @@ void mlir::concretelang::python::populateCompilerAPISubmodule( size_t position, ::concretelang::clientlib::SharedScalarOrTensorData &value) { SignalGuard signalGuard; + pybind11::gil_scoped_release release; auto result = decrypter.circuit.processOutput(value.value, position); diff --git a/compilers/concrete-compiler/compiler/lib/Bindings/Python/concrete/compiler/__init__.py b/compilers/concrete-compiler/compiler/lib/Bindings/Python/concrete/compiler/__init__.py index d122706dc..fbd4d631d 100644 --- a/compilers/concrete-compiler/compiler/lib/Bindings/Python/concrete/compiler/__init__.py +++ b/compilers/concrete-compiler/compiler/lib/Bindings/Python/concrete/compiler/__init__.py @@ -8,6 +8,8 @@ import atexit from mlir._mlir_libs._concretelang._compiler import ( terminate_df_parallelization as _terminate_df_parallelization, init_df_parallelization as _init_df_parallelization, + check_gpu_runtime_enabled as _check_gpu_runtime_enabled, + check_cuda_device_available as _check_cuda_device_available, ) from mlir._mlir_libs._concretelang._compiler import round_trip as _round_trip from mlir._mlir_libs._concretelang._compiler import ( @@ -49,6 +51,18 @@ def init_dfr(): _init_df_parallelization() +def check_gpu_enabled() -> bool: + """Check whether the compiler and runtime support GPU offloading. + + GPU offloading is not always available, in particular in non-GPU wheels.""" + return _check_gpu_runtime_enabled() + + +def check_gpu_available() -> bool: + """Check whether a CUDA device is available and online.""" + return _check_cuda_device_available() + + # Cleanly terminate the dataflow runtime if it has been initialized # (does nothing otherwise) atexit.register(_terminate_df_parallelization) diff --git a/compilers/concrete-compiler/compiler/lib/Conversion/SDFGToStreamEmulator/SDFGToStreamEmulator.cpp b/compilers/concrete-compiler/compiler/lib/Conversion/SDFGToStreamEmulator/SDFGToStreamEmulator.cpp index 925d44f47..33b89bd00 100644 --- a/compilers/concrete-compiler/compiler/lib/Conversion/SDFGToStreamEmulator/SDFGToStreamEmulator.cpp +++ b/compilers/concrete-compiler/compiler/lib/Conversion/SDFGToStreamEmulator/SDFGToStreamEmulator.cpp @@ -403,13 +403,19 @@ struct LowerSDFGPut "SDFG streams only support memrefs and integers."); funcName = stream_emulator_put_uint64; } + // Add data ownership flag - if the put operation takes ownership + // of the memref data, set to 0 by default. + mlir::SmallVector operands(putOp->getOperands()); + operands.push_back(rewriter.create( + putOp.getLoc(), rewriter.getI64IntegerAttr(0))); + if (insertGenericForwardDeclaration(putOp, rewriter, funcName, - putOp->getOperandTypes(), + mlir::ValueRange{operands}.getTypes(), putOp->getResultTypes()) .failed()) return ::mlir::failure(); mlir::SmallVector newOps; - castDynamicTensorOps(putOp, rewriter, putOp->getOperands(), newOps); + castDynamicTensorOps(putOp, rewriter, operands, newOps); rewriter.replaceOpWithNewOp( putOp, funcName, putOp->getResultTypes(), newOps); return ::mlir::success(); diff --git a/compilers/concrete-compiler/compiler/lib/Conversion/SimulateTFHE/SimulateTFHE.cpp b/compilers/concrete-compiler/compiler/lib/Conversion/SimulateTFHE/SimulateTFHE.cpp index 8d86fd18d..b17332de1 100644 --- a/compilers/concrete-compiler/compiler/lib/Conversion/SimulateTFHE/SimulateTFHE.cpp +++ b/compilers/concrete-compiler/compiler/lib/Conversion/SimulateTFHE/SimulateTFHE.cpp @@ -3,6 +3,7 @@ // https://github.com/zama-ai/concrete/blob/main/LICENSE.txt // for license information. +#include "concretelang/Dialect/Tracing/IR/TracingOps.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" @@ -686,6 +687,37 @@ struct ZeroTensorOpPattern }; }; +struct TraceCiphertextOpPattern + : public mlir::OpConversionPattern { + TraceCiphertextOpPattern(mlir::MLIRContext *context, + mlir::TypeConverter &typeConverter) + : mlir::OpConversionPattern( + typeConverter, context, + mlir::concretelang::DEFAULT_PATTERN_BENEFIT) {} + + ::mlir::LogicalResult + matchAndRewrite(Tracing::TraceCiphertextOp traceCiphertextOp, + Tracing::TraceCiphertextOp::Adaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const override { + Tracing::TracePlaintextOp ptOp = + rewriter.replaceOpWithNewOp( + traceCiphertextOp, mlir::TypeRange{}, adaptor.getCiphertext()); + + if (auto msg = traceCiphertextOp.getMsg()) + ptOp.setMsg(msg); + + if (auto nmsb = traceCiphertextOp.getNmsb()) + ptOp.setNmsb(nmsb); + + auto inputWidth = + ptOp.getPlaintext().getType().cast().getWidth(); + + ptOp->setAttr("input_width", rewriter.getI64IntegerAttr(inputWidth)); + + return ::mlir::success(); + }; +}; + struct SimulateTFHEPass : public SimulateTFHEBase { bool enableOverflowDetection; SimulateTFHEPass(bool enableOverflowDetection) @@ -704,7 +736,8 @@ void SimulateTFHEPass::runOnOperation() { target.addLegalOp(); + mlir::LLVM::AddressOfOp, mlir::LLVM::GEPOp, + Tracing::TracePlaintextOp>(); // Make sure that no ops from `TFHE` remain after the lowering target.addIllegalDialect(); @@ -742,11 +775,11 @@ void SimulateTFHEPass::runOnOperation() { mlir::tensor::InsertOp, mlir::tensor::InsertSliceOp, mlir::tensor::ParallelInsertSliceOp, mlir::tensor::FromElementsOp, mlir::tensor::ExpandShapeOp, mlir::tensor::CollapseShapeOp, - mlir::bufferization::AllocTensorOp, mlir::tensor::EmptyOp>( - [&](mlir::Operation *op) { - return converter.isLegal(op->getResultTypes()) && - converter.isLegal(op->getOperandTypes()); - }); + mlir::bufferization::AllocTensorOp, mlir::tensor::EmptyOp, + Tracing::TraceCiphertextOp>([&](mlir::Operation *op) { + return converter.isLegal(op->getResultTypes()) && + converter.isLegal(op->getOperandTypes()); + }); // Make sure that no ops `linalg.generic` that have illegal types target .addDynamicallyLegalOp( @@ -778,8 +811,8 @@ void SimulateTFHEPass::runOnOperation() { patterns.insert(&getContext(), - converter); + EncodePlaintextWithCrtOpPattern, NegOpPattern, + TraceCiphertextOpPattern>(&getContext(), converter); patterns.insert(&getContext()); // if overflow detection is enable, then rewrite to CAPI functions that diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp b/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp index 82313a5af..ca3cce240 100644 --- a/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp +++ b/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp @@ -6,11 +6,13 @@ #include #include #include +#include #include #include #include "boost/outcome.h" +#include "concretelang/Dialect/FHE/Interfaces/FHEInterfaces.h" #include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" @@ -34,6 +36,9 @@ #define GEN_PASS_CLASSES #include "concretelang/Dialect/FHE/Analysis/ConcreteOptimizer.h.inc" +using concrete_optimizer::utils::location_from_string; +using concrete_optimizer::utils::location_unknown; + namespace mlir { namespace concretelang { namespace optimizer { @@ -110,7 +115,9 @@ struct FunctionToDag { } auto precision = fhe::utils::getEintPrecision(arg); auto shape = getShape(arg); - auto opI = dagBuilder.add_input(precision, slice(shape)); + auto opI = + dagBuilder.add_input(precision, slice(shape), + *loc_to_location(arg.getParentRegion()->getLoc())); index[arg] = opI; return opI; } @@ -190,6 +197,11 @@ struct FunctionToDag { } else if (auto matmulEintEint = asMatmulEintEint(op)) { addEncMatMulTensor(matmulEintEint, encrypted_inputs, precision); return; + } else if (auto zero = asZeroNoise(op)) { + // special case as zero are rewritten in several optimizer nodes + index = addZeroNoise(zero); + } else if (auto additive = asAdditiveNoise(op)) { + index = addAdditiveNoise(additive, encrypted_inputs); } else { index = addLevelledOp(op, encrypted_inputs); } @@ -201,6 +213,7 @@ struct FunctionToDag { void addLut(mlir::Operation &op, FHE::FheIntegerInterface inputType, Inputs &encrypted_inputs, int precision) { auto val = op.getResult(0); + auto loc = loc_to_location(op.getLoc()); assert(encrypted_inputs.size() == 1); // No need to distinguish different lut kind until we do approximate // paradigm on outputs @@ -209,13 +222,14 @@ struct FunctionToDag { std::vector operatorIndexes; if (inputType.isSigned()) { // std::vector weights_vector{1}; - auto addIndex = dagBuilder.add_dot( - slice(encrypted_inputs), concrete_optimizer::weights::number(1)); + auto addIndex = + dagBuilder.add_dot(slice(encrypted_inputs), + concrete_optimizer::weights::number(1), *loc); encrypted_input = addIndex; operatorIndexes.push_back(addIndex.index); } - auto lutIndex = - dagBuilder.add_lut(encrypted_input, slice(unknowFunction), precision); + auto lutIndex = dagBuilder.add_lut(encrypted_input, slice(unknowFunction), + precision, *loc); operatorIndexes.push_back(lutIndex.index); mlir::Builder builder(op.getContext()); if (setOptimizerID) @@ -229,7 +243,8 @@ struct FunctionToDag { // No need to distinguish different lut kind until we do approximate // paradigm on outputs auto encrypted_input = encrypted_inputs[0]; - index[val] = dagBuilder.add_round_op(encrypted_input, rounded_precision); + index[val] = dagBuilder.add_round_op(encrypted_input, rounded_precision, + *loc_to_location(val.getLoc())); return index[val]; } @@ -238,7 +253,8 @@ struct FunctionToDag { int new_precision) { assert(encrypted_inputs.size() == 1); auto encrypted_input = encrypted_inputs[0]; - index[val] = dagBuilder.add_unsafe_cast_op(encrypted_input, new_precision); + index[val] = dagBuilder.add_unsafe_cast_op(encrypted_input, new_precision, + *loc_to_location(val.getLoc())); return index[val]; } @@ -247,8 +263,8 @@ struct FunctionToDag { std::vector &weights_vector) { assert(encrypted_inputs.size() == 1); auto weights = concrete_optimizer::weights::vector(slice(weights_vector)); - index[val] = - dagBuilder.add_dot(slice(encrypted_inputs), std::move(weights)); + index[val] = dagBuilder.add_dot(slice(encrypted_inputs), std::move(weights), + *loc_to_location(val.getLoc())); return index[val]; } @@ -256,32 +272,110 @@ struct FunctionToDag { std::string loc; llvm::raw_string_ostream loc_stream(loc); location.print(loc_stream); + loc.erase(0, 4); // erase the loc( prefix + loc.pop_back(); // erase the ) postfix + loc.erase(std::remove(loc.begin(), loc.end(), '"'), + loc.end()); // erase the " characters return loc; } + concrete_optimizer::dag::OperatorIndex + addZeroNoise(concretelang::FHE::ZeroNoise &op) { + auto val = op->getOpResult(0); + auto outShape = getShape(val); + auto loc = loc_to_location(op.getLoc()); + + // Trivial encrypted constants encoding + // There are converted to input + levelledop + auto precision = fhe::utils::getEintPrecision(val); + auto opI = dagBuilder.add_input(precision, slice(outShape), *loc); + auto inputs = Inputs{opI}; + + // Default complexity is negligible + double const fixedCost = NEGLIGIBLE_COMPLEXITY; + double const lweDimCostFactor = NEGLIGIBLE_COMPLEXITY; + auto comment = std::string(op->getName().getStringRef()) + " " + + loc_to_string(op.getLoc()); + auto weights = std::vector{1.}; + index[val] = dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, + fixedCost, slice(weights), + slice(outShape), comment, *loc); + return index[val]; + } + + concrete_optimizer::dag::OperatorIndex + addAdditiveNoise(concretelang::FHE::AdditiveNoise &op, Inputs &inputs) { + auto val = op->getResult(0); + auto out_shape = getShape(val); + // Default complexity is negligible + double fixed_cost = NEGLIGIBLE_COMPLEXITY; + double lwe_dim_cost_factor = NEGLIGIBLE_COMPLEXITY; + auto comment = std::string(op->getName().getStringRef()) + " " + + loc_to_string(op.getLoc()); + auto loc = loc_to_location(op.getLoc()); + auto weights = std::vector(inputs.size(), 1.); + index[val] = dagBuilder.add_levelled_op(slice(inputs), lwe_dim_cost_factor, + fixed_cost, slice(weights), + slice(out_shape), comment, *loc); + return index[val]; + } + + rust::Box + loc_to_location(mlir::Location location) { + return location_from_string(loc_to_string(location)); + } concrete_optimizer::dag::OperatorIndex addLevelledOp(mlir::Operation &op, Inputs &inputs) { auto val = op.getResult(0); auto out_shape = getShape(val); + auto loc = loc_to_location(op.getLoc()); if (inputs.empty()) { // Trivial encrypted constants encoding // There are converted to input + levelledop auto precision = fhe::utils::getEintPrecision(val); - auto opI = dagBuilder.add_input(precision, slice(out_shape)); + auto opI = dagBuilder.add_input(precision, slice(out_shape), *loc); inputs.push_back(opI); } // Default complexity is negligible double fixed_cost = NEGLIGIBLE_COMPLEXITY; double lwe_dim_cost_factor = NEGLIGIBLE_COMPLEXITY; auto smanp_int = op.getAttrOfType("SMANP"); - auto loc = loc_to_string(op.getLoc()); assert(smanp_int && "Missing manp value on a crypto operation"); - // TODO: use APIFloat.sqrt when it's available - double manp = sqrt(smanp_int.getValue().roundToDouble()); - auto comment = std::string(op.getName().getStringRef()) + " " + loc; - index[val] = - dagBuilder.add_levelled_op(slice(inputs), lwe_dim_cost_factor, - fixed_cost, manp, slice(out_shape), comment); + auto comment = std::string(op.getName().getStringRef()) + " " + + loc_to_string(op.getLoc()); + + size_t n_inputs = 0; + double sq_sum = 0; + for (auto input : op.getOperands()) { + if (!fhe::utils::isEncryptedValue(input)) { + continue; + } + n_inputs += 1; + if (input.isa()) { + sq_sum += 1.0; + } else { + auto inpSmanpInt = + input.getDefiningOp()->getAttrOfType("SMANP"); + const double inpSManp = inpSmanpInt.getValue().roundToDouble(); + sq_sum += inpSManp; + } + } + assert(inputs.size() == n_inputs); + double weight; + if (sq_sum == 0) { + // The max input manp is zero, meaning the inputs are all zero tensors + // with no noise. In this case it does not matter the weight since it will + // multiply zero. + weight = 1.; + } else { + double smanp_dbl = smanp_int.getValue().roundToDouble(); + weight = std::max(sqrt(smanp_dbl / sq_sum), 1.0); + assert(!std::isnan(weight)); + } + auto weights = std::vector(n_inputs, weight); + index[val] = dagBuilder.add_levelled_op(slice(inputs), lwe_dim_cost_factor, + fixed_cost, slice(weights), + slice(out_shape), comment, *loc); return index[val]; } @@ -297,17 +391,19 @@ struct FunctionToDag { assert(encrypted_inputs.size() == 1); auto input = lsbOp.getInput(); auto result = lsbOp.getResult(); + auto loc = loc_to_location(lsbOp.getLoc()); auto input_precision = fhe::utils::getEintPrecision(input); auto output_precision = fhe::utils::getEintPrecision(result); auto lsb_shiffted_as_1bit_wop = dagBuilder.add_dot( slice(encrypted_inputs), - concrete_optimizer::weights::number(1 << input_precision)); + concrete_optimizer::weights::number(1 << input_precision), *loc); std::vector unknownFunction; auto overflow_bit_precision = 0; - auto lsb_as_0_bits = dagBuilder.add_unsafe_cast_op( - lsb_shiffted_as_1bit_wop, overflow_bit_precision); // id for rotation + auto lsb_as_0_bits = dagBuilder.add_unsafe_cast_op(lsb_shiffted_as_1bit_wop, + overflow_bit_precision, + *loc); // id for rotation auto lsb_result = dagBuilder.add_lut(lsb_as_0_bits, slice(unknownFunction), - output_precision); + output_precision, *loc); auto lsb_result_corrected = idPlaceholder(lsb_result); index[result] = lsb_result_corrected; @@ -336,46 +432,23 @@ struct FunctionToDag { mlir::Value result = mulOp.getResult(); const std::vector resultShape = getShape(result); - Operation *xOp = mulOp.getLhs().getDefiningOp(); - Operation *yOp = mulOp.getRhs().getDefiningOp(); - const double fixedCost = NEGLIGIBLE_COMPLEXITY; const double lweDimCostFactor = NEGLIGIBLE_COMPLEXITY; - llvm::APInt xSmanp = llvm::APInt{1, 1, false}; - if (xOp != nullptr) { - const auto xSmanpAttr = xOp->getAttrOfType("SMANP"); - assert(xSmanpAttr && "Missing SMANP value on a crypto operation"); - xSmanp = xSmanpAttr.getValue(); - } - - llvm::APInt ySmanp = llvm::APInt{1, 1, false}; - if (yOp != nullptr) { - const auto ySmanpAttr = yOp->getAttrOfType("SMANP"); - assert(ySmanpAttr && "Missing SMANP value on a crypto operation"); - ySmanp = ySmanpAttr.getValue(); - } - - auto loc = loc_to_string(mulOp.getLoc()); - auto comment = std::string(mulOp->getName().getStringRef()) + " " + loc; - - // (x + y) and (x - y) - const double addSubManp = - sqrt(xSmanp.roundToDouble() + ySmanp.roundToDouble()); - - // tlu(v) - const double tluManp = 1; - - // tlu(v1) - tlu(v2) - const double tluSubManp = sqrt(tluManp + tluManp); + auto comment = std::string(mulOp->getName().getStringRef()) + " " + + loc_to_string(mulOp.getLoc()); + auto loc = loc_to_location(mulOp.getLoc()); // for tlus const std::vector unknownFunction; // tlu(x + y) - auto addNode = - dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, fixedCost, - addSubManp, slice(resultShape), comment); + + auto addWeights = std::vector{1, 1}; + auto addNode = dagBuilder.add_levelled_op( + slice(inputs), lweDimCostFactor, fixedCost, slice(addWeights), + slice(resultShape), comment, *loc); + std::optional lhsCorrectionNode; if (isSignedEint(mulOp.getType())) { // If signed mul we need to add the addition node for correction of the @@ -383,31 +456,37 @@ struct FunctionToDag { addNode = dagBuilder.add_dot( slice(std::vector{addNode}), concrete_optimizer::weights::vector( - slice(std::vector{1}))); + slice(std::vector{1})), + *loc); lhsCorrectionNode = addNode; } auto lhsTluNode = - dagBuilder.add_lut(addNode, slice(unknownFunction), precision); + dagBuilder.add_lut(addNode, slice(unknownFunction), precision, *loc); // tlu(x - y) - auto subNode = - dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, fixedCost, - addSubManp, slice(resultShape), comment); + auto subWeights = std::vector{1, 1}; + auto subNode = dagBuilder.add_levelled_op( + slice(inputs), lweDimCostFactor, fixedCost, slice(subWeights), + slice(resultShape), comment, *loc); + // This is a signed tlu so we need to also add the addition for correction // signed tlu auto rhsCorrectionNode = dagBuilder.add_dot( slice(std::vector{subNode}), concrete_optimizer::weights::vector( - slice(std::vector{1}))); - auto rhsTluNode = dagBuilder.add_lut(rhsCorrectionNode, - slice(unknownFunction), precision); + slice(std::vector{1})), + *loc); + auto rhsTluNode = dagBuilder.add_lut( + rhsCorrectionNode, slice(unknownFunction), precision, *loc); // tlu(x + y) - tlu(x - y) + auto resultWeights = std::vector{1, 1}; const std::vector subInputs = { lhsTluNode, rhsTluNode}; auto resultNode = dagBuilder.add_levelled_op( - slice(subInputs), lweDimCostFactor, fixedCost, tluSubManp, - slice(resultShape), comment); + slice(subInputs), lweDimCostFactor, fixedCost, slice(resultWeights), + slice(resultShape), comment, *loc); + index[result] = resultNode; mlir::Builder builder(mulOp.getContext()); @@ -430,6 +509,7 @@ struct FunctionToDag { addTensorInnerProductEncEnc(InnerProductOp &innerProductOp, Inputs &inputs, int precision) { mlir::Value result = innerProductOp.getResult(); + auto loc = loc_to_location(innerProductOp.getLoc()); const std::vector resultShape = getShape(result); // We assume a first tensorized matmul step @@ -512,34 +592,11 @@ struct FunctionToDag { // 1. (x + y) and (x - y) -> supposing broadcasting is used // to tensorize this operation - - Operation *xOp = innerProductOp.getLhs().getDefiningOp(); - Operation *yOp = innerProductOp.getRhs().getDefiningOp(); - const double fixedCost = NEGLIGIBLE_COMPLEXITY; const double lweDimCostFactor = NEGLIGIBLE_COMPLEXITY; - llvm::APInt xSmanp = llvm::APInt{1, 1, false}; - if (xOp != nullptr) { - const auto xSmanpAttr = xOp->getAttrOfType("SMANP"); - assert(xSmanpAttr && "Missing SMANP value on a crypto operation"); - xSmanp = xSmanpAttr.getValue(); - } - - llvm::APInt ySmanp = llvm::APInt{1, 1, false}; - if (yOp != nullptr) { - const auto ySmanpAttr = yOp->getAttrOfType("SMANP"); - assert(ySmanpAttr && "Missing SMANP value on a crypto operation"); - ySmanp = ySmanpAttr.getValue(); - } - - auto loc = loc_to_string(innerProductOp.getLoc()); - auto comment = - std::string(innerProductOp->getName().getStringRef()) + " " + loc; - - // (x + y) and (x - y) - const double addSubManp = - sqrt(xSmanp.roundToDouble() + ySmanp.roundToDouble()); + auto comment = std::string(innerProductOp->getName().getStringRef()) + " " + + loc_to_string(innerProductOp.getLoc()); // tlu(v) const double tluManp = 1; @@ -551,9 +608,11 @@ struct FunctionToDag { const std::vector unknownFunction; // tlu(x + y) - auto addNode = - dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, fixedCost, - addSubManp, slice(pairMatrixShape), comment); + auto addWeights = std::vector{1, 1}; + auto addNode = dagBuilder.add_levelled_op( + slice(inputs), lweDimCostFactor, fixedCost, slice(addWeights), + slice(pairMatrixShape), comment, *loc); + std::optional lhsCorrectionNode; if (isSignedEint(innerProductOp.getType())) { // If signed mul we need to add the addition node for correction of the @@ -561,31 +620,36 @@ struct FunctionToDag { addNode = dagBuilder.add_dot( slice(std::vector{addNode}), concrete_optimizer::weights::vector( - slice(std::vector{1}))); + slice(std::vector{1})), + *loc); lhsCorrectionNode = addNode; } auto lhsTluNode = - dagBuilder.add_lut(addNode, slice(unknownFunction), precision); + dagBuilder.add_lut(addNode, slice(unknownFunction), precision, *loc); // tlu(x - y) - auto subNode = - dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, fixedCost, - addSubManp, slice(pairMatrixShape), comment); + auto subWeights = std::vector{1, 1}; + auto subNode = dagBuilder.add_levelled_op( + slice(inputs), lweDimCostFactor, fixedCost, slice(subWeights), + slice(pairMatrixShape), comment, *loc); + // This is a signed tlu so we need to also add the addition for correction // signed tlu auto rhsCorrectionNode = dagBuilder.add_dot( slice(std::vector{subNode}), concrete_optimizer::weights::vector( - slice(std::vector{1}))); - auto rhsTluNode = dagBuilder.add_lut(rhsCorrectionNode, - slice(unknownFunction), precision); + slice(std::vector{1})), + *loc); + auto rhsTluNode = dagBuilder.add_lut( + rhsCorrectionNode, slice(unknownFunction), precision, *loc); // tlu(x + y) - tlu(x - y) + auto resultWeights = std::vector{1, 1}; const std::vector subInputs = { lhsTluNode, rhsTluNode}; auto resultNode = dagBuilder.add_levelled_op( - slice(subInputs), lweDimCostFactor, fixedCost, tluSubManp, - slice(pairMatrixShape), comment); + slice(subInputs), lweDimCostFactor, fixedCost, slice(resultWeights), + slice(pairMatrixShape), comment, *loc); // 3. Sum(tlu(x + y) - tlu(x - y)) // Create a leveled op that simulates concatenation. It takes @@ -606,9 +670,10 @@ struct FunctionToDag { // TODO: use APIFloat.sqrt when it's available double manp = sqrt(smanp_int.getValue().roundToDouble()); + auto weights = std::vector(sumOperands.size(), manp / tluSubManp); index[result] = dagBuilder.add_levelled_op( - slice(sumOperands), lwe_dim_cost_factor, fixed_cost, manp, - slice(resultShape), comment); + slice(sumOperands), lwe_dim_cost_factor, fixed_cost, slice(weights), + slice(resultShape), comment, *loc); // Create the TFHE.OId attributes // The first elements of the vector are nodes for the encrypted @@ -647,49 +712,31 @@ struct FunctionToDag { void addMax(FHE::MaxEintOp &maxOp, Inputs &inputs, int precision) { mlir::Value result = maxOp.getResult(); + auto loc = loc_to_location(maxOp.getLoc()); const std::vector resultShape = getShape(result); - Operation *xOp = maxOp.getX().getDefiningOp(); - Operation *yOp = maxOp.getY().getDefiningOp(); - const double fixedCost = NEGLIGIBLE_COMPLEXITY; const double lweDimCostFactor = NEGLIGIBLE_COMPLEXITY; - llvm::APInt xSmanp = llvm::APInt{1, 1, false}; - if (xOp != nullptr) { - const auto xSmanpAttr = xOp->getAttrOfType("SMANP"); - assert(xSmanpAttr && "Missing SMANP value on a crypto operation"); - xSmanp = xSmanpAttr.getValue(); - } + auto comment = std::string(maxOp->getName().getStringRef()) + " " + + loc_to_string(maxOp.getLoc()); - llvm::APInt ySmanp = llvm::APInt{1, 1, false}; - if (yOp != nullptr) { - const auto ySmanpAttr = yOp->getAttrOfType("SMANP"); - assert(ySmanpAttr && "Missing SMANP value on a crypto operation"); - ySmanp = ySmanpAttr.getValue(); - } + auto subWeights = std::vector{1, 1}; + auto subNode = dagBuilder.add_levelled_op( + slice(inputs), lweDimCostFactor, fixedCost, slice(subWeights), + slice(resultShape), comment, *loc); - const double subManp = - sqrt(xSmanp.roundToDouble() + ySmanp.roundToDouble()); - - auto loc = loc_to_string(maxOp.getLoc()); - auto comment = std::string(maxOp->getName().getStringRef()) + " " + loc; - - auto subNode = - dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, fixedCost, - subManp, slice(resultShape), comment); - - const double tluNodeManp = 1; const std::vector unknownFunction; auto tluNode = - dagBuilder.add_lut(subNode, slice(unknownFunction), precision); + dagBuilder.add_lut(subNode, slice(unknownFunction), precision, *loc); - const double addManp = sqrt(tluNodeManp + ySmanp.roundToDouble()); const std::vector addInputs = { tluNode, inputs[1]}; + auto addWeights = std::vector{1, 1}; auto resultNode = dagBuilder.add_levelled_op( - slice(addInputs), lweDimCostFactor, fixedCost, addManp, - slice(resultShape), comment); + slice(addInputs), lweDimCostFactor, fixedCost, slice(addWeights), + slice(resultShape), comment, *loc); + index[result] = resultNode; // Set attribute on the MLIR node @@ -705,6 +752,7 @@ struct FunctionToDag { int precision) { mlir::Value result = maxpool2dOp.getResult(); const std::vector resultShape = getShape(result); + auto loc = loc_to_location(maxpool2dOp.getLoc()); // all TLUs are flattened into a dimension // to create a single TLU node in optimizer dag @@ -732,25 +780,29 @@ struct FunctionToDag { const double subManp = sqrt(2 * inputSmanp.roundToDouble() + 1); - auto loc = loc_to_string(maxpool2dOp.getLoc()); - auto comment = - std::string(maxpool2dOp->getName().getStringRef()) + " " + loc; + auto comment = std::string(maxpool2dOp->getName().getStringRef()) + " " + + loc_to_string(maxpool2dOp.getLoc()); - auto subNode = - dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, fixedCost, - subManp, slice(fakeShape), comment); + auto subWeights = std::vector( + inputs.size(), subManp / sqrt(inputSmanp.roundToDouble())); + auto subNode = dagBuilder.add_levelled_op(slice(inputs), lweDimCostFactor, + fixedCost, slice(subWeights), + slice(fakeShape), comment, *loc); const std::vector unknownFunction; auto tluNode = - dagBuilder.add_lut(subNode, slice(unknownFunction), precision); + dagBuilder.add_lut(subNode, slice(unknownFunction), precision, *loc); const double addManp = sqrt(inputSmanp.roundToDouble() + 1); const std::vector addInputs = { tluNode, inputs[0]}; + auto resultWeights = std::vector( + addInputs.size(), addManp / sqrt(inputSmanp.roundToDouble())); auto resultNode = dagBuilder.add_levelled_op( - slice(addInputs), lweDimCostFactor, fixedCost, addManp, - slice(resultShape), comment); + slice(addInputs), lweDimCostFactor, fixedCost, slice(resultWeights), + slice(resultShape), comment, *loc); + index[result] = resultNode; // Set attribute on the MLIR node mlir::Builder builder(maxpool2dOp.getContext()); @@ -771,7 +823,8 @@ struct FunctionToDag { idPlaceholder(concrete_optimizer::dag::OperatorIndex input) { std::vector inputs = {input}; return dagBuilder.add_dot(slice(inputs), - concrete_optimizer::weights::number(1)); + concrete_optimizer::weights::number(1), + *location_unknown()); } Inputs encryptedInputs(mlir::Operation &op) { @@ -852,6 +905,14 @@ struct FunctionToDag { return llvm::dyn_cast(op); } + mlir::concretelang::FHE::ZeroNoise asZeroNoise(mlir::Operation &op) { + return llvm::dyn_cast(op); + } + + mlir::concretelang::FHE::AdditiveNoise asAdditiveNoise(mlir::Operation &op) { + return llvm::dyn_cast(op); + } + mlir::concretelang::FHE::MaxEintOp asMax(mlir::Operation &op) { return llvm::dyn_cast(op); } diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/MANP.cpp b/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/MANP.cpp index 5cd15adae..faaaf51f8 100644 --- a/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/MANP.cpp +++ b/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/MANP.cpp @@ -794,14 +794,12 @@ public: std::optional norm2SqEquivFromOp(Operation *op, ArrayRef operands) { std::optional norm2SqEquiv; - if (auto cstNoiseOp = - llvm::dyn_cast(op)) { - if (llvm::isa(op)) { - norm2SqEquiv = llvm::APInt{1, 0, false}; - } else { - norm2SqEquiv = llvm::APInt{1, 1, false}; - } + if (auto zeroNoiseOp = + llvm::dyn_cast(op)) { + norm2SqEquiv = llvm::APInt{1, 0, false}; + } else if (auto cstNoiseOp = + llvm::dyn_cast(op)) { + norm2SqEquiv = llvm::APInt{1, 1, false}; } else if (llvm::isa(op) || llvm::isa(op)) { norm2SqEquiv = getNoOpSqMANP(operands); diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/RT/Analysis/LowerDataflowTasksToRT.cpp b/compilers/concrete-compiler/compiler/lib/Dialect/RT/Analysis/LowerDataflowTasksToRT.cpp index 0ebc6aefb..17bdd1fd9 100644 --- a/compilers/concrete-compiler/compiler/lib/Dialect/RT/Analysis/LowerDataflowTasksToRT.cpp +++ b/compilers/concrete-compiler/compiler/lib/Dialect/RT/Analysis/LowerDataflowTasksToRT.cpp @@ -306,19 +306,6 @@ static void lowerDataflowTaskOp(RT::DataflowTaskOp DFTOp, DFTOp.erase(); } -static void registerWorkFunction(mlir::func::FuncOp parentFunc, - mlir::func::FuncOp workFunction) { - OpBuilder builder(parentFunc.getBody()); - builder.setInsertionPointToStart(&parentFunc.getBody().front()); - - auto fnptr = builder.create( - parentFunc.getLoc(), workFunction.getFunctionType(), - SymbolRefAttr::get(builder.getContext(), workFunction.getName())); - - builder.create(parentFunc.getLoc(), - fnptr.getResult()); -} - static func::FuncOp getCalledFunction(CallOpInterface callOp) { SymbolRefAttr sym = callOp.getCallableForCallee().dyn_cast(); if (!sym) @@ -333,8 +320,6 @@ struct LowerDataflowTasksPass void runOnOperation() override { auto module = getOperation(); - SmallVector workFunctions; - SmallVector entryPoints; module.walk([&](mlir::func::FuncOp func) { static int wfn_id = 0; @@ -357,58 +342,12 @@ struct LowerDataflowTasksPass outliningMap.push_back( std::pair(op, outlinedFunc)); symbolTable.insert(outlinedFunc); - workFunctions.push_back(outlinedFunc); return WalkResult::advance(); }); // Lower the DF task ops to RT dialect ops. for (auto mapping : outliningMap) lowerDataflowTaskOp(mapping.first, mapping.second); - - // Gather all entry points (assuming no recursive calls to entry points) - // Main is always an entry-point - otherwise check if this - // function is called within the module. TODO: we assume no - // recursion. - if (func.getName() == "main") - entryPoints.push_back(func); - else { - bool found = false; - module.walk([&](mlir::func::CallOp op) { - if (getCalledFunction(op) == func) - found = true; - }); - if (!found) - entryPoints.push_back(func); - } }); - - for (auto entryPoint : entryPoints) { - // If this is a JIT invocation and we're not on the root node, - // we do not need to do any computation, only register all work - // functions with the runtime system - if (!workFunctions.empty()) { - if (!dfr::_dfr_is_root_node()) { - entryPoint.eraseBody(); - Block *b = new Block; - FunctionType funTy = entryPoint.getFunctionType(); - SmallVector locations(funTy.getInputs().size(), - entryPoint.getLoc()); - b->addArguments(funTy.getInputs(), locations); - entryPoint.getBody().push_front(b); - for (int i = funTy.getNumInputs() - 1; i >= 0; --i) - entryPoint.eraseArgument(i); - for (int i = funTy.getNumResults() - 1; i >= 0; --i) - entryPoint.eraseResult(i); - OpBuilder builder(entryPoint.getBody()); - builder.setInsertionPointToEnd(&entryPoint.getBody().front()); - builder.create(entryPoint.getLoc()); - } - } - - // Generate code to register all work-functions with the - // runtime. - for (auto wf : workFunctions) - registerWorkFunction(entryPoint, wf); - } } LowerDataflowTasksPass(bool debug) : debug(debug){}; @@ -428,29 +367,27 @@ struct StartStopPass : public StartStopBase { void runOnOperation() override { auto module = getOperation(); - int useDFR = 0; SmallVector entryPoints; + // Gather all entry points in the module. module.walk([&](mlir::func::FuncOp func) { - // Do not add start/stop to work functions - but if any are - // present, then we need to activate the runtime - if (func->getAttr("_dfr_work_function_attribute")) { - useDFR = 1; - } else { - // Main is always an entry-point - otherwise check if this - // function is called within the module. TODO: we assume no - // recursion. - if (func.getName() == "main") + // Work functions are never allowed to be an entry point. + if (func->getAttr("_dfr_work_function_attribute")) + return; + + // Main is always an entry-point - otherwise check if this + // function is called within the module. TODO: we assume no + // recursion. + if (func.getName() == "main") + entryPoints.push_back(func); + else { + bool found = false; + module.walk([&](mlir::func::CallOp op) { + if (getCalledFunction(op) == func) + found = true; + }); + if (!found) entryPoints.push_back(func); - else { - bool found = false; - module.walk([&](mlir::func::CallOp op) { - if (getCalledFunction(op) == func) - found = true; - }); - if (!found) - entryPoints.push_back(func); - } } }); @@ -459,7 +396,7 @@ struct StartStopPass : public StartStopBase { OpBuilder builder(entryPoint.getBody()); builder.setInsertionPointToStart(&entryPoint.getBody().front()); Value useDFRVal = builder.create( - entryPoint.getLoc(), builder.getI64IntegerAttr(useDFR)); + entryPoint.getLoc(), builder.getI64IntegerAttr(1)); // Check if this entry point uses a context Value ctx = nullptr; diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/CMakeLists.txt b/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/CMakeLists.txt index d8254270c..5d781bfea 100644 --- a/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/CMakeLists.txt +++ b/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/CMakeLists.txt @@ -2,12 +2,14 @@ add_mlir_dialect_library( ConcretelangSDFGTransforms BufferizableOpInterfaceImpl.cpp SDFGConvertibleOpInterfaceImpl.cpp + SDFGBufferOwnership.cpp ADDITIONAL_HEADER_DIRS ${PROJECT_SOURCE_DIR}/include/concretelang/Dialect/Concrete ${PROJECT_SOURCE_DIR}/include/concretelang/Dialect/SDFG DEPENDS mlir-headers SDFGDialect + ConcretelangSDFGTransformsPassIncGen ConcretelangSDFGInterfaces LINK_LIBS PUBLIC diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/SDFGBufferOwnership.cpp b/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/SDFGBufferOwnership.cpp new file mode 100644 index 000000000..f56019aea --- /dev/null +++ b/compilers/concrete-compiler/compiler/lib/Dialect/SDFG/Transforms/SDFGBufferOwnership.cpp @@ -0,0 +1,112 @@ +// Part of the Concrete Compiler Project, under the BSD3 License with Zama +// Exceptions. See +// https://github.com/zama-ai/concrete/blob/main/LICENSE.txt +// for license information. + +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" +#include "mlir/Dialect/Bufferization/Transforms/BufferUtils.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/Dialect/SCF/IR/SCF.h" +#include "mlir/Dialect/Tensor/IR/Tensor.h" +#include "mlir/IR/Dialect.h" +#include "mlir/IR/Dominance.h" +#include "mlir/IR/Operation.h" + +#include "concretelang/Conversion/Tools.h" +#include "concretelang/Dialect/Concrete/IR/ConcreteDialect.h" +#include "concretelang/Dialect/Concrete/IR/ConcreteOps.h" +#include "concretelang/Dialect/SDFG/IR/SDFGDialect.h" +#include "concretelang/Dialect/SDFG/IR/SDFGOps.h" +#include "concretelang/Dialect/SDFG/IR/SDFGTypes.h" +#include "concretelang/Dialect/SDFG/Transforms/BufferizableOpInterfaceImpl.h" +#include "concretelang/Support/CompilerEngine.h" +#include +#include +#include +#include + +using namespace mlir; +using namespace mlir::bufferization; +using namespace mlir::tensor; + +namespace SDFG = mlir::concretelang::SDFG; + +namespace mlir { +namespace concretelang { +namespace { + +static void getAliasedUses(Value val, DenseSet &aliasedUses) { + for (auto &use : val.getUses()) { + aliasedUses.insert(&use); + if (dyn_cast(use.getOwner())) + getAliasedUses(use.getOwner()->getResult(0), aliasedUses); + } +} + +static func::FuncOp getCalledFunction(CallOpInterface callOp) { + SymbolRefAttr sym = callOp.getCallableForCallee().dyn_cast(); + if (!sym) + return nullptr; + return dyn_cast_or_null( + SymbolTable::lookupNearestSymbolFrom(callOp, sym)); +} + +struct SDFGBufferOwnershipPass + : public SDFGBufferOwnershipBase { + + void runOnOperation() override { + auto module = getOperation(); + std::vector deallocOps; + + // Find all SDFG put operations that use a buffer only used for + // this operation, then deallocated. In such cases there is no + // need to copy the data again in the runtime and we can take + // ownership of the buffer instead, removing the deallocation and + // allowing the runtime to deallocate when appropriate. + module.walk([&](mlir::memref::DeallocOp op) { + DominanceInfo domInfo(op); + Value alloc = op.getOperand(); + DenseSet aliasedUses; + getAliasedUses(alloc, aliasedUses); + + // Check if this memref is used in a SDFG put operation + for (auto use : aliasedUses) { + if (isa(use->getOwner())) { + mlir::func::CallOp callOp = cast(use->getOwner()); + mlir::func::FuncOp funcOp = getCalledFunction(callOp); + std::string putName = "stream_emulator_put_memref"; + if (funcOp.getName().str().compare(0, putName.size(), putName) == 0) { + // If the put operation dominates the deallocation, then + // ownership of the data can be transferred to the runtime + // and deallocation can be removed. We mark the ownership + // flag in the PUT operation to notify the runtime that it + // gets ownership. + if (domInfo.properlyDominates(callOp, op)) { + deallocOps.push_back(op); + OpBuilder builder(callOp); + mlir::Value cst1 = builder.create( + callOp.getLoc(), builder.getI64IntegerAttr(1)); + callOp->setOperand(2, cst1); + } + return; + } + } + } + }); + + for (auto dop : deallocOps) { + dop->erase(); + } + } +}; +} // end anonymous namespace + +std::unique_ptr createSDFGBufferOwnershipPass() { + return std::make_unique(); +} + +} // end namespace concretelang +} // end namespace mlir diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/TFHE/Transforms/TFHECircuitSolutionParametrization.cpp b/compilers/concrete-compiler/compiler/lib/Dialect/TFHE/Transforms/TFHECircuitSolutionParametrization.cpp index e97140b9d..4d4c6dd25 100644 --- a/compilers/concrete-compiler/compiler/lib/Dialect/TFHE/Transforms/TFHECircuitSolutionParametrization.cpp +++ b/compilers/concrete-compiler/compiler/lib/Dialect/TFHE/Transforms/TFHECircuitSolutionParametrization.cpp @@ -997,6 +997,9 @@ public: return mlir::failure(); } + if (oldOp->getAttr("_dfr_work_function_attribute")) + newOp->setAttr("_dfr_work_function_attribute", rewriter.getUnitAttr()); + return mlir::success(); } diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/CMakeLists.txt b/compilers/concrete-compiler/compiler/lib/Runtime/CMakeLists.txt index 13d477500..03d0a0556 100644 --- a/compilers/concrete-compiler/compiler/lib/Runtime/CMakeLists.txt +++ b/compilers/concrete-compiler/compiler/lib/Runtime/CMakeLists.txt @@ -1,12 +1,28 @@ add_compile_options(-fsized-deallocation) if(CONCRETELANG_CUDA_SUPPORT) - add_library(ConcretelangRuntime SHARED context.cpp simulation.cpp wrappers.cpp DFRuntime.cpp key_manager.cpp - GPUDFG.cpp) + add_library( + ConcretelangRuntime SHARED + context.cpp + utils.cpp + simulation.cpp + wrappers.cpp + DFRuntime.cpp + key_manager.cpp + GPUDFG.cpp + time_util.cpp) target_link_libraries(ConcretelangRuntime PRIVATE hwloc) else() - add_library(ConcretelangRuntime SHARED context.cpp simulation.cpp wrappers.cpp DFRuntime.cpp key_manager.cpp - StreamEmulator.cpp) + add_library( + ConcretelangRuntime SHARED + context.cpp + utils.cpp + simulation.cpp + wrappers.cpp + DFRuntime.cpp + key_manager.cpp + GPUDFG.cpp + time_util.cpp) endif() add_dependencies(ConcretelangRuntime concrete_cpu concrete_cpu_noise_model concrete-protocol) diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/DFRuntime.cpp b/compilers/concrete-compiler/compiler/lib/Runtime/DFRuntime.cpp index af5dc8089..b89b078a1 100644 --- a/compilers/concrete-compiler/compiler/lib/Runtime/DFRuntime.cpp +++ b/compilers/concrete-compiler/compiler/lib/Runtime/DFRuntime.cpp @@ -36,6 +36,10 @@ static size_t num_nodes = 0; static struct timespec init_timer, broadcast_timer, compute_timer, whole_timer; #endif } // namespace + +void *dl_handle = nullptr; +WorkFunctionRegistry *_dfr_node_level_work_function_registry; + } // namespace dfr } // namespace concretelang } // namespace mlir @@ -99,7 +103,6 @@ void _dfr_create_async_task(wfnptr wfn, void *ctx, size_t num_params, param_types.push_back(va_arg(args, uint64_t)); } va_end(args); - dfr_create_async_task_impl(wfn, ctx, refcounted_futures, param_sizes, param_types, outputs, output_sizes, output_types); } @@ -179,6 +182,7 @@ bool _dfr_is_jit() { return is_jit_p; } bool _dfr_is_root_node() { return is_root_node_p; } bool _dfr_use_omp() { return use_omp_p; } bool _dfr_is_distributed() { return num_nodes > 1; } +void _dfr_register_lib(void *dlh) { dl_handle = dlh; } } // namespace dfr } // namespace concretelang } // namespace mlir @@ -210,8 +214,10 @@ static inline void _dfr_stop_impl() { } static inline void _dfr_start_impl(int argc, char *argv[]) { + CONCRETELANG_ENABLE_TIMING(); BEGIN_TIME(&init_timer); - dl_handle = dlopen(nullptr, RTLD_NOW); + if (dl_handle == nullptr) + dl_handle = dlopen(nullptr, RTLD_NOW); // If OpenMP is to be used, we need to force its initialization // before thread binding occurs. Otherwise OMP threads will be bound @@ -315,7 +321,7 @@ static inline void _dfr_start_impl(int argc, char *argv[]) { is_root_node_p = (hpx::find_here() == hpx::find_root_locality()); num_nodes = hpx::get_num_localities().get(); - new WorkFunctionRegistry(); + _dfr_node_level_work_function_registry = new WorkFunctionRegistry(); char *env = getenv("DFR_LAZY_KEY_TRANSFER"); bool lazy = false; @@ -324,7 +330,7 @@ static inline void _dfr_start_impl(int argc, char *argv[]) { !strncmp(env, "On", 2) || !strncmp(env, "on", 2) || !strncmp(env, "1", 1)) lazy = true; - new RuntimeContextManager(lazy); + _dfr_node_level_runtime_context_manager = new RuntimeContextManager(lazy); _dfr_jit_phase_barrier = new hpx::distributed::barrier( "phase_barrier", num_nodes, hpx::get_locality_id()); @@ -346,6 +352,7 @@ static inline void _dfr_start_impl(int argc, char *argv[]) { JIT invocation). These serve to pause/resume the runtime scheduler and to clean up used resources. */ void _dfr_start(int64_t use_dfr_p, void *ctx) { + CONCRETELANG_ENABLE_TIMING(); BEGIN_TIME(&whole_timer); if (use_dfr_p) { // The first invocation will initialise the runtime. As each call to @@ -365,12 +372,10 @@ void _dfr_start(int64_t use_dfr_p, void *ctx) { if (num_nodes > 1) { BEGIN_TIME(&broadcast_timer); _dfr_node_level_runtime_context_manager->setContext(ctx); - } - if (_dfr_is_root_node()) _dfr_startup_barrier->wait(); - - if (num_nodes > 1 && ctx) { - END_TIME(&broadcast_timer, "Key broadcasting"); + if (ctx) { + END_TIME(&broadcast_timer, "Key broadcasting"); + } } } BEGIN_TIME(&compute_timer); @@ -383,24 +388,29 @@ void _dfr_start(int64_t use_dfr_p, void *ctx) { void _dfr_stop(int64_t use_dfr_p) { if (use_dfr_p) { if (num_nodes > 1) { - // Non-root nodes synchronize here with the root to mark the point - // where the root is free to send work out (only needed in JIT). - if (!_dfr_is_root_node()) - _dfr_startup_barrier->wait(); - // The barrier is only needed to synchronize the different // computation phases when the compute nodes need to generate and // register new work functions in each phase. _dfr_jit_phase_barrier->wait(); - _dfr_node_level_runtime_context_manager->clearContext(); _dfr_node_level_work_function_registry->clearRegistry(); + _dfr_jit_phase_barrier->wait(); } } END_TIME(&compute_timer, "Compute"); END_TIME(&whole_timer, "Total execution"); } +namespace mlir { +namespace concretelang { +namespace dfr { +void _dfr_run_remote_scheduler() { + _dfr_start(1, nullptr); + _dfr_stop(1); +} +} // namespace dfr +} // namespace concretelang +} // namespace mlir void _dfr_try_initialize() { // Initialize and immediately suspend the HPX runtime if not yet done. uint64_t expected = uninitialised; @@ -484,6 +494,8 @@ bool _dfr_is_jit() { return is_jit_p; } bool _dfr_is_root_node() { return true; } bool _dfr_use_omp() { return use_omp_p; } bool _dfr_is_distributed() { return num_nodes > 1; } +void _dfr_run_remote_scheduler() {} +void _dfr_register_lib(void *dlh) {} } // namespace dfr } // namespace concretelang @@ -491,8 +503,8 @@ bool _dfr_is_distributed() { return num_nodes > 1; } using namespace mlir::concretelang::dfr; -void _dfr_start(int64_t use_dfr_p, void *ctx) { BEGIN_TIME(&compute_timer); } -void _dfr_stop(int64_t use_dfr_p) { END_TIME(&compute_timer, "Compute"); } +void _dfr_start(int64_t use_dfr_p, void *ctx) {} +void _dfr_stop(int64_t use_dfr_p) {} void _dfr_terminate() {} #endif diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/GPUDFG.cpp b/compilers/concrete-compiler/compiler/lib/Runtime/GPUDFG.cpp index 3cb3c078c..865ad8304 100644 --- a/compilers/concrete-compiler/compiler/lib/Runtime/GPUDFG.cpp +++ b/compilers/concrete-compiler/compiler/lib/Runtime/GPUDFG.cpp @@ -3,6 +3,7 @@ // https://github.com/zama-ai/concrete/blob/main/LICENSE.txt // for license information. +#ifdef CONCRETELANG_CUDA_SUPPORT #include #include #include @@ -18,15 +19,11 @@ #include #include +#include #include +#include #include -#ifdef CONCRETELANG_CUDA_SUPPORT -#include "bootstrap.h" -#include "device.h" -#include "keyswitch.h" -#include "linear_algebra.h" - using RuntimeContext = mlir::concretelang::RuntimeContext; namespace mlir { @@ -34,6 +31,10 @@ namespace concretelang { namespace gpu_dfg { namespace { +#if CONCRETELANG_TIMING_ENABLED +static struct timespec init_timer, blocking_get_timer, acc1, acc2; +#endif + using MemRef2 = MemRefDescriptor<2>; // When not using all accelerators on the machine, we distribute work @@ -93,6 +94,7 @@ union Context { // across multiple locations. static const int32_t host_location = -1; static const int32_t split_location = -2; +static const int32_t invalid_location = -3; // Similarly dependence chunks are either indexed (which does not // always correlate to the device index on which they are located) or // this dependence is split further. @@ -216,17 +218,12 @@ struct GPU_DFG { polynomial_size, input_lwe_ciphertext_count); } - void free_streams() { - streams.sort(); - streams.unique(); - for (auto s : streams) - delete s; - } inline void *get_gpu_stream(int32_t loc) { if (loc < 0) return nullptr; return gpus[loc].get_gpu_stream(); } + void free_streams(); private: std::list to_free_list; @@ -253,6 +250,7 @@ struct Dependence { int32_t chunk_id; size_t stream_generation; std::vector chunks; + std::vector chunking_schedule; Dependence(int32_t l, MemRef2 hd, void *dd, bool ohr, bool alloc = false, int32_t chunk_id = single_chunk, size_t gen = 0) : location(l), host_data(hd), device_data(dd), onHostReady(ohr), @@ -266,17 +264,41 @@ struct Dependence { // Split a dependence into a number of chunks either to run on // multiple GPUs or execute concurrently on the host. void split_dependence(size_t num_chunks, size_t num_gpu_chunks, - size_t chunk_dim, bool constant) { + size_t chunk_dim, bool constant, + size_t gpu_chunk_factor, GPU_DFG *dfg) { // If this dependence is already split, check that the split // matches the new request if (chunk_id == split_chunks) { - if (num_chunks + num_gpu_chunks != chunks.size()) - warnx("WARNING: requesting to split dependence across different number " - "of chunks (%lu) than it already is split (%lu) which would " - "require remapping. This is not supported.", - num_chunks + num_gpu_chunks, chunks.size()); - assert(num_chunks + num_gpu_chunks == chunks.size()); - return; + if (num_chunks + num_gpu_chunks != chunks.size()) { + // If this is not available on host, then we need to merge on + // host and re-split + if (!onHostReady) { + size_t data_size = 0; + size_t num_samples = 0; + for (auto c : chunks) { + move_chunk_off_device(c->chunk_id, dfg); + data_size += memref_get_data_size(c->host_data); + num_samples += c->host_data.sizes[chunk_dim]; + sdfg_gpu_debug_print_mref("Chunk", c->host_data); + } + host_data = chunks[0]->host_data; + host_data.allocated = host_data.aligned = + (uint64_t *)malloc(data_size); + host_data.sizes[chunk_dim] = num_samples; + size_t pos = 0; + for (auto c : chunks) { + memcpy(((char *)host_data.aligned) + pos, c->host_data.aligned, + memref_get_data_size(c->host_data)); + pos += memref_get_data_size(c->host_data); + } + for (auto c : chunks) + free_chunk_host_data(c->chunk_id, dfg); + onHostReady = true; + hostAllocated = true; + } + } else { + return; + } } if (!chunks.empty()) { for (auto c : chunks) @@ -301,8 +323,8 @@ struct Dependence { return; } size_t chunk_size = - num_samples / (num_chunks + num_gpu_chunks * device_compute_factor); - size_t gpu_chunk_size = chunk_size * device_compute_factor; + num_samples / (num_chunks + num_gpu_chunks * gpu_chunk_factor); + size_t gpu_chunk_size = chunk_size * gpu_chunk_factor; chunk_size = (num_samples - gpu_chunk_size * num_gpu_chunks) / num_chunks; size_t chunk_remainder = (num_samples - gpu_chunk_size * num_gpu_chunks) % num_chunks; @@ -331,62 +353,43 @@ struct Dependence { chunk_id = split_chunks; location = split_location; } - void merge_dependence(GPU_DFG *dfg) { + void finalize_merged_dependence(GPU_DFG *dfg) { assert(!chunks.empty() && "Cannot merge dependence with no chunks"); - size_t data_size = 0; - size_t num_samples = 0; - for (auto c : chunks) { - data_size += memref_get_data_size(c->host_data); - num_samples += c->host_data.sizes[0]; - } - uint64_t *data = (uint64_t *)malloc(data_size); - MemRef2 output = {data, - data, - 0, - {num_samples, chunks.front()->host_data.sizes[1]}, - {chunks.front()->host_data.sizes[1], 1}}; - - std::list custreams_used; - for (auto c : chunks) { - // Write out the piece in the final target dependence - size_t csize = memref_get_data_size(c->host_data); - if (c->onHostReady) { - memcpy(((char *)output.aligned) + output.offset, c->host_data.aligned, - csize); - } else { - assert(c->location > host_location); - cudaStream_t *s = (cudaStream_t *)dfg->get_gpu_stream(c->location); - cuda_memcpy_async_to_cpu(((char *)output.aligned) + output.offset, - c->device_data, csize, s, c->location); - custreams_used.push_back(s); - } - output.offset += csize; - } - output.offset = 0; - for (auto c : chunks) - c->free_data(dfg, true); + assert(host_data.allocated != nullptr); chunks.clear(); - - custreams_used.sort(); - custreams_used.unique(); - for (auto s : custreams_used) - cudaStreamSynchronize(*s); - location = host_location; onHostReady = true; - assert(host_data.allocated == nullptr); - host_data = output; assert(device_data == nullptr); - hostAllocated = true; chunk_id = single_chunk; } + void copy_chunk_off_device(int32_t chunk_id, GPU_DFG *dfg) { + if (chunks[chunk_id]->onHostReady) + return; + chunks[chunk_id]->copy(host_location, dfg, false); + } void move_chunk_off_device(int32_t chunk_id, GPU_DFG *dfg) { - chunks[chunk_id]->copy(host_location, dfg); + copy_chunk_off_device(chunk_id, dfg); + chunks[chunk_id]->location = host_location; + if (chunks[chunk_id]->device_data == nullptr) + return; cuda_drop_async( chunks[chunk_id]->device_data, (cudaStream_t *)dfg->get_gpu_stream(chunks[chunk_id]->location), chunks[chunk_id]->location); - chunks[chunk_id]->location = host_location; + chunks[chunk_id]->device_data = nullptr; + } + void merge_output_off_device(int32_t chunk_id, GPU_DFG *dfg) { + assert(chunks[chunk_id]->location > host_location); + size_t data_offset = 0; + for (int32_t c = 0; c < chunk_id; ++c) + data_offset += + chunking_schedule[c] * host_data.sizes[1] * sizeof(uint64_t); + size_t csize = memref_get_data_size(chunks[chunk_id]->host_data); + cudaStream_t *s = + (cudaStream_t *)dfg->get_gpu_stream(chunks[chunk_id]->location); + cuda_memcpy_async_to_cpu(((char *)host_data.aligned) + data_offset, + chunks[chunk_id]->device_data, csize, s, + chunks[chunk_id]->location); } void free_chunk_host_data(int32_t chunk_id, GPU_DFG *dfg) { assert(chunks[chunk_id]->location == host_location && @@ -397,16 +400,18 @@ struct Dependence { chunks[chunk_id]->onHostReady = false; } void free_chunk_device_data(int32_t chunk_id, GPU_DFG *dfg) { - assert(chunks[chunk_id]->location > host_location && - chunks[chunk_id]->device_data != nullptr); + if (chunks[chunk_id]->device_data == nullptr) + return; cuda_drop_async( chunks[chunk_id]->device_data, (cudaStream_t *)dfg->get_gpu_stream(chunks[chunk_id]->location), chunks[chunk_id]->location); chunks[chunk_id]->device_data = nullptr; + chunks[chunk_id]->location = + (chunks[chunk_id]->onHostReady) ? host_location : invalid_location; } inline void free_data(GPU_DFG *dfg, bool immediate = false) { - if (location >= 0 && device_data != nullptr) { + if (device_data != nullptr) { cuda_drop_async(device_data, (cudaStream_t *)dfg->get_gpu_stream(location), location); } @@ -414,17 +419,19 @@ struct Dependence { // As streams are not synchronized aside from the GET operation, // we cannot free host-side data until after the synchronization // point as it could still be used by an asynchronous operation. - if (immediate) + if (immediate) { free(host_data.allocated); - else + host_data.allocated = nullptr; + } else { dfg->register_stream_order_dependent_allocation(host_data.allocated); + } } for (auto c : chunks) c->free_data(dfg, immediate); chunks.clear(); delete (this); } - inline void copy(int32_t loc, GPU_DFG *dfg) { + inline void copy(int32_t loc, GPU_DFG *dfg, bool synchronize = true) { size_t data_size = memref_get_data_size(host_data); if (loc == location) return; @@ -438,7 +445,8 @@ struct Dependence { cudaStream_t *s = (cudaStream_t *)dfg->get_gpu_stream(location); cuda_memcpy_async_to_cpu(host_data.aligned, device_data, data_size, s, location); - cudaStreamSynchronize(*s); + if (synchronize) + cudaStreamSynchronize(*s); onHostReady = true; } else { assert(onHostReady && @@ -508,6 +516,7 @@ struct Stream { bool ct_stream; bool pt_stream; size_t generation; + std::atomic uses = {0}; const char *name; Stream(stream_type t, const char *sname = nullptr) : dep(nullptr), type(t), producer(nullptr), dfg(nullptr), @@ -524,7 +533,7 @@ struct Stream { } ~Stream() { if (dep != nullptr) - dep->free_data(dfg); + dep->free_data(dfg, true); if (producer != nullptr) delete producer; } @@ -547,6 +556,7 @@ struct Stream { dep = d; } dep->stream_generation = generation; + uses = 0; } // For a given dependence, traverse the DFG backwards to extract the lattice // of kernels required to execute to produce this data @@ -579,18 +589,22 @@ struct Stream { size_t subgraph_bootstraps = 0; for (auto p : queue) { is_batched_subgraph |= p->batched_process; - subgraph_bootstraps += - (p->fun == memref_bootstrap_lwe_u64_process) ? 1 : 0; + subgraph_bootstraps += (p->fun == memref_bootstrap_lwe_u64_process || + p->fun == memref_keyswitch_lwe_u64_process) + ? 1 + : 0; } // If this subgraph is not batched, then use this DFG's allocated // GPU to offload to. If this does not bootstrap, just execute on // the host. if (!is_batched_subgraph) { - for (auto p : queue) { - schedule_kernel( - p, (subgraph_bootstraps > 0) ? dfg->gpu_idx : host_location, - single_chunk, nullptr); - } + int32_t loc = (subgraph_bootstraps > 0) ? dfg->gpu_idx : host_location; + for (auto p : queue) + schedule_kernel(p, loc, single_chunk, + (p == producer) ? out.aligned : nullptr); + if (loc != host_location) + dep->copy(host_location, dfg, true); + dep->onHostReady = true; return; } @@ -645,8 +659,6 @@ struct Stream { num_real_inputs++; if (s->dep->host_data.sizes[0] > num_samples) num_samples = s->dep->host_data.sizes[0]; - if (!s->dep->chunks.empty()) - num_samples = s->dep->chunks.size(); } else { mem_per_sample += sizeof(uint64_t); } @@ -657,7 +669,7 @@ struct Stream { (num_real_inputs ? num_real_inputs : 1); size_t num_chunks = 1; size_t num_gpu_chunks = 0; - int32_t num_devices_to_use = 0; + size_t gpu_chunk_factor = device_compute_factor; // If the subgraph does not have sufficient computational // intensity (which we approximate by whether it bootstraps), then // we assume (TODO: confirm with profiling) that it is not @@ -681,16 +693,20 @@ struct Stream { (available_mem - const_mem_per_sample) / ((mem_per_sample ? mem_per_sample : 1) * gpu_memory_inflation_factor); - if (num_samples < num_cores + device_compute_factor * num_devices) { - num_devices_to_use = 0; + while (gpu_chunk_factor > 4) { + if (num_samples < num_cores + gpu_chunk_factor * num_devices) + gpu_chunk_factor >>= 1; + else + break; + } + + if (num_samples < num_cores + gpu_chunk_factor * num_devices) { num_chunks = std::min(num_cores, num_samples); } else { - num_devices_to_use = num_devices; - size_t compute_resources = - num_cores + num_devices * device_compute_factor; + size_t compute_resources = num_cores + num_devices * gpu_chunk_factor; size_t gpu_chunk_size = std::ceil((double)num_samples / compute_resources) * - device_compute_factor; + gpu_chunk_factor; size_t scale_factor = std::ceil((double)gpu_chunk_size / max_samples_per_chunk); num_chunks = num_cores * scale_factor; @@ -702,7 +718,8 @@ struct Stream { for (auto i : inputs) i->dep->split_dependence(num_chunks, num_gpu_chunks, - (i->ct_stream) ? 0 : 1, i->const_stream); + (i->ct_stream) ? 0 : 1, i->const_stream, + gpu_chunk_factor, dfg); for (auto iv : intermediate_values) { if (iv->need_new_gen()) { iv->put(new Dependence(split_location, @@ -712,21 +729,67 @@ struct Stream { } } for (auto o : outputs) { - if (o->need_new_gen()) { - o->put(new Dependence(split_location, - {nullptr, nullptr, 0, {0, 0}, {0, 0}}, nullptr, - false, false, split_chunks)); - o->dep->chunks.resize(num_chunks + num_gpu_chunks, nullptr); + if (!o->need_new_gen()) + continue; + std::function get_output_size = + [&](Stream *s) -> uint64_t { + uint64_t res = 0; + // If this stream is not produced within SDFG, we could use + // the input size. For now return 0. + if (s->producer == nullptr) + return 0; + // If the producer process has an output size registered, + // return it. + if (s->producer->output_size.val > 0) + return s->producer->output_size.val; + // Finally we look for sizes from inputs to the producer if + // we don't have it registered as poly size does not change + // in operators that do not register size. + for (auto p : s->producer->input_streams) { + uint64_t p_size = get_output_size(p); + if (p_size == 0) + continue; + if (res == 0) + res = get_output_size(p); + else + assert(res == p_size); + } + return res; + }; + MemRef2 out_mref; + bool allocated = false; + if (o == this) { + out_mref = out; + } else { + uint64_t output_size = get_output_size(o); + out_mref = {0, 0, 0, {num_samples, output_size}, {output_size, 1}}; + size_t data_size = memref_get_data_size(out_mref); + out_mref.allocated = out_mref.aligned = (uint64_t *)malloc(data_size); + allocated = true; + } + + o->put(new Dependence(split_location, out_mref, nullptr, false, allocated, + split_chunks)); + o->dep->chunks.resize(num_chunks + num_gpu_chunks, nullptr); + } + for (auto o : outputs) { + o->dep->chunking_schedule.clear(); + for (auto i : inputs) { + size_t cdim = (i->ct_stream) ? 0 : 1; + if (i->dep->host_data.sizes[cdim] == num_samples) { + for (auto c : i->dep->chunks) + o->dep->chunking_schedule.push_back(c->host_data.sizes[cdim]); + break; + } } } - // Execute graph std::list workers; std::list gpu_schedulers; std::vector> gpu_chunk_list; gpu_chunk_list.resize(num_devices); int32_t dev = 0; - for (size_t c = 0; c < num_chunks + num_gpu_chunks; ++c) { + for (int c = num_chunks + num_gpu_chunks - 1; c >= 0; --c) { if (!subgraph_bootstraps) { workers.push_back(std::thread( [&](std::list queue, size_t c, int32_t host_location) { @@ -742,7 +805,21 @@ struct Stream { workers.push_back(std::thread( [&](std::list queue, size_t c, int32_t host_location) { for (auto p : queue) { - schedule_kernel(p, host_location, c, nullptr); + Stream *os = p->output_streams[0]; + auto it = std::find(outputs.begin(), outputs.end(), os); + if (it == outputs.end()) { + schedule_kernel(p, host_location, c, nullptr); + } else { + size_t data_offset = 0; + for (int32_t ch = 0; ch < c; ++ch) + data_offset += + outputs.front()->dep->chunking_schedule[ch] * + os->dep->host_data.sizes[1] * sizeof(uint64_t); + schedule_kernel( + p, host_location, c, + (uint64_t *)(((char *)os->dep->host_data.aligned) + + data_offset)); + } } for (auto iv : intermediate_values) if (iv->consumers.size() == 1) @@ -765,15 +842,35 @@ struct Stream { assert(status == cudaSuccess); cudaMemGetInfo(&gpu_free_mem, &gpu_total_mem); assert(status == cudaSuccess); - for (auto p : queue) + for (auto p : queue) { schedule_kernel(p, dev, c, nullptr); + for (auto out_str : p->output_streams) { + // For all output streams, if this is an output, + // schedule copy out of the data produced by this + // process. + if (auto it = + std::find(outputs.begin(), outputs.end(), out_str); + it != outputs.end()) { + out_str->dep->merge_output_off_device(c, dfg); + continue; + } + // If this is not an output, but some process is not + // part of this subgraph, we need to copy the data + // out. + for (auto cons_proc : out_str->consumers) + if (auto it = + std::find(queue.begin(), queue.end(), cons_proc); + it == queue.end()) + out_str->dep->copy_chunk_off_device(c, dfg); + } + } + for (auto i : inputs) + if (++i->uses == i->consumers.size()) + i->dep->free_chunk_device_data(c, dfg); for (auto iv : intermediate_values) - if (iv->consumers.size() > 1) - iv->dep->move_chunk_off_device(c, dfg); - else - iv->dep->free_chunk_device_data(c, dfg); + iv->dep->free_chunk_device_data(c, dfg); for (auto o : outputs) - o->dep->move_chunk_off_device(c, dfg); + o->dep->free_chunk_device_data(c, dfg); cudaStreamSynchronize(*(cudaStream_t *)dfg->get_gpu_stream(dev)); } }, @@ -786,65 +883,43 @@ struct Stream { gs.join(); gpu_schedulers.clear(); // Build output out of the separate chunks processed - for (auto o : outputs) { - assert(o->batched_stream && o->ct_stream && - "Only operations with ciphertext output supported."); - o->dep->merge_dependence(dfg); - } + for (auto o : outputs) + o->dep->finalize_merged_dependence(dfg); + for (dev = 0; dev < num_devices; ++dev) + cudaStreamSynchronize(*(cudaStream_t *)dfg->get_gpu_stream(dev)); // We will assume that only one subgraph is being processed per // DFG at a time, so we can safely free these here. dfg->free_stream_order_dependent_data(); return; } - Dependence *get_on_host(MemRef2 &out) { + void get_on_host(MemRef2 &out) { + // Schedule the execution of the SDFG subgraph required to compute + // the value requested schedule_work(out); - assert(dep != nullptr && "GET on empty stream not allowed."); - // If this was already copied to host, copy out - if (dep->onHostReady) { - memref_copy_contiguous(out, dep->host_data); - return dep; - } else if (dep->location == split_location) { - char *pos = (char *)(out.aligned + out.offset); - std::list devices_used; - for (auto c : dep->chunks) { - size_t data_size = memref_get_data_size(c->host_data); - cuda_memcpy_async_to_cpu( - pos, c->device_data, data_size, - (cudaStream_t *)dfg->get_gpu_stream(c->location), c->location); - pos += data_size; - devices_used.push_back(c->location); - } - // We should only synchronize devices that had data chunks - devices_used.sort(); - devices_used.unique(); - for (auto i : devices_used) - cudaStreamSynchronize(*(cudaStream_t *)dfg->get_gpu_stream(i)); - } else { - size_t data_size = memref_get_data_size(dep->host_data); - cuda_memcpy_async_to_cpu(out.aligned + out.offset, dep->device_data, - data_size, (cudaStream_t *)dfg->gpu_stream, - dep->location); - cudaStreamSynchronize(*(cudaStream_t *)dfg->gpu_stream); - } - // After this synchronization point, all of the host-side - // allocated memory can be freed as we know all asynchronous - // operations have finished. - dfg->free_stream_order_dependent_data(); + + // The result should already have been copied to host, nothing to + // do (synchronization of transfers to host are pre-synchronized + // in schedule_work). + assert(dep != nullptr && dep->onHostReady); + + // For now we make a copy of this dependence for future use as we + // can't assume that the output location will remain live until + // the next use. + // TODO: eliminate this copy. if (!dep->hostAllocated) dep->host_data = memref_copy_alloc(out); dep->onHostReady = true; dep->hostAllocated = true; - return dep; } Dependence *get(int32_t location, int32_t chunk_id = single_chunk) { assert(dep != nullptr && "Dependence could not be computed."); assert(chunk_id != split_chunks); if (chunk_id != single_chunk) { Dependence *d = dep->chunks[chunk_id]; - d->copy(location, dfg); + d->copy(location, dfg, false); return d; } - dep->copy(location, dfg); + dep->copy(location, dfg, false); return dep; } inline bool need_new_gen(int32_t chunk_id = single_chunk) { @@ -863,6 +938,13 @@ struct Stream { } }; +void GPU_DFG::free_streams() { + streams.sort(); + streams.unique(); + for (auto s : streams) + delete s; +} + static inline mlir::concretelang::gpu_dfg::Process * make_process_1_1(void *dfg, void *sin1, void *sout, void (*fun)(Process *, int32_t, int32_t, uint64_t *)) { @@ -882,6 +964,7 @@ make_process_1_1(void *dfg, void *sin1, void *sout, p->dfg->register_stream(s1); p->dfg->register_stream(so); p->batched_process = s1->batched_stream; + p->output_size.val = 0; return p; } @@ -909,6 +992,7 @@ make_process_2_1(void *dfg, void *sin1, void *sin2, void *sout, p->dfg->register_stream(s2); p->dfg->register_stream(so); p->batched_process = s1->batched_stream; + p->output_size.val = 0; return p; } @@ -957,8 +1041,11 @@ void memref_keyswitch_lwe_u64_process(Process *p, int32_t loc, int32_t chunk_id, uint64_t *out_ptr) { auto sched = [&](Dependence *d) { uint64_t num_samples = d->host_data.sizes[0]; - MemRef2 out = { - 0, 0, 0, {num_samples, p->output_size.val}, {p->output_size.val, 1}}; + MemRef2 out = {out_ptr, + out_ptr, + 0, + {num_samples, p->output_size.val}, + {p->output_size.val, 1}}; size_t data_size = memref_get_data_size(out); if (loc == host_location) { // If it is not profitable to offload, schedule kernel on CPU @@ -972,8 +1059,8 @@ void memref_keyswitch_lwe_u64_process(Process *p, int32_t loc, int32_t chunk_id, d->host_data.strides[1], p->level.val, p->base_log.val, p->input_lwe_dim.val, p->output_lwe_dim.val, p->sk_index.val, p->ctx.val); - Dependence *dep = - new Dependence(loc, out, nullptr, true, true, d->chunk_id); + Dependence *dep = new Dependence(loc, out, nullptr, true, + (out_ptr == nullptr), d->chunk_id); return dep; } else { // Schedule the keyswitch kernel on the GPU @@ -999,7 +1086,8 @@ void memref_keyswitch_lwe_u64_process(Process *p, int32_t loc, int32_t chunk_id, void memref_bootstrap_lwe_u64_process(Process *p, int32_t loc, int32_t chunk_id, uint64_t *out_ptr) { assert(p->output_size.val == p->glwe_dim.val * p->poly_size.val + 1); - + if (!p->output_streams[0]->need_new_gen(chunk_id)) + return; Dependence *idep1 = p->input_streams[1]->get(host_location, chunk_id); MemRef2 &mtlu = idep1->host_data; uint32_t num_lut_vectors = mtlu.sizes[0]; @@ -1023,8 +1111,11 @@ void memref_bootstrap_lwe_u64_process(Process *p, int32_t loc, int32_t chunk_id, std::vector &lut_indexes, cudaStream_t *s, int32_t loc) { uint64_t num_samples = d0->host_data.sizes[0]; - MemRef2 out = { - 0, 0, 0, {num_samples, p->output_size.val}, {p->output_size.val, 1}}; + MemRef2 out = {out_ptr, + out_ptr, + 0, + {num_samples, p->output_size.val}, + {p->output_size.val, 1}}; size_t data_size = memref_get_data_size(out); // Move test vector indexes to the GPU, the test vector indexes is set of 0 @@ -1065,8 +1156,8 @@ void memref_bootstrap_lwe_u64_process(Process *p, int32_t loc, int32_t chunk_id, d1->host_data.strides[1], p->input_lwe_dim.val, p->poly_size.val, p->level.val, p->base_log.val, p->glwe_dim.val, p->sk_index.val, p->ctx.val); - Dependence *dep = - new Dependence(loc, out, nullptr, true, true, d0->chunk_id); + Dependence *dep = new Dependence(loc, out, nullptr, true, + (out_ptr == nullptr), d0->chunk_id); free(glwe_ct); return dep; } else { @@ -1129,8 +1220,8 @@ void memref_add_lwe_ciphertexts_u64_process(Process *p, int32_t loc, assert(d0->host_data.sizes[1] == d1->host_data.sizes[1]); assert(d0->chunk_id == d1->chunk_id); uint64_t num_samples = d0->host_data.sizes[0]; - MemRef2 out = {0, - 0, + MemRef2 out = {out_ptr, + out_ptr, 0, {num_samples, d0->host_data.sizes[1]}, {d0->host_data.sizes[1], 1}}; @@ -1148,8 +1239,8 @@ void memref_add_lwe_ciphertexts_u64_process(Process *p, int32_t loc, d1->host_data.aligned, d1->host_data.offset, d1->host_data.sizes[0], d1->host_data.sizes[1], d1->host_data.strides[0], d1->host_data.strides[1]); - Dependence *dep = - new Dependence(loc, out, nullptr, true, true, d0->chunk_id); + Dependence *dep = new Dependence(loc, out, nullptr, true, + (out_ptr == nullptr), d0->chunk_id); return dep; } else { // Schedule the kernel on the GPU @@ -1179,8 +1270,8 @@ void memref_add_plaintext_lwe_ciphertext_u64_process(Process *p, int32_t loc, d1->host_data.sizes[1] == 1); assert(d0->chunk_id == d1->chunk_id); uint64_t num_samples = d0->host_data.sizes[0]; - MemRef2 out = {0, - 0, + MemRef2 out = {out_ptr, + out_ptr, 0, {num_samples, d0->host_data.sizes[1]}, {d0->host_data.sizes[1], 1}}; @@ -1206,8 +1297,8 @@ void memref_add_plaintext_lwe_ciphertext_u64_process(Process *p, int32_t loc, d0->host_data.strides[1], d1->host_data.allocated, d1->host_data.aligned, d1->host_data.offset, d1->host_data.sizes[1], d1->host_data.strides[1]); - Dependence *dep = - new Dependence(loc, out, nullptr, true, true, d0->chunk_id); + Dependence *dep = new Dependence(loc, out, nullptr, true, + (out_ptr == nullptr), d0->chunk_id); return dep; } else { // Schedule the kernel on the GPU @@ -1237,8 +1328,8 @@ void memref_mul_cleartext_lwe_ciphertext_u64_process(Process *p, int32_t loc, d1->host_data.sizes[1] == 1); assert(d0->chunk_id == d1->chunk_id); uint64_t num_samples = d0->host_data.sizes[0]; - MemRef2 out = {0, - 0, + MemRef2 out = {out_ptr, + out_ptr, 0, {num_samples, d0->host_data.sizes[1]}, {d0->host_data.sizes[1], 1}}; @@ -1264,8 +1355,8 @@ void memref_mul_cleartext_lwe_ciphertext_u64_process(Process *p, int32_t loc, d0->host_data.strides[1], d1->host_data.allocated, d1->host_data.aligned, d1->host_data.offset, d1->host_data.sizes[1], d1->host_data.strides[1]); - Dependence *dep = - new Dependence(loc, out, nullptr, true, true, d0->chunk_id); + Dependence *dep = new Dependence(loc, out, nullptr, true, + (out_ptr == nullptr), d0->chunk_id); return dep; } else { // Schedule the keyswitch kernel on the GPU @@ -1291,8 +1382,8 @@ void memref_negate_lwe_ciphertext_u64_process(Process *p, int32_t loc, uint64_t *out_ptr) { auto sched = [&](Dependence *d0, cudaStream_t *s, int32_t loc) { uint64_t num_samples = d0->host_data.sizes[0]; - MemRef2 out = {0, - 0, + MemRef2 out = {out_ptr, + out_ptr, 0, {num_samples, d0->host_data.sizes[1]}, {d0->host_data.sizes[1], 1}}; @@ -1307,8 +1398,8 @@ void memref_negate_lwe_ciphertext_u64_process(Process *p, int32_t loc, d0->host_data.aligned, d0->host_data.offset, d0->host_data.sizes[0], d0->host_data.sizes[1], d0->host_data.strides[0], d0->host_data.strides[1]); - Dependence *dep = - new Dependence(loc, out, nullptr, true, true, d0->chunk_id); + Dependence *dep = new Dependence(loc, out, nullptr, true, + (out_ptr == nullptr), d0->chunk_id); return dep; } else { // Schedule the kernel on the GPU @@ -1544,12 +1635,14 @@ void *stream_emulator_make_memref_stream(const char *name, stream_type stype) { } void stream_emulator_put_memref(void *stream, uint64_t *allocated, uint64_t *aligned, uint64_t offset, - uint64_t size, uint64_t stride) { + uint64_t size, uint64_t stride, + uint64_t data_ownership = 0) { assert(stride == 1 && "Strided memrefs not supported"); Stream *s = (Stream *)stream; MemRef2 m = {allocated, aligned, offset, {1, size}, {size, stride}}; Dependence *dep = - new Dependence(host_location, memref_copy_alloc(m), nullptr, true, true); + new Dependence(host_location, (data_ownership) ? m : memref_copy_alloc(m), + nullptr, true, true); s->put(dep); s->generation++; } @@ -1573,12 +1666,14 @@ void *stream_emulator_make_memref_batch_stream(const char *name, void stream_emulator_put_memref_batch(void *stream, uint64_t *allocated, uint64_t *aligned, uint64_t offset, uint64_t size0, uint64_t size1, - uint64_t stride0, uint64_t stride1) { + uint64_t stride0, uint64_t stride1, + uint64_t data_ownership = 0) { assert(stride1 == 1 && "Strided memrefs not supported"); Stream *s = (Stream *)stream; MemRef2 m = {allocated, aligned, offset, {size0, size1}, {stride0, stride1}}; Dependence *dep = - new Dependence(host_location, memref_copy_alloc(m), nullptr, true, true); + new Dependence(host_location, (data_ownership) ? m : memref_copy_alloc(m), + nullptr, true, true); s->put(dep); s->generation++; } @@ -1587,6 +1682,10 @@ void stream_emulator_get_memref_batch(void *stream, uint64_t *out_allocated, uint64_t out_offset, uint64_t out_size0, uint64_t out_size1, uint64_t out_stride0, uint64_t out_stride1) { + static size_t count = 0; + END_TIME_C_ACC(&blocking_get_timer, "Non-GPU section execution", count, + &acc1); + BEGIN_TIME(&blocking_get_timer); assert(out_stride1 == 1 && "Strided memrefs not supported"); MemRef2 mref = {out_allocated, out_aligned, @@ -1595,9 +1694,13 @@ void stream_emulator_get_memref_batch(void *stream, uint64_t *out_allocated, {out_stride0, out_stride1}}; auto s = (Stream *)stream; s->get_on_host(mref); + END_TIME_C_ACC(&blocking_get_timer, "GPU section execution", count++, &acc2); + BEGIN_TIME(&blocking_get_timer); } void *stream_emulator_init() { + CONCRETELANG_ENABLE_TIMING(); + BEGIN_TIME(&init_timer); int num; assert(cudaGetDeviceCount(&num) == cudaSuccess); num_devices = num; @@ -1646,9 +1749,42 @@ void *stream_emulator_init() { if (num_cores < 1) num_cores = 1; + END_TIME(&init_timer, "Initialization of the SDFG runtime"); + BEGIN_TIME(&init_timer); + int device = next_device.fetch_add(1) % num_devices; return new GPU_DFG(device); } -void stream_emulator_run(void *dfg) {} +void stream_emulator_run(void *dfg) { + END_TIME(&init_timer, "Building the SDFG graph"); + BEGIN_TIME(&blocking_get_timer); +} void stream_emulator_delete(void *dfg) { delete (GPU_DFG *)dfg; } #endif + +namespace mlir { +namespace concretelang { +namespace gpu_dfg { + +bool check_cuda_device_available() { +#ifdef CONCRETELANG_CUDA_SUPPORT + int num; + if (cudaGetDeviceCount(&num) != cudaSuccess) + return false; + return num > 0; +#else + return false; +#endif +} + +bool check_cuda_runtime_enabled() { +#ifdef CONCRETELANG_CUDA_SUPPORT + return true; +#else + return false; +#endif +} + +} // namespace gpu_dfg +} // namespace concretelang +} // namespace mlir diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/context.cpp b/compilers/concrete-compiler/compiler/lib/Runtime/context.cpp index 9d0df8d0d..46ca0da51 100644 --- a/compilers/concrete-compiler/compiler/lib/Runtime/context.cpp +++ b/compilers/concrete-compiler/compiler/lib/Runtime/context.cpp @@ -41,14 +41,17 @@ RuntimeContext::RuntimeContext(ServerKeyset serverKeyset) } #ifdef CONCRETELANG_CUDA_SUPPORT - assert(cudaGetDeviceCount(&num_devices) == cudaSuccess); - bsk_gpu.resize(num_devices); - ksk_gpu.resize(num_devices); - for (int i = 0; i < num_devices; ++i) { - bsk_gpu[i].resize(serverKeyset.lweBootstrapKeys.size(), nullptr); - ksk_gpu[i].resize(serverKeyset.lweKeyswitchKeys.size(), nullptr); - bsk_gpu_mutex.push_back(std::make_unique()); - ksk_gpu_mutex.push_back(std::make_unique()); + if (cudaGetDeviceCount(&num_devices) == cudaSuccess) { + bsk_gpu.resize(num_devices); + ksk_gpu.resize(num_devices); + for (int i = 0; i < num_devices; ++i) { + bsk_gpu[i].resize(serverKeyset.lweBootstrapKeys.size(), nullptr); + ksk_gpu[i].resize(serverKeyset.lweKeyswitchKeys.size(), nullptr); + bsk_gpu_mutex.push_back(std::make_unique()); + ksk_gpu_mutex.push_back(std::make_unique()); + } + } else { + num_devices = 0; } #endif } diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/time_util.cpp b/compilers/concrete-compiler/compiler/lib/Runtime/time_util.cpp new file mode 100644 index 000000000..a27c4f16a --- /dev/null +++ b/compilers/concrete-compiler/compiler/lib/Runtime/time_util.cpp @@ -0,0 +1,21 @@ +// Part of the Concrete Compiler Project, under the BSD3 License with Zama +// Exceptions. See +// https://github.com/zama-ai/concrete/blob/main/LICENSE.txt +// for license information. + +#include "concretelang/Runtime/time_util.h" + +#if CONCRETELANG_TIMING_ENABLED + +namespace mlir { +namespace concretelang { +namespace time_util { + +bool timing_enabled = false; +struct timespec timestamp; + +} // namespace time_util +} // namespace concretelang +} // namespace mlir + +#endif diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/utils.cpp b/compilers/concrete-compiler/compiler/lib/Runtime/utils.cpp new file mode 100644 index 000000000..2067b339b --- /dev/null +++ b/compilers/concrete-compiler/compiler/lib/Runtime/utils.cpp @@ -0,0 +1,15 @@ +// Part of the Concrete Compiler Project, under the BSD3 License with Zama +// Exceptions. See +// https://github.com/zama-ai/concrete/blob/main/LICENSE.txt +// for license information. + +#include "concretelang/Runtime/utils.h" + +namespace mlir { +namespace concretelang { +void LLVMInitializeNativeTarget() { + llvm::InitializeNativeTarget(); + llvm::InitializeNativeTargetAsmPrinter(); +} +} // namespace concretelang +} // namespace mlir diff --git a/compilers/concrete-compiler/compiler/lib/Runtime/wrappers.cpp b/compilers/concrete-compiler/compiler/lib/Runtime/wrappers.cpp index 1b54fae83..b5a83d369 100644 --- a/compilers/concrete-compiler/compiler/lib/Runtime/wrappers.cpp +++ b/compilers/concrete-compiler/compiler/lib/Runtime/wrappers.cpp @@ -112,7 +112,6 @@ void memref_batched_keyswitch_lwe_cuda_u64( uint64_t ct0_stride0, uint64_t ct0_stride1, uint32_t level, uint32_t base_log, uint32_t input_lwe_dim, uint32_t output_lwe_dim, uint32_t ksk_index, mlir::concretelang::RuntimeContext *context) { - assert(ksk_index == 0 && "multiple ksk is not yet implemented on GPU"); assert(out_size0 == ct0_size0); assert(out_size1 == output_lwe_dim + 1); assert(ct0_size1 == input_lwe_dim + 1); @@ -159,7 +158,6 @@ void memref_batched_bootstrap_lwe_cuda_u64( uint64_t tlu_stride, uint32_t input_lwe_dim, uint32_t poly_size, uint32_t level, uint32_t base_log, uint32_t glwe_dim, uint32_t bsk_index, mlir::concretelang::RuntimeContext *context) { - assert(bsk_index == 0 && "multiple bsk is not yet implemented on GPU"); assert(out_size0 == ct0_size0); assert(out_size1 == glwe_dim * poly_size + 1); // TODO: Multi GPU @@ -247,7 +245,6 @@ void memref_batched_mapped_bootstrap_lwe_cuda_u64( uint32_t input_lwe_dim, uint32_t poly_size, uint32_t level, uint32_t base_log, uint32_t glwe_dim, uint32_t bsk_index, mlir::concretelang::RuntimeContext *context) { - assert(bsk_index == 0 && "multiple bsk is not yet implemented on GPU"); assert(out_size0 == ct0_size0); assert(out_size1 == glwe_dim * poly_size + 1); assert((out_size0 == tlu_size0 || tlu_size0 == 1) && diff --git a/compilers/concrete-compiler/compiler/lib/ServerLib/ServerLib.cpp b/compilers/concrete-compiler/compiler/lib/ServerLib/ServerLib.cpp index 6a750742f..5bba83f66 100644 --- a/compilers/concrete-compiler/compiler/lib/ServerLib/ServerLib.cpp +++ b/compilers/concrete-compiler/compiler/lib/ServerLib/ServerLib.cpp @@ -16,6 +16,7 @@ #include "concretelang/Common/Protocol.h" #include "concretelang/Common/Transformers.h" #include "concretelang/Common/Values.h" +#include "concretelang/Runtime/DFRuntime.hpp" #include "concretelang/Runtime/context.h" #include "concretelang/ServerLib/ServerLib.h" #include "concretelang/Support/CompilerEngine.h" @@ -355,6 +356,7 @@ DynamicModule::open(const std::string &sharedLibPath) { if (!module->libraryHandle) { return StringError("Cannot open shared library ") << dlerror(); } + mlir::concretelang::dfr::_dfr_register_lib(module->libraryHandle); return module; } @@ -430,6 +432,13 @@ bool getGateIsSigned(const Message &gateInfo) { Result> ServerCircuit::call(const ServerKeyset &serverKeyset, std::vector &args) { + std::vector returns(returnsBuffer.size()); + mlir::concretelang::dfr::_dfr_register_lib(dynamicModule->libraryHandle); + if (!mlir::concretelang::dfr::_dfr_is_root_node()) { + mlir::concretelang::dfr::_dfr_run_remote_scheduler(); + return returns; + } + if (args.size() != argsBuffer.size()) { return StringError("Called circuit with wrong number of arguments"); } @@ -444,7 +453,6 @@ ServerCircuit::call(const ServerKeyset &serverKeyset, invoke(serverKeyset); // We process the return values to turn them into transport values. - std::vector returns(returnsBuffer.size()); for (size_t i = 0; i < returnsBuffer.size(); i++) { OUTCOME_TRY(returns[i], returnTransformers[i](returnsBuffer[i])); } diff --git a/compilers/concrete-compiler/compiler/lib/Support/CompilerEngine.cpp b/compilers/concrete-compiler/compiler/lib/Support/CompilerEngine.cpp index 3260d920f..158a1df15 100644 --- a/compilers/concrete-compiler/compiler/lib/Support/CompilerEngine.cpp +++ b/compilers/concrete-compiler/compiler/lib/Support/CompilerEngine.cpp @@ -63,14 +63,10 @@ #include "concretelang/Support/LLVMEmitFile.h" #include "concretelang/Support/Pipeline.h" #include "concretelang/Support/Utils.h" +#include namespace mlir { namespace concretelang { -// TODO: should be removed when bufferization is not related to CAPI lowering -// Control whether we should call a cpu of gpu function when lowering -// to CAPI -static bool EMIT_GPU_OPS; -bool getEmitGPUOption() { return EMIT_GPU_OPS; } /// Creates a new compilation context that can be shared across /// compilation engines and results @@ -297,9 +293,6 @@ CompilerEngine::compile(mlir::ModuleOp moduleOp, Target target, mlir::MLIRContext &mlirContext = *this->compilationContext->getMLIRContext(); - // enable/disable usage of gpu functions during bufferization - EMIT_GPU_OPS = options.emitGPUOps; - auto dataflowParallelize = options.autoParallelize || options.dataflowParallelize; auto loopParallelize = options.autoParallelize || options.loopParallelize; @@ -307,6 +300,56 @@ CompilerEngine::compile(mlir::ModuleOp moduleOp, Target target, if (loopParallelize) mlir::concretelang::dfr::_dfr_set_use_omp(true); + // Sanity checks for enabling GPU usage: the compiler must have been + // compiled with Cuda support (especially important when building + // python wheels), and at least one device must be available to + // execute on. + if (options.emitGPUOps) { + // If this compiler is not compiled using Cuda support, then + // requesting GPU is forbidden - instead of a hard error, issue a + // warning and disable the GPU option. + if (!mlir::concretelang::gpu_dfg::check_cuda_runtime_enabled()) { + // Allow compilation to complete if only code generation is expected. + if (target != Target::LIBRARY) { + warnx("This instance of the Concrete compiler does not support GPU " + "acceleration." + " Allowing code generation to proceed, but execution will not be " + "possible."); + } else { + warnx("This instance of the Concrete compiler does not support GPU " + "acceleration." + " If you are using Concrete-Python, it means that the module " + "installed is not GPU enabled.\n" + "Continuing without GPU acceleration."); + options.emitGPUOps = false; + options.emitSDFGOps = false; + options.batchTFHEOps = false; + } + } else { + // Ensure that at least one Cuda device is available if GPU option + // is used + if (!mlir::concretelang::gpu_dfg::check_cuda_device_available()) { + warnx("No Cuda device available on this system (either not present or " + "the driver is not online).\n" + "Continuing without GPU acceleration."); + options.emitGPUOps = false; + options.emitSDFGOps = false; + options.batchTFHEOps = false; + } + } + + // Finally for now we cannot allow dataflow parallelization at the + // same time as GPU usage. This restriction will be relaxed later. + if (dataflowParallelize) { + warnx("Dataflow parallelization and GPU offloading have both been " + "requested. This is not currently supported. Continuing without " + "dataflow parallelization."); + dataflowParallelize = false; + } + } + + // If dataflow parallelization will proceed, mark it for + // initialising the runtime if (dataflowParallelize) mlir::concretelang::dfr::_dfr_set_required(true); @@ -594,8 +637,11 @@ CompilerEngine::compile(mlir::ModuleOp moduleOp, Target target, } } + // Restrict direct lowering when already generating GPU code through + // the SDFG dialect. + bool lowerDirectlyToGPUOps = (options.emitGPUOps && !options.emitSDFGOps); if (mlir::concretelang::pipeline::lowerToCAPI(mlirContext, module, enablePass, - options.emitGPUOps) + lowerDirectlyToGPUOps) .failed()) { return StreamStringError("Failed to lower to CAPI"); } diff --git a/compilers/concrete-compiler/compiler/lib/Support/Pipeline.cpp b/compilers/concrete-compiler/compiler/lib/Support/Pipeline.cpp index caae41a35..56b1fea75 100644 --- a/compilers/concrete-compiler/compiler/lib/Support/Pipeline.cpp +++ b/compilers/concrete-compiler/compiler/lib/Support/Pipeline.cpp @@ -47,8 +47,10 @@ #include "concretelang/Dialect/FHELinalg/Transforms/Tiling.h" #include "concretelang/Dialect/RT/Analysis/Autopar.h" #include "concretelang/Dialect/RT/Transforms/Passes.h" +#include "concretelang/Dialect/SDFG/Transforms/Passes.h" #include "concretelang/Dialect/TFHE/Analysis/ExtractStatistics.h" #include "concretelang/Dialect/TFHE/Transforms/Transforms.h" +#include "concretelang/Runtime/utils.h" #include "concretelang/Support/CompilerEngine.h" #include "concretelang/Support/Error.h" #include "concretelang/Support/Pipeline.h" @@ -361,6 +363,7 @@ mlir::LogicalResult batchTFHE(mlir::MLIRContext &context, pm, mlir::concretelang::createCollapseParallelLoops(), enablePass); addPotentiallyNestedPass( pm, mlir::concretelang::createBatchingPass(maxBatchSize), enablePass); + addPotentiallyNestedPass(pm, mlir::createCanonicalizerPass(), enablePass); return pm.run(module.getOperation()); } @@ -569,6 +572,8 @@ mlir::LogicalResult lowerToStd(mlir::MLIRContext &context, enablePass); addPotentiallyNestedPass( pm, mlir::concretelang::createFixupBufferDeallocationPass(), enablePass); + addPotentiallyNestedPass( + pm, mlir::concretelang::createSDFGBufferOwnershipPass(), enablePass); return pm.run(module); } @@ -610,8 +615,7 @@ std::unique_ptr lowerLLVMDialectToLLVMIR(mlir::MLIRContext &context, llvm::LLVMContext &llvmContext, mlir::ModuleOp &module) { - llvm::InitializeNativeTarget(); - llvm::InitializeNativeTargetAsmPrinter(); + mlir::concretelang::LLVMInitializeNativeTarget(); mlir::registerLLVMDialectTranslation(*module->getContext()); mlir::registerOpenMPDialectTranslation(*module->getContext()); diff --git a/compilers/concrete-compiler/compiler/lib/Transforms/ForLoopToParallel.cpp b/compilers/concrete-compiler/compiler/lib/Transforms/ForLoopToParallel.cpp index dcbdfa028..104ee0092 100644 --- a/compilers/concrete-compiler/compiler/lib/Transforms/ForLoopToParallel.cpp +++ b/compilers/concrete-compiler/compiler/lib/Transforms/ForLoopToParallel.cpp @@ -23,39 +23,26 @@ public: matchAndRewrite(mlir::scf::ForOp forOp, mlir::PatternRewriter &rewriter) const override { auto attr = forOp->getAttrOfType("parallel"); - if (attr == nullptr) { + + if (!attr || !attr.getValue()) { return mlir::failure(); } + assert(forOp.getRegionIterArgs().size() == 0 && "unexpecting iter args when loops are bufferized"); - if (attr.getValue()) { - rewriter.replaceOpWithNewOp( - forOp, mlir::ValueRange{forOp.getLowerBound()}, - mlir::ValueRange{forOp.getUpperBound()}, forOp.getStep(), - std::nullopt, - [&](mlir::OpBuilder &builder, mlir::Location location, - mlir::ValueRange indVar, mlir::ValueRange iterArgs) { - mlir::IRMapping map; - map.map(forOp.getInductionVar(), indVar.front()); - for (auto &op : forOp.getRegion().front()) { - auto newOp = builder.clone(op, map); - map.map(op.getResults(), newOp->getResults()); - } - }); - } else { - rewriter.replaceOpWithNewOp( - forOp, forOp.getLowerBound(), forOp.getUpperBound(), forOp.getStep(), - std::nullopt, - [&](mlir::OpBuilder &builder, mlir::Location location, - mlir::Value indVar, mlir::ValueRange iterArgs) { - mlir::IRMapping map; - map.map(forOp.getInductionVar(), indVar); - for (auto &op : forOp.getRegion().front()) { - auto newOp = builder.clone(op, map); - map.map(op.getResults(), newOp->getResults()); - } - }); - } + + rewriter.replaceOpWithNewOp( + forOp, mlir::ValueRange{forOp.getLowerBound()}, + mlir::ValueRange{forOp.getUpperBound()}, forOp.getStep(), std::nullopt, + [&](mlir::OpBuilder &builder, mlir::Location location, + mlir::ValueRange indVar, mlir::ValueRange iterArgs) { + mlir::IRMapping map; + map.map(forOp.getInductionVar(), indVar.front()); + for (auto &op : forOp.getRegion().front()) { + auto newOp = builder.clone(op, map); + map.map(op.getResults(), newOp->getResults()); + } + }); return mlir::success(); } diff --git a/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/batching.mlir b/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/batching.mlir index 814dc7bde..fe7860849 100644 --- a/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/batching.mlir +++ b/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/batching.mlir @@ -122,8 +122,7 @@ func.func @batch_offset_extract_keyswitch(%arg0: tensor<99x2x3x4x99x99x!TFHE.glw %c97 = arith.constant 97 : index %0 = bufferization.alloc_tensor() : tensor<2x3x4x!TFHE.glwe>> - // CHECK: %[[VDROP1DIMS:.*]] = tensor.collapse_shape [[ARG:.*]] {{\[\[0, 1\], \[2\], \[3, 4, 5\]\]}} : tensor<1x2x3x4x1x1x!TFHE.glwe>> into tensor<2x3x4x!TFHE.glwe>> - // CHECK: %[[V0:.*]] = tensor.collapse_shape %[[VDROP1DIMS]] {{\[\[0, 1, 2\]\]}} : tensor<2x3x4x!TFHE.glwe>> into tensor<24x!TFHE.glwe>> + // CHECK: %[[V0:.*]] = tensor.collapse_shape %[[SLICE:.*]] {{\[\[0, 1, 2, 3, 4, 5\]\]}} : tensor<1x2x3x4x1x1x!TFHE.glwe>> into tensor<24x!TFHE.glwe>> // CHECK: %[[V1:.*]] = "TFHE.batched_keyswitch_glwe"(%[[V0]]) {key = #TFHE, sk{{\[}}[[SK_OUT]]{{\]}}<1,750>, 3, 4>>} : (tensor<24x!TFHE.glwe>>) -> tensor<24x!TFHE.glwe>> // CHECK: %[[V2:.*]] = tensor.expand_shape %[[V1]] {{\[\[0, 1, 2\]\]}} : tensor<24x!TFHE.glwe>> into tensor<2x3x4x!TFHE.glwe>> // CHECK: return %[[V2]] @@ -161,8 +160,7 @@ func.func @batch_offset_shifted_bounds_nonunitstep_extract_keyswitch(%arg0: tens %0 = bufferization.alloc_tensor() : tensor<2x2x2x!TFHE.glwe>> // CHECK: %[[V1:.*]] = tensor.extract_slice %arg0{{\[0, 3, 7, 9, 97, 1\] \[1, 2, 2, 2, 1, 1\] \[1, 2, 1, 7, 1, 1\]}} : tensor<99x20x30x40x99x99x!TFHE.glwe>> to tensor<1x2x2x2x1x1x!TFHE.glwe>> - // CHECK-NEXT: %[[V2:.*]] = tensor.collapse_shape %[[V1]] {{\[\[0, 1\], \[2\], \[3, 4, 5\]\]}} : tensor<1x2x2x2x1x1x!TFHE.glwe>> into tensor<2x2x2x!TFHE.glwe>> - // CHECK-NEXT: %[[V3:.*]] = tensor.collapse_shape %[[V2]] {{\[\[0, 1, 2\]\]}} : tensor<2x2x2x!TFHE.glwe>> into tensor<8x!TFHE.glwe>> + // CHECK-NEXT: %[[V3:.*]] = tensor.collapse_shape %[[V1]] {{\[\[0, 1, 2, 3, 4, 5\]\]}} : tensor<1x2x2x2x1x1x!TFHE.glwe>> into tensor<8x!TFHE.glwe>> // CHECK-NEXT: %[[V4:.*]] = "TFHE.batched_keyswitch_glwe"(%[[V3]]) {key = #TFHE, sk{{\[}}[[SK_OUT]]{{\]}}<1,750>, 3, 4>>} : (tensor<8x!TFHE.glwe>>) -> tensor<8x!TFHE.glwe>> // CHECK-NEXT: %[[V5:.*]] = tensor.expand_shape %[[V4]] {{\[\[0, 1, 2\]\]}} : tensor<8x!TFHE.glwe>> into tensor<2x2x2x!TFHE.glwe>> // CHECK-NEXT: return %[[V5]] : tensor<2x2x2x!TFHE.glwe>> diff --git a/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/scf-to-parallel.mlir b/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/scf-to-parallel.mlir new file mode 100644 index 000000000..9db817673 --- /dev/null +++ b/compilers/concrete-compiler/compiler/tests/check_tests/Transforms/scf-to-parallel.mlir @@ -0,0 +1,18 @@ +// RUN: concretecompiler --split-input-file --action=dump-std --parallelize --parallelize-loops --skip-program-info --passes=for-loop-to-parallel --skip-program-info %s 2>&1| FileCheck %s + +func.func @bar() -> () { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c4 = arith.constant 4 : index + %i0 = arith.constant 0 : i32 + %i1 = arith.constant 1 : i32 + + // CHECK-NOT: scf.parallel + %0 = scf.for %iv = %c0 to %c4 step %c1 iter_args(%ia = %i0) -> i32 { + "Tracing.trace_plaintext"(%i0) : (i32) -> () + %yld = arith.addi %ia, %i1 : i32 + scf.yield %yld : i32 + } {"parallel" = false } + + return +} diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_benchmarks/end_to_end_benchmark.cpp b/compilers/concrete-compiler/compiler/tests/end_to_end_benchmarks/end_to_end_benchmark.cpp index 897f3e8eb..cadc37eff 100644 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_benchmarks/end_to_end_benchmark.cpp +++ b/compilers/concrete-compiler/compiler/tests/end_to_end_benchmarks/end_to_end_benchmark.cpp @@ -54,15 +54,13 @@ static void BM_ExportArguments(benchmark::State &state, inputArguments.reserve(test.inputs.size()); auto client = tc.getClientCircuit().value(); - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - for (auto _ : state) { - for (size_t i = 0; i < test.inputs.size(); i++) { - auto input = client.prepareInput(test.inputs[i].getValue(), i).value(); - inputArguments.push_back(input); - } + for (auto _ : state) { + for (size_t i = 0; i < test.inputs.size(); i++) { + auto input = client.prepareInput(test.inputs[i].getValue(), i).value(); + inputArguments.push_back(input); } - inputArguments.resize(0); } + inputArguments.resize(0); } /// Benchmark time of the program evaluation @@ -78,12 +76,10 @@ static void BM_Evaluate(benchmark::State &state, EndToEndDesc description, auto inputArguments = std::vector(); inputArguments.reserve(test.inputs.size()); - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - for (size_t i = 0; i < test.inputs.size(); i++) { - auto input = - clientCircuit.prepareInput(test.inputs[i].getValue(), i).value(); - inputArguments.push_back(input); - } + for (size_t i = 0; i < test.inputs.size(); i++) { + auto input = + clientCircuit.prepareInput(test.inputs[i].getValue(), i).value(); + inputArguments.push_back(input); } auto serverCircuit = tc.getServerCircuit().value(); diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_fixture/tests_cpu/end_to_end_linalg_enc_enc_matmul_dot.yaml b/compilers/concrete-compiler/compiler/tests/end_to_end_fixture/tests_cpu/end_to_end_linalg_enc_enc_matmul_dot.yaml index f9ab05a30..645bbd72e 100644 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_fixture/tests_cpu/end_to_end_linalg_enc_enc_matmul_dot.yaml +++ b/compilers/concrete-compiler/compiler/tests/end_to_end_fixture/tests_cpu/end_to_end_linalg_enc_enc_matmul_dot.yaml @@ -26,14 +26,14 @@ program: | p-error: 1e-06 tests: - inputs: - - tensor: [-2, -1, -1, -2, -2, -1, -1, -1, -1, -1, -2, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -2, -2, -2] + - tensor: [-1, -1, -2, -2, -1, -2, -2, -1, -2, -1, -2, -1, -1, -2, -2, -2, -2, -1, -2, -1, -1, -2, -1, -1] shape: [2,3,4] signed: True - - tensor: [-2, -1, -2, -1, -1, -1, -2, -2, -1, -2, -2, -1, -1, -1, -2, -1] + - tensor: [-1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -2, -1, -2, -1, -2] shape: [2,4,2] signed: True outputs: - - tensor: [11, 8, 9, 6, 8, 6, 9, 7, 6, 5, 12, 10] + - tensor: [8, 8, 8, 8, 8, 8, 9, 13, 7, 10, 7, 9] shape: [2,3,2] signed: True --- @@ -63,14 +63,14 @@ program: | p-error: 1e-06 tests: - inputs: - - tensor: [-1, -2, -2, -1, -2, -1, -2, -2, -1, -1, -1, -1] + - tensor: [-2, -1, -1, -1, -1, -2, -1, -1, -1, -1, -2, -2] shape: [3,4] signed: True - - tensor: [-2, -2, -2, -1, -1, -2, -1, -1] + - tensor: [-2, -2, -1, -1, -1, -2, -2, -2] shape: [4,2] signed: True outputs: - - tensor: [9, 9, 10, 11, 6, 6] + - tensor: [8, 9, 7, 8, 9, 11] shape: [3,2] signed: True --- @@ -100,14 +100,14 @@ program: | p-error: 1e-06 tests: - inputs: - - tensor: [-1, -2, -1] + - tensor: [-1, -2, -2] shape: [3] signed: True - - tensor: [-2, -1, -2, -2, -2, -2, -2, -1, -1, -1, -2, -2, -2, -2, -2, -1, -2, -2, -1, -1, -1, -2, -2, -1] + - tensor: [-2, -2, -1, -2, -1, -1, -2, -1, -2, -2, -1, -2, -2, -2, -2, -1, -1, -2, -1, -1, -1, -1, -2, -1] shape: [4,3,2] signed: True outputs: - - tensor: [8, 7, 6, 5, 8, 6, 5, 6] + - tensor: [6, 8, 8, 9, 8, 8, 7, 5] shape: [4,2] signed: True --- @@ -137,14 +137,14 @@ program: | p-error: 1e-06 tests: - inputs: - - tensor: [-1, -2, -1, -2, -2, -2, -2, -1, -2, -2, -2, -2, -1, -2, -1, -1, -2, -2, -1, -1, -2, -2, -2, -2] + - tensor: [-2, -1, -1, -2, -2, -1, -1, -2, -1, -2, -2, -2, -1, -2, -2, -2, -2, -1, -1, -2, -2, -2, -1, -1] shape: [2,3,4] signed: True - - tensor: [-1, -2, -1, -1] + - tensor: [-2, -2, -2, -2] shape: [4] signed: True outputs: - - tensor: [8, 9, 10, 7, 8, 10] + - tensor: [12, 12, 14, 14, 12, 12] shape: [2,3] signed: True --- @@ -174,14 +174,14 @@ program: | p-error: 1e-06 tests: - inputs: - - tensor: [-2, -1, -2, -1, -1, -1, -2, -2, -2, -2, -2, -1, -2, -1, -2, -1, -1, -1, -1, -2, -2, -1, -2, -2] + - tensor: [-2, -2, -2, -1, -1, -1, -2, -1, -1, -2, -2, -2, -1, -1, -2, -2, -2, -1, -1, -1, -1, -2, -1, -2] shape: [2,1,3,4] signed: True - - tensor: [-2, -1, -2, -2, -2, -1, -1, -1, -2, -2, -1, -1, -2, -2, -2, -1, -2, -1, -2, -2, -2, -1, -2, -2, -1, -2, -2, -2, -2, -2, -1, -1, -1, -2, -2, -1, -2, -1, -1, -1] + - tensor: [-2, -1, -2, -1, -2, -2, -1, -2, -1, -2, -2, -2, -2, -2, -1, -2, -1, -1, -1, -2, -2, -1, -2, -2, -2, -2, -2, -1, -2, -1, -1, -2, -1, -2, -1, -1, -1, -1, -2, -1] shape: [5,4,2] signed: True outputs: - - tensor: [11, 7, 10, 7, 13, 9, 11, 10, 11, 9, 12, 11, 12, 8, 12, 9, 14, 10, 9, 11, 9, 10, 11, 13, 9, 8, 9, 7, 11, 9, 11, 7, 8, 6, 12, 8, 11, 10, 9, 7, 13, 11, 12, 8, 10, 8, 14, 10, 9, 11, 7, 8, 10, 12, 9, 8, 7, 6, 10, 9] + - tensor: [13, 10, 9, 8, 12, 11, 11, 14, 8, 10, 11, 14, 10, 10, 8, 7, 11, 11, 13, 10, 9, 7, 12, 10, 8, 9, 6, 6, 9, 8, 10, 10, 9, 7, 10, 9, 9, 12, 7, 10, 9, 12, 10, 9, 7, 7, 9, 10, 10, 9, 9, 8, 10, 9, 8, 7, 6, 7, 8, 7] shape: [2,5,3,2] signed: True --- @@ -212,10 +212,10 @@ program: | p-error: 1e-06 tests: - inputs: - - tensor: [-1, -2, -2] + - tensor: [-2, -2, -1] shape: [3] signed: True - - tensor: [-1, -1, -2] + - tensor: [-2, -1, -1] shape: [3] signed: True outputs: diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/CMakeLists.txt b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/CMakeLists.txt index 16cf5b4e3..1fa662fde 100644 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/CMakeLists.txt +++ b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/CMakeLists.txt @@ -28,9 +28,3 @@ add_concretecompiler_unittest(end_to_end_jit_test end_to_end_jit_test.cc globals add_concretecompiler_unittest(end_to_end_test end_to_end_test.cc globals.cc) add_concretecompiler_unittest(end_to_end_jit_lambda end_to_end_jit_lambda.cc globals.cc) - -if(CONCRETELANG_DATAFLOW_EXECUTION_ENABLED) - add_concretecompiler_unittest(end_to_end_jit_auto_parallelization end_to_end_jit_auto_parallelization.cc globals.cc) - add_concretecompiler_unittest(end_to_end_jit_distributed end_to_end_jit_distributed.cc globals.cc) - add_concretecompiler_unittest(end_to_end_jit_aes_short end_to_end_jit_aes_short.cc globals.cc) -endif() diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_aes_short.cc b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_aes_short.cc deleted file mode 100644 index d14a74aa3..000000000 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_aes_short.cc +++ /dev/null @@ -1,2741 +0,0 @@ -#include -#include -#include -#include -#include - -#include "concretelang/TestLib/TestProgram.h" -#include "end_to_end_jit_test.h" -#include "tests_tools/GtestEnvironment.h" -std::vector distributed_results; - -TEST(AES, aes_df) { - checkedJit(lambda, R"XXX( -module { - func.func @main(%arg0: tensor<176x!FHE.eint<8>>, %arg1: tensor<176x!FHE.eint<8>>, %arg2: tensor<16x!FHE.eint<8>>) -> tensor<16x!FHE.eint<8>> { - %cst = arith.constant dense<0> : tensor<1xi9> - %cst_0 = arith.constant dense<0> : tensor<1xi9> - %cst_1 = arith.constant dense<0> : tensor<1xi9> - %cst_2 = arith.constant dense<0> : tensor<1xi9> - %cst_3 = arith.constant dense<0> : tensor<1xi9> - %cst_4 = arith.constant dense<0> : tensor<1xi9> - %cst_5 = arith.constant dense<0> : tensor<1xi9> - %cst_6 = arith.constant dense<0> : tensor<1xi9> - %cst_7 = arith.constant dense<0> : tensor<1xi9> - %cst_8 = arith.constant dense<0> : tensor<1xi9> - %cst_9 = arith.constant dense<0> : tensor<1xi9> - %cst_10 = arith.constant dense<0> : tensor<1xi9> - %cst_11 = arith.constant dense<0> : tensor<1xi9> - %cst_12 = arith.constant dense<0> : tensor<1xi9> - %cst_13 = arith.constant dense<0> : tensor<1xi9> - %cst_14 = arith.constant dense<0> : tensor<1xi9> - %c16_i9 = arith.constant 16 : i9 - %c16_i9_15 = arith.constant 16 : i9 - %c16_i9_16 = arith.constant 16 : i9 - %c16_i9_17 = arith.constant 16 : i9 - %c16_i9_18 = arith.constant 16 : i9 - %c16_i9_19 = arith.constant 16 : i9 - %c16_i9_20 = arith.constant 16 : i9 - %c16_i9_21 = arith.constant 16 : i9 - %c16_i9_22 = arith.constant 16 : i9 - %c16_i9_23 = arith.constant 16 : i9 - %c16_i9_24 = arith.constant 16 : i9 - %c16_i9_25 = arith.constant 16 : i9 - %c16_i9_26 = arith.constant 16 : i9 - %c16_i9_27 = arith.constant 16 : i9 - %c16_i9_28 = arith.constant 16 : i9 - %c16_i9_29 = arith.constant 16 : i9 - %c16_i9_30 = arith.constant 16 : i9 - %c16_i9_31 = arith.constant 16 : i9 - %c16_i9_32 = arith.constant 16 : i9 - %c16_i9_33 = arith.constant 16 : i9 - %c16_i9_34 = arith.constant 16 : i9 - %c16_i9_35 = arith.constant 16 : i9 - %c16_i9_36 = arith.constant 16 : i9 - %c16_i9_37 = arith.constant 16 : i9 - %c16_i9_38 = arith.constant 16 : i9 - %c16_i9_39 = arith.constant 16 : i9 - %c16_i9_40 = arith.constant 16 : i9 - %c16_i9_41 = arith.constant 16 : i9 - %c16_i9_42 = arith.constant 16 : i9 - %c16_i9_43 = arith.constant 16 : i9 - %c16_i9_44 = arith.constant 16 : i9 - %c16_i9_45 = arith.constant 16 : i9 - %c16_i9_46 = arith.constant 16 : i9 - %c16_i9_47 = arith.constant 16 : i9 - %c16_i9_48 = arith.constant 16 : i9 - %c16_i9_49 = arith.constant 16 : i9 - %c16_i9_50 = arith.constant 16 : i9 - %c16_i9_51 = arith.constant 16 : i9 - %c16_i9_52 = arith.constant 16 : i9 - %c16_i9_53 = arith.constant 16 : i9 - %c16_i9_54 = arith.constant 16 : i9 - %c16_i9_55 = arith.constant 16 : i9 - %c16_i9_56 = arith.constant 16 : i9 - %c16_i9_57 = arith.constant 16 : i9 - %c16_i9_58 = arith.constant 16 : i9 - %c16_i9_59 = arith.constant 16 : i9 - %c16_i9_60 = arith.constant 16 : i9 - %c16_i9_61 = arith.constant 16 : i9 - %c16_i9_62 = arith.constant 16 : i9 - %c16_i9_63 = arith.constant 16 : i9 - %c16_i9_64 = arith.constant 16 : i9 - %c16_i9_65 = arith.constant 16 : i9 - %c16_i9_66 = arith.constant 16 : i9 - %c16_i9_67 = arith.constant 16 : i9 - %c16_i9_68 = arith.constant 16 : i9 - %c16_i9_69 = arith.constant 16 : i9 - %c16_i9_70 = arith.constant 16 : i9 - %c16_i9_71 = arith.constant 16 : i9 - %c16_i9_72 = arith.constant 16 : i9 - %c16_i9_73 = arith.constant 16 : i9 - %c16_i9_74 = arith.constant 16 : i9 - %c16_i9_75 = arith.constant 16 : i9 - %c16_i9_76 = arith.constant 16 : i9 - %c16_i9_77 = arith.constant 16 : i9 - %c16_i9_78 = arith.constant 16 : i9 - %c16_i9_79 = arith.constant 16 : i9 - %c16_i9_80 = arith.constant 16 : i9 - %c16_i9_81 = arith.constant 16 : i9 - %c16_i9_82 = arith.constant 16 : i9 - %c16_i9_83 = arith.constant 16 : i9 - %c16_i9_84 = arith.constant 16 : i9 - %c16_i9_85 = arith.constant 16 : i9 - %c16_i9_86 = arith.constant 16 : i9 - %c16_i9_87 = arith.constant 16 : i9 - %c16_i9_88 = arith.constant 16 : i9 - %c16_i9_89 = arith.constant 16 : i9 - %c16_i9_90 = arith.constant 16 : i9 - %c16_i9_91 = arith.constant 16 : i9 - %c16_i9_92 = arith.constant 16 : i9 - %c16_i9_93 = arith.constant 16 : i9 - %c16_i9_94 = arith.constant 16 : i9 - %c16_i9_95 = arith.constant 16 : i9 - %c16_i9_96 = arith.constant 16 : i9 - %c16_i9_97 = arith.constant 16 : i9 - %c16_i9_98 = arith.constant 16 : i9 - %c16_i9_99 = arith.constant 16 : i9 - %c16_i9_100 = arith.constant 16 : i9 - %c16_i9_101 = arith.constant 16 : i9 - %c16_i9_102 = arith.constant 16 : i9 - %c16_i9_103 = arith.constant 16 : i9 - %c16_i9_104 = arith.constant 16 : i9 - %c16_i9_105 = arith.constant 16 : i9 - %c16_i9_106 = arith.constant 16 : i9 - %c16_i9_107 = arith.constant 16 : i9 - %c16_i9_108 = arith.constant 16 : i9 - %c16_i9_109 = arith.constant 16 : i9 - %c16_i9_110 = arith.constant 16 : i9 - %c16_i9_111 = arith.constant 16 : i9 - %c16_i9_112 = arith.constant 16 : i9 - %c16_i9_113 = arith.constant 16 : i9 - %c16_i9_114 = arith.constant 16 : i9 - %c16_i9_115 = arith.constant 16 : i9 - %c16_i9_116 = arith.constant 16 : i9 - %c16_i9_117 = arith.constant 16 : i9 - %c16_i9_118 = arith.constant 16 : i9 - %c16_i9_119 = arith.constant 16 : i9 - %c16_i9_120 = arith.constant 16 : i9 - %c16_i9_121 = arith.constant 16 : i9 - %c16_i9_122 = arith.constant 16 : i9 - %c16_i9_123 = arith.constant 16 : i9 - %c16_i9_124 = arith.constant 16 : i9 - %c16_i9_125 = arith.constant 16 : i9 - %c16_i9_126 = arith.constant 16 : i9 - %c16_i9_127 = arith.constant 16 : i9 - %c16_i9_128 = arith.constant 16 : i9 - %c16_i9_129 = arith.constant 16 : i9 - %c16_i9_130 = arith.constant 16 : i9 - %c16_i9_131 = arith.constant 16 : i9 - %c16_i9_132 = arith.constant 16 : i9 - %c16_i9_133 = arith.constant 16 : i9 - %c16_i9_134 = arith.constant 16 : i9 - %c16_i9_135 = arith.constant 16 : i9 - %c16_i9_136 = arith.constant 16 : i9 - %c16_i9_137 = arith.constant 16 : i9 - %c16_i9_138 = arith.constant 16 : i9 - %c16_i9_139 = arith.constant 16 : i9 - %c16_i9_140 = arith.constant 16 : i9 - %c16_i9_141 = arith.constant 16 : i9 - %c16_i9_142 = arith.constant 16 : i9 - %c16_i9_143 = arith.constant 16 : i9 - %c16_i9_144 = arith.constant 16 : i9 - %c16_i9_145 = arith.constant 16 : i9 - %c16_i9_146 = arith.constant 16 : i9 - %c16_i9_147 = arith.constant 16 : i9 - %c16_i9_148 = arith.constant 16 : i9 - %c16_i9_149 = arith.constant 16 : i9 - %c16_i9_150 = arith.constant 16 : i9 - %c16_i9_151 = arith.constant 16 : i9 - %c16_i9_152 = arith.constant 16 : i9 - %c16_i9_153 = arith.constant 16 : i9 - %c16_i9_154 = arith.constant 16 : i9 - %c16_i9_155 = arith.constant 16 : i9 - %c16_i9_156 = arith.constant 16 : i9 - %c16_i9_157 = arith.constant 16 : i9 - %c16_i9_158 = arith.constant 16 : i9 - %c16_i9_159 = arith.constant 16 : i9 - %c16_i9_160 = arith.constant 16 : i9 - %c16_i9_161 = arith.constant 16 : i9 - %c16_i9_162 = arith.constant 16 : i9 - %c16_i9_163 = arith.constant 16 : i9 - %c16_i9_164 = arith.constant 16 : i9 - %c16_i9_165 = arith.constant 16 : i9 - %c16_i9_166 = arith.constant 16 : i9 - %c16_i9_167 = arith.constant 16 : i9 - %c16_i9_168 = arith.constant 16 : i9 - %c16_i9_169 = arith.constant 16 : i9 - %c16_i9_170 = arith.constant 16 : i9 - %c16_i9_171 = arith.constant 16 : i9 - %c16_i9_172 = arith.constant 16 : i9 - %c16_i9_173 = arith.constant 16 : i9 - %c16_i9_174 = arith.constant 16 : i9 - %c16_i9_175 = arith.constant 16 : i9 - %c16_i9_176 = arith.constant 16 : i9 - %c16_i9_177 = arith.constant 16 : i9 - %c16_i9_178 = arith.constant 16 : i9 - %c16_i9_179 = arith.constant 16 : i9 - %c16_i9_180 = arith.constant 16 : i9 - %c16_i9_181 = arith.constant 16 : i9 - %c16_i9_182 = arith.constant 16 : i9 - %c16_i9_183 = arith.constant 16 : i9 - %c16_i9_184 = arith.constant 16 : i9 - %c16_i9_185 = arith.constant 16 : i9 - %c16_i9_186 = arith.constant 16 : i9 - %c16_i9_187 = arith.constant 16 : i9 - %c16_i9_188 = arith.constant 16 : i9 - %c16_i9_189 = arith.constant 16 : i9 - %c16_i9_190 = arith.constant 16 : i9 - %c16_i9_191 = arith.constant 16 : i9 - %c16_i9_192 = arith.constant 16 : i9 - %c16_i9_193 = arith.constant 16 : i9 - %c16_i9_194 = arith.constant 16 : i9 - %c16_i9_195 = arith.constant 16 : i9 - %c16_i9_196 = arith.constant 16 : i9 - %c16_i9_197 = arith.constant 16 : i9 - %c16_i9_198 = arith.constant 16 : i9 - %c16_i9_199 = arith.constant 16 : i9 - %c16_i9_200 = arith.constant 16 : i9 - %c16_i9_201 = arith.constant 16 : i9 - %c16_i9_202 = arith.constant 16 : i9 - %c16_i9_203 = arith.constant 16 : i9 - %c16_i9_204 = arith.constant 16 : i9 - %c16_i9_205 = arith.constant 16 : i9 - %c16_i9_206 = arith.constant 16 : i9 - %c16_i9_207 = arith.constant 16 : i9 - %c16_i9_208 = arith.constant 16 : i9 - %c16_i9_209 = arith.constant 16 : i9 - %c16_i9_210 = arith.constant 16 : i9 - %c16_i9_211 = arith.constant 16 : i9 - %c16_i9_212 = arith.constant 16 : i9 - %c16_i9_213 = arith.constant 16 : i9 - %c16_i9_214 = arith.constant 16 : i9 - %c16_i9_215 = arith.constant 16 : i9 - %c16_i9_216 = arith.constant 16 : i9 - %c16_i9_217 = arith.constant 16 : i9 - %c16_i9_218 = arith.constant 16 : i9 - %c16_i9_219 = arith.constant 16 : i9 - %c16_i9_220 = arith.constant 16 : i9 - %c16_i9_221 = arith.constant 16 : i9 - %c16_i9_222 = arith.constant 16 : i9 - %c16_i9_223 = arith.constant 16 : i9 - %c16_i9_224 = arith.constant 16 : i9 - %c16_i9_225 = arith.constant 16 : i9 - %c16_i9_226 = arith.constant 16 : i9 - %c16_i9_227 = arith.constant 16 : i9 - %c16_i9_228 = arith.constant 16 : i9 - %c16_i9_229 = arith.constant 16 : i9 - %c16_i9_230 = arith.constant 16 : i9 - %c16_i9_231 = arith.constant 16 : i9 - %c16_i9_232 = arith.constant 16 : i9 - %c16_i9_233 = arith.constant 16 : i9 - %c16_i9_234 = arith.constant 16 : i9 - %c16_i9_235 = arith.constant 16 : i9 - %c16_i9_236 = arith.constant 16 : i9 - %c16_i9_237 = arith.constant 16 : i9 - %c16_i9_238 = arith.constant 16 : i9 - %c15_i9 = arith.constant 15 : i9 - %c16_i9_239 = arith.constant 16 : i9 - %c15_i9_240 = arith.constant 15 : i9 - %c16_i9_241 = arith.constant 16 : i9 - %c15_i9_242 = arith.constant 15 : i9 - %c16_i9_243 = arith.constant 16 : i9 - %c15_i9_244 = arith.constant 15 : i9 - %c16_i9_245 = arith.constant 16 : i9 - %c16_i9_246 = arith.constant 16 : i9 - %c16_i9_247 = arith.constant 16 : i9 - %c16_i9_248 = arith.constant 16 : i9 - %c16_i9_249 = arith.constant 16 : i9 - %c16_i9_250 = arith.constant 16 : i9 - %c16_i9_251 = arith.constant 16 : i9 - %c16_i9_252 = arith.constant 16 : i9 - %c16_i9_253 = arith.constant 16 : i9 - %c16_i9_254 = arith.constant 16 : i9 - %c16_i9_255 = arith.constant 16 : i9 - %c16_i9_256 = arith.constant 16 : i9 - %c16_i9_257 = arith.constant 16 : i9 - %c16_i9_258 = arith.constant 16 : i9 - %c16_i9_259 = arith.constant 16 : i9 - %c16_i9_260 = arith.constant 16 : i9 - %c16_i9_261 = arith.constant 16 : i9 - %c16_i9_262 = arith.constant 16 : i9 - %c16_i9_263 = arith.constant 16 : i9 - %c16_i9_264 = arith.constant 16 : i9 - %c16_i9_265 = arith.constant 16 : i9 - %c16_i9_266 = arith.constant 16 : i9 - %c16_i9_267 = arith.constant 16 : i9 - %c16_i9_268 = arith.constant 16 : i9 - %c16_i9_269 = arith.constant 16 : i9 - %c16_i9_270 = arith.constant 16 : i9 - %c16_i9_271 = arith.constant 16 : i9 - %c16_i9_272 = arith.constant 16 : i9 - %c16_i9_273 = arith.constant 16 : i9 - %c16_i9_274 = arith.constant 16 : i9 - %c16_i9_275 = arith.constant 16 : i9 - %c16_i9_276 = arith.constant 16 : i9 - %c16_i9_277 = arith.constant 16 : i9 - %c16_i9_278 = arith.constant 16 : i9 - %c16_i9_279 = arith.constant 16 : i9 - %c16_i9_280 = arith.constant 16 : i9 - %c16_i9_281 = arith.constant 16 : i9 - %c16_i9_282 = arith.constant 16 : i9 - %c16_i9_283 = arith.constant 16 : i9 - %c16_i9_284 = arith.constant 16 : i9 - %c16_i9_285 = arith.constant 16 : i9 - %c15_i9_286 = arith.constant 15 : i9 - %c16_i9_287 = arith.constant 16 : i9 - %c15_i9_288 = arith.constant 15 : i9 - %c16_i9_289 = arith.constant 16 : i9 - %c15_i9_290 = arith.constant 15 : i9 - %c16_i9_291 = arith.constant 16 : i9 - %c15_i9_292 = arith.constant 15 : i9 - %c16_i9_293 = arith.constant 16 : i9 - %c16_i9_294 = arith.constant 16 : i9 - %c16_i9_295 = arith.constant 16 : i9 - %c16_i9_296 = arith.constant 16 : i9 - %c16_i9_297 = arith.constant 16 : i9 - %c16_i9_298 = arith.constant 16 : i9 - %c16_i9_299 = arith.constant 16 : i9 - %c16_i9_300 = arith.constant 16 : i9 - %c16_i9_301 = arith.constant 16 : i9 - %c16_i9_302 = arith.constant 16 : i9 - %c16_i9_303 = arith.constant 16 : i9 - %c16_i9_304 = arith.constant 16 : i9 - %c16_i9_305 = arith.constant 16 : i9 - %c16_i9_306 = arith.constant 16 : i9 - %c16_i9_307 = arith.constant 16 : i9 - %c16_i9_308 = arith.constant 16 : i9 - %c16_i9_309 = arith.constant 16 : i9 - %c16_i9_310 = arith.constant 16 : i9 - %c16_i9_311 = arith.constant 16 : i9 - %c16_i9_312 = arith.constant 16 : i9 - %c16_i9_313 = arith.constant 16 : i9 - %c16_i9_314 = arith.constant 16 : i9 - %c16_i9_315 = arith.constant 16 : i9 - %c16_i9_316 = arith.constant 16 : i9 - %c16_i9_317 = arith.constant 16 : i9 - %c16_i9_318 = arith.constant 16 : i9 - %c16_i9_319 = arith.constant 16 : i9 - %c16_i9_320 = arith.constant 16 : i9 - %c16_i9_321 = arith.constant 16 : i9 - %c16_i9_322 = arith.constant 16 : i9 - %c16_i9_323 = arith.constant 16 : i9 - %c16_i9_324 = arith.constant 16 : i9 - %c16_i9_325 = arith.constant 16 : i9 - %c16_i9_326 = arith.constant 16 : i9 - %c16_i9_327 = arith.constant 16 : i9 - %c15_i9_328 = arith.constant 15 : i9 - %c16_i9_329 = arith.constant 16 : i9 - %c16_i9_330 = arith.constant 16 : i9 - %c16_i9_331 = arith.constant 16 : i9 - %c15_i9_332 = arith.constant 15 : i9 - %c16_i9_333 = arith.constant 16 : i9 - %c16_i9_334 = arith.constant 16 : i9 - %c16_i9_335 = arith.constant 16 : i9 - %c15_i9_336 = arith.constant 15 : i9 - %c16_i9_337 = arith.constant 16 : i9 - %c16_i9_338 = arith.constant 16 : i9 - %c16_i9_339 = arith.constant 16 : i9 - %c15_i9_340 = arith.constant 15 : i9 - %c16_i9_341 = arith.constant 16 : i9 - %c16_i9_342 = arith.constant 16 : i9 - %c16_i9_343 = arith.constant 16 : i9 - %c15_i9_344 = arith.constant 15 : i9 - %c16_i9_345 = arith.constant 16 : i9 - %c16_i9_346 = arith.constant 16 : i9 - %c16_i9_347 = arith.constant 16 : i9 - %c15_i9_348 = arith.constant 15 : i9 - %c16_i9_349 = arith.constant 16 : i9 - %c16_i9_350 = arith.constant 16 : i9 - %c16_i9_351 = arith.constant 16 : i9 - %c15_i9_352 = arith.constant 15 : i9 - %c16_i9_353 = arith.constant 16 : i9 - %c16_i9_354 = arith.constant 16 : i9 - %c16_i9_355 = arith.constant 16 : i9 - %c15_i9_356 = arith.constant 15 : i9 - %c16_i9_357 = arith.constant 16 : i9 - %c16_i9_358 = arith.constant 16 : i9 - %c16_i9_359 = arith.constant 16 : i9 - %c16_i9_360 = arith.constant 16 : i9 - %c16_i9_361 = arith.constant 16 : i9 - %c16_i9_362 = arith.constant 16 : i9 - %c16_i9_363 = arith.constant 16 : i9 - %c16_i9_364 = arith.constant 16 : i9 - %c160 = arith.constant 160 : index - %0 = tensor.extract %arg0[%c160] : tensor<176x!FHE.eint<8>> - %c161 = arith.constant 161 : index - %1 = tensor.extract %arg0[%c161] : tensor<176x!FHE.eint<8>> - %c162 = arith.constant 162 : index - %2 = tensor.extract %arg0[%c162] : tensor<176x!FHE.eint<8>> - %c163 = arith.constant 163 : index - %3 = tensor.extract %arg0[%c163] : tensor<176x!FHE.eint<8>> - %c164 = arith.constant 164 : index - %4 = tensor.extract %arg0[%c164] : tensor<176x!FHE.eint<8>> - %c165 = arith.constant 165 : index - %5 = tensor.extract %arg0[%c165] : tensor<176x!FHE.eint<8>> - %c166 = arith.constant 166 : index - %6 = tensor.extract %arg0[%c166] : tensor<176x!FHE.eint<8>> - %c167 = arith.constant 167 : index - %7 = tensor.extract %arg0[%c167] : tensor<176x!FHE.eint<8>> - %c168 = arith.constant 168 : index - %8 = tensor.extract %arg0[%c168] : tensor<176x!FHE.eint<8>> - %c169 = arith.constant 169 : index - %9 = tensor.extract %arg0[%c169] : tensor<176x!FHE.eint<8>> - %c170 = arith.constant 170 : index - %10 = tensor.extract %arg0[%c170] : tensor<176x!FHE.eint<8>> - %c171 = arith.constant 171 : index - %11 = tensor.extract %arg0[%c171] : tensor<176x!FHE.eint<8>> - %c172 = arith.constant 172 : index - %12 = tensor.extract %arg0[%c172] : tensor<176x!FHE.eint<8>> - %c173 = arith.constant 173 : index - %13 = tensor.extract %arg0[%c173] : tensor<176x!FHE.eint<8>> - %c174 = arith.constant 174 : index - %14 = tensor.extract %arg0[%c174] : tensor<176x!FHE.eint<8>> - %c175 = arith.constant 175 : index - %15 = tensor.extract %arg0[%c175] : tensor<176x!FHE.eint<8>> - %c32 = arith.constant 32 : index - %16 = tensor.extract %arg0[%c32] : tensor<176x!FHE.eint<8>> - %c37 = arith.constant 37 : index - %17 = tensor.extract %arg0[%c37] : tensor<176x!FHE.eint<8>> - %c42 = arith.constant 42 : index - %18 = tensor.extract %arg0[%c42] : tensor<176x!FHE.eint<8>> - %c47 = arith.constant 47 : index - %19 = tensor.extract %arg0[%c47] : tensor<176x!FHE.eint<8>> - %c36 = arith.constant 36 : index - %20 = tensor.extract %arg0[%c36] : tensor<176x!FHE.eint<8>> - %c41 = arith.constant 41 : index - %21 = tensor.extract %arg0[%c41] : tensor<176x!FHE.eint<8>> - %c46 = arith.constant 46 : index - %22 = tensor.extract %arg0[%c46] : tensor<176x!FHE.eint<8>> - %c35 = arith.constant 35 : index - %23 = tensor.extract %arg0[%c35] : tensor<176x!FHE.eint<8>> - %c40 = arith.constant 40 : index - %24 = tensor.extract %arg0[%c40] : tensor<176x!FHE.eint<8>> - %c45 = arith.constant 45 : index - %25 = tensor.extract %arg0[%c45] : tensor<176x!FHE.eint<8>> - %c34 = arith.constant 34 : index - %26 = tensor.extract %arg0[%c34] : tensor<176x!FHE.eint<8>> - %c39 = arith.constant 39 : index - %27 = tensor.extract %arg0[%c39] : tensor<176x!FHE.eint<8>> - %c44 = arith.constant 44 : index - %28 = tensor.extract %arg0[%c44] : tensor<176x!FHE.eint<8>> - %c33 = arith.constant 33 : index - %29 = tensor.extract %arg0[%c33] : tensor<176x!FHE.eint<8>> - %c38 = arith.constant 38 : index - %30 = tensor.extract %arg0[%c38] : tensor<176x!FHE.eint<8>> - %c43 = arith.constant 43 : index - %31 = tensor.extract %arg0[%c43] : tensor<176x!FHE.eint<8>> - %c31 = arith.constant 31 : index - %32 = tensor.extract %arg0[%c31] : tensor<176x!FHE.eint<8>> - %c19 = arith.constant 19 : index - %33 = tensor.extract %arg0[%c19] : tensor<176x!FHE.eint<8>> - %c23 = arith.constant 23 : index - %34 = tensor.extract %arg0[%c23] : tensor<176x!FHE.eint<8>> - %c27 = arith.constant 27 : index - %35 = tensor.extract %arg0[%c27] : tensor<176x!FHE.eint<8>> - %c26 = arith.constant 26 : index - %36 = tensor.extract %arg0[%c26] : tensor<176x!FHE.eint<8>> - %c30 = arith.constant 30 : index - %37 = tensor.extract %arg0[%c30] : tensor<176x!FHE.eint<8>> - %c18 = arith.constant 18 : index - %38 = tensor.extract %arg0[%c18] : tensor<176x!FHE.eint<8>> - %c22 = arith.constant 22 : index - %39 = tensor.extract %arg0[%c22] : tensor<176x!FHE.eint<8>> - %c21 = arith.constant 21 : index - %40 = tensor.extract %arg0[%c21] : tensor<176x!FHE.eint<8>> - %c25 = arith.constant 25 : index - %41 = tensor.extract %arg0[%c25] : tensor<176x!FHE.eint<8>> - %c29 = arith.constant 29 : index - %42 = tensor.extract %arg0[%c29] : tensor<176x!FHE.eint<8>> - %c17 = arith.constant 17 : index - %43 = tensor.extract %arg0[%c17] : tensor<176x!FHE.eint<8>> - %c16 = arith.constant 16 : index - %44 = tensor.extract %arg0[%c16] : tensor<176x!FHE.eint<8>> - %c11 = arith.constant 11 : index - %45 = tensor.extract %arg0[%c11] : tensor<176x!FHE.eint<8>> - %c20 = arith.constant 20 : index - %46 = tensor.extract %arg0[%c20] : tensor<176x!FHE.eint<8>> - %c15 = arith.constant 15 : index - %47 = tensor.extract %arg0[%c15] : tensor<176x!FHE.eint<8>> - %c24 = arith.constant 24 : index - %48 = tensor.extract %arg0[%c24] : tensor<176x!FHE.eint<8>> - %c3 = arith.constant 3 : index - %49 = tensor.extract %arg0[%c3] : tensor<176x!FHE.eint<8>> - %c28 = arith.constant 28 : index - %50 = tensor.extract %arg0[%c28] : tensor<176x!FHE.eint<8>> - %c7 = arith.constant 7 : index - %51 = tensor.extract %arg0[%c7] : tensor<176x!FHE.eint<8>> - %c6 = arith.constant 6 : index - %52 = tensor.extract %arg0[%c6] : tensor<176x!FHE.eint<8>> - %c10 = arith.constant 10 : index - %53 = tensor.extract %arg0[%c10] : tensor<176x!FHE.eint<8>> - %c14 = arith.constant 14 : index - %54 = tensor.extract %arg0[%c14] : tensor<176x!FHE.eint<8>> - %c2 = arith.constant 2 : index - %55 = tensor.extract %arg0[%c2] : tensor<176x!FHE.eint<8>> - %c1 = arith.constant 1 : index - %56 = tensor.extract %arg0[%c1] : tensor<176x!FHE.eint<8>> - %c5 = arith.constant 5 : index - %57 = tensor.extract %arg0[%c5] : tensor<176x!FHE.eint<8>> - %c9 = arith.constant 9 : index - %58 = tensor.extract %arg0[%c9] : tensor<176x!FHE.eint<8>> - %c13 = arith.constant 13 : index - %59 = tensor.extract %arg0[%c13] : tensor<176x!FHE.eint<8>> - %c12 = arith.constant 12 : index - %60 = tensor.extract %arg0[%c12] : tensor<176x!FHE.eint<8>> - %c0 = arith.constant 0 : index - %61 = tensor.extract %arg0[%c0] : tensor<176x!FHE.eint<8>> - %c4 = arith.constant 4 : index - %62 = tensor.extract %arg0[%c4] : tensor<176x!FHE.eint<8>> - %c8 = arith.constant 8 : index - %63 = tensor.extract %arg0[%c8] : tensor<176x!FHE.eint<8>> - %c160_365 = arith.constant 160 : index - %64 = tensor.extract %arg1[%c160_365] : tensor<176x!FHE.eint<8>> - %c161_366 = arith.constant 161 : index - %65 = tensor.extract %arg1[%c161_366] : tensor<176x!FHE.eint<8>> - %c162_367 = arith.constant 162 : index - %66 = tensor.extract %arg1[%c162_367] : tensor<176x!FHE.eint<8>> - %c163_368 = arith.constant 163 : index - %67 = tensor.extract %arg1[%c163_368] : tensor<176x!FHE.eint<8>> - %c164_369 = arith.constant 164 : index - %68 = tensor.extract %arg1[%c164_369] : tensor<176x!FHE.eint<8>> - %c165_370 = arith.constant 165 : index - %69 = tensor.extract %arg1[%c165_370] : tensor<176x!FHE.eint<8>> - %c166_371 = arith.constant 166 : index - %70 = tensor.extract %arg1[%c166_371] : tensor<176x!FHE.eint<8>> - %c167_372 = arith.constant 167 : index - %71 = tensor.extract %arg1[%c167_372] : tensor<176x!FHE.eint<8>> - %c168_373 = arith.constant 168 : index - %72 = tensor.extract %arg1[%c168_373] : tensor<176x!FHE.eint<8>> - %c169_374 = arith.constant 169 : index - %73 = tensor.extract %arg1[%c169_374] : tensor<176x!FHE.eint<8>> - %c170_375 = arith.constant 170 : index - %74 = tensor.extract %arg1[%c170_375] : tensor<176x!FHE.eint<8>> - %c171_376 = arith.constant 171 : index - %75 = tensor.extract %arg1[%c171_376] : tensor<176x!FHE.eint<8>> - %c172_377 = arith.constant 172 : index - %76 = tensor.extract %arg1[%c172_377] : tensor<176x!FHE.eint<8>> - %c173_378 = arith.constant 173 : index - %77 = tensor.extract %arg1[%c173_378] : tensor<176x!FHE.eint<8>> - %c174_379 = arith.constant 174 : index - %78 = tensor.extract %arg1[%c174_379] : tensor<176x!FHE.eint<8>> - %c175_380 = arith.constant 175 : index - %79 = tensor.extract %arg1[%c175_380] : tensor<176x!FHE.eint<8>> - %c32_381 = arith.constant 32 : index - %80 = tensor.extract %arg1[%c32_381] : tensor<176x!FHE.eint<8>> - %c37_382 = arith.constant 37 : index - %81 = tensor.extract %arg1[%c37_382] : tensor<176x!FHE.eint<8>> - %c42_383 = arith.constant 42 : index - %82 = tensor.extract %arg1[%c42_383] : tensor<176x!FHE.eint<8>> - %c47_384 = arith.constant 47 : index - %83 = tensor.extract %arg1[%c47_384] : tensor<176x!FHE.eint<8>> - %c36_385 = arith.constant 36 : index - %84 = tensor.extract %arg1[%c36_385] : tensor<176x!FHE.eint<8>> - %c41_386 = arith.constant 41 : index - %85 = tensor.extract %arg1[%c41_386] : tensor<176x!FHE.eint<8>> - %c46_387 = arith.constant 46 : index - %86 = tensor.extract %arg1[%c46_387] : tensor<176x!FHE.eint<8>> - %c35_388 = arith.constant 35 : index - %87 = tensor.extract %arg1[%c35_388] : tensor<176x!FHE.eint<8>> - %c40_389 = arith.constant 40 : index - %88 = tensor.extract %arg1[%c40_389] : tensor<176x!FHE.eint<8>> - %c45_390 = arith.constant 45 : index - %89 = tensor.extract %arg1[%c45_390] : tensor<176x!FHE.eint<8>> - %c34_391 = arith.constant 34 : index - %90 = tensor.extract %arg1[%c34_391] : tensor<176x!FHE.eint<8>> - %c39_392 = arith.constant 39 : index - %91 = tensor.extract %arg1[%c39_392] : tensor<176x!FHE.eint<8>> - %c44_393 = arith.constant 44 : index - %92 = tensor.extract %arg1[%c44_393] : tensor<176x!FHE.eint<8>> - %c33_394 = arith.constant 33 : index - %93 = tensor.extract %arg1[%c33_394] : tensor<176x!FHE.eint<8>> - %c38_395 = arith.constant 38 : index - %94 = tensor.extract %arg1[%c38_395] : tensor<176x!FHE.eint<8>> - %c43_396 = arith.constant 43 : index - %95 = tensor.extract %arg1[%c43_396] : tensor<176x!FHE.eint<8>> - %c31_397 = arith.constant 31 : index - %96 = tensor.extract %arg1[%c31_397] : tensor<176x!FHE.eint<8>> - %c19_398 = arith.constant 19 : index - %97 = tensor.extract %arg1[%c19_398] : tensor<176x!FHE.eint<8>> - %c23_399 = arith.constant 23 : index - %98 = tensor.extract %arg1[%c23_399] : tensor<176x!FHE.eint<8>> - %c27_400 = arith.constant 27 : index - %99 = tensor.extract %arg1[%c27_400] : tensor<176x!FHE.eint<8>> - %c26_401 = arith.constant 26 : index - %100 = tensor.extract %arg1[%c26_401] : tensor<176x!FHE.eint<8>> - %c30_402 = arith.constant 30 : index - %101 = tensor.extract %arg1[%c30_402] : tensor<176x!FHE.eint<8>> - %c18_403 = arith.constant 18 : index - %102 = tensor.extract %arg1[%c18_403] : tensor<176x!FHE.eint<8>> - %c22_404 = arith.constant 22 : index - %103 = tensor.extract %arg1[%c22_404] : tensor<176x!FHE.eint<8>> - %c21_405 = arith.constant 21 : index - %104 = tensor.extract %arg1[%c21_405] : tensor<176x!FHE.eint<8>> - %c25_406 = arith.constant 25 : index - %105 = tensor.extract %arg1[%c25_406] : tensor<176x!FHE.eint<8>> - %c29_407 = arith.constant 29 : index - %106 = tensor.extract %arg1[%c29_407] : tensor<176x!FHE.eint<8>> - %c17_408 = arith.constant 17 : index - %107 = tensor.extract %arg1[%c17_408] : tensor<176x!FHE.eint<8>> - %c16_409 = arith.constant 16 : index - %108 = tensor.extract %arg1[%c16_409] : tensor<176x!FHE.eint<8>> - %c11_410 = arith.constant 11 : index - %109 = tensor.extract %arg1[%c11_410] : tensor<176x!FHE.eint<8>> - %c20_411 = arith.constant 20 : index - %110 = tensor.extract %arg1[%c20_411] : tensor<176x!FHE.eint<8>> - %c15_412 = arith.constant 15 : index - %111 = tensor.extract %arg1[%c15_412] : tensor<176x!FHE.eint<8>> - %c24_413 = arith.constant 24 : index - %112 = tensor.extract %arg1[%c24_413] : tensor<176x!FHE.eint<8>> - %c3_414 = arith.constant 3 : index - %113 = tensor.extract %arg1[%c3_414] : tensor<176x!FHE.eint<8>> - %c28_415 = arith.constant 28 : index - %114 = tensor.extract %arg1[%c28_415] : tensor<176x!FHE.eint<8>> - %c7_416 = arith.constant 7 : index - %115 = tensor.extract %arg1[%c7_416] : tensor<176x!FHE.eint<8>> - %c6_417 = arith.constant 6 : index - %116 = tensor.extract %arg1[%c6_417] : tensor<176x!FHE.eint<8>> - %c10_418 = arith.constant 10 : index - %117 = tensor.extract %arg1[%c10_418] : tensor<176x!FHE.eint<8>> - %c14_419 = arith.constant 14 : index - %118 = tensor.extract %arg1[%c14_419] : tensor<176x!FHE.eint<8>> - %c2_420 = arith.constant 2 : index - %119 = tensor.extract %arg1[%c2_420] : tensor<176x!FHE.eint<8>> - %c1_421 = arith.constant 1 : index - %120 = tensor.extract %arg1[%c1_421] : tensor<176x!FHE.eint<8>> - %c5_422 = arith.constant 5 : index - %121 = tensor.extract %arg1[%c5_422] : tensor<176x!FHE.eint<8>> - %c9_423 = arith.constant 9 : index - %122 = tensor.extract %arg1[%c9_423] : tensor<176x!FHE.eint<8>> - %c13_424 = arith.constant 13 : index - %123 = tensor.extract %arg1[%c13_424] : tensor<176x!FHE.eint<8>> - %c12_425 = arith.constant 12 : index - %124 = tensor.extract %arg1[%c12_425] : tensor<176x!FHE.eint<8>> - %c0_426 = arith.constant 0 : index - %125 = tensor.extract %arg1[%c0_426] : tensor<176x!FHE.eint<8>> - %c4_427 = arith.constant 4 : index - %126 = tensor.extract %arg1[%c4_427] : tensor<176x!FHE.eint<8>> - %c8_428 = arith.constant 8 : index - %127 = tensor.extract %arg1[%c8_428] : tensor<176x!FHE.eint<8>> - %c11_429 = arith.constant 11 : index - %128 = tensor.extract %arg2[%c11_429] : tensor<16x!FHE.eint<8>> - %c15_430 = arith.constant 15 : index - %129 = tensor.extract %arg2[%c15_430] : tensor<16x!FHE.eint<8>> - %c3_431 = arith.constant 3 : index - %130 = tensor.extract %arg2[%c3_431] : tensor<16x!FHE.eint<8>> - %c7_432 = arith.constant 7 : index - %131 = tensor.extract %arg2[%c7_432] : tensor<16x!FHE.eint<8>> - %c6_433 = arith.constant 6 : index - %132 = tensor.extract %arg2[%c6_433] : tensor<16x!FHE.eint<8>> - %c10_434 = arith.constant 10 : index - %133 = tensor.extract %arg2[%c10_434] : tensor<16x!FHE.eint<8>> - %c14_435 = arith.constant 14 : index - %134 = tensor.extract %arg2[%c14_435] : tensor<16x!FHE.eint<8>> - %c2_436 = arith.constant 2 : index - %135 = tensor.extract %arg2[%c2_436] : tensor<16x!FHE.eint<8>> - %c1_437 = arith.constant 1 : index - %136 = tensor.extract %arg2[%c1_437] : tensor<16x!FHE.eint<8>> - %c5_438 = arith.constant 5 : index - %137 = tensor.extract %arg2[%c5_438] : tensor<16x!FHE.eint<8>> - %c9_439 = arith.constant 9 : index - %138 = tensor.extract %arg2[%c9_439] : tensor<16x!FHE.eint<8>> - %c13_440 = arith.constant 13 : index - %139 = tensor.extract %arg2[%c13_440] : tensor<16x!FHE.eint<8>> - %c12_441 = arith.constant 12 : index - %140 = tensor.extract %arg2[%c12_441] : tensor<16x!FHE.eint<8>> - %c0_442 = arith.constant 0 : index - %141 = tensor.extract %arg2[%c0_442] : tensor<16x!FHE.eint<8>> - %c4_443 = arith.constant 4 : index - %142 = tensor.extract %arg2[%c4_443] : tensor<16x!FHE.eint<8>> - %c8_444 = arith.constant 8 : index - %143 = tensor.extract %arg2[%c8_444] : tensor<16x!FHE.eint<8>> - %cst_445 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %144 = "FHE.apply_lookup_table"(%128, %cst_445) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_446 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %145 = "FHE.apply_lookup_table"(%128, %cst_446) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_447 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %146 = "FHE.apply_lookup_table"(%129, %cst_447) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_448 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %147 = "FHE.apply_lookup_table"(%129, %cst_448) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_449 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %148 = "FHE.apply_lookup_table"(%130, %cst_449) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_450 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %149 = "FHE.apply_lookup_table"(%130, %cst_450) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_451 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %150 = "FHE.apply_lookup_table"(%131, %cst_451) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_452 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %151 = "FHE.apply_lookup_table"(%131, %cst_452) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_453 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %152 = "FHE.apply_lookup_table"(%132, %cst_453) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_454 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %153 = "FHE.apply_lookup_table"(%132, %cst_454) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_455 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %154 = "FHE.apply_lookup_table"(%133, %cst_455) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_456 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %155 = "FHE.apply_lookup_table"(%133, %cst_456) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_457 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %156 = "FHE.apply_lookup_table"(%134, %cst_457) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_458 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %157 = "FHE.apply_lookup_table"(%134, %cst_458) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_459 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %158 = "FHE.apply_lookup_table"(%135, %cst_459) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_460 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %159 = "FHE.apply_lookup_table"(%135, %cst_460) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_461 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %160 = "FHE.apply_lookup_table"(%136, %cst_461) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_462 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %161 = "FHE.apply_lookup_table"(%136, %cst_462) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_463 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %162 = "FHE.apply_lookup_table"(%137, %cst_463) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_464 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %163 = "FHE.apply_lookup_table"(%137, %cst_464) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_465 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %164 = "FHE.apply_lookup_table"(%138, %cst_465) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_466 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %165 = "FHE.apply_lookup_table"(%138, %cst_466) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_467 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %166 = "FHE.apply_lookup_table"(%139, %cst_467) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_468 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %167 = "FHE.apply_lookup_table"(%139, %cst_468) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_469 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %168 = "FHE.apply_lookup_table"(%140, %cst_469) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_470 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %169 = "FHE.apply_lookup_table"(%140, %cst_470) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_471 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %170 = "FHE.apply_lookup_table"(%141, %cst_471) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_472 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %171 = "FHE.apply_lookup_table"(%141, %cst_472) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_473 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %172 = "FHE.apply_lookup_table"(%142, %cst_473) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_474 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %173 = "FHE.apply_lookup_table"(%142, %cst_474) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_475 = arith.constant dense<"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000002000000000000000200000000000000020000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000005000000000000000500000000000000050000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000600000000000000060000000000000006000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000A000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F000000000000000F00000000000000"> : tensor<256xi64> - %174 = "FHE.apply_lookup_table"(%143, %cst_475) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_476 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F00000000000000"> : tensor<256xi64> - %175 = "FHE.apply_lookup_table"(%143, %cst_476) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %176 = "FHE.mul_eint_int"(%144, %c16_i9_224) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %177 = "FHE.mul_eint_int"(%145, %c16_i9_225) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %178 = "FHE.mul_eint_int"(%146, %c16_i9_228) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %179 = "FHE.mul_eint_int"(%147, %c16_i9_229) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %180 = "FHE.mul_eint_int"(%148, %c16_i9_232) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %181 = "FHE.mul_eint_int"(%149, %c16_i9_233) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %182 = "FHE.mul_eint_int"(%150, %c16_i9_236) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %183 = "FHE.mul_eint_int"(%151, %c16_i9_237) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %184 = "FHE.mul_eint_int"(%152, %c16_i9_271) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %185 = "FHE.mul_eint_int"(%153, %c16_i9_272) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %186 = "FHE.mul_eint_int"(%154, %c16_i9_275) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %187 = "FHE.mul_eint_int"(%155, %c16_i9_276) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %188 = "FHE.mul_eint_int"(%156, %c16_i9_279) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %189 = "FHE.mul_eint_int"(%157, %c16_i9_280) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %190 = "FHE.mul_eint_int"(%158, %c16_i9_283) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %191 = "FHE.mul_eint_int"(%159, %c16_i9_284) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %192 = "FHE.mul_eint_int"(%160, %c16_i9_311) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %193 = "FHE.mul_eint_int"(%161, %c16_i9_312) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %194 = "FHE.mul_eint_int"(%162, %c16_i9_315) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %195 = "FHE.mul_eint_int"(%163, %c16_i9_316) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %196 = "FHE.mul_eint_int"(%164, %c16_i9_319) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %197 = "FHE.mul_eint_int"(%165, %c16_i9_320) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %198 = "FHE.mul_eint_int"(%166, %c16_i9_323) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %199 = "FHE.mul_eint_int"(%167, %c16_i9_324) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %200 = "FHE.mul_eint_int"(%168, %c16_i9_325) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %201 = "FHE.mul_eint_int"(%169, %c16_i9_326) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %202 = "FHE.mul_eint_int"(%170, %c16_i9_329) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %203 = "FHE.mul_eint_int"(%171, %c16_i9_330) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %204 = "FHE.mul_eint_int"(%172, %c16_i9_333) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %205 = "FHE.mul_eint_int"(%173, %c16_i9_334) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %206 = "FHE.mul_eint_int"(%174, %c16_i9_337) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %207 = "FHE.mul_eint_int"(%175, %c16_i9_338) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %208 = "FHE.add_eint"(%176, %45) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %209 = "FHE.add_eint"(%177, %109) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %210 = "FHE.add_eint"(%178, %47) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %211 = "FHE.add_eint"(%179, %111) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %212 = "FHE.add_eint"(%180, %49) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %213 = "FHE.add_eint"(%181, %113) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %214 = "FHE.add_eint"(%182, %51) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %215 = "FHE.add_eint"(%183, %115) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %216 = "FHE.add_eint"(%184, %52) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %217 = "FHE.add_eint"(%185, %116) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %218 = "FHE.add_eint"(%186, %53) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %219 = "FHE.add_eint"(%187, %117) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %220 = "FHE.add_eint"(%188, %54) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %221 = "FHE.add_eint"(%189, %118) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %222 = "FHE.add_eint"(%190, %55) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %223 = "FHE.add_eint"(%191, %119) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %224 = "FHE.add_eint"(%192, %56) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %225 = "FHE.add_eint"(%193, %120) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %226 = "FHE.add_eint"(%194, %57) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %227 = "FHE.add_eint"(%195, %121) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %228 = "FHE.add_eint"(%196, %58) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %229 = "FHE.add_eint"(%197, %122) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %230 = "FHE.add_eint"(%198, %59) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %231 = "FHE.add_eint"(%199, %123) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %232 = "FHE.add_eint"(%200, %60) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %233 = "FHE.add_eint"(%201, %124) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %234 = "FHE.add_eint"(%202, %61) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %235 = "FHE.add_eint"(%203, %125) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %236 = "FHE.add_eint"(%204, %62) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %237 = "FHE.add_eint"(%205, %126) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %238 = "FHE.add_eint"(%206, %63) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %239 = "FHE.add_eint"(%207, %127) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_477 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %240 = "FHE.apply_lookup_table"(%208, %cst_477) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_478 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %241 = "FHE.apply_lookup_table"(%209, %cst_478) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_479 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %242 = "FHE.apply_lookup_table"(%210, %cst_479) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_480 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %243 = "FHE.apply_lookup_table"(%211, %cst_480) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_481 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %244 = "FHE.apply_lookup_table"(%212, %cst_481) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_482 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %245 = "FHE.apply_lookup_table"(%213, %cst_482) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_483 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %246 = "FHE.apply_lookup_table"(%214, %cst_483) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_484 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %247 = "FHE.apply_lookup_table"(%215, %cst_484) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_485 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %248 = "FHE.apply_lookup_table"(%216, %cst_485) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_486 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %249 = "FHE.apply_lookup_table"(%217, %cst_486) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_487 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %250 = "FHE.apply_lookup_table"(%218, %cst_487) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_488 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %251 = "FHE.apply_lookup_table"(%219, %cst_488) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_489 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %252 = "FHE.apply_lookup_table"(%220, %cst_489) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_490 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %253 = "FHE.apply_lookup_table"(%221, %cst_490) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_491 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %254 = "FHE.apply_lookup_table"(%222, %cst_491) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_492 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %255 = "FHE.apply_lookup_table"(%223, %cst_492) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_493 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %256 = "FHE.apply_lookup_table"(%224, %cst_493) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_494 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %257 = "FHE.apply_lookup_table"(%225, %cst_494) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_495 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %258 = "FHE.apply_lookup_table"(%226, %cst_495) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_496 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %259 = "FHE.apply_lookup_table"(%227, %cst_496) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_497 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %260 = "FHE.apply_lookup_table"(%228, %cst_497) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_498 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %261 = "FHE.apply_lookup_table"(%229, %cst_498) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_499 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %262 = "FHE.apply_lookup_table"(%230, %cst_499) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_500 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %263 = "FHE.apply_lookup_table"(%231, %cst_500) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_501 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %264 = "FHE.apply_lookup_table"(%232, %cst_501) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_502 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %265 = "FHE.apply_lookup_table"(%233, %cst_502) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_503 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %266 = "FHE.apply_lookup_table"(%234, %cst_503) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_504 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %267 = "FHE.apply_lookup_table"(%235, %cst_504) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_505 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %268 = "FHE.apply_lookup_table"(%236, %cst_505) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_506 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %269 = "FHE.apply_lookup_table"(%237, %cst_506) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_507 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %270 = "FHE.apply_lookup_table"(%238, %cst_507) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_508 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %271 = "FHE.apply_lookup_table"(%239, %cst_508) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %272 = "FHE.add_eint"(%240, %241) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %273 = "FHE.add_eint"(%242, %243) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %274 = "FHE.add_eint"(%244, %245) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %275 = "FHE.add_eint"(%246, %247) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %276 = "FHE.add_eint"(%248, %249) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %277 = "FHE.add_eint"(%250, %251) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %278 = "FHE.add_eint"(%252, %253) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %279 = "FHE.add_eint"(%254, %255) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %280 = "FHE.add_eint"(%256, %257) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %281 = "FHE.add_eint"(%258, %259) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %282 = "FHE.add_eint"(%260, %261) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %283 = "FHE.add_eint"(%262, %263) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %284 = "FHE.add_eint"(%264, %265) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %285 = "FHE.add_eint"(%266, %267) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %286 = "FHE.add_eint"(%268, %269) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %287 = "FHE.add_eint"(%270, %271) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_509 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %288 = "FHE.apply_lookup_table"(%272, %cst_509) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_510 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %289 = "FHE.apply_lookup_table"(%272, %cst_510) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_511 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %290 = "FHE.apply_lookup_table"(%272, %cst_511) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_512 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %291 = "FHE.apply_lookup_table"(%272, %cst_512) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_513 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %292 = "FHE.apply_lookup_table"(%272, %cst_513) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_514 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %293 = "FHE.apply_lookup_table"(%272, %cst_514) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_515 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %294 = "FHE.apply_lookup_table"(%272, %cst_515) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_516 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %295 = "FHE.apply_lookup_table"(%272, %cst_516) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_517 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %296 = "FHE.apply_lookup_table"(%273, %cst_517) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_518 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %297 = "FHE.apply_lookup_table"(%273, %cst_518) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_519 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %298 = "FHE.apply_lookup_table"(%273, %cst_519) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_520 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %299 = "FHE.apply_lookup_table"(%273, %cst_520) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_521 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %300 = "FHE.apply_lookup_table"(%273, %cst_521) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_522 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %301 = "FHE.apply_lookup_table"(%273, %cst_522) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_523 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %302 = "FHE.apply_lookup_table"(%273, %cst_523) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_524 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %303 = "FHE.apply_lookup_table"(%273, %cst_524) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_525 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %304 = "FHE.apply_lookup_table"(%274, %cst_525) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_526 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %305 = "FHE.apply_lookup_table"(%274, %cst_526) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_527 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %306 = "FHE.apply_lookup_table"(%274, %cst_527) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_528 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %307 = "FHE.apply_lookup_table"(%274, %cst_528) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_529 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %308 = "FHE.apply_lookup_table"(%274, %cst_529) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_530 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %309 = "FHE.apply_lookup_table"(%274, %cst_530) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_531 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %310 = "FHE.apply_lookup_table"(%274, %cst_531) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_532 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %311 = "FHE.apply_lookup_table"(%274, %cst_532) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_533 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %312 = "FHE.apply_lookup_table"(%275, %cst_533) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_534 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %313 = "FHE.apply_lookup_table"(%275, %cst_534) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_535 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %314 = "FHE.apply_lookup_table"(%275, %cst_535) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_536 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %315 = "FHE.apply_lookup_table"(%275, %cst_536) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_537 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %316 = "FHE.apply_lookup_table"(%275, %cst_537) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_538 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %317 = "FHE.apply_lookup_table"(%275, %cst_538) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_539 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %318 = "FHE.apply_lookup_table"(%275, %cst_539) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_540 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %319 = "FHE.apply_lookup_table"(%275, %cst_540) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_541 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %320 = "FHE.apply_lookup_table"(%276, %cst_541) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_542 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %321 = "FHE.apply_lookup_table"(%276, %cst_542) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_543 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %322 = "FHE.apply_lookup_table"(%276, %cst_543) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_544 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %323 = "FHE.apply_lookup_table"(%276, %cst_544) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_545 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %324 = "FHE.apply_lookup_table"(%276, %cst_545) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_546 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %325 = "FHE.apply_lookup_table"(%276, %cst_546) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_547 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %326 = "FHE.apply_lookup_table"(%276, %cst_547) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_548 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %327 = "FHE.apply_lookup_table"(%276, %cst_548) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_549 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %328 = "FHE.apply_lookup_table"(%277, %cst_549) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_550 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %329 = "FHE.apply_lookup_table"(%277, %cst_550) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_551 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %330 = "FHE.apply_lookup_table"(%277, %cst_551) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_552 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %331 = "FHE.apply_lookup_table"(%277, %cst_552) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_553 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %332 = "FHE.apply_lookup_table"(%277, %cst_553) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_554 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %333 = "FHE.apply_lookup_table"(%277, %cst_554) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_555 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %334 = "FHE.apply_lookup_table"(%277, %cst_555) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_556 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %335 = "FHE.apply_lookup_table"(%277, %cst_556) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_557 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %336 = "FHE.apply_lookup_table"(%278, %cst_557) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_558 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %337 = "FHE.apply_lookup_table"(%278, %cst_558) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_559 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %338 = "FHE.apply_lookup_table"(%278, %cst_559) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_560 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %339 = "FHE.apply_lookup_table"(%278, %cst_560) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_561 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %340 = "FHE.apply_lookup_table"(%278, %cst_561) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_562 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %341 = "FHE.apply_lookup_table"(%278, %cst_562) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_563 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %342 = "FHE.apply_lookup_table"(%278, %cst_563) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_564 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %343 = "FHE.apply_lookup_table"(%278, %cst_564) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_565 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %344 = "FHE.apply_lookup_table"(%279, %cst_565) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_566 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %345 = "FHE.apply_lookup_table"(%279, %cst_566) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_567 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %346 = "FHE.apply_lookup_table"(%279, %cst_567) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_568 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %347 = "FHE.apply_lookup_table"(%279, %cst_568) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_569 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %348 = "FHE.apply_lookup_table"(%279, %cst_569) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_570 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %349 = "FHE.apply_lookup_table"(%279, %cst_570) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_571 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %350 = "FHE.apply_lookup_table"(%279, %cst_571) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_572 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %351 = "FHE.apply_lookup_table"(%279, %cst_572) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_573 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %352 = "FHE.apply_lookup_table"(%280, %cst_573) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_574 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %353 = "FHE.apply_lookup_table"(%280, %cst_574) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_575 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %354 = "FHE.apply_lookup_table"(%280, %cst_575) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_576 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %355 = "FHE.apply_lookup_table"(%280, %cst_576) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_577 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %356 = "FHE.apply_lookup_table"(%280, %cst_577) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_578 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %357 = "FHE.apply_lookup_table"(%280, %cst_578) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_579 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %358 = "FHE.apply_lookup_table"(%280, %cst_579) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_580 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %359 = "FHE.apply_lookup_table"(%280, %cst_580) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_581 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %360 = "FHE.apply_lookup_table"(%281, %cst_581) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_582 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %361 = "FHE.apply_lookup_table"(%281, %cst_582) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_583 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %362 = "FHE.apply_lookup_table"(%281, %cst_583) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_584 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %363 = "FHE.apply_lookup_table"(%281, %cst_584) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_585 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %364 = "FHE.apply_lookup_table"(%281, %cst_585) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_586 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %365 = "FHE.apply_lookup_table"(%281, %cst_586) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_587 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %366 = "FHE.apply_lookup_table"(%281, %cst_587) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_588 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %367 = "FHE.apply_lookup_table"(%281, %cst_588) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_589 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %368 = "FHE.apply_lookup_table"(%282, %cst_589) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_590 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %369 = "FHE.apply_lookup_table"(%282, %cst_590) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_591 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %370 = "FHE.apply_lookup_table"(%282, %cst_591) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_592 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %371 = "FHE.apply_lookup_table"(%282, %cst_592) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_593 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %372 = "FHE.apply_lookup_table"(%282, %cst_593) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_594 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %373 = "FHE.apply_lookup_table"(%282, %cst_594) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_595 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %374 = "FHE.apply_lookup_table"(%282, %cst_595) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_596 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %375 = "FHE.apply_lookup_table"(%282, %cst_596) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_597 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %376 = "FHE.apply_lookup_table"(%283, %cst_597) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_598 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %377 = "FHE.apply_lookup_table"(%283, %cst_598) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_599 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %378 = "FHE.apply_lookup_table"(%283, %cst_599) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_600 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %379 = "FHE.apply_lookup_table"(%283, %cst_600) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_601 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %380 = "FHE.apply_lookup_table"(%283, %cst_601) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_602 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %381 = "FHE.apply_lookup_table"(%283, %cst_602) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_603 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %382 = "FHE.apply_lookup_table"(%283, %cst_603) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_604 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %383 = "FHE.apply_lookup_table"(%283, %cst_604) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_605 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %384 = "FHE.apply_lookup_table"(%284, %cst_605) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_606 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %385 = "FHE.apply_lookup_table"(%284, %cst_606) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_607 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %386 = "FHE.apply_lookup_table"(%284, %cst_607) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_608 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %387 = "FHE.apply_lookup_table"(%284, %cst_608) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_609 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %388 = "FHE.apply_lookup_table"(%284, %cst_609) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_610 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %389 = "FHE.apply_lookup_table"(%284, %cst_610) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_611 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %390 = "FHE.apply_lookup_table"(%284, %cst_611) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_612 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %391 = "FHE.apply_lookup_table"(%284, %cst_612) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_613 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %392 = "FHE.apply_lookup_table"(%285, %cst_613) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_614 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %393 = "FHE.apply_lookup_table"(%285, %cst_614) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_615 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %394 = "FHE.apply_lookup_table"(%285, %cst_615) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_616 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %395 = "FHE.apply_lookup_table"(%285, %cst_616) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_617 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %396 = "FHE.apply_lookup_table"(%285, %cst_617) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_618 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %397 = "FHE.apply_lookup_table"(%285, %cst_618) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_619 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %398 = "FHE.apply_lookup_table"(%285, %cst_619) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_620 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %399 = "FHE.apply_lookup_table"(%285, %cst_620) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_621 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %400 = "FHE.apply_lookup_table"(%286, %cst_621) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_622 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %401 = "FHE.apply_lookup_table"(%286, %cst_622) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_623 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %402 = "FHE.apply_lookup_table"(%286, %cst_623) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_624 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %403 = "FHE.apply_lookup_table"(%286, %cst_624) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_625 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %404 = "FHE.apply_lookup_table"(%286, %cst_625) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_626 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %405 = "FHE.apply_lookup_table"(%286, %cst_626) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_627 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %406 = "FHE.apply_lookup_table"(%286, %cst_627) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_628 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %407 = "FHE.apply_lookup_table"(%286, %cst_628) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_629 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %408 = "FHE.apply_lookup_table"(%287, %cst_629) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_630 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %409 = "FHE.apply_lookup_table"(%287, %cst_630) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_631 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %410 = "FHE.apply_lookup_table"(%287, %cst_631) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_632 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %411 = "FHE.apply_lookup_table"(%287, %cst_632) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_633 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %412 = "FHE.apply_lookup_table"(%287, %cst_633) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_634 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %413 = "FHE.apply_lookup_table"(%287, %cst_634) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_635 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %414 = "FHE.apply_lookup_table"(%287, %cst_635) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_636 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %415 = "FHE.apply_lookup_table"(%287, %cst_636) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %416 = "FHE.mul_eint_int"(%384, %c16_i9_249) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %417 = "FHE.mul_eint_int"(%385, %c16_i9_250) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %418 = "FHE.mul_eint_int"(%386, %c16_i9_299) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %419 = "FHE.mul_eint_int"(%387, %c16_i9_300) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %420 = "FHE.mul_eint_int"(%388, %c16_i9_349) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %421 = "FHE.mul_eint_int"(%389, %c16_i9_350) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %422 = "FHE.mul_eint_int"(%390, %c16_i9_363) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %423 = "FHE.mul_eint_int"(%391, %c16_i9_364) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %424 = "FHE.mul_eint_int"(%392, %c16_i9_255) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %425 = "FHE.mul_eint_int"(%393, %c16_i9_256) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %426 = "FHE.mul_eint_int"(%394, %c16_i9_303) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %427 = "FHE.mul_eint_int"(%395, %c16_i9_304) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %428 = "FHE.mul_eint_int"(%396, %c16_i9_353) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %429 = "FHE.mul_eint_int"(%397, %c16_i9_354) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %430 = "FHE.mul_eint_int"(%398, %c16_i9_357) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %431 = "FHE.mul_eint_int"(%399, %c16_i9_358) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %432 = "FHE.mul_eint_int"(%400, %c16_i9_261) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %433 = "FHE.mul_eint_int"(%401, %c16_i9_262) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %434 = "FHE.mul_eint_int"(%402, %c16_i9_307) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %435 = "FHE.mul_eint_int"(%403, %c16_i9_308) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %436 = "FHE.mul_eint_int"(%404, %c16_i9_341) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %437 = "FHE.mul_eint_int"(%405, %c16_i9_342) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %438 = "FHE.mul_eint_int"(%406, %c16_i9_359) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %439 = "FHE.mul_eint_int"(%407, %c16_i9_360) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %440 = "FHE.mul_eint_int"(%408, %c16_i9_267) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %441 = "FHE.mul_eint_int"(%409, %c16_i9_268) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %442 = "FHE.mul_eint_int"(%410, %c16_i9_295) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %443 = "FHE.mul_eint_int"(%411, %c16_i9_296) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %444 = "FHE.mul_eint_int"(%412, %c16_i9_345) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %445 = "FHE.mul_eint_int"(%413, %c16_i9_346) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %446 = "FHE.mul_eint_int"(%414, %c16_i9_361) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %447 = "FHE.mul_eint_int"(%415, %c16_i9_362) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %448 = "FHE.add_eint"(%416, %352) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %449 = "FHE.add_eint"(%417, %353) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %450 = "FHE.add_eint"(%418, %354) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %451 = "FHE.add_eint"(%419, %355) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %452 = "FHE.add_eint"(%420, %356) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %453 = "FHE.add_eint"(%421, %357) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %454 = "FHE.add_eint"(%422, %358) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %455 = "FHE.add_eint"(%423, %359) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %456 = "FHE.add_eint"(%424, %360) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %457 = "FHE.add_eint"(%425, %361) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %458 = "FHE.add_eint"(%426, %362) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %459 = "FHE.add_eint"(%427, %363) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %460 = "FHE.add_eint"(%428, %364) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %461 = "FHE.add_eint"(%429, %365) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %462 = "FHE.add_eint"(%430, %366) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %463 = "FHE.add_eint"(%431, %367) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %464 = "FHE.add_eint"(%432, %368) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %465 = "FHE.add_eint"(%433, %369) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %466 = "FHE.add_eint"(%434, %370) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %467 = "FHE.add_eint"(%435, %371) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %468 = "FHE.add_eint"(%436, %372) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %469 = "FHE.add_eint"(%437, %373) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %470 = "FHE.add_eint"(%438, %374) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %471 = "FHE.add_eint"(%439, %375) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %472 = "FHE.add_eint"(%440, %376) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %473 = "FHE.add_eint"(%441, %377) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %474 = "FHE.add_eint"(%442, %378) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %475 = "FHE.add_eint"(%443, %379) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %476 = "FHE.add_eint"(%444, %380) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %477 = "FHE.add_eint"(%445, %381) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %478 = "FHE.add_eint"(%446, %382) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %479 = "FHE.add_eint"(%447, %383) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_637 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %480 = "FHE.apply_lookup_table"(%448, %cst_637) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_638 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %481 = "FHE.apply_lookup_table"(%449, %cst_638) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_639 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %482 = "FHE.apply_lookup_table"(%450, %cst_639) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_640 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %483 = "FHE.apply_lookup_table"(%451, %cst_640) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_641 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %484 = "FHE.apply_lookup_table"(%452, %cst_641) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_642 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %485 = "FHE.apply_lookup_table"(%453, %cst_642) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_643 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %486 = "FHE.apply_lookup_table"(%454, %cst_643) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_644 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %487 = "FHE.apply_lookup_table"(%455, %cst_644) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_645 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %488 = "FHE.apply_lookup_table"(%456, %cst_645) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_646 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %489 = "FHE.apply_lookup_table"(%457, %cst_646) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_647 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %490 = "FHE.apply_lookup_table"(%458, %cst_647) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_648 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %491 = "FHE.apply_lookup_table"(%459, %cst_648) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_649 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %492 = "FHE.apply_lookup_table"(%460, %cst_649) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_650 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %493 = "FHE.apply_lookup_table"(%461, %cst_650) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_651 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %494 = "FHE.apply_lookup_table"(%462, %cst_651) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_652 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %495 = "FHE.apply_lookup_table"(%463, %cst_652) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_653 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %496 = "FHE.apply_lookup_table"(%464, %cst_653) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_654 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %497 = "FHE.apply_lookup_table"(%465, %cst_654) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_655 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %498 = "FHE.apply_lookup_table"(%466, %cst_655) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_656 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %499 = "FHE.apply_lookup_table"(%467, %cst_656) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_657 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %500 = "FHE.apply_lookup_table"(%468, %cst_657) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_658 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %501 = "FHE.apply_lookup_table"(%469, %cst_658) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_659 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %502 = "FHE.apply_lookup_table"(%470, %cst_659) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_660 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %503 = "FHE.apply_lookup_table"(%471, %cst_660) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_661 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %504 = "FHE.apply_lookup_table"(%472, %cst_661) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_662 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %505 = "FHE.apply_lookup_table"(%473, %cst_662) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_663 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %506 = "FHE.apply_lookup_table"(%474, %cst_663) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_664 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %507 = "FHE.apply_lookup_table"(%475, %cst_664) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_665 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %508 = "FHE.apply_lookup_table"(%476, %cst_665) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_666 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %509 = "FHE.apply_lookup_table"(%477, %cst_666) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_667 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %510 = "FHE.apply_lookup_table"(%478, %cst_667) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_668 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %511 = "FHE.apply_lookup_table"(%479, %cst_668) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %512 = "FHE.mul_eint_int"(%480, %c16_i9_202) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %513 = "FHE.mul_eint_int"(%481, %c16_i9_203) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %514 = "FHE.mul_eint_int"(%482, %c16_i9_253) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %515 = "FHE.mul_eint_int"(%483, %c16_i9_254) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %516 = "FHE.mul_eint_int"(%484, %c16_i9_301) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %517 = "FHE.mul_eint_int"(%485, %c16_i9_302) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %518 = "FHE.mul_eint_int"(%486, %c16_i9_321) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %519 = "FHE.mul_eint_int"(%487, %c16_i9_322) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %520 = "FHE.mul_eint_int"(%488, %c16_i9_208) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %521 = "FHE.mul_eint_int"(%489, %c16_i9_209) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %522 = "FHE.mul_eint_int"(%490, %c16_i9_259) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %523 = "FHE.mul_eint_int"(%491, %c16_i9_260) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %524 = "FHE.mul_eint_int"(%492, %c16_i9_305) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %525 = "FHE.mul_eint_int"(%493, %c16_i9_306) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %526 = "FHE.mul_eint_int"(%494, %c16_i9_309) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %527 = "FHE.mul_eint_int"(%495, %c16_i9_310) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %528 = "FHE.mul_eint_int"(%496, %c16_i9_214) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %529 = "FHE.mul_eint_int"(%497, %c16_i9_215) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %530 = "FHE.mul_eint_int"(%498, %c16_i9_265) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %531 = "FHE.mul_eint_int"(%499, %c16_i9_266) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %532 = "FHE.mul_eint_int"(%500, %c16_i9_293) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %533 = "FHE.mul_eint_int"(%501, %c16_i9_294) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %534 = "FHE.mul_eint_int"(%502, %c16_i9_313) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %535 = "FHE.mul_eint_int"(%503, %c16_i9_314) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %536 = "FHE.mul_eint_int"(%504, %c16_i9_220) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %537 = "FHE.mul_eint_int"(%505, %c16_i9_221) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %538 = "FHE.mul_eint_int"(%506, %c16_i9_247) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %539 = "FHE.mul_eint_int"(%507, %c16_i9_248) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %540 = "FHE.mul_eint_int"(%508, %c16_i9_297) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %541 = "FHE.mul_eint_int"(%509, %c16_i9_298) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %542 = "FHE.mul_eint_int"(%510, %c16_i9_317) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %543 = "FHE.mul_eint_int"(%511, %c16_i9_318) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %544 = "FHE.add_eint"(%512, %320) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %545 = "FHE.add_eint"(%513, %321) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %546 = "FHE.add_eint"(%514, %322) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %547 = "FHE.add_eint"(%515, %323) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %548 = "FHE.add_eint"(%516, %324) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %549 = "FHE.add_eint"(%517, %325) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %550 = "FHE.add_eint"(%518, %326) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %551 = "FHE.add_eint"(%519, %327) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %552 = "FHE.add_eint"(%520, %328) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %553 = "FHE.add_eint"(%521, %329) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %554 = "FHE.add_eint"(%522, %330) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %555 = "FHE.add_eint"(%523, %331) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %556 = "FHE.add_eint"(%524, %332) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %557 = "FHE.add_eint"(%525, %333) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %558 = "FHE.add_eint"(%526, %334) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %559 = "FHE.add_eint"(%527, %335) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %560 = "FHE.add_eint"(%528, %336) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %561 = "FHE.add_eint"(%529, %337) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %562 = "FHE.add_eint"(%530, %338) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %563 = "FHE.add_eint"(%531, %339) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %564 = "FHE.add_eint"(%532, %340) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %565 = "FHE.add_eint"(%533, %341) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %566 = "FHE.add_eint"(%534, %342) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %567 = "FHE.add_eint"(%535, %343) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %568 = "FHE.add_eint"(%536, %344) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %569 = "FHE.add_eint"(%537, %345) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %570 = "FHE.add_eint"(%538, %346) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %571 = "FHE.add_eint"(%539, %347) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %572 = "FHE.add_eint"(%540, %348) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %573 = "FHE.add_eint"(%541, %349) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %574 = "FHE.add_eint"(%542, %350) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %575 = "FHE.add_eint"(%543, %351) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_669 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %576 = "FHE.apply_lookup_table"(%544, %cst_669) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_670 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %577 = "FHE.apply_lookup_table"(%545, %cst_670) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_671 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %578 = "FHE.apply_lookup_table"(%546, %cst_671) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_672 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %579 = "FHE.apply_lookup_table"(%547, %cst_672) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_673 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %580 = "FHE.apply_lookup_table"(%548, %cst_673) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_674 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %581 = "FHE.apply_lookup_table"(%549, %cst_674) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_675 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %582 = "FHE.apply_lookup_table"(%550, %cst_675) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_676 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %583 = "FHE.apply_lookup_table"(%551, %cst_676) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_677 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %584 = "FHE.apply_lookup_table"(%552, %cst_677) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_678 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %585 = "FHE.apply_lookup_table"(%553, %cst_678) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_679 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %586 = "FHE.apply_lookup_table"(%554, %cst_679) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_680 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %587 = "FHE.apply_lookup_table"(%555, %cst_680) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_681 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %588 = "FHE.apply_lookup_table"(%556, %cst_681) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_682 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %589 = "FHE.apply_lookup_table"(%557, %cst_682) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_683 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %590 = "FHE.apply_lookup_table"(%558, %cst_683) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_684 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %591 = "FHE.apply_lookup_table"(%559, %cst_684) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_685 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %592 = "FHE.apply_lookup_table"(%560, %cst_685) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_686 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %593 = "FHE.apply_lookup_table"(%561, %cst_686) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_687 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %594 = "FHE.apply_lookup_table"(%562, %cst_687) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_688 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %595 = "FHE.apply_lookup_table"(%563, %cst_688) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_689 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %596 = "FHE.apply_lookup_table"(%564, %cst_689) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_690 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %597 = "FHE.apply_lookup_table"(%565, %cst_690) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_691 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %598 = "FHE.apply_lookup_table"(%566, %cst_691) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_692 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %599 = "FHE.apply_lookup_table"(%567, %cst_692) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_693 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %600 = "FHE.apply_lookup_table"(%568, %cst_693) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_694 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %601 = "FHE.apply_lookup_table"(%569, %cst_694) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_695 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %602 = "FHE.apply_lookup_table"(%570, %cst_695) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_696 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %603 = "FHE.apply_lookup_table"(%571, %cst_696) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_697 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %604 = "FHE.apply_lookup_table"(%572, %cst_697) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_698 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %605 = "FHE.apply_lookup_table"(%573, %cst_698) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_699 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %606 = "FHE.apply_lookup_table"(%574, %cst_699) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_700 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %607 = "FHE.apply_lookup_table"(%575, %cst_700) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %608 = "FHE.mul_eint_int"(%576, %c16_i9_184) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %609 = "FHE.mul_eint_int"(%577, %c16_i9_185) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %610 = "FHE.mul_eint_int"(%578, %c16_i9_206) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %611 = "FHE.mul_eint_int"(%579, %c16_i9_207) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %612 = "FHE.mul_eint_int"(%580, %c16_i9_257) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %613 = "FHE.mul_eint_int"(%581, %c16_i9_258) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %614 = "FHE.mul_eint_int"(%582, %c16_i9_281) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %615 = "FHE.mul_eint_int"(%583, %c16_i9_282) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %616 = "FHE.mul_eint_int"(%584, %c16_i9_188) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %617 = "FHE.mul_eint_int"(%585, %c16_i9_189) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %618 = "FHE.mul_eint_int"(%586, %c16_i9_212) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %619 = "FHE.mul_eint_int"(%587, %c16_i9_213) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %620 = "FHE.mul_eint_int"(%588, %c16_i9_263) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %621 = "FHE.mul_eint_int"(%589, %c16_i9_264) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %622 = "FHE.mul_eint_int"(%590, %c16_i9_269) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %623 = "FHE.mul_eint_int"(%591, %c16_i9_270) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %624 = "FHE.mul_eint_int"(%592, %c16_i9_192) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %625 = "FHE.mul_eint_int"(%593, %c16_i9_193) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %626 = "FHE.mul_eint_int"(%594, %c16_i9_218) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %627 = "FHE.mul_eint_int"(%595, %c16_i9_219) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %628 = "FHE.mul_eint_int"(%596, %c16_i9_245) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %629 = "FHE.mul_eint_int"(%597, %c16_i9_246) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %630 = "FHE.mul_eint_int"(%598, %c16_i9_273) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %631 = "FHE.mul_eint_int"(%599, %c16_i9_274) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %632 = "FHE.mul_eint_int"(%600, %c16_i9_196) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %633 = "FHE.mul_eint_int"(%601, %c16_i9_197) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %634 = "FHE.mul_eint_int"(%602, %c16_i9_200) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %635 = "FHE.mul_eint_int"(%603, %c16_i9_201) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %636 = "FHE.mul_eint_int"(%604, %c16_i9_251) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %637 = "FHE.mul_eint_int"(%605, %c16_i9_252) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %638 = "FHE.mul_eint_int"(%606, %c16_i9_277) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %639 = "FHE.mul_eint_int"(%607, %c16_i9_278) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %640 = "FHE.add_eint"(%608, %288) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %641 = "FHE.add_eint"(%609, %289) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %642 = "FHE.add_eint"(%610, %290) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %643 = "FHE.add_eint"(%611, %291) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %644 = "FHE.add_eint"(%612, %292) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %645 = "FHE.add_eint"(%613, %293) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %646 = "FHE.add_eint"(%614, %294) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %647 = "FHE.add_eint"(%615, %295) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %648 = "FHE.add_eint"(%616, %296) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %649 = "FHE.add_eint"(%617, %297) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %650 = "FHE.add_eint"(%618, %298) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %651 = "FHE.add_eint"(%619, %299) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %652 = "FHE.add_eint"(%620, %300) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %653 = "FHE.add_eint"(%621, %301) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %654 = "FHE.add_eint"(%622, %302) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %655 = "FHE.add_eint"(%623, %303) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %656 = "FHE.add_eint"(%624, %304) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %657 = "FHE.add_eint"(%625, %305) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %658 = "FHE.add_eint"(%626, %306) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %659 = "FHE.add_eint"(%627, %307) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %660 = "FHE.add_eint"(%628, %308) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %661 = "FHE.add_eint"(%629, %309) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %662 = "FHE.add_eint"(%630, %310) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %663 = "FHE.add_eint"(%631, %311) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %664 = "FHE.add_eint"(%632, %312) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %665 = "FHE.add_eint"(%633, %313) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %666 = "FHE.add_eint"(%634, %314) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %667 = "FHE.add_eint"(%635, %315) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %668 = "FHE.add_eint"(%636, %316) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %669 = "FHE.add_eint"(%637, %317) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %670 = "FHE.add_eint"(%638, %318) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %671 = "FHE.add_eint"(%639, %319) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_701 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %672 = "FHE.apply_lookup_table"(%640, %cst_701) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_702 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %673 = "FHE.apply_lookup_table"(%641, %cst_702) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_703 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %674 = "FHE.apply_lookup_table"(%642, %cst_703) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_704 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %675 = "FHE.apply_lookup_table"(%643, %cst_704) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_705 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %676 = "FHE.apply_lookup_table"(%644, %cst_705) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_706 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %677 = "FHE.apply_lookup_table"(%645, %cst_706) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_707 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %678 = "FHE.apply_lookup_table"(%646, %cst_707) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_708 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %679 = "FHE.apply_lookup_table"(%647, %cst_708) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_709 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %680 = "FHE.apply_lookup_table"(%648, %cst_709) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_710 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %681 = "FHE.apply_lookup_table"(%649, %cst_710) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_711 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %682 = "FHE.apply_lookup_table"(%650, %cst_711) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_712 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %683 = "FHE.apply_lookup_table"(%651, %cst_712) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_713 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %684 = "FHE.apply_lookup_table"(%652, %cst_713) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_714 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %685 = "FHE.apply_lookup_table"(%653, %cst_714) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_715 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %686 = "FHE.apply_lookup_table"(%654, %cst_715) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_716 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %687 = "FHE.apply_lookup_table"(%655, %cst_716) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_717 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %688 = "FHE.apply_lookup_table"(%656, %cst_717) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_718 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %689 = "FHE.apply_lookup_table"(%657, %cst_718) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_719 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %690 = "FHE.apply_lookup_table"(%658, %cst_719) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_720 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %691 = "FHE.apply_lookup_table"(%659, %cst_720) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_721 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %692 = "FHE.apply_lookup_table"(%660, %cst_721) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_722 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %693 = "FHE.apply_lookup_table"(%661, %cst_722) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_723 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %694 = "FHE.apply_lookup_table"(%662, %cst_723) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_724 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %695 = "FHE.apply_lookup_table"(%663, %cst_724) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_725 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %696 = "FHE.apply_lookup_table"(%664, %cst_725) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_726 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %697 = "FHE.apply_lookup_table"(%665, %cst_726) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_727 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %698 = "FHE.apply_lookup_table"(%666, %cst_727) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_728 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %699 = "FHE.apply_lookup_table"(%667, %cst_728) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_729 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %700 = "FHE.apply_lookup_table"(%668, %cst_729) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_730 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %701 = "FHE.apply_lookup_table"(%669, %cst_730) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_731 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %702 = "FHE.apply_lookup_table"(%670, %cst_731) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_732 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %703 = "FHE.apply_lookup_table"(%671, %cst_732) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %704 = "FHE.mul_eint_int"(%672, %c16_i9_142) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %705 = "FHE.mul_eint_int"(%673, %c16_i9_143) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %706 = "FHE.mul_eint_int"(%674, %c16_i9_186) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %707 = "FHE.mul_eint_int"(%675, %c16_i9_187) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %708 = "FHE.mul_eint_int"(%676, %c16_i9_210) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %709 = "FHE.mul_eint_int"(%677, %c16_i9_211) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %710 = "FHE.mul_eint_int"(%678, %c16_i9_234) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %711 = "FHE.mul_eint_int"(%679, %c16_i9_235) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %712 = "FHE.mul_eint_int"(%680, %c16_i9_144) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %713 = "FHE.mul_eint_int"(%681, %c16_i9_145) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %714 = "FHE.mul_eint_int"(%682, %c16_i9_190) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %715 = "FHE.mul_eint_int"(%683, %c16_i9_191) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %716 = "FHE.mul_eint_int"(%684, %c16_i9_216) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %717 = "FHE.mul_eint_int"(%685, %c16_i9_217) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %718 = "FHE.mul_eint_int"(%686, %c16_i9_222) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %719 = "FHE.mul_eint_int"(%687, %c16_i9_223) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %720 = "FHE.mul_eint_int"(%688, %c16_i9_146) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %721 = "FHE.mul_eint_int"(%689, %c16_i9_147) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %722 = "FHE.mul_eint_int"(%690, %c16_i9_194) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %723 = "FHE.mul_eint_int"(%691, %c16_i9_195) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %724 = "FHE.mul_eint_int"(%692, %c16_i9_198) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %725 = "FHE.mul_eint_int"(%693, %c16_i9_199) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %726 = "FHE.mul_eint_int"(%694, %c16_i9_226) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %727 = "FHE.mul_eint_int"(%695, %c16_i9_227) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %728 = "FHE.mul_eint_int"(%696, %c16_i9_148) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %729 = "FHE.mul_eint_int"(%697, %c16_i9_149) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %730 = "FHE.mul_eint_int"(%698, %c16_i9_182) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %731 = "FHE.mul_eint_int"(%699, %c16_i9_183) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %732 = "FHE.mul_eint_int"(%700, %c16_i9_204) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %733 = "FHE.mul_eint_int"(%701, %c16_i9_205) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %734 = "FHE.mul_eint_int"(%702, %c16_i9_230) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %735 = "FHE.mul_eint_int"(%703, %c16_i9_231) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %736 = "FHE.add_eint"(%704, %32) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %737 = "FHE.add_eint"(%705, %96) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %738 = "FHE.add_eint"(%706, %37) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %739 = "FHE.add_eint"(%707, %101) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %740 = "FHE.add_eint"(%708, %42) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %741 = "FHE.add_eint"(%709, %106) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %742 = "FHE.add_eint"(%710, %50) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %743 = "FHE.add_eint"(%711, %114) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %744 = "FHE.add_eint"(%712, %33) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %745 = "FHE.add_eint"(%713, %97) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %746 = "FHE.add_eint"(%714, %38) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %747 = "FHE.add_eint"(%715, %102) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %748 = "FHE.add_eint"(%716, %43) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %749 = "FHE.add_eint"(%717, %107) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %750 = "FHE.add_eint"(%718, %44) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %751 = "FHE.add_eint"(%719, %108) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %752 = "FHE.add_eint"(%720, %34) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %753 = "FHE.add_eint"(%721, %98) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %754 = "FHE.add_eint"(%722, %39) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %755 = "FHE.add_eint"(%723, %103) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %756 = "FHE.add_eint"(%724, %40) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %757 = "FHE.add_eint"(%725, %104) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %758 = "FHE.add_eint"(%726, %46) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %759 = "FHE.add_eint"(%727, %110) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %760 = "FHE.add_eint"(%728, %35) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %761 = "FHE.add_eint"(%729, %99) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %762 = "FHE.add_eint"(%730, %36) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %763 = "FHE.add_eint"(%731, %100) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %764 = "FHE.add_eint"(%732, %41) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %765 = "FHE.add_eint"(%733, %105) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %766 = "FHE.add_eint"(%734, %48) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %767 = "FHE.add_eint"(%735, %112) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_733 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %768 = "FHE.apply_lookup_table"(%736, %cst_733) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_734 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %769 = "FHE.apply_lookup_table"(%737, %cst_734) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_735 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %770 = "FHE.apply_lookup_table"(%738, %cst_735) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_736 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %771 = "FHE.apply_lookup_table"(%739, %cst_736) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_737 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %772 = "FHE.apply_lookup_table"(%740, %cst_737) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_738 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %773 = "FHE.apply_lookup_table"(%741, %cst_738) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_739 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %774 = "FHE.apply_lookup_table"(%742, %cst_739) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_740 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %775 = "FHE.apply_lookup_table"(%743, %cst_740) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_741 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %776 = "FHE.apply_lookup_table"(%744, %cst_741) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_742 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %777 = "FHE.apply_lookup_table"(%745, %cst_742) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_743 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %778 = "FHE.apply_lookup_table"(%746, %cst_743) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_744 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %779 = "FHE.apply_lookup_table"(%747, %cst_744) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_745 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %780 = "FHE.apply_lookup_table"(%748, %cst_745) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_746 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %781 = "FHE.apply_lookup_table"(%749, %cst_746) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_747 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %782 = "FHE.apply_lookup_table"(%750, %cst_747) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_748 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %783 = "FHE.apply_lookup_table"(%751, %cst_748) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_749 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %784 = "FHE.apply_lookup_table"(%752, %cst_749) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_750 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %785 = "FHE.apply_lookup_table"(%753, %cst_750) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_751 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %786 = "FHE.apply_lookup_table"(%754, %cst_751) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_752 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %787 = "FHE.apply_lookup_table"(%755, %cst_752) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_753 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %788 = "FHE.apply_lookup_table"(%756, %cst_753) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_754 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %789 = "FHE.apply_lookup_table"(%757, %cst_754) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_755 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %790 = "FHE.apply_lookup_table"(%758, %cst_755) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_756 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %791 = "FHE.apply_lookup_table"(%759, %cst_756) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_757 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %792 = "FHE.apply_lookup_table"(%760, %cst_757) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_758 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %793 = "FHE.apply_lookup_table"(%761, %cst_758) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_759 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %794 = "FHE.apply_lookup_table"(%762, %cst_759) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_760 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %795 = "FHE.apply_lookup_table"(%763, %cst_760) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_761 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %796 = "FHE.apply_lookup_table"(%764, %cst_761) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_762 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %797 = "FHE.apply_lookup_table"(%765, %cst_762) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_763 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %798 = "FHE.apply_lookup_table"(%766, %cst_763) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_764 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %799 = "FHE.apply_lookup_table"(%767, %cst_764) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %800 = "FHE.add_eint"(%768, %769) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %801 = "FHE.add_eint"(%770, %771) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %802 = "FHE.add_eint"(%772, %773) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %803 = "FHE.add_eint"(%774, %775) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %804 = "FHE.add_eint"(%776, %777) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %805 = "FHE.add_eint"(%778, %779) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %806 = "FHE.add_eint"(%780, %781) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %807 = "FHE.add_eint"(%782, %783) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %808 = "FHE.add_eint"(%784, %785) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %809 = "FHE.add_eint"(%786, %787) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %810 = "FHE.add_eint"(%788, %789) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %811 = "FHE.add_eint"(%790, %791) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %812 = "FHE.add_eint"(%792, %793) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %813 = "FHE.add_eint"(%794, %795) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %814 = "FHE.add_eint"(%796, %797) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %815 = "FHE.add_eint"(%798, %799) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_765 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %816 = "FHE.apply_lookup_table"(%800, %cst_765) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_766 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %817 = "FHE.apply_lookup_table"(%800, %cst_766) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_767 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %818 = "FHE.apply_lookup_table"(%800, %cst_767) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_768 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %819 = "FHE.apply_lookup_table"(%800, %cst_768) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_769 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %820 = "FHE.apply_lookup_table"(%800, %cst_769) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_770 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %821 = "FHE.apply_lookup_table"(%800, %cst_770) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_771 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %822 = "FHE.apply_lookup_table"(%800, %cst_771) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_772 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %823 = "FHE.apply_lookup_table"(%800, %cst_772) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_773 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %824 = "FHE.apply_lookup_table"(%801, %cst_773) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_774 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %825 = "FHE.apply_lookup_table"(%801, %cst_774) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_775 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %826 = "FHE.apply_lookup_table"(%801, %cst_775) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_776 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %827 = "FHE.apply_lookup_table"(%801, %cst_776) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_777 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %828 = "FHE.apply_lookup_table"(%801, %cst_777) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_778 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %829 = "FHE.apply_lookup_table"(%801, %cst_778) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_779 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %830 = "FHE.apply_lookup_table"(%801, %cst_779) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_780 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %831 = "FHE.apply_lookup_table"(%801, %cst_780) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_781 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %832 = "FHE.apply_lookup_table"(%802, %cst_781) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_782 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %833 = "FHE.apply_lookup_table"(%802, %cst_782) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_783 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %834 = "FHE.apply_lookup_table"(%802, %cst_783) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_784 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %835 = "FHE.apply_lookup_table"(%802, %cst_784) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_785 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %836 = "FHE.apply_lookup_table"(%802, %cst_785) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_786 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %837 = "FHE.apply_lookup_table"(%802, %cst_786) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_787 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %838 = "FHE.apply_lookup_table"(%802, %cst_787) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_788 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %839 = "FHE.apply_lookup_table"(%802, %cst_788) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_789 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %840 = "FHE.apply_lookup_table"(%803, %cst_789) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_790 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %841 = "FHE.apply_lookup_table"(%803, %cst_790) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_791 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %842 = "FHE.apply_lookup_table"(%803, %cst_791) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_792 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %843 = "FHE.apply_lookup_table"(%803, %cst_792) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_793 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %844 = "FHE.apply_lookup_table"(%803, %cst_793) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_794 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %845 = "FHE.apply_lookup_table"(%803, %cst_794) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_795 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %846 = "FHE.apply_lookup_table"(%803, %cst_795) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_796 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %847 = "FHE.apply_lookup_table"(%803, %cst_796) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_797 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %848 = "FHE.apply_lookup_table"(%804, %cst_797) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_798 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %849 = "FHE.apply_lookup_table"(%804, %cst_798) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_799 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %850 = "FHE.apply_lookup_table"(%804, %cst_799) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_800 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %851 = "FHE.apply_lookup_table"(%804, %cst_800) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_801 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %852 = "FHE.apply_lookup_table"(%804, %cst_801) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_802 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %853 = "FHE.apply_lookup_table"(%804, %cst_802) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_803 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %854 = "FHE.apply_lookup_table"(%804, %cst_803) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_804 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %855 = "FHE.apply_lookup_table"(%804, %cst_804) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_805 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %856 = "FHE.apply_lookup_table"(%805, %cst_805) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_806 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %857 = "FHE.apply_lookup_table"(%805, %cst_806) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_807 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %858 = "FHE.apply_lookup_table"(%805, %cst_807) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_808 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %859 = "FHE.apply_lookup_table"(%805, %cst_808) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_809 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %860 = "FHE.apply_lookup_table"(%805, %cst_809) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_810 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %861 = "FHE.apply_lookup_table"(%805, %cst_810) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_811 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %862 = "FHE.apply_lookup_table"(%805, %cst_811) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_812 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %863 = "FHE.apply_lookup_table"(%805, %cst_812) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_813 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %864 = "FHE.apply_lookup_table"(%806, %cst_813) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_814 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %865 = "FHE.apply_lookup_table"(%806, %cst_814) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_815 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %866 = "FHE.apply_lookup_table"(%806, %cst_815) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_816 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %867 = "FHE.apply_lookup_table"(%806, %cst_816) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_817 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %868 = "FHE.apply_lookup_table"(%806, %cst_817) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_818 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %869 = "FHE.apply_lookup_table"(%806, %cst_818) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_819 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %870 = "FHE.apply_lookup_table"(%806, %cst_819) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_820 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %871 = "FHE.apply_lookup_table"(%806, %cst_820) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_821 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %872 = "FHE.apply_lookup_table"(%807, %cst_821) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_822 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %873 = "FHE.apply_lookup_table"(%807, %cst_822) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_823 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %874 = "FHE.apply_lookup_table"(%807, %cst_823) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_824 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %875 = "FHE.apply_lookup_table"(%807, %cst_824) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_825 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %876 = "FHE.apply_lookup_table"(%807, %cst_825) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_826 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %877 = "FHE.apply_lookup_table"(%807, %cst_826) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_827 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %878 = "FHE.apply_lookup_table"(%807, %cst_827) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_828 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %879 = "FHE.apply_lookup_table"(%807, %cst_828) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_829 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %880 = "FHE.apply_lookup_table"(%808, %cst_829) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_830 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %881 = "FHE.apply_lookup_table"(%808, %cst_830) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_831 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %882 = "FHE.apply_lookup_table"(%808, %cst_831) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_832 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %883 = "FHE.apply_lookup_table"(%808, %cst_832) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_833 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %884 = "FHE.apply_lookup_table"(%808, %cst_833) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_834 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %885 = "FHE.apply_lookup_table"(%808, %cst_834) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_835 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %886 = "FHE.apply_lookup_table"(%808, %cst_835) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_836 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %887 = "FHE.apply_lookup_table"(%808, %cst_836) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_837 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %888 = "FHE.apply_lookup_table"(%809, %cst_837) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_838 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %889 = "FHE.apply_lookup_table"(%809, %cst_838) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_839 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %890 = "FHE.apply_lookup_table"(%809, %cst_839) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_840 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %891 = "FHE.apply_lookup_table"(%809, %cst_840) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_841 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %892 = "FHE.apply_lookup_table"(%809, %cst_841) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_842 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %893 = "FHE.apply_lookup_table"(%809, %cst_842) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_843 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %894 = "FHE.apply_lookup_table"(%809, %cst_843) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_844 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %895 = "FHE.apply_lookup_table"(%809, %cst_844) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_845 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %896 = "FHE.apply_lookup_table"(%810, %cst_845) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_846 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %897 = "FHE.apply_lookup_table"(%810, %cst_846) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_847 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %898 = "FHE.apply_lookup_table"(%810, %cst_847) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_848 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %899 = "FHE.apply_lookup_table"(%810, %cst_848) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_849 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %900 = "FHE.apply_lookup_table"(%810, %cst_849) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_850 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %901 = "FHE.apply_lookup_table"(%810, %cst_850) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_851 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %902 = "FHE.apply_lookup_table"(%810, %cst_851) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_852 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %903 = "FHE.apply_lookup_table"(%810, %cst_852) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_853 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %904 = "FHE.apply_lookup_table"(%811, %cst_853) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_854 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %905 = "FHE.apply_lookup_table"(%811, %cst_854) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_855 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %906 = "FHE.apply_lookup_table"(%811, %cst_855) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_856 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %907 = "FHE.apply_lookup_table"(%811, %cst_856) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_857 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %908 = "FHE.apply_lookup_table"(%811, %cst_857) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_858 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %909 = "FHE.apply_lookup_table"(%811, %cst_858) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_859 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %910 = "FHE.apply_lookup_table"(%811, %cst_859) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_860 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %911 = "FHE.apply_lookup_table"(%811, %cst_860) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_861 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %912 = "FHE.apply_lookup_table"(%812, %cst_861) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_862 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %913 = "FHE.apply_lookup_table"(%812, %cst_862) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_863 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %914 = "FHE.apply_lookup_table"(%812, %cst_863) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_864 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %915 = "FHE.apply_lookup_table"(%812, %cst_864) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_865 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %916 = "FHE.apply_lookup_table"(%812, %cst_865) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_866 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %917 = "FHE.apply_lookup_table"(%812, %cst_866) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_867 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %918 = "FHE.apply_lookup_table"(%812, %cst_867) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_868 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %919 = "FHE.apply_lookup_table"(%812, %cst_868) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_869 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %920 = "FHE.apply_lookup_table"(%813, %cst_869) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_870 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %921 = "FHE.apply_lookup_table"(%813, %cst_870) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_871 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %922 = "FHE.apply_lookup_table"(%813, %cst_871) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_872 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %923 = "FHE.apply_lookup_table"(%813, %cst_872) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_873 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %924 = "FHE.apply_lookup_table"(%813, %cst_873) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_874 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %925 = "FHE.apply_lookup_table"(%813, %cst_874) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_875 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %926 = "FHE.apply_lookup_table"(%813, %cst_875) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_876 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %927 = "FHE.apply_lookup_table"(%813, %cst_876) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_877 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %928 = "FHE.apply_lookup_table"(%814, %cst_877) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_878 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %929 = "FHE.apply_lookup_table"(%814, %cst_878) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_879 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %930 = "FHE.apply_lookup_table"(%814, %cst_879) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_880 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %931 = "FHE.apply_lookup_table"(%814, %cst_880) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_881 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %932 = "FHE.apply_lookup_table"(%814, %cst_881) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_882 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %933 = "FHE.apply_lookup_table"(%814, %cst_882) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_883 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %934 = "FHE.apply_lookup_table"(%814, %cst_883) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_884 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %935 = "FHE.apply_lookup_table"(%814, %cst_884) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_885 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %936 = "FHE.apply_lookup_table"(%815, %cst_885) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_886 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %937 = "FHE.apply_lookup_table"(%815, %cst_886) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_887 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %938 = "FHE.apply_lookup_table"(%815, %cst_887) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_888 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %939 = "FHE.apply_lookup_table"(%815, %cst_888) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_889 = arith.constant dense<"0x0C000000000000000F000000000000000E000000000000000F000000000000000F000000000000000D000000000000000D000000000000000900000000000000060000000000000000000000000000000C0000000000000005000000000000000E000000000000000B0000000000000004000000000000000E000000000000000800000000000000010000000000000008000000000000000F000000000000000E000000000000000B0000000000000008000000000000000F0000000000000004000000000000000B0000000000000005000000000000000400000000000000020000000000000005000000000000000E00000000000000090000000000000007000000000000000E0000000000000003000000000000000400000000000000060000000000000007000000000000000F000000000000000800000000000000060000000000000005000000000000000D000000000000000F000000000000000E000000000000000A0000000000000006000000000000000200000000000000000000000000000009000000000000000400000000000000090000000000000003000000000000000300000000000000000000000000000002000000000000000000000000000000020000000000000001000000000000000D000000000000000C00000000000000040000000000000007000000000000000E00000000000000010000000000000001000000000000000500000000000000030000000000000003000000000000000D000000000000000B0000000000000005000000000000000A0000000000000007000000000000000B00000000000000070000000000000005000000000000000D00000000000000050000000000000001000000000000000A000000000000000B0000000000000000000000000000000C0000000000000004000000000000000E0000000000000007000000000000000B000000000000000D00000000000000080000000000000006000000000000000700000000000000090000000000000009000000000000000B0000000000000008000000000000000B000000000000000C0000000000000004000000000000000E00000000000000080000000000000009000000000000000600000000000000010000000000000008000000000000000E0000000000000000000000000000000F000000000000000A000000000000000700000000000000020000000000000004000000000000000A000000000000000500000000000000080000000000000000000000000000000300000000000000020000000000000007000000000000000F00000000000000060000000000000007000000000000000A00000000000000040000000000000002000000000000000E000000000000000F000000000000000B000000000000000800000000000000010000000000000002000000000000000C000000000000000B00000000000000030000000000000008000000000000000200000000000000090000000000000005000000000000000F0000000000000007000000000000000C000000000000000B0000000000000003000000000000000E000000000000000C00000000000000010000000000000009000000000000000A00000000000000040000000000000005000000000000000300000000000000000000000000000008000000000000000C00000000000000060000000000000002000000000000000A000000000000000B0000000000000001000000000000000A000000000000000D000000000000000600000000000000070000000000000001000000000000000900000000000000000000000000000004000000000000000B0000000000000009000000000000000B0000000000000004000000000000000C00000000000000030000000000000003000000000000000D000000000000000F000000000000000D00000000000000080000000000000006000000000000000D0000000000000000000000000000000B00000000000000090000000000000004000000000000000D000000000000000A000000000000000F000000000000000C000000000000000C000000000000000F000000000000000400000000000000010000000000000006000000000000000F000000000000000400000000000000050000000000000003000000000000000500000000000000070000000000000009000000000000000C000000000000000A000000000000000E00000000000000030000000000000009000000000000000600000000000000000000000000000000000000000000000E00000000000000070000000000000007000000000000000C00000000000000090000000000000000000000000000000F0000000000000001000000000000000C0000000000000006000000000000000A00000000000000060000000000000001000000000000000900000000000000030000000000000002000000000000000D000000000000000E00000000000000020000000000000002000000000000000D000000000000000A00000000000000000000000000000003000000000000000200000000000000030000000000000001000000000000000C0000000000000008000000000000000A0000000000000005000000000000000A00000000000000000000000000000005000000000000000000000000000000010000000000000006000000000000000D0000000000000008000000000000000D00000000000000080000000000000002000000000000000500000000000000010000000000000007000000000000000A0000000000000006000000000000000200000000000000"> : tensor<256xi64> - %940 = "FHE.apply_lookup_table"(%815, %cst_889) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_890 = arith.constant dense<"0x060000000000000008000000000000000E0000000000000006000000000000000F0000000000000006000000000000000E000000000000000100000000000000000000000000000002000000000000000E000000000000000600000000000000070000000000000005000000000000000D000000000000000C000000000000000F000000000000000F0000000000000009000000000000000A000000000000000F0000000000000002000000000000000E000000000000000B00000000000000010000000000000003000000000000000F0000000000000005000000000000000300000000000000030000000000000004000000000000000B00000000000000050000000000000001000000000000000D000000000000000C000000000000000C000000000000000E0000000000000005000000000000000300000000000000080000000000000001000000000000000100000000000000090000000000000002000000000000000B0000000000000002000000000000000A000000000000000800000000000000050000000000000006000000000000000D00000000000000000000000000000007000000000000000A000000000000000F000000000000000E0000000000000004000000000000000B000000000000000F000000000000000D000000000000000E000000000000000F000000000000000A0000000000000002000000000000000D000000000000000800000000000000040000000000000006000000000000000C0000000000000004000000000000000B000000000000000400000000000000060000000000000007000000000000000D0000000000000002000000000000000D000000000000000E0000000000000003000000000000000600000000000000090000000000000000000000000000000100000000000000000000000000000003000000000000000900000000000000060000000000000004000000000000000D000000000000000700000000000000020000000000000004000000000000000800000000000000000000000000000005000000000000000B0000000000000005000000000000000F000000000000000D0000000000000006000000000000000A00000000000000060000000000000001000000000000000A00000000000000090000000000000004000000000000000E000000000000000000000000000000080000000000000005000000000000000B0000000000000002000000000000000D00000000000000000000000000000005000000000000000F00000000000000010000000000000000000000000000000100000000000000030000000000000007000000000000000F000000000000000200000000000000000000000000000005000000000000000D000000000000000F0000000000000001000000000000000800000000000000060000000000000003000000000000000E00000000000000050000000000000008000000000000000E00000000000000030000000000000005000000000000000C000000000000000A0000000000000008000000000000000A0000000000000002000000000000000600000000000000000000000000000009000000000000000E000000000000000300000000000000040000000000000004000000000000000B000000000000000B000000000000000C0000000000000007000000000000000B00000000000000080000000000000007000000000000000C0000000000000006000000000000000D000000000000000B0000000000000004000000000000000400000000000000040000000000000002000000000000000C00000000000000080000000000000008000000000000000F000000000000000D0000000000000003000000000000000400000000000000090000000000000001000000000000000300000000000000020000000000000005000000000000000B000000000000000E000000000000000A00000000000000010000000000000001000000000000000C00000000000000090000000000000008000000000000000C0000000000000003000000000000000F000000000000000A000000000000000400000000000000070000000000000000000000000000000F0000000000000000000000000000000A000000000000000C0000000000000008000000000000000700000000000000030000000000000007000000000000000B00000000000000010000000000000008000000000000000E00000000000000060000000000000001000000000000000D000000000000000F0000000000000000000000000000000C0000000000000001000000000000000C000000000000000000000000000000060000000000000007000000000000000C0000000000000002000000000000000A000000000000000E000000000000000900000000000000070000000000000009000000000000000A00000000000000070000000000000009000000000000000B000000000000000B00000000000000020000000000000002000000000000000900000000000000070000000000000003000000000000000D000000000000000C000000000000000500000000000000090000000000000007000000000000000A00000000000000000000000000000005000000000000000300000000000000090000000000000009000000000000000A000000000000000500000000000000070000000000000004000000000000000000000000000000020000000000000009000000000000000A000000000000000E000000000000000B0000000000000008000000000000000D000000000000000C00000000000000"> : tensor<256xi64> - %941 = "FHE.apply_lookup_table"(%815, %cst_890) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_891 = arith.constant dense<"0x0A0000000000000008000000000000000900000000000000080000000000000000000000000000000B000000000000000B000000000000000500000000000000050000000000000000000000000000000A000000000000000700000000000000010000000000000006000000000000000E000000000000000900000000000000040000000000000009000000000000000400000000000000080000000000000001000000000000000E000000000000000C0000000000000000000000000000000E0000000000000006000000000000000F000000000000000E000000000000000B000000000000000F00000000000000090000000000000005000000000000000C0000000000000001000000000000000A000000000000000600000000000000050000000000000004000000000000000000000000000000040000000000000005000000000000000F00000000000000030000000000000000000000000000000900000000000000070000000000000005000000000000000300000000000000000000000000000005000000000000000600000000000000050000000000000002000000000000000A0000000000000000000000000000000B000000000000000000000000000000030000000000000009000000000000000300000000000000020000000000000006000000000000000C000000000000000900000000000000010000000000000009000000000000000700000000000000020000000000000002000000000000000B000000000000000E000000000000000F000000000000000F00000000000000040000000000000006000000000000000C0000000000000007000000000000000300000000000000070000000000000009000000000000000F00000000000000060000000000000000000000000000000200000000000000060000000000000001000000000000000C000000000000000E000000000000000B0000000000000004000000000000000D0000000000000004000000000000000D000000000000000D000000000000000E000000000000000400000000000000060000000000000002000000000000000E0000000000000001000000000000000C000000000000000D00000000000000050000000000000009000000000000000C000000000000000100000000000000000000000000000008000000000000000F0000000000000004000000000000000B000000000000000E000000000000000F000000000000000F000000000000000C0000000000000008000000000000000A000000000000000B00000000000000040000000000000000000000000000000D000000000000000C0000000000000007000000000000000600000000000000030000000000000001000000000000000000000000000000060000000000000004000000000000000100000000000000030000000000000002000000000000000E000000000000000A000000000000000C00000000000000030000000000000005000000000000000F00000000000000080000000000000004000000000000000A000000000000000E00000000000000020000000000000009000000000000000A0000000000000009000000000000000D000000000000000700000000000000060000000000000007000000000000000A0000000000000008000000000000000C0000000000000002000000000000000D00000000000000030000000000000007000000000000000E000000000000000100000000000000070000000000000003000000000000000500000000000000040000000000000001000000000000000D00000000000000000000000000000006000000000000000E00000000000000050000000000000006000000000000000E000000000000000A000000000000000A000000000000000A00000000000000030000000000000008000000000000000300000000000000040000000000000005000000000000000B00000000000000080000000000000006000000000000000D000000000000000E000000000000000B000000000000000F00000000000000000000000000000002000000000000000A0000000000000008000000000000000E0000000000000001000000000000000D0000000000000008000000000000000600000000000000070000000000000002000000000000000F000000000000000C00000000000000050000000000000002000000000000000700000000000000090000000000000002000000000000000D000000000000000D0000000000000008000000000000000800000000000000090000000000000004000000000000000C000000000000000A000000000000000D000000000000000000000000000000000000000000000001000000000000000A0000000000000005000000000000000F000000000000000D000000000000000900000000000000050000000000000002000000000000000B00000000000000030000000000000001000000000000000B0000000000000003000000000000000B00000000000000070000000000000008000000000000000A000000000000000B0000000000000002000000000000000900000000000000020000000000000004000000000000000F000000000000000700000000000000070000000000000008000000000000000F00000000000000080000000000000001000000000000000D0000000000000003000000000000000C000000000000000B000000000000000C000000000000000B00000000000000070000000000000001000000000000000C000000000000000F000000000000000D000000000000000300000000000000"> : tensor<256xi64> - %942 = "FHE.apply_lookup_table"(%815, %cst_891) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_892 = arith.constant dense<"0x0500000000000000040000000000000009000000000000000D000000000000000D000000000000000D00000000000000010000000000000004000000000000000000000000000000030000000000000009000000000000000D000000000000000900000000000000020000000000000006000000000000000A0000000000000005000000000000000D000000000000000000000000000000070000000000000005000000000000000B0000000000000009000000000000000B000000000000000C0000000000000007000000000000000D000000000000000A000000000000000F00000000000000070000000000000006000000000000000B0000000000000002000000000000000C000000000000000E000000000000000A000000000000000A00000000000000010000000000000002000000000000000F000000000000000C000000000000000400000000000000040000000000000008000000000000000300000000000000030000000000000003000000000000000F000000000000000C00000000000000020000000000000005000000000000000E00000000000000080000000000000001000000000000000F000000000000000500000000000000090000000000000006000000000000000B000000000000000D00000000000000060000000000000009000000000000000D000000000000000F000000000000000B000000000000000E0000000000000004000000000000000E000000000000000D0000000000000002000000000000000E000000000000000B0000000000000006000000000000000D0000000000000001000000000000000E000000000000000B000000000000000E00000000000000010000000000000007000000000000000500000000000000080000000000000000000000000000000C0000000000000000000000000000000F0000000000000008000000000000000D000000000000000E00000000000000060000000000000009000000000000000B000000000000000E00000000000000040000000000000008000000000000000A000000000000000B000000000000000A000000000000000500000000000000060000000000000005000000000000000700000000000000050000000000000004000000000000000F00000000000000000000000000000006000000000000000100000000000000000000000000000004000000000000000A00000000000000030000000000000003000000000000000E0000000000000000000000000000000A000000000000000D000000000000000C00000000000000080000000000000004000000000000000F0000000000000001000000000000000500000000000000030000000000000000000000000000000A000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000F00000000000000010000000000000002000000000000000C00000000000000090000000000000007000000000000000200000000000000020000000000000007000000000000000C0000000000000007000000000000000B0000000000000005000000000000000000000000000000080000000000000001000000000000000F0000000000000006000000000000000E000000000000000B0000000000000003000000000000000A00000000000000090000000000000003000000000000000C00000000000000090000000000000002000000000000000D0000000000000006000000000000000B0000000000000006000000000000000E000000000000000E000000000000000B000000000000000A000000000000000C0000000000000004000000000000000D000000000000000E000000000000000F0000000000000006000000000000000800000000000000040000000000000007000000000000000B0000000000000002000000000000000300000000000000090000000000000007000000000000000C0000000000000004000000000000000200000000000000000000000000000004000000000000000A00000000000000070000000000000005000000000000000F000000000000000E0000000000000009000000000000000800000000000000050000000000000008000000000000000F000000000000000200000000000000040000000000000001000000000000000700000000000000010000000000000003000000000000000C000000000000000C0000000000000001000000000000000D000000000000000C00000000000000060000000000000005000000000000000000000000000000020000000000000004000000000000000A00000000000000080000000000000005000000000000000100000000000000020000000000000003000000000000000F0000000000000009000000000000000000000000000000010000000000000008000000000000000700000000000000090000000000000008000000000000000300000000000000030000000000000003000000000000000B00000000000000000000000000000009000000000000000700000000000000060000000000000002000000000000000200000000000000000000000000000009000000000000000F0000000000000008000000000000000A000000000000000F000000000000000800000000000000000000000000000007000000000000000A0000000000000001000000000000000600000000000000080000000000000003000000000000000000000000000000070000000000000001000000000000000B000000000000000C0000000000000006000000000000000A00000000000000"> : tensor<256xi64> - %943 = "FHE.apply_lookup_table"(%815, %cst_892) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %944 = "FHE.mul_eint_int"(%840, %c16_i9_156) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %945 = "FHE.mul_eint_int"(%841, %c16_i9_157) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %946 = "FHE.mul_eint_int"(%842, %c16_i9_162) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %947 = "FHE.mul_eint_int"(%843, %c16_i9_163) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %948 = "FHE.mul_eint_int"(%844, %c16_i9_168) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %949 = "FHE.mul_eint_int"(%845, %c16_i9_169) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %950 = "FHE.mul_eint_int"(%846, %c16_i9_174) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %951 = "FHE.mul_eint_int"(%847, %c16_i9_175) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %952 = "FHE.mul_eint_int"(%872, %c16_i9_150) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %953 = "FHE.mul_eint_int"(%873, %c16_i9_151) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %954 = "FHE.mul_eint_int"(%874, %c16_i9_164) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %955 = "FHE.mul_eint_int"(%875, %c16_i9_165) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %956 = "FHE.mul_eint_int"(%876, %c16_i9_170) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %957 = "FHE.mul_eint_int"(%877, %c16_i9_171) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %958 = "FHE.mul_eint_int"(%878, %c16_i9_176) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %959 = "FHE.mul_eint_int"(%879, %c16_i9_177) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %960 = "FHE.mul_eint_int"(%904, %c16_i9_152) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %961 = "FHE.mul_eint_int"(%905, %c16_i9_153) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %962 = "FHE.mul_eint_int"(%906, %c16_i9_158) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %963 = "FHE.mul_eint_int"(%907, %c16_i9_159) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %964 = "FHE.mul_eint_int"(%908, %c16_i9_172) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %965 = "FHE.mul_eint_int"(%909, %c16_i9_173) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %966 = "FHE.mul_eint_int"(%910, %c16_i9_178) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %967 = "FHE.mul_eint_int"(%911, %c16_i9_179) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %968 = "FHE.mul_eint_int"(%936, %c16_i9_154) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %969 = "FHE.mul_eint_int"(%937, %c16_i9_155) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %970 = "FHE.mul_eint_int"(%938, %c16_i9_160) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %971 = "FHE.mul_eint_int"(%939, %c16_i9_161) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %972 = "FHE.mul_eint_int"(%940, %c16_i9_166) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %973 = "FHE.mul_eint_int"(%941, %c16_i9_167) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %974 = "FHE.mul_eint_int"(%942, %c16_i9_180) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %975 = "FHE.mul_eint_int"(%943, %c16_i9_181) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %976 = "FHE.add_eint"(%944, %864) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %977 = "FHE.add_eint"(%945, %865) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %978 = "FHE.add_eint"(%946, %866) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %979 = "FHE.add_eint"(%947, %867) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %980 = "FHE.add_eint"(%948, %868) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %981 = "FHE.add_eint"(%949, %869) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %982 = "FHE.add_eint"(%950, %870) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %983 = "FHE.add_eint"(%951, %871) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %984 = "FHE.add_eint"(%952, %896) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %985 = "FHE.add_eint"(%953, %897) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %986 = "FHE.add_eint"(%954, %898) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %987 = "FHE.add_eint"(%955, %899) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %988 = "FHE.add_eint"(%956, %900) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %989 = "FHE.add_eint"(%957, %901) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %990 = "FHE.add_eint"(%958, %902) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %991 = "FHE.add_eint"(%959, %903) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %992 = "FHE.add_eint"(%960, %928) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %993 = "FHE.add_eint"(%961, %929) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %994 = "FHE.add_eint"(%962, %930) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %995 = "FHE.add_eint"(%963, %931) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %996 = "FHE.add_eint"(%964, %932) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %997 = "FHE.add_eint"(%965, %933) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %998 = "FHE.add_eint"(%966, %934) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %999 = "FHE.add_eint"(%967, %935) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1000 = "FHE.add_eint"(%968, %832) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1001 = "FHE.add_eint"(%969, %833) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1002 = "FHE.add_eint"(%970, %834) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1003 = "FHE.add_eint"(%971, %835) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1004 = "FHE.add_eint"(%972, %836) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1005 = "FHE.add_eint"(%973, %837) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1006 = "FHE.add_eint"(%974, %838) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1007 = "FHE.add_eint"(%975, %839) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_893 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1008 = "FHE.apply_lookup_table"(%976, %cst_893) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_894 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1009 = "FHE.apply_lookup_table"(%977, %cst_894) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_895 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1010 = "FHE.apply_lookup_table"(%978, %cst_895) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_896 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1011 = "FHE.apply_lookup_table"(%979, %cst_896) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_897 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1012 = "FHE.apply_lookup_table"(%980, %cst_897) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_898 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1013 = "FHE.apply_lookup_table"(%981, %cst_898) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_899 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1014 = "FHE.apply_lookup_table"(%982, %cst_899) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_900 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1015 = "FHE.apply_lookup_table"(%983, %cst_900) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_901 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1016 = "FHE.apply_lookup_table"(%984, %cst_901) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_902 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1017 = "FHE.apply_lookup_table"(%985, %cst_902) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_903 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1018 = "FHE.apply_lookup_table"(%986, %cst_903) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_904 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1019 = "FHE.apply_lookup_table"(%987, %cst_904) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_905 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1020 = "FHE.apply_lookup_table"(%988, %cst_905) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_906 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1021 = "FHE.apply_lookup_table"(%989, %cst_906) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_907 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1022 = "FHE.apply_lookup_table"(%990, %cst_907) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_908 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1023 = "FHE.apply_lookup_table"(%991, %cst_908) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_909 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1024 = "FHE.apply_lookup_table"(%992, %cst_909) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_910 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1025 = "FHE.apply_lookup_table"(%993, %cst_910) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_911 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1026 = "FHE.apply_lookup_table"(%994, %cst_911) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_912 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1027 = "FHE.apply_lookup_table"(%995, %cst_912) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_913 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1028 = "FHE.apply_lookup_table"(%996, %cst_913) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_914 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1029 = "FHE.apply_lookup_table"(%997, %cst_914) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_915 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1030 = "FHE.apply_lookup_table"(%998, %cst_915) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_916 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1031 = "FHE.apply_lookup_table"(%999, %cst_916) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_917 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1032 = "FHE.apply_lookup_table"(%1000, %cst_917) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_918 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1033 = "FHE.apply_lookup_table"(%1001, %cst_918) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_919 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1034 = "FHE.apply_lookup_table"(%1002, %cst_919) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_920 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1035 = "FHE.apply_lookup_table"(%1003, %cst_920) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_921 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1036 = "FHE.apply_lookup_table"(%1004, %cst_921) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_922 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1037 = "FHE.apply_lookup_table"(%1005, %cst_922) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_923 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1038 = "FHE.apply_lookup_table"(%1006, %cst_923) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_924 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1039 = "FHE.apply_lookup_table"(%1007, %cst_924) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %1040 = "FHE.mul_eint_int"(%1008, %c16_i9_116) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1041 = "FHE.mul_eint_int"(%1009, %c16_i9_117) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1042 = "FHE.mul_eint_int"(%1010, %c16_i9_122) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1043 = "FHE.mul_eint_int"(%1011, %c16_i9_123) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1044 = "FHE.mul_eint_int"(%1012, %c16_i9_128) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1045 = "FHE.mul_eint_int"(%1013, %c16_i9_129) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1046 = "FHE.mul_eint_int"(%1014, %c16_i9_134) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1047 = "FHE.mul_eint_int"(%1015, %c16_i9_135) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1048 = "FHE.mul_eint_int"(%1016, %c16_i9_110) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1049 = "FHE.mul_eint_int"(%1017, %c16_i9_111) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1050 = "FHE.mul_eint_int"(%1018, %c16_i9_124) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1051 = "FHE.mul_eint_int"(%1019, %c16_i9_125) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1052 = "FHE.mul_eint_int"(%1020, %c16_i9_130) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1053 = "FHE.mul_eint_int"(%1021, %c16_i9_131) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1054 = "FHE.mul_eint_int"(%1022, %c16_i9_136) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1055 = "FHE.mul_eint_int"(%1023, %c16_i9_137) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1056 = "FHE.mul_eint_int"(%1024, %c16_i9_112) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1057 = "FHE.mul_eint_int"(%1025, %c16_i9_113) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1058 = "FHE.mul_eint_int"(%1026, %c16_i9_118) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1059 = "FHE.mul_eint_int"(%1027, %c16_i9_119) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1060 = "FHE.mul_eint_int"(%1028, %c16_i9_132) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1061 = "FHE.mul_eint_int"(%1029, %c16_i9_133) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1062 = "FHE.mul_eint_int"(%1030, %c16_i9_138) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1063 = "FHE.mul_eint_int"(%1031, %c16_i9_139) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1064 = "FHE.mul_eint_int"(%1032, %c16_i9_114) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1065 = "FHE.mul_eint_int"(%1033, %c16_i9_115) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1066 = "FHE.mul_eint_int"(%1034, %c16_i9_120) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1067 = "FHE.mul_eint_int"(%1035, %c16_i9_121) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1068 = "FHE.mul_eint_int"(%1036, %c16_i9_126) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1069 = "FHE.mul_eint_int"(%1037, %c16_i9_127) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1070 = "FHE.mul_eint_int"(%1038, %c16_i9_140) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1071 = "FHE.mul_eint_int"(%1039, %c16_i9_141) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1072 = "FHE.add_eint"(%1040, %888) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1073 = "FHE.add_eint"(%1041, %889) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1074 = "FHE.add_eint"(%1042, %890) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1075 = "FHE.add_eint"(%1043, %891) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1076 = "FHE.add_eint"(%1044, %892) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1077 = "FHE.add_eint"(%1045, %893) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1078 = "FHE.add_eint"(%1046, %894) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1079 = "FHE.add_eint"(%1047, %895) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1080 = "FHE.add_eint"(%1048, %920) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1081 = "FHE.add_eint"(%1049, %921) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1082 = "FHE.add_eint"(%1050, %922) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1083 = "FHE.add_eint"(%1051, %923) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1084 = "FHE.add_eint"(%1052, %924) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1085 = "FHE.add_eint"(%1053, %925) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1086 = "FHE.add_eint"(%1054, %926) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1087 = "FHE.add_eint"(%1055, %927) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1088 = "FHE.add_eint"(%1056, %824) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1089 = "FHE.add_eint"(%1057, %825) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1090 = "FHE.add_eint"(%1058, %826) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1091 = "FHE.add_eint"(%1059, %827) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1092 = "FHE.add_eint"(%1060, %828) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1093 = "FHE.add_eint"(%1061, %829) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1094 = "FHE.add_eint"(%1062, %830) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1095 = "FHE.add_eint"(%1063, %831) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1096 = "FHE.add_eint"(%1064, %856) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1097 = "FHE.add_eint"(%1065, %857) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1098 = "FHE.add_eint"(%1066, %858) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1099 = "FHE.add_eint"(%1067, %859) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1100 = "FHE.add_eint"(%1068, %860) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1101 = "FHE.add_eint"(%1069, %861) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1102 = "FHE.add_eint"(%1070, %862) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1103 = "FHE.add_eint"(%1071, %863) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_925 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1104 = "FHE.apply_lookup_table"(%1072, %cst_925) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_926 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1105 = "FHE.apply_lookup_table"(%1073, %cst_926) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_927 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1106 = "FHE.apply_lookup_table"(%1074, %cst_927) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_928 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1107 = "FHE.apply_lookup_table"(%1075, %cst_928) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_929 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1108 = "FHE.apply_lookup_table"(%1076, %cst_929) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_930 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1109 = "FHE.apply_lookup_table"(%1077, %cst_930) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_931 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1110 = "FHE.apply_lookup_table"(%1078, %cst_931) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_932 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1111 = "FHE.apply_lookup_table"(%1079, %cst_932) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_933 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1112 = "FHE.apply_lookup_table"(%1080, %cst_933) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_934 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1113 = "FHE.apply_lookup_table"(%1081, %cst_934) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_935 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1114 = "FHE.apply_lookup_table"(%1082, %cst_935) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_936 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1115 = "FHE.apply_lookup_table"(%1083, %cst_936) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_937 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1116 = "FHE.apply_lookup_table"(%1084, %cst_937) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_938 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1117 = "FHE.apply_lookup_table"(%1085, %cst_938) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_939 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1118 = "FHE.apply_lookup_table"(%1086, %cst_939) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_940 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1119 = "FHE.apply_lookup_table"(%1087, %cst_940) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_941 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1120 = "FHE.apply_lookup_table"(%1088, %cst_941) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_942 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1121 = "FHE.apply_lookup_table"(%1089, %cst_942) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_943 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1122 = "FHE.apply_lookup_table"(%1090, %cst_943) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_944 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1123 = "FHE.apply_lookup_table"(%1091, %cst_944) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_945 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1124 = "FHE.apply_lookup_table"(%1092, %cst_945) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_946 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1125 = "FHE.apply_lookup_table"(%1093, %cst_946) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_947 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1126 = "FHE.apply_lookup_table"(%1094, %cst_947) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_948 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1127 = "FHE.apply_lookup_table"(%1095, %cst_948) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_949 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1128 = "FHE.apply_lookup_table"(%1096, %cst_949) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_950 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1129 = "FHE.apply_lookup_table"(%1097, %cst_950) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_951 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1130 = "FHE.apply_lookup_table"(%1098, %cst_951) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_952 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1131 = "FHE.apply_lookup_table"(%1099, %cst_952) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_953 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1132 = "FHE.apply_lookup_table"(%1100, %cst_953) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_954 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1133 = "FHE.apply_lookup_table"(%1101, %cst_954) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_955 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1134 = "FHE.apply_lookup_table"(%1102, %cst_955) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_956 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1135 = "FHE.apply_lookup_table"(%1103, %cst_956) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %1136 = "FHE.mul_eint_int"(%1104, %c16_i9_84) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1137 = "FHE.mul_eint_int"(%1105, %c16_i9_85) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1138 = "FHE.mul_eint_int"(%1106, %c16_i9_90) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1139 = "FHE.mul_eint_int"(%1107, %c16_i9_91) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1140 = "FHE.mul_eint_int"(%1108, %c16_i9_96) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1141 = "FHE.mul_eint_int"(%1109, %c16_i9_97) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1142 = "FHE.mul_eint_int"(%1110, %c16_i9_102) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1143 = "FHE.mul_eint_int"(%1111, %c16_i9_103) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1144 = "FHE.mul_eint_int"(%1112, %c16_i9_78) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1145 = "FHE.mul_eint_int"(%1113, %c16_i9_79) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1146 = "FHE.mul_eint_int"(%1114, %c16_i9_92) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1147 = "FHE.mul_eint_int"(%1115, %c16_i9_93) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1148 = "FHE.mul_eint_int"(%1116, %c16_i9_98) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1149 = "FHE.mul_eint_int"(%1117, %c16_i9_99) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1150 = "FHE.mul_eint_int"(%1118, %c16_i9_104) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1151 = "FHE.mul_eint_int"(%1119, %c16_i9_105) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1152 = "FHE.mul_eint_int"(%1120, %c16_i9_80) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1153 = "FHE.mul_eint_int"(%1121, %c16_i9_81) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1154 = "FHE.mul_eint_int"(%1122, %c16_i9_86) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1155 = "FHE.mul_eint_int"(%1123, %c16_i9_87) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1156 = "FHE.mul_eint_int"(%1124, %c16_i9_100) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1157 = "FHE.mul_eint_int"(%1125, %c16_i9_101) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1158 = "FHE.mul_eint_int"(%1126, %c16_i9_106) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1159 = "FHE.mul_eint_int"(%1127, %c16_i9_107) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1160 = "FHE.mul_eint_int"(%1128, %c16_i9_82) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1161 = "FHE.mul_eint_int"(%1129, %c16_i9_83) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1162 = "FHE.mul_eint_int"(%1130, %c16_i9_88) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1163 = "FHE.mul_eint_int"(%1131, %c16_i9_89) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1164 = "FHE.mul_eint_int"(%1132, %c16_i9_94) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1165 = "FHE.mul_eint_int"(%1133, %c16_i9_95) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1166 = "FHE.mul_eint_int"(%1134, %c16_i9_108) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1167 = "FHE.mul_eint_int"(%1135, %c16_i9_109) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1168 = "FHE.add_eint"(%1136, %912) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1169 = "FHE.add_eint"(%1137, %913) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1170 = "FHE.add_eint"(%1138, %914) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1171 = "FHE.add_eint"(%1139, %915) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1172 = "FHE.add_eint"(%1140, %916) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1173 = "FHE.add_eint"(%1141, %917) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1174 = "FHE.add_eint"(%1142, %918) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1175 = "FHE.add_eint"(%1143, %919) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1176 = "FHE.add_eint"(%1144, %816) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1177 = "FHE.add_eint"(%1145, %817) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1178 = "FHE.add_eint"(%1146, %818) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1179 = "FHE.add_eint"(%1147, %819) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1180 = "FHE.add_eint"(%1148, %820) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1181 = "FHE.add_eint"(%1149, %821) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1182 = "FHE.add_eint"(%1150, %822) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1183 = "FHE.add_eint"(%1151, %823) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1184 = "FHE.add_eint"(%1152, %848) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1185 = "FHE.add_eint"(%1153, %849) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1186 = "FHE.add_eint"(%1154, %850) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1187 = "FHE.add_eint"(%1155, %851) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1188 = "FHE.add_eint"(%1156, %852) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1189 = "FHE.add_eint"(%1157, %853) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1190 = "FHE.add_eint"(%1158, %854) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1191 = "FHE.add_eint"(%1159, %855) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1192 = "FHE.add_eint"(%1160, %880) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1193 = "FHE.add_eint"(%1161, %881) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1194 = "FHE.add_eint"(%1162, %882) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1195 = "FHE.add_eint"(%1163, %883) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1196 = "FHE.add_eint"(%1164, %884) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1197 = "FHE.add_eint"(%1165, %885) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1198 = "FHE.add_eint"(%1166, %886) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1199 = "FHE.add_eint"(%1167, %887) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_957 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1200 = "FHE.apply_lookup_table"(%1168, %cst_957) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_958 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1201 = "FHE.apply_lookup_table"(%1169, %cst_958) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_959 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1202 = "FHE.apply_lookup_table"(%1170, %cst_959) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_960 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1203 = "FHE.apply_lookup_table"(%1171, %cst_960) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_961 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1204 = "FHE.apply_lookup_table"(%1172, %cst_961) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_962 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1205 = "FHE.apply_lookup_table"(%1173, %cst_962) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_963 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1206 = "FHE.apply_lookup_table"(%1174, %cst_963) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_964 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1207 = "FHE.apply_lookup_table"(%1175, %cst_964) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_965 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1208 = "FHE.apply_lookup_table"(%1176, %cst_965) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_966 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1209 = "FHE.apply_lookup_table"(%1177, %cst_966) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_967 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1210 = "FHE.apply_lookup_table"(%1178, %cst_967) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_968 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1211 = "FHE.apply_lookup_table"(%1179, %cst_968) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_969 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1212 = "FHE.apply_lookup_table"(%1180, %cst_969) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_970 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1213 = "FHE.apply_lookup_table"(%1181, %cst_970) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_971 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1214 = "FHE.apply_lookup_table"(%1182, %cst_971) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_972 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1215 = "FHE.apply_lookup_table"(%1183, %cst_972) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_973 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1216 = "FHE.apply_lookup_table"(%1184, %cst_973) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_974 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1217 = "FHE.apply_lookup_table"(%1185, %cst_974) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_975 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1218 = "FHE.apply_lookup_table"(%1186, %cst_975) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_976 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1219 = "FHE.apply_lookup_table"(%1187, %cst_976) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_977 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1220 = "FHE.apply_lookup_table"(%1188, %cst_977) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_978 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1221 = "FHE.apply_lookup_table"(%1189, %cst_978) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_979 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1222 = "FHE.apply_lookup_table"(%1190, %cst_979) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_980 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1223 = "FHE.apply_lookup_table"(%1191, %cst_980) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_981 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1224 = "FHE.apply_lookup_table"(%1192, %cst_981) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_982 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1225 = "FHE.apply_lookup_table"(%1193, %cst_982) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_983 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1226 = "FHE.apply_lookup_table"(%1194, %cst_983) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_984 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1227 = "FHE.apply_lookup_table"(%1195, %cst_984) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_985 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1228 = "FHE.apply_lookup_table"(%1196, %cst_985) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_986 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1229 = "FHE.apply_lookup_table"(%1197, %cst_986) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_987 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1230 = "FHE.apply_lookup_table"(%1198, %cst_987) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_988 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1231 = "FHE.apply_lookup_table"(%1199, %cst_988) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %1232 = "FHE.mul_eint_int"(%1200, %c16_i9_52) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1233 = "FHE.mul_eint_int"(%1201, %c16_i9_53) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1234 = "FHE.mul_eint_int"(%1202, %c16_i9_58) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1235 = "FHE.mul_eint_int"(%1203, %c16_i9_59) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1236 = "FHE.mul_eint_int"(%1204, %c16_i9_64) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1237 = "FHE.mul_eint_int"(%1205, %c16_i9_65) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1238 = "FHE.mul_eint_int"(%1206, %c16_i9_70) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1239 = "FHE.mul_eint_int"(%1207, %c16_i9_71) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1240 = "FHE.mul_eint_int"(%1208, %c16_i9_46) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1241 = "FHE.mul_eint_int"(%1209, %c16_i9_47) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1242 = "FHE.mul_eint_int"(%1210, %c16_i9_60) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1243 = "FHE.mul_eint_int"(%1211, %c16_i9_61) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1244 = "FHE.mul_eint_int"(%1212, %c16_i9_66) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1245 = "FHE.mul_eint_int"(%1213, %c16_i9_67) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1246 = "FHE.mul_eint_int"(%1214, %c16_i9_72) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1247 = "FHE.mul_eint_int"(%1215, %c16_i9_73) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1248 = "FHE.mul_eint_int"(%1216, %c16_i9_48) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1249 = "FHE.mul_eint_int"(%1217, %c16_i9_49) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1250 = "FHE.mul_eint_int"(%1218, %c16_i9_54) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1251 = "FHE.mul_eint_int"(%1219, %c16_i9_55) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1252 = "FHE.mul_eint_int"(%1220, %c16_i9_68) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1253 = "FHE.mul_eint_int"(%1221, %c16_i9_69) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1254 = "FHE.mul_eint_int"(%1222, %c16_i9_74) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1255 = "FHE.mul_eint_int"(%1223, %c16_i9_75) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1256 = "FHE.mul_eint_int"(%1224, %c16_i9_50) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1257 = "FHE.mul_eint_int"(%1225, %c16_i9_51) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1258 = "FHE.mul_eint_int"(%1226, %c16_i9_56) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1259 = "FHE.mul_eint_int"(%1227, %c16_i9_57) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1260 = "FHE.mul_eint_int"(%1228, %c16_i9_62) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1261 = "FHE.mul_eint_int"(%1229, %c16_i9_63) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1262 = "FHE.mul_eint_int"(%1230, %c16_i9_76) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1263 = "FHE.mul_eint_int"(%1231, %c16_i9_77) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1264 = "FHE.add_eint"(%1232, %19) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1265 = "FHE.add_eint"(%1233, %83) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1266 = "FHE.add_eint"(%1234, %22) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1267 = "FHE.add_eint"(%1235, %86) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1268 = "FHE.add_eint"(%1236, %25) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1269 = "FHE.add_eint"(%1237, %89) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1270 = "FHE.add_eint"(%1238, %28) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1271 = "FHE.add_eint"(%1239, %92) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1272 = "FHE.add_eint"(%1240, %16) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1273 = "FHE.add_eint"(%1241, %80) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1274 = "FHE.add_eint"(%1242, %23) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1275 = "FHE.add_eint"(%1243, %87) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1276 = "FHE.add_eint"(%1244, %26) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1277 = "FHE.add_eint"(%1245, %90) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1278 = "FHE.add_eint"(%1246, %29) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1279 = "FHE.add_eint"(%1247, %93) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1280 = "FHE.add_eint"(%1248, %17) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1281 = "FHE.add_eint"(%1249, %81) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1282 = "FHE.add_eint"(%1250, %20) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1283 = "FHE.add_eint"(%1251, %84) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1284 = "FHE.add_eint"(%1252, %27) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1285 = "FHE.add_eint"(%1253, %91) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1286 = "FHE.add_eint"(%1254, %30) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1287 = "FHE.add_eint"(%1255, %94) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1288 = "FHE.add_eint"(%1256, %18) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1289 = "FHE.add_eint"(%1257, %82) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1290 = "FHE.add_eint"(%1258, %21) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1291 = "FHE.add_eint"(%1259, %85) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1292 = "FHE.add_eint"(%1260, %24) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1293 = "FHE.add_eint"(%1261, %88) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1294 = "FHE.add_eint"(%1262, %31) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1295 = "FHE.add_eint"(%1263, %95) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_989 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1296 = "FHE.apply_lookup_table"(%1264, %cst_989) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_990 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1297 = "FHE.apply_lookup_table"(%1265, %cst_990) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_991 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1298 = "FHE.apply_lookup_table"(%1266, %cst_991) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_992 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1299 = "FHE.apply_lookup_table"(%1267, %cst_992) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_993 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1300 = "FHE.apply_lookup_table"(%1268, %cst_993) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_994 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1301 = "FHE.apply_lookup_table"(%1269, %cst_994) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_995 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1302 = "FHE.apply_lookup_table"(%1270, %cst_995) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_996 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1303 = "FHE.apply_lookup_table"(%1271, %cst_996) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_997 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1304 = "FHE.apply_lookup_table"(%1272, %cst_997) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_998 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1305 = "FHE.apply_lookup_table"(%1273, %cst_998) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_999 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1306 = "FHE.apply_lookup_table"(%1274, %cst_999) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1000 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1307 = "FHE.apply_lookup_table"(%1275, %cst_1000) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1001 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1308 = "FHE.apply_lookup_table"(%1276, %cst_1001) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1002 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1309 = "FHE.apply_lookup_table"(%1277, %cst_1002) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1003 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1310 = "FHE.apply_lookup_table"(%1278, %cst_1003) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1004 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1311 = "FHE.apply_lookup_table"(%1279, %cst_1004) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1005 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1312 = "FHE.apply_lookup_table"(%1280, %cst_1005) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1006 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1313 = "FHE.apply_lookup_table"(%1281, %cst_1006) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1007 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1314 = "FHE.apply_lookup_table"(%1282, %cst_1007) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1008 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1315 = "FHE.apply_lookup_table"(%1283, %cst_1008) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1009 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1316 = "FHE.apply_lookup_table"(%1284, %cst_1009) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1010 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1317 = "FHE.apply_lookup_table"(%1285, %cst_1010) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1011 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1318 = "FHE.apply_lookup_table"(%1286, %cst_1011) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1012 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1319 = "FHE.apply_lookup_table"(%1287, %cst_1012) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1013 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1320 = "FHE.apply_lookup_table"(%1288, %cst_1013) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1014 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1321 = "FHE.apply_lookup_table"(%1289, %cst_1014) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1015 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1322 = "FHE.apply_lookup_table"(%1290, %cst_1015) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1016 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1323 = "FHE.apply_lookup_table"(%1291, %cst_1016) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1017 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1324 = "FHE.apply_lookup_table"(%1292, %cst_1017) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1018 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1325 = "FHE.apply_lookup_table"(%1293, %cst_1018) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1019 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1326 = "FHE.apply_lookup_table"(%1294, %cst_1019) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1020 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1327 = "FHE.apply_lookup_table"(%1295, %cst_1020) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %1328 = "FHE.add_eint"(%1296, %1297) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1329 = "FHE.add_eint"(%1298, %1299) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1330 = "FHE.add_eint"(%1300, %1301) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1331 = "FHE.add_eint"(%1302, %1303) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1332 = "FHE.add_eint"(%1304, %1305) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1333 = "FHE.add_eint"(%1306, %1307) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1334 = "FHE.add_eint"(%1308, %1309) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1335 = "FHE.add_eint"(%1310, %1311) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1336 = "FHE.add_eint"(%1312, %1313) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1337 = "FHE.add_eint"(%1314, %1315) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1338 = "FHE.add_eint"(%1316, %1317) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1339 = "FHE.add_eint"(%1318, %1319) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1340 = "FHE.add_eint"(%1320, %1321) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1341 = "FHE.add_eint"(%1322, %1323) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1342 = "FHE.add_eint"(%1324, %1325) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1343 = "FHE.add_eint"(%1326, %1327) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_1021 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1344 = "FHE.apply_lookup_table"(%1328, %cst_1021) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1022 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1345 = "FHE.apply_lookup_table"(%1328, %cst_1022) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1023 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1346 = "FHE.apply_lookup_table"(%1329, %cst_1023) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1024 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1347 = "FHE.apply_lookup_table"(%1329, %cst_1024) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1025 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1348 = "FHE.apply_lookup_table"(%1330, %cst_1025) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1026 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1349 = "FHE.apply_lookup_table"(%1330, %cst_1026) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1027 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1350 = "FHE.apply_lookup_table"(%1331, %cst_1027) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1028 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1351 = "FHE.apply_lookup_table"(%1331, %cst_1028) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1029 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1352 = "FHE.apply_lookup_table"(%1332, %cst_1029) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1030 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1353 = "FHE.apply_lookup_table"(%1332, %cst_1030) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1031 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1354 = "FHE.apply_lookup_table"(%1333, %cst_1031) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1032 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1355 = "FHE.apply_lookup_table"(%1333, %cst_1032) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1033 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1356 = "FHE.apply_lookup_table"(%1334, %cst_1033) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1034 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1357 = "FHE.apply_lookup_table"(%1334, %cst_1034) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1035 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1358 = "FHE.apply_lookup_table"(%1335, %cst_1035) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1036 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1359 = "FHE.apply_lookup_table"(%1335, %cst_1036) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1037 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1360 = "FHE.apply_lookup_table"(%1336, %cst_1037) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1038 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1361 = "FHE.apply_lookup_table"(%1336, %cst_1038) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1039 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1362 = "FHE.apply_lookup_table"(%1337, %cst_1039) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1040 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1363 = "FHE.apply_lookup_table"(%1337, %cst_1040) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1041 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1364 = "FHE.apply_lookup_table"(%1338, %cst_1041) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1042 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1365 = "FHE.apply_lookup_table"(%1338, %cst_1042) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1043 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1366 = "FHE.apply_lookup_table"(%1339, %cst_1043) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1044 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1367 = "FHE.apply_lookup_table"(%1339, %cst_1044) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1045 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1368 = "FHE.apply_lookup_table"(%1340, %cst_1045) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1046 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1369 = "FHE.apply_lookup_table"(%1340, %cst_1046) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1047 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1370 = "FHE.apply_lookup_table"(%1341, %cst_1047) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1048 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1371 = "FHE.apply_lookup_table"(%1341, %cst_1048) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1049 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1372 = "FHE.apply_lookup_table"(%1342, %cst_1049) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1050 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1373 = "FHE.apply_lookup_table"(%1342, %cst_1050) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1051 = arith.constant dense<"0x06000000000000000700000000000000070000000000000007000000000000000F00000000000000060000000000000006000000000000000C0000000000000003000000000000000000000000000000060000000000000002000000000000000F000000000000000D000000000000000A0000000000000007000000000000000C0000000000000008000000000000000C0000000000000007000000000000000F00000000000000050000000000000004000000000000000F000000000000000A000000000000000D000000000000000A000000000000000A0000000000000009000000000000000A0000000000000007000000000000000C000000000000000B000000000000000F0000000000000009000000000000000200000000000000030000000000000003000000000000000F000000000000000C0000000000000003000000000000000A000000000000000E000000000000000F0000000000000007000000000000000D000000000000000300000000000000010000000000000000000000000000000C0000000000000002000000000000000C0000000000000001000000000000000900000000000000000000000000000009000000000000000000000000000000010000000000000008000000000000000E000000000000000E0000000000000002000000000000000B00000000000000070000000000000000000000000000000800000000000000020000000000000001000000000000000100000000000000060000000000000005000000000000000A00000000000000050000000000000003000000000000000D000000000000000B0000000000000002000000000000000E000000000000000200000000000000080000000000000005000000000000000D0000000000000000000000000000000E0000000000000002000000000000000F000000000000000B00000000000000050000000000000006000000000000000C000000000000000B0000000000000003000000000000000400000000000000040000000000000005000000000000000C000000000000000D000000000000000E000000000000000A000000000000000F00000000000000040000000000000004000000000000000300000000000000080000000000000004000000000000000F00000000000000000000000000000007000000000000000500000000000000030000000000000009000000000000000A0000000000000005000000000000000A00000000000000040000000000000008000000000000000900000000000000090000000000000003000000000000000F000000000000000B000000000000000B000000000000000D00000000000000020000000000000001000000000000000F000000000000000F000000000000000D000000000000000C00000000000000000000000000000001000000000000000E0000000000000005000000000000000900000000000000040000000000000001000000000000000C000000000000000A000000000000000700000000000000030000000000000006000000000000000500000000000000010000000000000007000000000000000600000000000000080000000000000004000000000000000D00000000000000020000000000000002000000000000000900000000000000080000000000000004000000000000000E000000000000000B0000000000000001000000000000000D00000000000000050000000000000000000000000000000D000000000000000E0000000000000003000000000000000300000000000000000000000000000004000000000000000000000000000000020000000000000005000000000000000C000000000000000D000000000000000A000000000000000600000000000000090000000000000009000000000000000E0000000000000007000000000000000E000000000000000C000000000000000300000000000000060000000000000008000000000000000D0000000000000004000000000000000A00000000000000060000000000000005000000000000000F000000000000000E00000000000000060000000000000007000000000000000A0000000000000000000000000000000B0000000000000007000000000000000200000000000000020000000000000001000000000000000A000000000000000B000000000000000C000000000000000E000000000000000D000000000000000700000000000000010000000000000004000000000000000B0000000000000008000000000000000800000000000000070000000000000003000000000000000B000000000000000600000000000000040000000000000000000000000000000F0000000000000000000000000000000600000000000000030000000000000005000000000000000B0000000000000008000000000000000C00000000000000010000000000000009000000000000000E000000000000000F000000000000000900000000000000010000000000000006000000000000000D00000000000000080000000000000009000000000000000900000000000000010000000000000008000000000000000E000000000000000C00000000000000050000000000000002000000000000000D0000000000000008000000000000000A00000000000000080000000000000000000000000000000B000000000000000E000000000000000400000000000000060000000000000004000000000000000900000000000000020000000000000000000000000000000B0000000000000005000000000000000B000000000000000100000000000000"> : tensor<256xi64> - %1374 = "FHE.apply_lookup_table"(%1343, %cst_1051) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1052 = arith.constant dense<"0x03000000000000000C0000000000000007000000000000000B0000000000000002000000000000000B000000000000000F0000000000000005000000000000000000000000000000010000000000000007000000000000000B000000000000000E0000000000000007000000000000000B0000000000000006000000000000000A00000000000000020000000000000009000000000000000D000000000000000A000000000000000900000000000000070000000000000000000000000000000D00000000000000040000000000000002000000000000000F000000000000000C0000000000000004000000000000000200000000000000000000000000000007000000000000000D000000000000000300000000000000060000000000000006000000000000000F0000000000000007000000000000000C000000000000000400000000000000050000000000000005000000000000000100000000000000010000000000000008000000000000000100000000000000050000000000000004000000000000000700000000000000030000000000000003000000000000000800000000000000060000000000000005000000000000000A0000000000000007000000000000000200000000000000000000000000000002000000000000000B00000000000000070000000000000002000000000000000500000000000000090000000000000003000000000000000C000000000000000A000000000000000B000000000000000E000000000000000A00000000000000000000000000000002000000000000000B0000000000000006000000000000000300000000000000090000000000000003000000000000000F0000000000000004000000000000000300000000000000010000000000000000000000000000000D0000000000000000000000000000000C0000000000000001000000000000000B000000000000000A000000000000000B000000000000000E0000000000000009000000000000000A000000000000000C0000000000000008000000000000000F0000000000000000000000000000000F000000000000000A000000000000000B0000000000000003000000000000000D00000000000000030000000000000005000000000000000500000000000000090000000000000002000000000000000F0000000000000000000000000000000C000000000000000F0000000000000008000000000000000100000000000000030000000000000000000000000000000F0000000000000002000000000000000D00000000000000080000000000000005000000000000000C0000000000000006000000000000000A00000000000000010000000000000000000000000000000F00000000000000030000000000000002000000000000000D000000000000000C0000000000000003000000000000000C000000000000000F00000000000000070000000000000004000000000000000700000000000000040000000000000007000000000000000E000000000000000D0000000000000004000000000000000D0000000000000009000000000000000300000000000000000000000000000001000000000000000F000000000000000C0000000000000002000000000000000A000000000000000000000000000000080000000000000006000000000000000E00000000000000080000000000000004000000000000000E000000000000000E000000000000000B000000000000000B00000000000000000000000000000002000000000000000A000000000000000A000000000000000900000000000000060000000000000004000000000000000C00000000000000020000000000000003000000000000000C00000000000000020000000000000001000000000000000500000000000000040000000000000009000000000000000700000000000000080000000000000007000000000000000D000000000000000D0000000000000005000000000000000E0000000000000009000000000000000C00000000000000060000000000000004000000000000000A0000000000000005000000000000000A000000000000000E0000000000000008000000000000000A00000000000000080000000000000005000000000000000E000000000000000C0000000000000006000000000000000400000000000000060000000000000008000000000000000D0000000000000004000000000000000F000000000000000B000000000000000D000000000000000B000000000000000A0000000000000000000000000000000E00000000000000050000000000000006000000000000000800000000000000030000000000000006000000000000000E000000000000000100000000000000050000000000000007000000000000000900000000000000060000000000000001000000000000000D000000000000000E000000000000000100000000000000080000000000000008000000000000000100000000000000090000000000000009000000000000000E0000000000000004000000000000000B000000000000000E00000000000000070000000000000009000000000000000E00000000000000050000000000000008000000000000000F000000000000000C00000000000000010000000000000009000000000000000D000000000000000F00000000000000060000000000000002000000000000000800000000000000010000000000000009000000000000000D000000000000000F00000000000000000000000000000004000000000000000B000000000000000600000000000000"> : tensor<256xi64> - %1375 = "FHE.apply_lookup_table"(%1343, %cst_1052) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %1376 = "FHE.mul_eint_int"(%1344, %c16_i9_20) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1377 = "FHE.mul_eint_int"(%1345, %c16_i9_21) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1378 = "FHE.mul_eint_int"(%1346, %c16_i9_26) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1379 = "FHE.mul_eint_int"(%1347, %c16_i9_27) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1380 = "FHE.mul_eint_int"(%1348, %c16_i9_32) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1381 = "FHE.mul_eint_int"(%1349, %c16_i9_33) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1382 = "FHE.mul_eint_int"(%1350, %c16_i9_38) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1383 = "FHE.mul_eint_int"(%1351, %c16_i9_39) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1384 = "FHE.mul_eint_int"(%1352, %c16_i9) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1385 = "FHE.mul_eint_int"(%1353, %c16_i9_15) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1386 = "FHE.mul_eint_int"(%1354, %c16_i9_28) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1387 = "FHE.mul_eint_int"(%1355, %c16_i9_29) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1388 = "FHE.mul_eint_int"(%1356, %c16_i9_34) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1389 = "FHE.mul_eint_int"(%1357, %c16_i9_35) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1390 = "FHE.mul_eint_int"(%1358, %c16_i9_40) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1391 = "FHE.mul_eint_int"(%1359, %c16_i9_41) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1392 = "FHE.mul_eint_int"(%1360, %c16_i9_16) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1393 = "FHE.mul_eint_int"(%1361, %c16_i9_17) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1394 = "FHE.mul_eint_int"(%1362, %c16_i9_22) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1395 = "FHE.mul_eint_int"(%1363, %c16_i9_23) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1396 = "FHE.mul_eint_int"(%1364, %c16_i9_36) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1397 = "FHE.mul_eint_int"(%1365, %c16_i9_37) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1398 = "FHE.mul_eint_int"(%1366, %c16_i9_42) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1399 = "FHE.mul_eint_int"(%1367, %c16_i9_43) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1400 = "FHE.mul_eint_int"(%1368, %c16_i9_18) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1401 = "FHE.mul_eint_int"(%1369, %c16_i9_19) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1402 = "FHE.mul_eint_int"(%1370, %c16_i9_24) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1403 = "FHE.mul_eint_int"(%1371, %c16_i9_25) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1404 = "FHE.mul_eint_int"(%1372, %c16_i9_30) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1405 = "FHE.mul_eint_int"(%1373, %c16_i9_31) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1406 = "FHE.mul_eint_int"(%1374, %c16_i9_44) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1407 = "FHE.mul_eint_int"(%1375, %c16_i9_45) : (!FHE.eint<8>, i9) -> !FHE.eint<8> - %1408 = "FHE.add_eint"(%1376, %3) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1409 = "FHE.add_eint"(%1377, %67) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1410 = "FHE.add_eint"(%1378, %6) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1411 = "FHE.add_eint"(%1379, %70) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1412 = "FHE.add_eint"(%1380, %9) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1413 = "FHE.add_eint"(%1381, %73) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1414 = "FHE.add_eint"(%1382, %12) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1415 = "FHE.add_eint"(%1383, %76) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1416 = "FHE.add_eint"(%1384, %0) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1417 = "FHE.add_eint"(%1385, %64) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1418 = "FHE.add_eint"(%1386, %7) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1419 = "FHE.add_eint"(%1387, %71) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1420 = "FHE.add_eint"(%1388, %10) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1421 = "FHE.add_eint"(%1389, %74) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1422 = "FHE.add_eint"(%1390, %13) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1423 = "FHE.add_eint"(%1391, %77) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1424 = "FHE.add_eint"(%1392, %1) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1425 = "FHE.add_eint"(%1393, %65) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1426 = "FHE.add_eint"(%1394, %4) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1427 = "FHE.add_eint"(%1395, %68) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1428 = "FHE.add_eint"(%1396, %11) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1429 = "FHE.add_eint"(%1397, %75) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1430 = "FHE.add_eint"(%1398, %14) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1431 = "FHE.add_eint"(%1399, %78) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1432 = "FHE.add_eint"(%1400, %2) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1433 = "FHE.add_eint"(%1401, %66) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1434 = "FHE.add_eint"(%1402, %5) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1435 = "FHE.add_eint"(%1403, %69) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1436 = "FHE.add_eint"(%1404, %8) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1437 = "FHE.add_eint"(%1405, %72) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1438 = "FHE.add_eint"(%1406, %15) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1439 = "FHE.add_eint"(%1407, %79) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %cst_1053 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1440 = "FHE.apply_lookup_table"(%1408, %cst_1053) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1054 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1441 = "FHE.apply_lookup_table"(%1409, %cst_1054) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1055 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1442 = "FHE.apply_lookup_table"(%1410, %cst_1055) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1056 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1443 = "FHE.apply_lookup_table"(%1411, %cst_1056) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1057 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1444 = "FHE.apply_lookup_table"(%1412, %cst_1057) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1058 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1445 = "FHE.apply_lookup_table"(%1413, %cst_1058) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1059 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1446 = "FHE.apply_lookup_table"(%1414, %cst_1059) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1060 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1447 = "FHE.apply_lookup_table"(%1415, %cst_1060) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1061 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1448 = "FHE.apply_lookup_table"(%1416, %cst_1061) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1062 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1449 = "FHE.apply_lookup_table"(%1417, %cst_1062) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1063 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1450 = "FHE.apply_lookup_table"(%1418, %cst_1063) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1064 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1451 = "FHE.apply_lookup_table"(%1419, %cst_1064) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1065 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1452 = "FHE.apply_lookup_table"(%1420, %cst_1065) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1066 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1453 = "FHE.apply_lookup_table"(%1421, %cst_1066) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1067 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1454 = "FHE.apply_lookup_table"(%1422, %cst_1067) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1068 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1455 = "FHE.apply_lookup_table"(%1423, %cst_1068) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1069 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1456 = "FHE.apply_lookup_table"(%1424, %cst_1069) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1070 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1457 = "FHE.apply_lookup_table"(%1425, %cst_1070) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1071 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1458 = "FHE.apply_lookup_table"(%1426, %cst_1071) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1072 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1459 = "FHE.apply_lookup_table"(%1427, %cst_1072) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1073 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1460 = "FHE.apply_lookup_table"(%1428, %cst_1073) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1074 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1461 = "FHE.apply_lookup_table"(%1429, %cst_1074) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1075 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1462 = "FHE.apply_lookup_table"(%1430, %cst_1075) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1076 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1463 = "FHE.apply_lookup_table"(%1431, %cst_1076) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1077 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1464 = "FHE.apply_lookup_table"(%1432, %cst_1077) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1078 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1465 = "FHE.apply_lookup_table"(%1433, %cst_1078) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1079 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1466 = "FHE.apply_lookup_table"(%1434, %cst_1079) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1080 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1467 = "FHE.apply_lookup_table"(%1435, %cst_1080) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1081 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1468 = "FHE.apply_lookup_table"(%1436, %cst_1081) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1082 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1469 = "FHE.apply_lookup_table"(%1437, %cst_1082) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1083 = arith.constant dense<"0x0000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000"> : tensor<256xi64> - %1470 = "FHE.apply_lookup_table"(%1438, %cst_1083) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %cst_1084 = arith.constant dense<"0x00000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000001000000000000000000000000000000030000000000000002000000000000000500000000000000040000000000000007000000000000000600000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000070000000000000006000000000000000500000000000000040000000000000003000000000000000200000000000000010000000000000000000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A0000000000000009000000000000000800000000000000080000000000000009000000000000000A000000000000000B000000000000000C000000000000000D000000000000000E000000000000000F0000000000000000000000000000000100000000000000020000000000000003000000000000000400000000000000050000000000000006000000000000000700000000000000090000000000000008000000000000000B000000000000000A000000000000000D000000000000000C000000000000000F000000000000000E00000000000000010000000000000000000000000000000300000000000000020000000000000005000000000000000400000000000000070000000000000006000000000000000A000000000000000B00000000000000080000000000000009000000000000000E000000000000000F000000000000000C000000000000000D00000000000000020000000000000003000000000000000000000000000000010000000000000006000000000000000700000000000000040000000000000005000000000000000B000000000000000A00000000000000090000000000000008000000000000000F000000000000000E000000000000000D000000000000000C00000000000000030000000000000002000000000000000100000000000000000000000000000007000000000000000600000000000000050000000000000004000000000000000C000000000000000D000000000000000E000000000000000F00000000000000080000000000000009000000000000000A000000000000000B00000000000000040000000000000005000000000000000600000000000000070000000000000000000000000000000100000000000000020000000000000003000000000000000D000000000000000C000000000000000F000000000000000E00000000000000090000000000000008000000000000000B000000000000000A00000000000000050000000000000004000000000000000700000000000000060000000000000001000000000000000000000000000000030000000000000002000000000000000E000000000000000F000000000000000C000000000000000D000000000000000A000000000000000B0000000000000008000000000000000900000000000000060000000000000007000000000000000400000000000000050000000000000002000000000000000300000000000000000000000000000001000000000000000F000000000000000E000000000000000D000000000000000C000000000000000B000000000000000A000000000000000900000000000000080000000000000007000000000000000600000000000000050000000000000004000000000000000300000000000000020000000000000001000000000000000000000000000000"> : tensor<256xi64> - %1471 = "FHE.apply_lookup_table"(%1439, %cst_1084) : (!FHE.eint<8>, tensor<256xi64>) -> !FHE.eint<8> - %1472 = "FHE.add_eint"(%1440, %1441) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1473 = "FHE.add_eint"(%1442, %1443) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1474 = "FHE.add_eint"(%1444, %1445) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1475 = "FHE.add_eint"(%1446, %1447) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1476 = "FHE.add_eint"(%1448, %1449) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1477 = "FHE.add_eint"(%1450, %1451) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1478 = "FHE.add_eint"(%1452, %1453) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1479 = "FHE.add_eint"(%1454, %1455) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1480 = "FHE.add_eint"(%1456, %1457) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1481 = "FHE.add_eint"(%1458, %1459) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1482 = "FHE.add_eint"(%1460, %1461) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1483 = "FHE.add_eint"(%1462, %1463) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1484 = "FHE.add_eint"(%1464, %1465) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1485 = "FHE.add_eint"(%1466, %1467) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1486 = "FHE.add_eint"(%1468, %1469) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %1487 = "FHE.add_eint"(%1470, %1471) : (!FHE.eint<8>, !FHE.eint<8>) -> !FHE.eint<8> - %hack_1488_1472 = tensor.from_elements %1472 : tensor<1x!FHE.eint<8>> - %1488 = "FHELinalg.add_eint_int"(%hack_1488_1472, %cst_2) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1489_1473 = tensor.from_elements %1473 : tensor<1x!FHE.eint<8>> - %1489 = "FHELinalg.add_eint_int"(%hack_1489_1473, %cst_5) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1490_1474 = tensor.from_elements %1474 : tensor<1x!FHE.eint<8>> - %1490 = "FHELinalg.add_eint_int"(%hack_1490_1474, %cst_8) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1491_1475 = tensor.from_elements %1475 : tensor<1x!FHE.eint<8>> - %1491 = "FHELinalg.add_eint_int"(%hack_1491_1475, %cst_11) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1492_1476 = tensor.from_elements %1476 : tensor<1x!FHE.eint<8>> - %1492 = "FHELinalg.add_eint_int"(%hack_1492_1476, %cst) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1493_1477 = tensor.from_elements %1477 : tensor<1x!FHE.eint<8>> - %1493 = "FHELinalg.add_eint_int"(%hack_1493_1477, %cst_6) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1494_1478 = tensor.from_elements %1478 : tensor<1x!FHE.eint<8>> - %1494 = "FHELinalg.add_eint_int"(%hack_1494_1478, %cst_9) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1495_1479 = tensor.from_elements %1479 : tensor<1x!FHE.eint<8>> - %1495 = "FHELinalg.add_eint_int"(%hack_1495_1479, %cst_12) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1496_1480 = tensor.from_elements %1480 : tensor<1x!FHE.eint<8>> - %1496 = "FHELinalg.add_eint_int"(%hack_1496_1480, %cst_0) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1497_1481 = tensor.from_elements %1481 : tensor<1x!FHE.eint<8>> - %1497 = "FHELinalg.add_eint_int"(%hack_1497_1481, %cst_3) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1498_1482 = tensor.from_elements %1482 : tensor<1x!FHE.eint<8>> - %1498 = "FHELinalg.add_eint_int"(%hack_1498_1482, %cst_10) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1499_1483 = tensor.from_elements %1483 : tensor<1x!FHE.eint<8>> - %1499 = "FHELinalg.add_eint_int"(%hack_1499_1483, %cst_13) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1500_1484 = tensor.from_elements %1484 : tensor<1x!FHE.eint<8>> - %1500 = "FHELinalg.add_eint_int"(%hack_1500_1484, %cst_1) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1501_1485 = tensor.from_elements %1485 : tensor<1x!FHE.eint<8>> - %1501 = "FHELinalg.add_eint_int"(%hack_1501_1485, %cst_4) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1502_1486 = tensor.from_elements %1486 : tensor<1x!FHE.eint<8>> - %1502 = "FHELinalg.add_eint_int"(%hack_1502_1486, %cst_7) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %hack_1503_1487 = tensor.from_elements %1487 : tensor<1x!FHE.eint<8>> - %1503 = "FHELinalg.add_eint_int"(%hack_1503_1487, %cst_14) : (tensor<1x!FHE.eint<8>>, tensor<1xi9>) -> tensor<1x!FHE.eint<8>> - %1504 = "FHELinalg.concat"(%1492, %1496, %1500, %1488, %1497, %1501, %1489, %1493, %1502, %1490, %1494, %1498, %1491, %1495, %1499, %1503) {axis = 0 : i64} : (tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>, tensor<1x!FHE.eint<8>>) -> tensor<16x!FHE.eint<8>> - return %1504 : tensor<16x!FHE.eint<8>> - } -} -)XXX", - "main", false, true, false); - - std::vector input0 = { - 2, 7, 1, 1, 2, 10, 13, 10, 10, 15, 1, 8, 0, 12, 4, 3, 10, 15, - 15, 1, 8, 5, 2, 11, 2, 10, 3, 3, 2, 6, 7, 0, 15, 12, 9, 15, - 7, 9, 11, 4, 5, 3, 8, 7, 7, 5, 15, 7, 3, 8, 4, 7, 4, 1, - 15, 3, 1, 2, 7, 4, 6, 7, 8, 3, 14, 4, 10, 4, 10, 5, 5, 7, - 11, 7, 2, 3, 13, 0, 10, 0, 13, 13, 12, 15, 7, 8, 9, 8, 12, 15, - 11, 11, 1, 15, 1, 11, 6, 8, 10, 7, 1, 0, 3, 15, 13, 15, 8, 4, - 12, 0, 9, 15, 4, 5, 15, 0, 5, 5, 12, 15, 8, 10, 4, 11, 4, 10, - 13, 4, 14, 13, 7, 2, 11, 8, 11, 13, 3, 2, 15, 6, 7, 8, 2, 2, - 10, 7, 6, 15, 1, 15, 13, 2, 2, 13, 2, 4, 5, 5, 0, 6, 13, 1, - 15, 10, 12, 14, 2, 8, 14, 3, 0, 12, 11, 6, 0, 10}; - - std::vector input1 = { - 11, 14, 5, 6, 8, 14, 2, 6, 11, 7, 5, 8, 9, 15, 15, 12, 0, 10, - 14, 7, 8, 4, 12, 1, 3, 3, 9, 9, 10, 12, 6, 5, 2, 2, 5, 2, - 10, 6, 9, 3, 9, 5, 0, 10, 3, 9, 6, 15, 13, 0, 7, 13, 7, 6, - 14, 14, 14, 3, 14, 4, 13, 10, 8, 11, 15, 4, 5, 1, 8, 2, 11, 15, - 6, 1, 5, 11, 11, 11, 13, 0, 4, 1, 6, 8, 12, 3, 13, 7, 10, 2, - 8, 12, 1, 9, 5, 12, 13, 8, 3, 10, 1, 11, 14, 13, 11, 9, 6, 1, - 10, 0, 3, 13, 14, 4, 7, 14, 15, 15, 9, 3, 4, 6, 15, 2, 14, 6, - 12, 15, 10, 2, 3, 1, 5, 13, 10, 2, 1, 11, 5, 0, 15, 13, 9, 15, - 12, 7, 6, 3, 9, 10, 12, 1, 8, 1, 9, 1, 7, 12, 0, 14, 0, 4, - 9, 8, 9, 14, 5, 9, 1, 15, 12, 8, 6, 3, 12, 6}; - - std::vector input2 = {107, 193, 190, 226, 46, 64, 159, 150, - 233, 61, 126, 17, 115, 147, 23, 42}; - - std::vector expected_output = {132, 234, 152, 233, 122, 94, - 207, 48, 137, 236, 28, 103, - 96, 110, 104, 184}; - - auto arg0 = Tensor(input0, {input0.size()}); - auto arg1 = Tensor(input1, {input1.size()}); - auto arg2 = Tensor(input2, {input2.size()}); - - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - auto maybeResult = lambda.call({arg0, arg1, arg2}); - ASSERT_OUTCOME_HAS_VALUE(maybeResult); - auto result = maybeResult.value()[0].template getTensor().value(); - // distributed_results = *res; - ASSERT_EQ(result.values.size(), expected_output.size()); - for (size_t i = 0; i < expected_output.size(); i++) - EXPECT_EQ(expected_output[i], result.values[i]) - << "result differ at pos " << i; - } else - ASSERT_OUTCOME_HAS_FAILURE(lambda.call({})); -} diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_auto_parallelization.cc b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_auto_parallelization.cc deleted file mode 100644 index d1391cc2f..000000000 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_auto_parallelization.cc +++ /dev/null @@ -1,167 +0,0 @@ - -#include -#include -#include -#include -#include - -#include "concretelang/TestLib/TestProgram.h" -#include "end_to_end_jit_test.h" -#include "tests_tools/GtestEnvironment.h" -/////////////////////////////////////////////////////////////////////////////// -// Auto-parallelize independent FHE ops ///////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -TEST(ParallelizeAndRunFHE, add_eint_tree) { - checkedJit(testCircuit, R"XXX( -func.func @main(%arg0: !FHE.eint<7>, %arg1: !FHE.eint<7>, %arg2: !FHE.eint<7>, %arg3: !FHE.eint<7>) -> !FHE.eint<7> { - %1 = "FHE.add_eint"(%arg0, %arg1): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %2 = "FHE.add_eint"(%arg0, %arg2): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %3 = "FHE.add_eint"(%arg0, %arg3): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %4 = "FHE.add_eint"(%arg1, %arg2): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %5 = "FHE.add_eint"(%arg1, %arg3): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %6 = "FHE.add_eint"(%arg2, %arg3): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - - %7 = "FHE.add_eint"(%1, %2): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %8 = "FHE.add_eint"(%1, %3): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %9 = "FHE.add_eint"(%1, %4): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %10 = "FHE.add_eint"(%1, %5): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %11 = "FHE.add_eint"(%1, %6): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %12 = "FHE.add_eint"(%2, %3): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %13 = "FHE.add_eint"(%2, %4): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %14 = "FHE.add_eint"(%2, %5): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %15 = "FHE.add_eint"(%2, %6): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %16 = "FHE.add_eint"(%3, %4): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %17 = "FHE.add_eint"(%3, %5): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %18 = "FHE.add_eint"(%3, %6): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %19 = "FHE.add_eint"(%4, %5): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %20 = "FHE.add_eint"(%4, %6): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %21 = "FHE.add_eint"(%5, %6): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - - %22 = "FHE.add_eint"(%7, %8): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %23 = "FHE.add_eint"(%9, %10): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %24 = "FHE.add_eint"(%11, %12): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %25 = "FHE.add_eint"(%13, %14): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %26 = "FHE.add_eint"(%15, %16): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %27 = "FHE.add_eint"(%17, %18): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %28 = "FHE.add_eint"(%19, %20): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - - %29 = "FHE.add_eint"(%22, %23): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %30 = "FHE.add_eint"(%24, %25): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %31 = "FHE.add_eint"(%26, %27): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %32 = "FHE.add_eint"(%21, %28): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - - %33 = "FHE.add_eint"(%29, %30): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - %34 = "FHE.add_eint"(%31, %32): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - - %35 = "FHE.add_eint"(%33, %34): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>) - return %35: !FHE.eint<7> -} -)XXX", - "main", false, true, false, false, 1e-40); - - auto lambda = [&](std::vector args) { - return testCircuit.call(args) - .value()[0] - .template getTensor() - .value()[0]; - }; - - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - ASSERT_EQ(lambda({Tensor(1), Tensor(2), - Tensor(3), Tensor(4)}), - (uint64_t)150); - ASSERT_EQ(lambda({Tensor(4), Tensor(5), - Tensor(6), Tensor(7)}), - (uint64_t)74); - ASSERT_EQ(lambda({Tensor(1), Tensor(1), - Tensor(1), Tensor(1)}), - (uint64_t)60); - ASSERT_EQ(lambda({Tensor(5), Tensor(7), - Tensor(11), Tensor(13)}), - (uint64_t)28); - } else { - ASSERT_OUTCOME_HAS_FAILURE(testCircuit.call({})); - ASSERT_OUTCOME_HAS_FAILURE(testCircuit.call({})); - ASSERT_OUTCOME_HAS_FAILURE(testCircuit.call({})); - ASSERT_OUTCOME_HAS_FAILURE(testCircuit.call({})); - } -} - -std::vector parallel_results; - -TEST(ParallelizeAndRunFHE, nn_small_parallel) { - checkedJit(lambda, R"XXX( - func.func @main(%arg0: tensor<4x5x!FHE.eint<5>>) -> tensor<4x7x!FHE.eint<5>> { - %cst = arith.constant dense<[[0, 0, 1, 0, 1, 1, 0], [1, 1, 1, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1]]> : tensor<4x7xi6> - %cst_0 = arith.constant dense<[[1, 0, 1, 1, 0, 1, 1], [0, 1, 0, 0, 0, 0, 1], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 1]]> : tensor<5x7xi6> - %0 = "FHELinalg.matmul_eint_int"(%arg0, %cst_0) : (tensor<4x5x!FHE.eint<5>>, tensor<5x7xi6>) -> tensor<4x7x!FHE.eint<5>> - %1 = "FHELinalg.add_eint_int"(%0, %cst) : (tensor<4x7x!FHE.eint<5>>, tensor<4x7xi6>) -> tensor<4x7x!FHE.eint<5>> - %cst_1 = arith.constant dense<[0, 3, 7, 10, 14, 17, 21, 24, 28, 31, 35, 38, 42, 45, 49, 52, 56, 59, 63, 66, 70, 73, 77, 80, 84, 87, 91, 94, 98, 101, 105, 108]> : tensor<32xi64> - %2 = "FHELinalg.apply_lookup_table"(%1, %cst_1) : (tensor<4x7x!FHE.eint<5>>, tensor<32xi64>) -> tensor<4x7x!FHE.eint<5>> - return %2 : tensor<4x7x!FHE.eint<5>> - } -)XXX", - "main", false, true, true); - - const size_t dim0 = 4; - const size_t dim1 = 5; - const size_t dim2 = 7; - const std::vector inputShape({dim0, dim1}); - const std::vector outputShape({dim0, dim2}); - std::vector values; - values.reserve(dim0 * dim1); - for (size_t i = 0; i < dim0 * dim1; ++i) { - values.push_back(i % 17 % 4); - } - auto input = Tensor(values, inputShape); - - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - auto maybeResult = lambda.call({input}); - ASSERT_OUTCOME_HAS_VALUE(maybeResult); - auto result = maybeResult.value()[0].template getTensor().value(); - ASSERT_EQ(result.dimensions, outputShape); - parallel_results = result.values; - } else { - ASSERT_OUTCOME_HAS_FAILURE(lambda.call({})); - } -} - -TEST(ParallelizeAndRunFHE, nn_small_sequential) { - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - checkedJit(lambda, R"XXX( - func.func @main(%arg0: tensor<4x5x!FHE.eint<5>>) -> tensor<4x7x!FHE.eint<5>> { - %cst = arith.constant dense<[[0, 0, 1, 0, 1, 1, 0], [1, 1, 1, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1]]> : tensor<4x7xi6> - %cst_0 = arith.constant dense<[[1, 0, 1, 1, 0, 1, 1], [0, 1, 0, 0, 0, 0, 1], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 1]]> : tensor<5x7xi6> - %0 = "FHELinalg.matmul_eint_int"(%arg0, %cst_0) : (tensor<4x5x!FHE.eint<5>>, tensor<5x7xi6>) -> tensor<4x7x!FHE.eint<5>> - %1 = "FHELinalg.add_eint_int"(%0, %cst) : (tensor<4x7x!FHE.eint<5>>, tensor<4x7xi6>) -> tensor<4x7x!FHE.eint<5>> - %cst_1 = arith.constant dense<[0, 3, 7, 10, 14, 17, 21, 24, 28, 31, 35, 38, 42, 45, 49, 52, 56, 59, 63, 66, 70, 73, 77, 80, 84, 87, 91, 94, 98, 101, 105, 108]> : tensor<32xi64> - %2 = "FHELinalg.apply_lookup_table"(%1, %cst_1) : (tensor<4x7x!FHE.eint<5>>, tensor<32xi64>) -> tensor<4x7x!FHE.eint<5>> - return %2 : tensor<4x7x!FHE.eint<5>> - } -)XXX", - "main", false, false, false); - - const size_t dim0 = 4; - const size_t dim1 = 5; - const size_t dim2 = 7; - const std::vector inputShape({dim0, dim1}); - const std::vector outputShape({dim0, dim2}); - std::vector values; - values.reserve(dim0 * dim1); - for (size_t i = 0; i < dim0 * dim1; ++i) { - values.push_back(i % 17 % 4); - } - auto input = Tensor(values, inputShape); - - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - auto maybeResult = lambda.call({input}); - ASSERT_OUTCOME_HAS_VALUE(maybeResult); - auto result = - maybeResult.value()[0].template getTensor().value(); - for (size_t i = 0; i < dim0 * dim2; i++) - EXPECT_EQ(parallel_results[i], result.values[i]) - << "result differ at pos " << i; - } - } -} diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_distributed.cc b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_distributed.cc deleted file mode 100644 index 57f569d43..000000000 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_distributed.cc +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include -#include -#include -#include - -#include "concretelang/TestLib/TestProgram.h" -#include "end_to_end_jit_test.h" -#include "tests_tools/GtestEnvironment.h" - -/////////////////////////////////////////////////////////////////////////////// -// Auto-parallelize independent FHE ops ///////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -std::vector distributed_results; - -TEST(Distributed, nn_med_nested) { - checkedJit(lambda, R"XXX( -func.func @main(%arg0: tensor<200x4x!FHE.eint<4>>) -> tensor<200x8x!FHE.eint<4>> { - %cst = arith.constant dense<"0x01010100010100000001010101000101010101010101010001000101000001010001010100000101000001000001010001000001010100010001000000010100010001010001000001000101010101000100010001000000000100010001000101000001000101010100010001000000000101000100000000000001000100000100000100000001010000010001000101000100010001000100000100000100010101010000000000000000010001010000000100000100010100000100000000010001000101000100000000000101010101000101010101010100010100010100000000000101010100000100010100000001000101000000010101000101000100000101010100010101010000010101010100010000000000000001010101000100010101000001010001010000010001010101000000000000000001000001000000010100000100000101010100010001000000000000010100010101000000010100000100010001010001000000000100010001000101010100010100000001010100010101010100010100010001000001000000000101000101010001000100000101010100000101010100000100010101000100000101000101010100010001000101010100010001010001010000010000010001010000000001000101010001000000000101000000010000010100010001000001000001010101000100010001010100000101000000010001000000000101000101000000010000000001000101010100010001000000000001010000010001000001010101000101010101010100000000000001000100000100000001000000010101010101000000000101010101000100000101000100000000000001000100000101000101010100010000000101000000000100000100000101010000010100000000010000000000010001000100000101010001010101000000000000010000010101010001000000010001010001010000000000000101000000010101010101000001010101000001000001010100000000010001010100000100000101000101010100010001010001000001000100000101000100010100000100010000000101000000010000010001010101010000000101000000010101000001010100000100010001000000000001010000000100010000000000000000000000000001010101010101010101000001010101000001010100000001000101010101010000010101000101010100010101010000010101010100000100000000000101010000000000010101010000000001000000010100000100000001000101010000000001000001000001010001010000010001000101010001010001010101000100010000000100000100010101000000000101010101010001000100000000000101010000010101000001010001010000000001010100000101000001010000000001010101000100010000010101000000000001000101000001010101000101000001000001000000010100010001000101010100010001010000000101000000010001000001000100000101010001000001000001000101010000010001000001000101000000000000000101010000010000000101010100010100010001010101010000000000010001000101010000000001010100000000010001010100010001000001000101000000010100010000010000010001010100010000010001010100010000010100010101010001000100010100010101000100000101010100000100010100000100000000010101000000010001000001010000000101000100000100010101000000010100000101000001010001010100010000000101010000000001010001000000010100010101010001000100010001000001010101000000010001000100000100010101000000000000010100010000000100000000010100010000000100000101010000010101000100010000010100000001000100000000000100000001010101010101000100010001000000010101010100000001000001000001010001000101010100000001010001010100010101000101000000010001010100010101000100000101000101000001000001000001000101010100010001010000000100000101010100000001000000000000010101000100010001000001000001000000000000010100000100000001"> : tensor<200x8xi5> - %cst_0 = arith.constant dense<[[1, 0, 0, 0, 1, 0, 0, 1], [0, 0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 1, 1, 0, 1, 1], [1, 1, 0, 0, 1, 0, 1, 1]]> : tensor<4x8xi5> - %cst_1 = arith.constant dense<[0, 3, 7, 10, 14, 17, 21, 24, 28, 31, 35, 38, 42, 45, 49, 52]> : tensor<16xi64> - %0 = "FHELinalg.matmul_eint_int"(%arg0, %cst_0) : (tensor<200x4x!FHE.eint<4>>, tensor<4x8xi5>) -> tensor<200x8x!FHE.eint<4>> - %1 = "FHELinalg.add_eint_int"(%0, %cst) : (tensor<200x8x!FHE.eint<4>>, tensor<200x8xi5>) -> tensor<200x8x!FHE.eint<4>> - - %res = "FHE.zero_tensor"() : () -> tensor<200x8x!FHE.eint<4>> - - %slice_A = tensor.extract_slice %1[0, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_B = tensor.extract_slice %1[25, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_C = tensor.extract_slice %1[50, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_D = tensor.extract_slice %1[75, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_E = tensor.extract_slice %1[100, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_F = tensor.extract_slice %1[125, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_G = tensor.extract_slice %1[150, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_H = tensor.extract_slice %1[175, 0][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_I = tensor.extract_slice %1[0, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_J = tensor.extract_slice %1[25, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_K = tensor.extract_slice %1[50, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_L = tensor.extract_slice %1[75, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_M = tensor.extract_slice %1[100, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_N = tensor.extract_slice %1[125, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_O = tensor.extract_slice %1[150, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - %slice_P = tensor.extract_slice %1[175, 4][25, 4][1, 1] : tensor<200x8x!FHE.eint<4>> to tensor<25x4x!FHE.eint<4>> - - %part_A = "FHELinalg.apply_lookup_table"(%slice_A, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_B = "FHELinalg.apply_lookup_table"(%slice_B, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_C = "FHELinalg.apply_lookup_table"(%slice_C, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_D = "FHELinalg.apply_lookup_table"(%slice_D, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_E = "FHELinalg.apply_lookup_table"(%slice_E, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_F = "FHELinalg.apply_lookup_table"(%slice_F, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_G = "FHELinalg.apply_lookup_table"(%slice_G, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_H = "FHELinalg.apply_lookup_table"(%slice_H, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_I = "FHELinalg.apply_lookup_table"(%slice_I, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_J = "FHELinalg.apply_lookup_table"(%slice_J, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_K = "FHELinalg.apply_lookup_table"(%slice_K, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_L = "FHELinalg.apply_lookup_table"(%slice_L, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_M = "FHELinalg.apply_lookup_table"(%slice_M, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_N = "FHELinalg.apply_lookup_table"(%slice_N, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_O = "FHELinalg.apply_lookup_table"(%slice_O, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - %part_P = "FHELinalg.apply_lookup_table"(%slice_P, %cst_1) : (tensor<25x4x!FHE.eint<4>>, tensor<16xi64>) -> tensor<25x4x!FHE.eint<4>> - - %res_A = tensor.insert_slice %part_A into %res [0, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_B = tensor.insert_slice %part_B into %res_A[25, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_C = tensor.insert_slice %part_C into %res_B[50, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_D = tensor.insert_slice %part_D into %res_C[75, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_E = tensor.insert_slice %part_E into %res_D[100, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_F = tensor.insert_slice %part_F into %res_E[125, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_G = tensor.insert_slice %part_G into %res_F[150, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_H = tensor.insert_slice %part_H into %res_G[175, 0][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_I = tensor.insert_slice %part_I into %res_H[0, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_J = tensor.insert_slice %part_J into %res_I[25, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_K = tensor.insert_slice %part_K into %res_J[50, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_L = tensor.insert_slice %part_L into %res_K[75, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_M = tensor.insert_slice %part_M into %res_L[100, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_N = tensor.insert_slice %part_N into %res_M[125, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_O = tensor.insert_slice %part_O into %res_N[150, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - %res_P = tensor.insert_slice %part_P into %res_O[175, 4][25, 4][1, 1] : tensor<25x4x!FHE.eint<4>> into tensor<200x8x!FHE.eint<4>> - - return %res_P : tensor<200x8x!FHE.eint<4>> -} -)XXX", - "main", false, true, true, DEFAULT_batchTFHEOps, - DEFAULT_global_p_error, DEFAULT_chunkedIntegers, DEFAULT_chunkSize, - DEFAULT_chunkWidth, false); - - const size_t dim0 = 200; - const size_t dim1 = 4; - const size_t dim2 = 8; - const std::vector inputShape({dim0, dim1}); - const std::vector outputShape({dim0, dim2}); - std::vector values; - values.reserve(dim0 * dim1); - for (size_t i = 0; i < dim0 * dim1; ++i) { - values.push_back(i % 17 % 4); - } - auto input = Tensor(values, inputShape); - - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - auto maybeResult = lambda.call({input}); - ASSERT_OUTCOME_HAS_VALUE(maybeResult); - auto result = maybeResult.value()[0].template getTensor().value(); - ASSERT_EQ(result.dimensions, outputShape); - distributed_results = result.values; - } else { - ASSERT_OUTCOME_HAS_VALUE(lambda.call({})); - } -} - -TEST(Distributed, nn_med_sequential) { - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - checkedJit(lambda, R"XXX( - func.func @main(%arg0: tensor<200x4x!FHE.eint<4>>) -> tensor<200x8x!FHE.eint<4>> { - %cst = arith.constant dense<"0x01010100010100000001010101000101010101010101010001000101000001010001010100000101000001000001010001000001010100010001000000010100010001010001000001000101010101000100010001000000000100010001000101000001000101010100010001000000000101000100000000000001000100000100000100000001010000010001000101000100010001000100000100000100010101010000000000000000010001010000000100000100010100000100000000010001000101000100000000000101010101000101010101010100010100010100000000000101010100000100010100000001000101000000010101000101000100000101010100010101010000010101010100010000000000000001010101000100010101000001010001010000010001010101000000000000000001000001000000010100000100000101010100010001000000000000010100010101000000010100000100010001010001000000000100010001000101010100010100000001010100010101010100010100010001000001000000000101000101010001000100000101010100000101010100000100010101000100000101000101010100010001000101010100010001010001010000010000010001010000000001000101010001000000000101000000010000010100010001000001000001010101000100010001010100000101000000010001000000000101000101000000010000000001000101010100010001000000000001010000010001000001010101000101010101010100000000000001000100000100000001000000010101010101000000000101010101000100000101000100000000000001000100000101000101010100010000000101000000000100000100000101010000010100000000010000000000010001000100000101010001010101000000000000010000010101010001000000010001010001010000000000000101000000010101010101000001010101000001000001010100000000010001010100000100000101000101010100010001010001000001000100000101000100010100000100010000000101000000010000010001010101010000000101000000010101000001010100000100010001000000000001010000000100010000000000000000000000000001010101010101010101000001010101000001010100000001000101010101010000010101000101010100010101010000010101010100000100000000000101010000000000010101010000000001000000010100000100000001000101010000000001000001000001010001010000010001000101010001010001010101000100010000000100000100010101000000000101010101010001000100000000000101010000010101000001010001010000000001010100000101000001010000000001010101000100010000010101000000000001000101000001010101000101000001000001000000010100010001000101010100010001010000000101000000010001000001000100000101010001000001000001000101010000010001000001000101000000000000000101010000010000000101010100010100010001010101010000000000010001000101010000000001010100000000010001010100010001000001000101000000010100010000010000010001010100010000010001010100010000010100010101010001000100010100010101000100000101010100000100010100000100000000010101000000010001000001010000000101000100000100010101000000010100000101000001010001010100010000000101010000000001010001000000010100010101010001000100010001000001010101000000010001000100000100010101000000000000010100010000000100000000010100010000000100000101010000010101000100010000010100000001000100000000000100000001010101010101000100010001000000010101010100000001000001000001010001000101010100000001010001010100010101000101000000010001010100010101000100000101000101000001000001000001000101010100010001010000000100000101010100000001000000000000010101000100010001000001000001000000000000010100000100000001"> : tensor<200x8xi5> - %cst_0 = arith.constant dense<[[1, 0, 0, 0, 1, 0, 0, 1], [0, 0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 1, 1, 0, 1, 1], [1, 1, 0, 0, 1, 0, 1, 1]]> : tensor<4x8xi5> - %0 = "FHELinalg.matmul_eint_int"(%arg0, %cst_0) : (tensor<200x4x!FHE.eint<4>>, tensor<4x8xi5>) -> tensor<200x8x!FHE.eint<4>> - %1 = "FHELinalg.add_eint_int"(%0, %cst) : (tensor<200x8x!FHE.eint<4>>, tensor<200x8xi5>) -> tensor<200x8x!FHE.eint<4>> - %cst_1 = arith.constant dense<[0, 3, 7, 10, 14, 17, 21, 24, 28, 31, 35, 38, 42, 45, 49, 52]> : tensor<16xi64> - %2 = "FHELinalg.apply_lookup_table"(%1, %cst_1) : (tensor<200x8x!FHE.eint<4>>, tensor<16xi64>) -> tensor<200x8x!FHE.eint<4>> - return %2 : tensor<200x8x!FHE.eint<4>> - } -)XXX", - "main", false, false, false, DEFAULT_batchTFHEOps, - DEFAULT_global_p_error, DEFAULT_chunkedIntegers, - DEFAULT_chunkSize, DEFAULT_chunkWidth, false); - - const size_t dim0 = 200; - const size_t dim1 = 4; - const size_t dim2 = 8; - const std::vector inputShape({dim0, dim1}); - const std::vector outputShape({dim0, dim2}); - std::vector values; - values.reserve(dim0 * dim1); - for (size_t i = 0; i < dim0 * dim1; ++i) { - values.push_back(i % 17 % 4); - } - auto input = Tensor(values, inputShape); - - if (mlir::concretelang::dfr::_dfr_is_root_node()) { - auto maybeResult = lambda.call({input}); - ASSERT_OUTCOME_HAS_VALUE(maybeResult); - auto result = - maybeResult.value()[0].template getTensor().value(); - for (size_t i = 0; i < dim0 * dim2; i++) - EXPECT_EQ(distributed_results[i], result.values[i]) - << "result differ at pos " << i; - } - } -} diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_distributed.sh b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_distributed.sh deleted file mode 100644 index 58dfe57d1..000000000 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_distributed.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -#SBATCH --job-name=end_to_end_jit_distributed -#SBATCH --mail-type=BEGIN,END,FAIL -#SBATCH --mail-user=antoniu.pop@zama.ai -#SBATCH --nodes=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=00:45:00 -#SBATCH --output=end_to_end_jit_distributed_%j.log - -echo "Date = $(date)" -echo "Hostname = $(hostname -s)" -echo "Working Directory = $(pwd)" -echo "" -echo "Number of Nodes Allocated = $SLURM_JOB_NUM_NODES" -echo "Number of Tasks Allocated = $SLURM_NTASKS" -echo "Number of Cores/Task Allocated = $SLURM_CPUS_PER_TASK" - -export OMP_NUM_THREADS=8 -export DFR_NUM_THREADS=2 - -srun ./build/bin/end_to_end_jit_distributed - -date diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_test.cc b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_test.cc index aeffd5c3b..3d4a749da 100644 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_test.cc +++ b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_jit_test.cc @@ -407,8 +407,10 @@ func.func @main(%arg0: !FHE.eint<3>) -> !FHE.eint<3> { } )XXX"); ASSERT_OUTCOME_HAS_FAILURE_WITH_ERRORMSG( - err, "Program can not be composed: Dag is not composable, because of " - "output 1: Partition 0 has input coefficient 4"); + err, "Program can not be composed: At -:4:8: please add " + "`fhe.refresh(...)` to guarantee the function composability.\n" + "The noise of the node 0 is contaminated by noise coming straight " + "from the input (partition: 0, coeff: 4.00)."); } TEST(CompileNotComposable, not_composable_2) { @@ -428,8 +430,10 @@ func.func @main(%arg0: !FHE.eint<3>) -> (!FHE.eint<3>, !FHE.eint<3>) { } )XXX"); ASSERT_OUTCOME_HAS_FAILURE_WITH_ERRORMSG( - err, "Program can not be composed: Dag is not composable, because of " - "output 1: Partition 0 has input coefficient 4"); + err, "Program can not be composed: At -:5:8: please add " + "`fhe.refresh(...)` to guarantee the function composability.\n" + "The noise of the node 0 is contaminated by noise coming straight " + "from the input (partition: 0, coeff: 4.00)."); } TEST(CompileComposable, composable_supported_v0) { diff --git a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_test.cc b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_test.cc index 719797e39..65ecf0a7d 100644 --- a/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_test.cc +++ b/compilers/concrete-compiler/compiler/tests/end_to_end_tests/end_to_end_test.cc @@ -6,7 +6,6 @@ #include #include "concretelang/Common/Values.h" -#include "concretelang/Runtime/DFRuntime.hpp" #include "concretelang/Support/CompilationFeedback.h" #include "concretelang/TestLib/TestProgram.h" #include "end_to_end_fixture/EndToEndFixture.h" @@ -59,18 +58,10 @@ public: void testOnce() { for (auto tests_rep = 0; tests_rep <= options.numberOfRetry; tests_rep++) { // We execute the circuit. - auto maybeRes = - testCircuit->call((mlir::concretelang::dfr::_dfr_is_root_node()) - ? args - : std::vector()); - if (!mlir::concretelang::dfr::_dfr_is_root_node()) - return; + auto maybeRes = testCircuit->call(args); ASSERT_OUTCOME_HAS_VALUE(maybeRes); auto result = maybeRes.value(); - if (!mlir::concretelang::dfr::_dfr_is_root_node()) - return; - /* Check results */ bool allgood = true; for (size_t i = 0; i < desc.outputs.size(); i++) { diff --git a/compilers/concrete-compiler/compiler/tests/unit_tests/concretelang/Encodings/Encodings_unit_tests.cpp b/compilers/concrete-compiler/compiler/tests/unit_tests/concretelang/Encodings/Encodings_unit_tests.cpp index c575005b3..a4927f02a 100644 --- a/compilers/concrete-compiler/compiler/tests/unit_tests/concretelang/Encodings/Encodings_unit_tests.cpp +++ b/compilers/concrete-compiler/compiler/tests/unit_tests/concretelang/Encodings/Encodings_unit_tests.cpp @@ -36,16 +36,16 @@ Result setupTestProgram(std::string source, auto outputs = circuitEncoding.asBuilder().initOutputs(1); circuitEncoding.asBuilder().setName(funcname); - auto encodingInfo = Message().asBuilder(); - encodingInfo.initShape(); - auto integer = encodingInfo.getEncoding().initIntegerCiphertext(); + auto encodingInfo = Message(); + encodingInfo.asBuilder().initShape(); + auto integer = encodingInfo.asBuilder().getEncoding().initIntegerCiphertext(); integer.getMode().initNative(); integer.setWidth(3); integer.setIsSigned(false); - inputs.setWithCaveats(0, encodingInfo); - inputs.setWithCaveats(1, encodingInfo); - outputs.setWithCaveats(0, encodingInfo); + inputs.setWithCaveats(0, encodingInfo.asReader()); + inputs.setWithCaveats(1, encodingInfo.asReader()); + outputs.setWithCaveats(0, encodingInfo.asReader()); options.encodings = Message(); options.encodings->asBuilder().initCircuits(1).setWithCaveats( @@ -61,14 +61,14 @@ Result setupTestProgram(std::string source, TEST(Encodings_unit_tests, multi_key) { std::string source = R"( func.func @main( - %arg0: !TFHE.glwe>, + %arg0: !TFHE.glwe>, %arg1: !TFHE.glwe> ) -> !TFHE.glwe> { %0 = "TFHE.keyswitch_glwe"(%arg0) {key=#TFHE.ksk, sk<2, 1,2048>, 7, 2>} : (!TFHE.glwe>) -> !TFHE.glwe> %1 = "TFHE.add_glwe"(%arg1, %0) : (!TFHE.glwe>, !TFHE.glwe>) -> !TFHE.glwe> return %1 : !TFHE.glwe> - + } )"; ASSERT_ASSIGN_OUTCOME_VALUE(circuit, setupTestProgram(source)); diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs index a3a52c3ed..75dfaa057 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs @@ -1,3 +1,6 @@ +#![allow(clippy::boxed_local)] +#![allow(clippy::too_many_arguments)] + use concrete_optimizer::computing_cost::cpu::CpuComplexity; use concrete_optimizer::config; use concrete_optimizer::config::ProcessingUnit; @@ -42,7 +45,7 @@ fn caches_from(options: ffi::Options) -> decomposition::PersistDecompCaches { decomposition::cache( options.security_level, processing_unit, - Some(ProcessingUnit::Cpu.complexity_model()), + Some(processing_unit.complexity_model()), options.cache_on_disk, options.ciphertext_modulus_log, options.fft_precision, @@ -612,12 +615,19 @@ impl Dag { pub struct DagBuilder<'dag>(unparametrized::DagBuilder<'dag>); impl<'dag> DagBuilder<'dag> { - fn add_input(&mut self, out_precision: Precision, out_shape: &[u64]) -> ffi::OperatorIndex { + fn add_input( + &mut self, + out_precision: Precision, + out_shape: &[u64], + location: &Location, + ) -> ffi::OperatorIndex { let out_shape = Shape { dimensions_size: out_shape.to_owned(), }; - self.0.add_input(out_precision, out_shape).into() + self.0 + .add_input(out_precision, out_shape, location.0.clone()) + .into() } fn add_lut( @@ -625,12 +635,15 @@ impl<'dag> DagBuilder<'dag> { input: ffi::OperatorIndex, table: &[u64], out_precision: Precision, + location: &Location, ) -> ffi::OperatorIndex { let table = FunctionTable { values: table.to_owned(), }; - self.0.add_lut(input.into(), table, out_precision).into() + self.0 + .add_lut(input.into(), table, out_precision, location.0.clone()) + .into() } #[allow(clippy::boxed_local)] @@ -638,10 +651,11 @@ impl<'dag> DagBuilder<'dag> { &mut self, inputs: &[ffi::OperatorIndex], weights: Box, + location: &Location, ) -> ffi::OperatorIndex { let inputs: Vec = inputs.iter().copied().map(Into::into).collect(); - self.0.add_dot(inputs, weights.0).into() + self.0.add_dot(inputs, weights.0, location.0.clone()).into() } fn add_levelled_op( @@ -649,10 +663,12 @@ impl<'dag> DagBuilder<'dag> { inputs: &[ffi::OperatorIndex], lwe_dim_cost_factor: f64, fixed_cost: f64, - manp: f64, + weights: &[f64], out_shape: &[u64], comment: &str, + location: &Location, ) -> ffi::OperatorIndex { + debug_assert!(weights.len() == inputs.len()); let inputs: Vec = inputs.iter().copied().map(Into::into).collect(); let out_shape = Shape { @@ -665,7 +681,14 @@ impl<'dag> DagBuilder<'dag> { }; self.0 - .add_levelled_op(inputs, complexity, manp, out_shape, comment) + .add_levelled_op( + inputs, + complexity, + weights, + out_shape, + comment, + location.0.clone(), + ) .into() } @@ -673,16 +696,22 @@ impl<'dag> DagBuilder<'dag> { &mut self, input: ffi::OperatorIndex, rounded_precision: Precision, + location: &Location, ) -> ffi::OperatorIndex { - self.0.add_round_op(input.into(), rounded_precision).into() + self.0 + .add_round_op(input.into(), rounded_precision, location.0.clone()) + .into() } fn add_unsafe_cast_op( &mut self, input: ffi::OperatorIndex, new_precision: Precision, + location: &Location, ) -> ffi::OperatorIndex { - self.0.add_unsafe_cast(input.into(), new_precision).into() + self.0 + .add_unsafe_cast(input.into(), new_precision, location.0.clone()) + .into() } fn tag_operator_as_output(&mut self, op: ffi::OperatorIndex) { @@ -694,6 +723,30 @@ impl<'dag> DagBuilder<'dag> { } } +#[derive(Clone)] +pub struct Location(operator::Location); + +fn location_unknown() -> Box { + Box::new(Location(operator::Location::Unknown)) +} + +fn location_from_string(string: &str) -> Box { + let location: Vec<&str> = string.split(':').collect(); + match location[..] { + [file] => Box::new(Location(operator::Location::File(file.into()))), + [file, line] => Box::new(Location(operator::Location::Line( + file.into(), + line.parse().unwrap(), + ))), + [file, line, column] => Box::new(Location(operator::Location::LineColumn( + file.into(), + line.parse().unwrap(), + column.parse().unwrap(), + ))), + _ => Box::new(Location(operator::Location::Unknown)), + } +} + pub struct Weights(operator::Weights); fn vector(weights: &[i64]) -> Box { @@ -748,6 +801,14 @@ mod ffi { type DagBuilder<'dag>; + type Location; + + #[namespace = "concrete_optimizer::utils"] + fn location_unknown() -> Box; + + #[namespace = "concrete_optimizer::utils"] + fn location_from_string(string: &str) -> Box; + #[namespace = "concrete_optimizer::dag"] fn empty() -> Box; @@ -761,6 +822,7 @@ mod ffi { self: &mut DagBuilder<'_>, out_precision: u8, out_shape: &[u64], + location: &Location, ) -> OperatorIndex; unsafe fn add_lut( @@ -768,12 +830,14 @@ mod ffi { input: OperatorIndex, table: &[u64], out_precision: u8, + location: &Location, ) -> OperatorIndex; unsafe fn add_dot( self: &mut DagBuilder<'_>, inputs: &[OperatorIndex], weights: Box, + location: &Location, ) -> OperatorIndex; unsafe fn add_levelled_op( @@ -781,21 +845,24 @@ mod ffi { inputs: &[OperatorIndex], lwe_dim_cost_factor: f64, fixed_cost: f64, - manp: f64, + weights: &[f64], out_shape: &[u64], comment: &str, + location: &Location, ) -> OperatorIndex; unsafe fn add_round_op( self: &mut DagBuilder<'_>, input: OperatorIndex, rounded_precision: u8, + location: &Location, ) -> OperatorIndex; unsafe fn add_unsafe_cast_op( self: &mut DagBuilder<'_>, input: OperatorIndex, rounded_precision: u8, + location: &Location, ) -> OperatorIndex; unsafe fn tag_operator_as_output(self: &mut DagBuilder<'_>, op: OperatorIndex); diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp index f20c22d65..2f1bd4b25 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp @@ -943,6 +943,7 @@ struct CircuitKeys; namespace concrete_optimizer { struct Dag; struct DagBuilder; + struct Location; struct Weights; enum class Encoding : ::std::uint8_t; enum class MultiParamStrategy : ::std::uint8_t; @@ -993,12 +994,12 @@ private: #define CXXBRIDGE1_STRUCT_concrete_optimizer$DagBuilder struct DagBuilder final : public ::rust::Opaque { ::rust::String dump() const noexcept; - ::concrete_optimizer::dag::OperatorIndex add_input(::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_lut(::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, double manp, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_input(::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_lut(::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, ::rust::Slice weights, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept; void tag_operator_as_output(::concrete_optimizer::dag::OperatorIndex op) noexcept; ~DagBuilder() = delete; @@ -1011,6 +1012,20 @@ private: }; #endif // CXXBRIDGE1_STRUCT_concrete_optimizer$DagBuilder +#ifndef CXXBRIDGE1_STRUCT_concrete_optimizer$Location +#define CXXBRIDGE1_STRUCT_concrete_optimizer$Location +struct Location final : public ::rust::Opaque { + ~Location() = delete; + +private: + friend ::rust::layout; + struct layout { + static ::std::size_t size() noexcept; + static ::std::size_t align() noexcept; + }; +}; +#endif // CXXBRIDGE1_STRUCT_concrete_optimizer$Location + #ifndef CXXBRIDGE1_STRUCT_concrete_optimizer$Weights #define CXXBRIDGE1_STRUCT_concrete_optimizer$Weights struct Weights final : public ::rust::Opaque { @@ -1288,8 +1303,18 @@ extern "C" { ::std::size_t concrete_optimizer$cxxbridge1$Dag$operator$alignof() noexcept; ::std::size_t concrete_optimizer$cxxbridge1$DagBuilder$operator$sizeof() noexcept; ::std::size_t concrete_optimizer$cxxbridge1$DagBuilder$operator$alignof() noexcept; +::std::size_t concrete_optimizer$cxxbridge1$Location$operator$sizeof() noexcept; +::std::size_t concrete_optimizer$cxxbridge1$Location$operator$alignof() noexcept; } // extern "C" +namespace utils { +extern "C" { +::concrete_optimizer::Location *concrete_optimizer$utils$cxxbridge1$location_unknown() noexcept; + +::concrete_optimizer::Location *concrete_optimizer$utils$cxxbridge1$location_from_string(::rust::Str string) noexcept; +} // extern "C" +} // namespace utils + namespace dag { extern "C" { ::concrete_optimizer::Dag *concrete_optimizer$dag$cxxbridge1$empty() noexcept; @@ -1303,17 +1328,17 @@ void concrete_optimizer$cxxbridge1$Dag$dump(::concrete_optimizer::Dag const &sel void concrete_optimizer$cxxbridge1$DagBuilder$dump(::concrete_optimizer::DagBuilder const &self, ::rust::String *return$) noexcept; -::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_input(::concrete_optimizer::DagBuilder &self, ::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_input(::concrete_optimizer::DagBuilder &self, ::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape, ::concrete_optimizer::Location const &location) noexcept; -::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_lut(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_lut(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision, ::concrete_optimizer::Location const &location) noexcept; -::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_dot(::concrete_optimizer::DagBuilder &self, ::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::concrete_optimizer::Weights *weights) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_dot(::concrete_optimizer::DagBuilder &self, ::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::concrete_optimizer::Weights *weights, ::concrete_optimizer::Location const &location) noexcept; -::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_levelled_op(::concrete_optimizer::DagBuilder &self, ::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, double manp, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_levelled_op(::concrete_optimizer::DagBuilder &self, ::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, ::rust::Slice weights, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment, ::concrete_optimizer::Location const &location) noexcept; -::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_round_op(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_round_op(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept; -::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_unsafe_cast_op(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$DagBuilder$add_unsafe_cast_op(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept; void concrete_optimizer$cxxbridge1$DagBuilder$tag_operator_as_output(::concrete_optimizer::DagBuilder &self, ::concrete_optimizer::dag::OperatorIndex op) noexcept; @@ -1393,6 +1418,24 @@ namespace utils { return concrete_optimizer$cxxbridge1$DagBuilder$operator$alignof(); } +::std::size_t Location::layout::size() noexcept { + return concrete_optimizer$cxxbridge1$Location$operator$sizeof(); +} + +::std::size_t Location::layout::align() noexcept { + return concrete_optimizer$cxxbridge1$Location$operator$alignof(); +} + +namespace utils { +::rust::Box<::concrete_optimizer::Location> location_unknown() noexcept { + return ::rust::Box<::concrete_optimizer::Location>::from_raw(concrete_optimizer$utils$cxxbridge1$location_unknown()); +} + +::rust::Box<::concrete_optimizer::Location> location_from_string(::rust::Str string) noexcept { + return ::rust::Box<::concrete_optimizer::Location>::from_raw(concrete_optimizer$utils$cxxbridge1$location_from_string(string)); +} +} // namespace utils + namespace dag { ::rust::Box<::concrete_optimizer::Dag> empty() noexcept { return ::rust::Box<::concrete_optimizer::Dag>::from_raw(concrete_optimizer$dag$cxxbridge1$empty()); @@ -1415,28 +1458,28 @@ namespace dag { return ::std::move(return$.value); } -::concrete_optimizer::dag::OperatorIndex DagBuilder::add_input(::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape) noexcept { - return concrete_optimizer$cxxbridge1$DagBuilder$add_input(*this, out_precision, out_shape); +::concrete_optimizer::dag::OperatorIndex DagBuilder::add_input(::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape, ::concrete_optimizer::Location const &location) noexcept { + return concrete_optimizer$cxxbridge1$DagBuilder$add_input(*this, out_precision, out_shape, location); } -::concrete_optimizer::dag::OperatorIndex DagBuilder::add_lut(::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision) noexcept { - return concrete_optimizer$cxxbridge1$DagBuilder$add_lut(*this, input, table, out_precision); +::concrete_optimizer::dag::OperatorIndex DagBuilder::add_lut(::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision, ::concrete_optimizer::Location const &location) noexcept { + return concrete_optimizer$cxxbridge1$DagBuilder$add_lut(*this, input, table, out_precision, location); } -::concrete_optimizer::dag::OperatorIndex DagBuilder::add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights) noexcept { - return concrete_optimizer$cxxbridge1$DagBuilder$add_dot(*this, inputs, weights.into_raw()); +::concrete_optimizer::dag::OperatorIndex DagBuilder::add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights, ::concrete_optimizer::Location const &location) noexcept { + return concrete_optimizer$cxxbridge1$DagBuilder$add_dot(*this, inputs, weights.into_raw(), location); } -::concrete_optimizer::dag::OperatorIndex DagBuilder::add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, double manp, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment) noexcept { - return concrete_optimizer$cxxbridge1$DagBuilder$add_levelled_op(*this, inputs, lwe_dim_cost_factor, fixed_cost, manp, out_shape, comment); +::concrete_optimizer::dag::OperatorIndex DagBuilder::add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, ::rust::Slice weights, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment, ::concrete_optimizer::Location const &location) noexcept { + return concrete_optimizer$cxxbridge1$DagBuilder$add_levelled_op(*this, inputs, lwe_dim_cost_factor, fixed_cost, weights, out_shape, comment, location); } -::concrete_optimizer::dag::OperatorIndex DagBuilder::add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept { - return concrete_optimizer$cxxbridge1$DagBuilder$add_round_op(*this, input, rounded_precision); +::concrete_optimizer::dag::OperatorIndex DagBuilder::add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept { + return concrete_optimizer$cxxbridge1$DagBuilder$add_round_op(*this, input, rounded_precision, location); } -::concrete_optimizer::dag::OperatorIndex DagBuilder::add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept { - return concrete_optimizer$cxxbridge1$DagBuilder$add_unsafe_cast_op(*this, input, rounded_precision); +::concrete_optimizer::dag::OperatorIndex DagBuilder::add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept { + return concrete_optimizer$cxxbridge1$DagBuilder$add_unsafe_cast_op(*this, input, rounded_precision, location); } void DagBuilder::tag_operator_as_output(::concrete_optimizer::dag::OperatorIndex op) noexcept { @@ -1517,6 +1560,10 @@ namespace weights { } // namespace concrete_optimizer extern "C" { +::concrete_optimizer::Location *cxxbridge1$box$concrete_optimizer$Location$alloc() noexcept; +void cxxbridge1$box$concrete_optimizer$Location$dealloc(::concrete_optimizer::Location *) noexcept; +void cxxbridge1$box$concrete_optimizer$Location$drop(::rust::Box<::concrete_optimizer::Location> *ptr) noexcept; + ::concrete_optimizer::Dag *cxxbridge1$box$concrete_optimizer$Dag$alloc() noexcept; void cxxbridge1$box$concrete_optimizer$Dag$dealloc(::concrete_optimizer::Dag *) noexcept; void cxxbridge1$box$concrete_optimizer$Dag$drop(::rust::Box<::concrete_optimizer::Dag> *ptr) noexcept; @@ -1605,6 +1652,18 @@ void cxxbridge1$rust_vec$concrete_optimizer$dag$InstructionKeys$truncate(::rust: namespace rust { inline namespace cxxbridge1 { template <> +::concrete_optimizer::Location *Box<::concrete_optimizer::Location>::allocation::alloc() noexcept { + return cxxbridge1$box$concrete_optimizer$Location$alloc(); +} +template <> +void Box<::concrete_optimizer::Location>::allocation::dealloc(::concrete_optimizer::Location *ptr) noexcept { + cxxbridge1$box$concrete_optimizer$Location$dealloc(ptr); +} +template <> +void Box<::concrete_optimizer::Location>::drop() noexcept { + cxxbridge1$box$concrete_optimizer$Location$drop(this); +} +template <> ::concrete_optimizer::Dag *Box<::concrete_optimizer::Dag>::allocation::alloc() noexcept { return cxxbridge1$box$concrete_optimizer$Dag$alloc(); } diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp index abd0685d6..a56700ca8 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp @@ -924,6 +924,7 @@ struct CircuitKeys; namespace concrete_optimizer { struct Dag; struct DagBuilder; + struct Location; struct Weights; enum class Encoding : ::std::uint8_t; enum class MultiParamStrategy : ::std::uint8_t; @@ -974,12 +975,12 @@ private: #define CXXBRIDGE1_STRUCT_concrete_optimizer$DagBuilder struct DagBuilder final : public ::rust::Opaque { ::rust::String dump() const noexcept; - ::concrete_optimizer::dag::OperatorIndex add_input(::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_lut(::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, double manp, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; - ::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_input(::std::uint8_t out_precision, ::rust::Slice<::std::uint64_t const> out_shape, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_lut(::concrete_optimizer::dag::OperatorIndex input, ::rust::Slice<::std::uint64_t const> table, ::std::uint8_t out_precision, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, ::rust::Slice weights, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision, ::concrete_optimizer::Location const &location) noexcept; void tag_operator_as_output(::concrete_optimizer::dag::OperatorIndex op) noexcept; ~DagBuilder() = delete; @@ -992,6 +993,20 @@ private: }; #endif // CXXBRIDGE1_STRUCT_concrete_optimizer$DagBuilder +#ifndef CXXBRIDGE1_STRUCT_concrete_optimizer$Location +#define CXXBRIDGE1_STRUCT_concrete_optimizer$Location +struct Location final : public ::rust::Opaque { + ~Location() = delete; + +private: + friend ::rust::layout; + struct layout { + static ::std::size_t size() noexcept; + static ::std::size_t align() noexcept; + }; +}; +#endif // CXXBRIDGE1_STRUCT_concrete_optimizer$Location + #ifndef CXXBRIDGE1_STRUCT_concrete_optimizer$Weights #define CXXBRIDGE1_STRUCT_concrete_optimizer$Weights struct Weights final : public ::rust::Opaque { @@ -1258,6 +1273,10 @@ namespace utils { ::concrete_optimizer::dag::DagSolution convert_to_dag_solution(::concrete_optimizer::v0::Solution const &solution) noexcept; ::concrete_optimizer::dag::CircuitSolution convert_to_circuit_solution(::concrete_optimizer::dag::DagSolution const &solution, ::concrete_optimizer::Dag const &dag) noexcept; + +::rust::Box<::concrete_optimizer::Location> location_unknown() noexcept; + +::rust::Box<::concrete_optimizer::Location> location_from_string(::rust::Str string) noexcept; } // namespace utils namespace dag { diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/tests/src/main.cpp b/compilers/concrete-optimizer/concrete-optimizer-cpp/tests/src/main.cpp index 6bfd7bde2..5d7d12f5e 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/tests/src/main.cpp +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/tests/src/main.cpp @@ -51,7 +51,7 @@ TEST test_dag_no_lut() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex node1 = - builder->add_input(PRECISION_8B, slice(shape)); + builder->add_input(PRECISION_8B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector inputs = {node1}; @@ -60,7 +60,7 @@ TEST test_dag_no_lut() { rust::cxxbridge1::Box weights = concrete_optimizer::weights::vector(slice(weight_vec)); - auto id = builder->add_dot(slice(inputs), std::move(weights)); + auto id = builder->add_dot(slice(inputs), std::move(weights), *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto solution = dag->optimize(default_options()); @@ -75,10 +75,10 @@ TEST test_dag_lut() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex input = - builder->add_input(PRECISION_8B, slice(shape)); + builder->add_input(PRECISION_8B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector table = {}; - auto id = builder->add_lut(input, slice(table), PRECISION_8B); + auto id = builder->add_lut(input, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto solution = dag->optimize(default_options()); @@ -94,10 +94,10 @@ TEST test_dag_lut_wop() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex input = - builder->add_input(PRECISION_16B, slice(shape)); + builder->add_input(PRECISION_16B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector table = {}; - auto id = builder->add_lut(input, slice(table), PRECISION_16B); + auto id = builder->add_lut(input, slice(table), PRECISION_16B, *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto solution = dag->optimize(default_options()); @@ -113,10 +113,10 @@ TEST test_dag_lut_force_wop() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex input = - builder->add_input(PRECISION_8B, slice(shape)); + builder->add_input(PRECISION_8B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector table = {}; - auto id = builder->add_lut(input, slice(table), PRECISION_8B); + auto id = builder->add_lut(input, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto options = default_options(); @@ -133,10 +133,10 @@ TEST test_multi_parameters_1_precision() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex input = - builder->add_input(PRECISION_8B, slice(shape)); + builder->add_input(PRECISION_8B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector table = {}; - auto id = builder->add_lut(input, slice(table), PRECISION_8B); + auto id = builder->add_lut(input, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto options = default_options(); @@ -160,14 +160,14 @@ TEST test_multi_parameters_2_precision() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex input1 = - builder->add_input(PRECISION_8B, slice(shape)); + builder->add_input(PRECISION_8B, slice(shape), *concrete_optimizer::utils::location_unknown()); concrete_optimizer::dag::OperatorIndex input2 = - builder->add_input(PRECISION_1B, slice(shape)); + builder->add_input(PRECISION_1B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector table = {}; - auto lut1 = builder->add_lut(input1, slice(table), PRECISION_8B); - auto lut2 = builder->add_lut(input2, slice(table), PRECISION_8B); + auto lut1 = builder->add_lut(input1, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); + auto lut2 = builder->add_lut(input2, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); std::vector inputs = {lut1, lut2}; @@ -176,7 +176,7 @@ TEST test_multi_parameters_2_precision() { rust::cxxbridge1::Box weights = concrete_optimizer::weights::vector(slice(weight_vec)); - auto id = builder->add_dot(slice(inputs), std::move(weights)); + auto id = builder->add_dot(slice(inputs), std::move(weights), *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto options = default_options(); @@ -201,14 +201,14 @@ TEST test_multi_parameters_2_precision_crt() { std::vector shape = {3}; concrete_optimizer::dag::OperatorIndex input1 = - builder->add_input(PRECISION_8B, slice(shape)); + builder->add_input(PRECISION_8B, slice(shape), *concrete_optimizer::utils::location_unknown()); concrete_optimizer::dag::OperatorIndex input2 = - builder->add_input(PRECISION_1B, slice(shape)); + builder->add_input(PRECISION_1B, slice(shape), *concrete_optimizer::utils::location_unknown()); std::vector table = {}; - auto lut1 = builder->add_lut(input1, slice(table), PRECISION_8B); - auto lut2 = builder->add_lut(input2, slice(table), PRECISION_8B); + auto lut1 = builder->add_lut(input1, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); + auto lut2 = builder->add_lut(input2, slice(table), PRECISION_8B, *concrete_optimizer::utils::location_unknown()); std::vector inputs = {lut1, lut2}; @@ -217,7 +217,7 @@ TEST test_multi_parameters_2_precision_crt() { rust::cxxbridge1::Box weights = concrete_optimizer::weights::vector(slice(weight_vec)); - auto id = builder->add_dot(slice(inputs), std::move(weights)); + auto id = builder->add_dot(slice(inputs), std::move(weights), *concrete_optimizer::utils::location_unknown()); builder->tag_operator_as_output(id); auto options = default_options(); diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/location.rs b/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/location.rs new file mode 100644 index 000000000..d0cfa76be --- /dev/null +++ b/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/location.rs @@ -0,0 +1,28 @@ +use std::{fmt::Display, path::PathBuf}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Location { + Unknown, + File(PathBuf), + Line(PathBuf, usize), + LineColumn(PathBuf, usize, usize), +} + +impl Display for Location { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Unknown => write!(f, "unknown location"), + Self::File(file) => write!(f, "{}", file.file_name().unwrap().to_str().unwrap()), + Self::Line(file, line) => { + write!(f, "{}:{line}", file.file_name().unwrap().to_str().unwrap()) + } + Self::LineColumn(file, line, column) => { + write!( + f, + "{}:{line}:{column}", + file.file_name().unwrap().to_str().unwrap() + ) + } + } + } +} diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/mod.rs b/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/mod.rs index 5837495f4..a42816b25 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/mod.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/mod.rs @@ -1,8 +1,10 @@ #![allow(clippy::module_inception)] pub mod dot_kind; +pub mod location; pub mod operator; pub mod tensor; pub use self::dot_kind::*; +pub use self::location::*; pub use self::operator::*; pub use self::tensor::*; diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/operator.rs b/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/operator.rs index 16eaab9a4..367f2a21a 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/operator.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/dag/operator/operator.rs @@ -3,6 +3,7 @@ use std::iter::{empty, once}; use std::ops::Deref; use crate::dag::operator::tensor::{ClearTensor, Shape}; +use crate::optimization::dag::multi_parameters::partition_cut::ExternalPartition; use super::DotKind; @@ -89,7 +90,7 @@ pub enum Operator { LevelledOp { inputs: Vec, complexity: LevelledComplexity, - manp: f64, + weights: Vec, out_shape: Shape, comment: String, }, @@ -104,6 +105,11 @@ pub enum Operator { input: OperatorIndex, out_precision: Precision, }, + ChangePartition { + input: OperatorIndex, + src_partition: Option, + dst_partition: Option, + }, } impl Operator { @@ -114,7 +120,8 @@ impl Operator { Self::LevelledOp { inputs, .. } | Self::Dot { inputs, .. } => Box::new(inputs.iter()), Self::UnsafeCast { input, .. } | Self::Lut { input, .. } - | Self::Round { input, .. } => Box::new(once(input)), + | Self::Round { input, .. } + | Self::ChangePartition { input, .. } => Box::new(once(input)), } } } @@ -171,7 +178,7 @@ impl fmt::Display for Operator { } Self::LevelledOp { inputs, - manp, + weights, out_shape, .. } => { @@ -182,7 +189,7 @@ impl fmt::Display for Operator { } write!(f, "%{}", input.0)?; } - write!(f, "] : manp={manp} x {out_shape:?}")?; + write!(f, "] : weights={weights:?}, out_shape={out_shape:?}")?; } Self::Round { input, @@ -190,6 +197,23 @@ impl fmt::Display for Operator { } => { write!(f, "ROUND[%{}] : u{out_precision}", input.0)?; } + Self::ChangePartition { + input, + src_partition, + dst_partition, + } => { + write!(f, "CHANGE_PARTITION[%{}] : {{", input.0)?; + if let Some(partition) = src_partition { + write!(f, "src_partition: {}", partition.name)?; + } + if let Some(partition) = dst_partition { + if src_partition.is_some() { + write!(f, ", ")?; + } + write!(f, "dst_partition: {}", partition.name)?; + } + write!(f, "}}")?; + } } Ok(()) } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/regen.rs b/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/regen.rs index efd3f26ef..24c38a08c 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/regen.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/regen.rs @@ -1,6 +1,6 @@ use crate::dag::operator::operator::Operator; use crate::dag::operator::OperatorIndex; -use crate::dag::unparametrized::{Dag, DagBuilder}; +use crate::dag::unparametrized::{Dag, DagBuilder, DagOperator}; fn reindex_op_inputs(op: &Operator, old_index_to_new: &[usize]) -> Operator { let mut op = op.clone(); @@ -8,7 +8,8 @@ fn reindex_op_inputs(op: &Operator, old_index_to_new: &[usize]) -> Operator { Operator::Input { .. } => (), Operator::Lut { input, .. } | Operator::UnsafeCast { input, .. } - | Operator::Round { input, .. } => input.0 = old_index_to_new[input.0], + | Operator::Round { input, .. } + | Operator::ChangePartition { input, .. } => input.0 = old_index_to_new[input.0], Operator::Dot { inputs, .. } | Operator::LevelledOp { inputs, .. } => { for input in inputs { input.0 = old_index_to_new[input.0]; @@ -18,26 +19,29 @@ fn reindex_op_inputs(op: &Operator, old_index_to_new: &[usize]) -> Operator { op } -pub(crate) fn regen( - dag: &Dag, - f: &mut dyn FnMut(usize, &Operator, &mut DagBuilder<'_>) -> Option, -) -> (Dag, Vec>) { +pub(crate) fn regen(dag: &Dag, f: F) -> (Dag, Vec>) +where + F: Fn(Operator, &DagOperator<'_>, &mut DagBuilder<'_>) -> Option, +{ let mut regen_dag = Dag::new(); let mut old_index_to_new = vec![]; - for (i, op) in dag.operators.iter().enumerate() { - let op = reindex_op_inputs(op, &old_index_to_new); + for dag_op in dag.get_operators_iter() { + let new_op = reindex_op_inputs(dag_op.operator, &old_index_to_new); let size = regen_dag.operators.len(); - if let Some(op_i) = f(i, &op, &mut regen_dag.builder(dag.circuit_tags[i].clone())) { + let mut builder = regen_dag.builder(dag_op.circuit_tag); + if let Some(op_i) = f(new_op.clone(), &dag_op, &mut builder) { old_index_to_new.push(op_i.0); } else { assert!(size == regen_dag.operators.len()); old_index_to_new.push(regen_dag.len()); - regen_dag.operators.push(op.clone()); - regen_dag.out_precisions.push(dag.out_precisions[i]); - regen_dag.out_shapes.push(dag.out_shapes[i].clone()); - regen_dag.output_state.push(dag.output_state[i]); - regen_dag.circuit_tags.push(dag.circuit_tags[i].clone()); - op.get_inputs_iter() + regen_dag.operators.push(new_op.clone()); + regen_dag.out_precisions.push(*dag_op.precision); + regen_dag.out_shapes.push(dag_op.shape.to_owned()); + regen_dag.output_state.push(*dag_op.output_state); + regen_dag.circuit_tags.push(dag_op.circuit_tag.to_owned()); + regen_dag.locations.push(dag_op.location.to_owned()); + new_op + .get_inputs_iter() .for_each(|n| regen_dag.output_state[n.0].transition_use()); } } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/round.rs b/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/round.rs index 92b40d85f..0f8cade8c 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/round.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/dag/rewrite/round.rs @@ -1,22 +1,26 @@ use crate::dag::operator::{Operator, OperatorIndex}; -use crate::dag::unparametrized::{Dag, DagBuilder}; +use crate::dag::unparametrized::{Dag, DagBuilder, DagOperator}; use super::regen::regen; -fn regen_round(_: usize, op: &Operator, dag: &mut DagBuilder<'_>) -> Option { - match *op { +fn regen_round( + op: Operator, + dag_op: &DagOperator<'_>, + dag_builder: &mut DagBuilder<'_>, +) -> Option { + match op { Operator::Round { input, out_precision, - } => Some(dag.add_expanded_round(input, out_precision)), + } => Some(dag_builder.add_expanded_round(input, out_precision, dag_op.location.to_owned())), _ => None, } } pub(crate) fn expand_round(dag: &Dag) -> Dag { - regen(dag, &mut regen_round).0 + regen(dag, regen_round).0 } pub(crate) fn expand_round_and_index_map(dag: &Dag) -> (Dag, Vec>) { - regen(dag, &mut regen_round) + regen(dag, regen_round) } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/dag/unparametrized.rs b/compilers/concrete-optimizer/concrete-optimizer/src/dag/unparametrized.rs index cffabfff3..a59e0bd4c 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/dag/unparametrized.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/dag/unparametrized.rs @@ -1,12 +1,16 @@ use crate::dag::operator::{ FunctionTable, LevelledComplexity, Operator, OperatorIndex, Precision, Shape, Weights, }; +use crate::optimization::dag::multi_parameters::partition_cut::ExternalPartition; use std::{ collections::{HashMap, HashSet}, fmt, }; -use super::operator::dot_kind::{dot_kind, DotKind}; +use super::operator::{ + dot_kind::{dot_kind, DotKind}, + Location, +}; /// The name of the default. Used when adding operations directly on the dag instead of via a /// builder. @@ -63,6 +67,7 @@ pub struct DagOperator<'dag> { pub precision: &'dag Precision, pub output_state: &'dag OutputState, pub circuit_tag: &'dag String, + pub location: &'dag Location, } impl<'dag> DagOperator<'dag> { @@ -98,6 +103,15 @@ impl<'dag> DagCircuit<'dag> { self.ids.iter().map(|id| self.dag.get_operator(*id)) } + /// Try to return an operator from its index. Returns `None` if the operator is not in the circuit. + pub fn try_get_operator(&self, id: OperatorIndex) -> Option> { + if self.ids.contains(&id) { + Some(self.dag.get_operator(id)) + } else { + None + } + } + /// Returns an iterator over the circuit's input operators. #[allow(unused)] pub fn get_input_operators_iter(&self) -> impl Iterator> + '_ { @@ -130,7 +144,7 @@ pub struct DagBuilder<'dag> { } impl<'dag> DagBuilder<'dag> { - fn add_operator(&mut self, operator: Operator) -> OperatorIndex { + fn add_operator(&mut self, operator: Operator, location: Location) -> OperatorIndex { debug_assert!(operator .get_inputs_iter() .all(|id| self.dag.circuit_tags[id.0] == self.circuit)); @@ -145,6 +159,7 @@ impl<'dag> DagBuilder<'dag> { self.dag.operators.push(operator); self.dag.output_state.push(OutputState::new()); self.dag.circuit_tags.push(self.circuit.clone()); + self.dag.locations.push(location); OperatorIndex(i) } @@ -152,12 +167,16 @@ impl<'dag> DagBuilder<'dag> { &mut self, out_precision: Precision, out_shape: impl Into, + location: Location, ) -> OperatorIndex { let out_shape = out_shape.into(); - self.add_operator(Operator::Input { - out_precision, - out_shape, - }) + self.add_operator( + Operator::Input { + out_precision, + out_shape, + }, + location, + ) } pub fn add_lut( @@ -165,87 +184,131 @@ impl<'dag> DagBuilder<'dag> { input: OperatorIndex, table: FunctionTable, out_precision: Precision, + location: Location, ) -> OperatorIndex { - self.add_operator(Operator::Lut { - input, - table, - out_precision, - }) + self.add_operator( + Operator::Lut { + input, + table, + out_precision, + }, + location, + ) } pub fn add_dot( &mut self, inputs: impl Into>, weights: impl Into, + location: Location, ) -> OperatorIndex { let inputs = inputs.into(); let weights = weights.into(); // We detect the kind of dot to simplify matching later on. let nb_inputs = inputs.len() as u64; let input_shape = self.dag.get_operator(inputs[0]).shape; - self.add_operator(Operator::Dot { - inputs, - kind: dot_kind(nb_inputs, input_shape, &weights), - weights, - }) + self.add_operator( + Operator::Dot { + inputs, + kind: dot_kind(nb_inputs, input_shape, &weights), + weights, + }, + location, + ) } pub fn add_levelled_op( &mut self, inputs: impl Into>, complexity: LevelledComplexity, - manp: f64, + weights: impl Into>, out_shape: impl Into, comment: impl Into, + location: Location, ) -> OperatorIndex { let inputs = inputs.into(); let out_shape = out_shape.into(); let comment = comment.into(); + let weights = weights.into(); + assert_eq!(weights.len(), inputs.len()); let op = Operator::LevelledOp { inputs, complexity, - manp, + weights, out_shape, comment, }; - self.add_operator(op) + self.add_operator(op, location) } pub fn add_unsafe_cast( &mut self, input: OperatorIndex, out_precision: Precision, + location: Location, ) -> OperatorIndex { let input_precision = self.dag.out_precisions[input.0]; if input_precision == out_precision { return input; } - self.add_operator(Operator::UnsafeCast { - input, - out_precision, - }) + self.add_operator( + Operator::UnsafeCast { + input, + out_precision, + }, + location, + ) + } + + pub fn add_change_partition( + &mut self, + input: OperatorIndex, + src_partition: Option, + dst_partition: Option, + location: Location, + ) -> OperatorIndex { + assert!( + src_partition.is_some() || dst_partition.is_some(), + "change_partition: src or dest partition need to be set" + ); + self.add_operator( + Operator::ChangePartition { + input, + src_partition, + dst_partition, + }, + location, + ) } pub fn add_round_op( &mut self, input: OperatorIndex, rounded_precision: Precision, + location: Location, ) -> OperatorIndex { let in_precision = self.dag.out_precisions[input.0]; assert!(rounded_precision <= in_precision); - self.add_operator(Operator::Round { - input, - out_precision: rounded_precision, - }) + self.add_operator( + Operator::Round { + input, + out_precision: rounded_precision, + }, + location, + ) } - fn add_shift_left_lsb_to_msb_no_padding(&mut self, input: OperatorIndex) -> OperatorIndex { + fn add_shift_left_lsb_to_msb_no_padding( + &mut self, + input: OperatorIndex, + location: Location, + ) -> OperatorIndex { // Convert any input to simple 1bit msb replacing the padding // For now encoding is not explicit, so 1 bit content without padding <=> 0 bit content with padding. let in_precision = self.dag.out_precisions[input.0]; let shift_factor = Weights::number(1 << (in_precision as i64)); - let lsb_as_msb = self.add_dot([input], shift_factor); - self.add_unsafe_cast(lsb_as_msb, 0 as Precision) + let lsb_as_msb = self.add_dot([input], shift_factor, location.clone()); + self.add_unsafe_cast(lsb_as_msb, 0 as Precision, location) } fn add_lut_1bit_no_padding( @@ -253,46 +316,57 @@ impl<'dag> DagBuilder<'dag> { input: OperatorIndex, table: FunctionTable, out_precision: Precision, + location: Location, ) -> OperatorIndex { // For now encoding is not explicit, so 1 bit content without padding <=> 0 bit content with padding. let in_precision = self.dag.out_precisions[input.0]; assert!(in_precision == 0); // An add after with a clear constant is skipped here as it doesn't change noise handling. - self.add_lut(input, table, out_precision) + self.add_lut(input, table, out_precision, location) } fn add_shift_right_msb_no_padding_to_lsb( &mut self, input: OperatorIndex, out_precision: Precision, + location: Location, ) -> OperatorIndex { // Convert simple 1 bit msb to a nbit with zero padding let to_nbits_padded = FunctionTable::UNKWOWN; - self.add_lut_1bit_no_padding(input, to_nbits_padded, out_precision) + self.add_lut_1bit_no_padding(input, to_nbits_padded, out_precision, location) } - fn add_isolate_lowest_bit(&mut self, input: OperatorIndex) -> OperatorIndex { + fn add_isolate_lowest_bit( + &mut self, + input: OperatorIndex, + location: Location, + ) -> OperatorIndex { // The lowest bit is converted to a ciphertext of same precision as input. // Introduce a pbs of input precision but this precision is only used on 1 levelled op and converted to lower precision // Noise is reduced by a pbs. let out_precision = self.dag.out_precisions[input.0]; - let lsb_as_msb = self.add_shift_left_lsb_to_msb_no_padding(input); - self.add_shift_right_msb_no_padding_to_lsb(lsb_as_msb, out_precision) + let lsb_as_msb = self.add_shift_left_lsb_to_msb_no_padding(input, location.clone()); + self.add_shift_right_msb_no_padding_to_lsb(lsb_as_msb, out_precision, location) } - pub fn add_truncate_1_bit(&mut self, input: OperatorIndex) -> OperatorIndex { + pub fn add_truncate_1_bit( + &mut self, + input: OperatorIndex, + location: Location, + ) -> OperatorIndex { // Reset a bit. // ex: 10110 is truncated to 1011, 10111 is truncated to 1011 let in_precision = self.dag.out_precisions[input.0]; - let lowest_bit = self.add_isolate_lowest_bit(input); - let bit_cleared = self.add_dot([input, lowest_bit], [1, -1]); - self.add_unsafe_cast(bit_cleared, in_precision - 1) + let lowest_bit = self.add_isolate_lowest_bit(input, location.clone()); + let bit_cleared = self.add_dot([input, lowest_bit], [1, -1], location.clone()); + self.add_unsafe_cast(bit_cleared, in_precision - 1, location) } pub fn add_expanded_round( &mut self, input: OperatorIndex, rounded_precision: Precision, + location: Location, ) -> OperatorIndex { // Round such that the output has precision out_precision. // We round by adding 2**(removed_precision - 1) to the last remaining bit to clear (this step is a no-op). @@ -310,7 +384,7 @@ impl<'dag> DagBuilder<'dag> { // The rounded is in high precision with garbage lowest bits let bits_to_truncate = in_precision - rounded_precision; for _ in 1..=bits_to_truncate as i64 { - rounded = self.add_truncate_1_bit(rounded); + rounded = self.add_truncate_1_bit(rounded, location.clone()); } rounded } @@ -321,10 +395,11 @@ impl<'dag> DagBuilder<'dag> { table: FunctionTable, rounded_precision: Precision, out_precision: Precision, + location: Location, ) -> OperatorIndex { // note: this is a simplified graph, some constant additions are missing without consequence on crypto parameter choice. - let rounded = self.add_expanded_round(input, rounded_precision); - self.add_lut(rounded, table, out_precision) + let rounded = self.add_expanded_round(input, rounded_precision, location.clone()); + self.add_lut(rounded, table, out_precision, location) } pub fn add_rounded_lut( @@ -333,9 +408,10 @@ impl<'dag> DagBuilder<'dag> { table: FunctionTable, rounded_precision: Precision, out_precision: Precision, + location: Location, ) -> OperatorIndex { - let rounded = self.add_round_op(input, rounded_precision); - self.add_lut(rounded, table, out_precision) + let rounded = self.add_round_op(input, rounded_precision, location.clone()); + self.add_lut(rounded, table, out_precision, location) } /// Marks an operator as being an output of the circuit. @@ -362,7 +438,8 @@ impl<'dag> DagBuilder<'dag> { } Operator::Lut { input, .. } | Operator::UnsafeCast { input, .. } - | Operator::Round { input, .. } => self.dag.out_shapes[input.0].clone(), + | Operator::Round { input, .. } + | Operator::ChangePartition { input, .. } => self.dag.out_shapes[input.0].clone(), Operator::Dot { kind: DotKind::Simple | DotKind::Tensor | DotKind::CompatibleTensor, .. @@ -397,6 +474,7 @@ impl<'dag> DagBuilder<'dag> { Operator::Dot { inputs, .. } | Operator::LevelledOp { inputs, .. } => { self.dag.out_precisions[inputs[0].0] } + Operator::ChangePartition { input, .. } => self.dag.out_precisions[input.0], } } } @@ -461,6 +539,8 @@ pub struct Dag { pub(crate) output_state: Vec, // Collect the circuit the operators are associated with pub(crate) circuit_tags: Vec, + // Collect the operator locations + pub(crate) locations: Vec, // Composition rules pub(crate) composition: CompositionRules, } @@ -489,6 +569,7 @@ impl Dag { out_precisions: vec![], output_state: vec![], circuit_tags: vec![], + locations: vec![], composition: CompositionRules::default(), } } @@ -507,7 +588,7 @@ impl Dag { out_shape: impl Into, ) -> OperatorIndex { self.builder(DEFAULT_CIRCUIT) - .add_input(out_precision, out_shape) + .add_input(out_precision, out_shape, Location::Unknown) } pub fn add_lut( @@ -517,7 +598,21 @@ impl Dag { out_precision: Precision, ) -> OperatorIndex { self.builder(DEFAULT_CIRCUIT) - .add_lut(input, table, out_precision) + .add_lut(input, table, out_precision, Location::Unknown) + } + + pub fn add_change_partition( + &mut self, + input: OperatorIndex, + src_partition: Option, + dst_partition: Option, + ) -> OperatorIndex { + self.builder(DEFAULT_CIRCUIT).add_change_partition( + input, + src_partition, + dst_partition, + Location::Unknown, + ) } pub fn add_dot( @@ -525,19 +620,26 @@ impl Dag { inputs: impl Into>, weights: impl Into, ) -> OperatorIndex { - self.builder(DEFAULT_CIRCUIT).add_dot(inputs, weights) + self.builder(DEFAULT_CIRCUIT) + .add_dot(inputs, weights, Location::Unknown) } pub fn add_levelled_op( &mut self, inputs: impl Into>, complexity: LevelledComplexity, - manp: f64, + weights: impl Into>, out_shape: impl Into, comment: impl Into, ) -> OperatorIndex { - self.builder(DEFAULT_CIRCUIT) - .add_levelled_op(inputs, complexity, manp, out_shape, comment) + self.builder(DEFAULT_CIRCUIT).add_levelled_op( + inputs, + complexity, + weights, + out_shape, + comment, + Location::Unknown, + ) } pub fn add_unsafe_cast( @@ -546,7 +648,7 @@ impl Dag { out_precision: Precision, ) -> OperatorIndex { self.builder(DEFAULT_CIRCUIT) - .add_unsafe_cast(input, out_precision) + .add_unsafe_cast(input, out_precision, Location::Unknown) } pub fn add_round_op( @@ -555,13 +657,13 @@ impl Dag { rounded_precision: Precision, ) -> OperatorIndex { self.builder(DEFAULT_CIRCUIT) - .add_round_op(input, rounded_precision) + .add_round_op(input, rounded_precision, Location::Unknown) } #[allow(unused)] fn add_shift_left_lsb_to_msb_no_padding(&mut self, input: OperatorIndex) -> OperatorIndex { self.builder(DEFAULT_CIRCUIT) - .add_shift_left_lsb_to_msb_no_padding(input) + .add_shift_left_lsb_to_msb_no_padding(input, Location::Unknown) } #[allow(unused)] @@ -571,8 +673,12 @@ impl Dag { table: FunctionTable, out_precision: Precision, ) -> OperatorIndex { - self.builder(DEFAULT_CIRCUIT) - .add_lut_1bit_no_padding(input, table, out_precision) + self.builder(DEFAULT_CIRCUIT).add_lut_1bit_no_padding( + input, + table, + out_precision, + Location::Unknown, + ) } #[allow(unused)] @@ -582,16 +688,18 @@ impl Dag { out_precision: Precision, ) -> OperatorIndex { self.builder(DEFAULT_CIRCUIT) - .add_shift_right_msb_no_padding_to_lsb(input, out_precision) + .add_shift_right_msb_no_padding_to_lsb(input, out_precision, Location::Unknown) } #[allow(unused)] fn add_isolate_lowest_bit(&mut self, input: OperatorIndex) -> OperatorIndex { - self.builder(DEFAULT_CIRCUIT).add_isolate_lowest_bit(input) + self.builder(DEFAULT_CIRCUIT) + .add_isolate_lowest_bit(input, Location::Unknown) } pub fn add_truncate_1_bit(&mut self, input: OperatorIndex) -> OperatorIndex { - self.builder(DEFAULT_CIRCUIT).add_truncate_1_bit(input) + self.builder(DEFAULT_CIRCUIT) + .add_truncate_1_bit(input, Location::Unknown) } pub fn add_expanded_round( @@ -599,8 +707,11 @@ impl Dag { input: OperatorIndex, rounded_precision: Precision, ) -> OperatorIndex { - self.builder(DEFAULT_CIRCUIT) - .add_expanded_round(input, rounded_precision) + self.builder(DEFAULT_CIRCUIT).add_expanded_round( + input, + rounded_precision, + Location::Unknown, + ) } pub fn add_expanded_rounded_lut( @@ -615,6 +726,7 @@ impl Dag { table, rounded_precision, out_precision, + Location::Unknown, ) } @@ -630,6 +742,7 @@ impl Dag { table, rounded_precision, out_precision, + Location::Unknown, ) } @@ -730,6 +843,7 @@ impl Dag { precision: self.out_precisions.get(id.0).unwrap(), output_state: self.output_state.get(id.0).unwrap(), circuit_tag: self.circuit_tags.get(id.0).unwrap(), + location: self.locations.get(id.0).unwrap(), } } @@ -758,16 +872,28 @@ impl Dag { #[cfg(test)] mod tests { + use crate::{ + optimization::dag::multi_parameters::optimize::MacroParameters, parameters::GlweParameters, + }; + use super::*; + const DUMMY_MACRO_PARAM: MacroParameters = MacroParameters { + glwe_params: GlweParameters { + log2_polynomial_size: 0, + glwe_dimension: 0, + }, + internal_dim: 0, + }; + #[test] fn output_marking() { let mut graph = Dag::new(); let mut builder = graph.builder("main1"); - let a = builder.add_input(1, Shape::number()); - let b = builder.add_input(1, Shape::number()); + let a = builder.add_input(1, Shape::number(), Location::Unknown); + let b = builder.add_input(1, Shape::number(), Location::Unknown); builder.tag_operator_as_output(b); - let _ = builder.add_dot([a, b], [1, 1]); + let _ = builder.add_dot([a, b], [1, 1], Location::Unknown); assert!(graph.get_operator(b).is_output()); assert!(!graph.get_operator(a).is_output()); } @@ -776,16 +902,25 @@ mod tests { #[allow(clippy::many_single_char_names)] fn graph_builder() { let mut graph = Dag::new(); + let tfhers_part = ExternalPartition { + name: String::from("tfhers"), + macro_params: DUMMY_MACRO_PARAM, + max_variance: 0.0_f64, + variance: 0.0_f64, + }; let mut builder = graph.builder("main1"); - let a = builder.add_input(1, Shape::number()); - let b = builder.add_input(1, Shape::number()); - let c = builder.add_dot([a, b], [1, 1]); - let _d = builder.add_lut(c, FunctionTable::UNKWOWN, 1); + let a = builder.add_input(1, Shape::number(), Location::Unknown); + let b = builder.add_input(1, Shape::number(), Location::Unknown); + let c = builder.add_dot([a, b], [1, 1], Location::Unknown); + let d = builder.add_lut(c, FunctionTable::UNKWOWN, 1, Location::Unknown); + let _d = + builder.add_change_partition(d, Some(tfhers_part.clone()), None, Location::Unknown); let mut builder = graph.builder("main2"); - let e = builder.add_input(2, Shape::number()); - let f = builder.add_input(2, Shape::number()); - let g = builder.add_dot([e, f], [2, 2]); - let _h = builder.add_lut(g, FunctionTable::UNKWOWN, 2); + let e = builder.add_input(2, Shape::number(), Location::Unknown); + let f = builder.add_input(2, Shape::number(), Location::Unknown); + let g = builder.add_dot([e, f], [2, 2], Location::Unknown); + let h = builder.add_lut(g, FunctionTable::UNKWOWN, 2, Location::Unknown); + let _h = builder.add_change_partition(h, None, Some(tfhers_part), Location::Unknown); graph.tag_operator_as_output(c); } @@ -793,22 +928,44 @@ mod tests { fn graph_creation() { let mut graph = Dag::new(); let mut builder = graph.builder("_"); - let input1 = builder.add_input(1, Shape::number()); - let input2 = builder.add_input(2, Shape::number()); + let input1 = builder.add_input(1, Shape::number(), Location::Unknown); + let input2 = builder.add_input(2, Shape::number(), Location::Unknown); let cpx_add = LevelledComplexity::ADDITION; - let sum1 = builder.add_levelled_op([input1, input2], cpx_add, 1.0, Shape::number(), "sum"); + let sum1 = builder.add_levelled_op( + [input1, input2], + cpx_add, + [1.0, 1.0], + Shape::number(), + "sum", + Location::Unknown, + ); - let lut1 = builder.add_lut(sum1, FunctionTable::UNKWOWN, 1); + let lut1 = builder.add_lut(sum1, FunctionTable::UNKWOWN, 1, Location::Unknown); - let concat = - builder.add_levelled_op([input1, lut1], cpx_add, 1.0, Shape::vector(2), "concat"); + let concat = builder.add_levelled_op( + [input1, lut1], + cpx_add, + [1.0, 1.0], + Shape::vector(2), + "concat", + Location::Unknown, + ); - let dot = builder.add_dot([concat], [1, 2]); + let dot = builder.add_dot([concat], [1, 2], Location::Unknown); - let lut2 = builder.add_lut(dot, FunctionTable::UNKWOWN, 2); + let lut2 = builder.add_lut(dot, FunctionTable::UNKWOWN, 2, Location::Unknown); - let ops_index = [input1, input2, sum1, lut1, concat, dot, lut2]; + let tfhers_part = ExternalPartition { + name: String::from("tfhers"), + macro_params: DUMMY_MACRO_PARAM, + max_variance: 0.0_f64, + variance: 0.0_f64, + }; + let change_part = + builder.add_change_partition(lut2, Some(tfhers_part.clone()), None, Location::Unknown); + + let ops_index = [input1, input2, sum1, lut1, concat, dot, lut2, change_part]; for (expected_i, op_index) in ops_index.iter().enumerate() { assert_eq!(expected_i, op_index.0); } @@ -827,7 +984,7 @@ mod tests { Operator::LevelledOp { inputs: vec![input1, input2], complexity: cpx_add, - manp: 1.0, + weights: vec![1.0, 1.0], out_shape: Shape::number(), comment: "sum".to_string(), }, @@ -839,7 +996,7 @@ mod tests { Operator::LevelledOp { inputs: vec![input1, lut1], complexity: cpx_add, - manp: 1.0, + weights: vec![1.0, 1.0], out_shape: Shape::vector(2), comment: "concat".to_string(), }, @@ -855,6 +1012,11 @@ mod tests { input: dot, table: FunctionTable::UNKWOWN, out_precision: 2, + }, + Operator::ChangePartition { + input: lut2, + src_partition: Some(tfhers_part.clone()), + dst_partition: None } ] ); diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/lib.rs b/compilers/concrete-optimizer/concrete-optimizer/src/lib.rs index a86e3c0e8..f0fbc0b0d 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/lib.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/lib.rs @@ -1,19 +1,5 @@ -#![warn(clippy::nursery)] -#![warn(clippy::pedantic)] #![warn(clippy::style)] -#![allow(clippy::cast_lossless)] -#![allow(clippy::cast_precision_loss)] // u64 to f64 -#![allow(clippy::cast_possible_truncation)] // u64 to usize #![allow(clippy::question_mark)] -#![allow(clippy::match_wildcard_for_single_variants)] -#![allow(clippy::manual_range_contains)] -#![allow(clippy::missing_panics_doc)] -#![allow(clippy::missing_const_for_fn)] -#![allow(clippy::module_name_repetitions)] -#![allow(clippy::must_use_candidate)] -#![allow(clippy::return_self_not_must_use)] -#![allow(clippy::similar_names)] -#![allow(clippy::suboptimal_flops)] #![allow(clippy::too_many_arguments)] #![warn(unused_results)] diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/analyze.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/analyze.rs index 9d9d5207b..6e7662edf 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/analyze.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/analyze.rs @@ -20,7 +20,7 @@ use super::partitions::Partitions; use super::variance_constraint::VarianceConstraint; use crate::utils::square; -const MAX_FORWARDING: u16 = 1000; +const MAX_FORWARDING: u16 = 500; #[derive(Debug, Clone)] pub struct PartitionedDag { @@ -121,6 +121,7 @@ pub struct VariancedDag { pub(crate) dag: Dag, pub(crate) partitions: Partitions, pub(crate) variances: Variances, + pub(crate) external_variance_constraints: Vec, } impl VariancedDag { @@ -133,9 +134,11 @@ impl VariancedDag { dag, partitions, variances, + external_variance_constraints: vec![], }; // We forward the noise once to verify the composability. + varianced.apply_external_partition_input_variance(); let _ = varianced.forward_noise(); varianced.check_composability()?; varianced.apply_composition_rules(); @@ -145,6 +148,8 @@ impl VariancedDag { // The noise gets computed from inputs down to outputs. if varianced.forward_noise() { // Noise settled, we return the varianced dag. + varianced.collect_external_input_constraint(); + varianced.collect_external_output_constraint(); return Ok(varianced); } // The noise of the inputs gets updated following the composition rules @@ -181,6 +186,106 @@ impl VariancedDag { } } + fn apply_external_partition_input_variance(&mut self) { + let p_cut = self.partitions.p_cut.clone(); + for (i, op) in self.dag.operators.clone().iter().enumerate() { + if let Operator::Input { .. } = op { + let partition_index = self.partitions.instrs_partition[i].instruction_partition; + if p_cut.is_external_partition(&partition_index) { + let partitions = self.partitions.clone(); + let external_partition = + &p_cut.external_partitions[p_cut.external_partition_index(partition_index)]; + let max_variance = external_partition.max_variance; + let variance = external_partition.variance; + + let mut input = self.get_operator_mut(OperatorIndex(i)); + let mut variances = input.variance().clone(); + variances.vars[partition_index.0] = SymbolicVariance::from_external_partition( + partitions.nb_partitions, + partition_index, + max_variance / variance, + ); + *(input.variance_mut()) = variances; + } + } + } + } + + fn collect_external_input_constraint(&mut self) { + let p_cut = &self.partitions.p_cut; + for (i, op) in self.dag.operators.clone().iter().enumerate() { + if let Operator::Input { + out_precision, + out_shape, + } = op + { + let partition_index = self.partitions.instrs_partition[i].instruction_partition; + if !p_cut.is_external_partition(&partition_index) { + continue; + } + + let max_variance = p_cut.external_partitions + [p_cut.external_partition_index(partition_index)] + .max_variance; + + let variances = &self.get_operator(OperatorIndex(i)).variance().vars.clone(); + for (i, variance) in variances.iter().enumerate() { + if variance.coeffs.is_nan() { + assert!(i != partition_index.0); + continue; + } + let constraint = VarianceConstraint { + precision: *out_precision, + partition: partition_index, + nb_constraints: out_shape.flat_size(), + safe_variance_bound: max_variance, + variance: variance.clone(), + }; + self.external_variance_constraints.push(constraint); + } + } + } + } + + fn collect_external_output_constraint(&mut self) { + let p_cut = self.partitions.p_cut.clone(); + for dag_op in self.dag.get_output_operators_iter() { + let DagOperator { + id: op_index, + shape: out_shape, + precision: out_precision, + .. + } = dag_op; + let optional_partition_index = p_cut.partition(&self.dag, op_index); + if optional_partition_index.is_none() { + continue; + } + let partition_index = optional_partition_index.unwrap(); + if !p_cut.is_external_partition(&partition_index) { + continue; + } + let max_variance = p_cut.external_partitions + [p_cut.external_partition_index(partition_index)] + .max_variance; + + let variances = &self.get_operator(op_index).variance().vars.clone(); + for (i, variance) in variances.iter().enumerate() { + if variance.coeffs.is_nan() { + assert!(i != partition_index.0); + continue; + } + let constraint = VarianceConstraint { + precision: *out_precision, + partition: partition_index, + nb_constraints: out_shape.flat_size(), + safe_variance_bound: max_variance, + variance: variance.clone(), + }; + self.external_variance_constraints.push(constraint); + } + } + } + /// Propagates the noise downward in the graph. fn forward_noise(&mut self) -> bool { // We save the old variance to compute the diff at the end. @@ -194,7 +299,6 @@ impl VariancedDag { if operator.operator().is_input() { continue; } - let max_var = |acc: SymbolicVariance, input: SymbolicVariance| acc.max(&input); // Operator variance will be used to override the noise let mut operator_variance = OperatorVariance::nan(nb_partitions); // We first compute the noise in the partition of the operator @@ -207,14 +311,13 @@ impl VariancedDag { nb_partitions, operator.partition().instruction_partition, ), - Operator::LevelledOp { manp, .. } => { - let max_var = operator - .get_inputs_iter() - .map(|a| a.variance()[operator.partition().instruction_partition].clone()) - .reduce(max_var) - .unwrap(); - max_var.after_levelled_op(*manp) - } + Operator::LevelledOp { weights, .. } => operator + .get_inputs_iter() + .zip(weights) + .fold(SymbolicVariance::ZERO, |acc, (inp, &weight)| { + acc + inp.variance()[operator.partition().instruction_partition].clone() + * square(weight) + }), Operator::Dot { kind: DotKind::CompatibleTensor { .. }, .. @@ -254,7 +357,7 @@ impl VariancedDag { acc + var[operator.partition().instruction_partition].clone() * square(*weight as f64) }), - Operator::UnsafeCast { .. } => { + Operator::UnsafeCast { .. } | Operator::ChangePartition { .. } => { operator.get_inputs_iter().next().unwrap().variance() [operator.partition().instruction_partition] .clone() @@ -295,12 +398,13 @@ impl VariancedDag { .filter(|op| op.operator().is_output()) .try_for_each(|op| { let id = op.id; + let loc = op.operator().location; op.variance() .check_growing_input_noise() .map_err(|err| match err { - Err::NotComposable(prev) => Err::NotComposable(format!( - "Dag is not composable, because of output {id}: {prev}" - )), + Err::NotComposable(prev) => { + Err::NotComposable(format!("At {loc}: please add `fhe.refresh(...)` to guarantee the function composability.\n{prev}.")) + } Err::NoParametersFound => Err::NoParametersFound, }) }) @@ -344,7 +448,9 @@ pub fn analyze( let partitions = partitionning_with_preferred(&dag, &p_cut, default_partition); let partitioned_dag = PartitionedDag { dag, partitions }; let varianced_dag = VariancedDag::try_from_partitioned(partitioned_dag)?; - let variance_constraints = collect_all_variance_constraints(&varianced_dag, noise_config); + let mut variance_constraints = collect_all_variance_constraints(&varianced_dag, noise_config); + // add external variance constraints + variance_constraints.extend_from_slice(varianced_dag.external_variance_constraints.as_slice()); let undominated_variance_constraints = VarianceConstraint::remove_dominated(&variance_constraints); let operations_count_per_instrs = collect_operations_count(&varianced_dag); @@ -486,13 +592,15 @@ impl OperatorVariance { pub fn check_growing_input_noise(&self) -> Result<()> { self.vars .iter() - .flat_map(|var| { - PartitionIndex::range(0, var.nb_partitions()).map(|i| (i, var.coeff_input(i))) + .enumerate() + .flat_map(|(var_i, var)| { + PartitionIndex::range(0, var.nb_partitions()) + .map(move |part_i| (var_i, part_i, var.coeff_input(part_i))) }) - .try_for_each(|(partition, coeff)| { + .try_for_each(|(var, partition, coeff)| { if !coeff.is_nan() && coeff > 1.0 { Result::Err(Err::NotComposable(format!( - "Partition {partition} has input coefficient {coeff}" + "The noise of the node {var} is contaminated by noise coming straight from the input (partition: {partition}, coeff: {coeff:.2})" ))) } else { Ok(()) @@ -559,6 +667,7 @@ fn collect_all_variance_constraints( dag, partitions, variances, + .. } = dag; let mut constraints = vec![]; for op in dag.get_operators_iter() { @@ -758,6 +867,23 @@ pub mod tests { } } + #[test] + #[should_panic(expected = "Forwarding of noise did not reach a fixed point.")] + fn test_decreasing_panics() { + let mut dag = unparametrized::Dag::new(); + let inp = dag.add_input(1, Shape::number()); + let oup = dag.add_levelled_op( + [inp], + LevelledComplexity::ZERO, + [0.5], + Shape::number(), + "comment", + ); + dag.add_composition(oup, inp); + let p_cut = PartitionCut::for_each_precision(&dag); + let _ = super::analyze(&dag, &CONFIG, &Some(p_cut), LOW_PRECISION_PARTITION).unwrap(); + } + #[test] fn test_composition_with_nongrowing_inputs_only() { let mut dag = unparametrized::Dag::new(); @@ -765,7 +891,7 @@ pub mod tests { let oup = dag.add_levelled_op( [inp], LevelledComplexity::ZERO, - 1.0, + [1.0], Shape::number(), "comment", ); @@ -781,7 +907,7 @@ pub mod tests { #[test] #[should_panic( - expected = "called `Result::unwrap()` on an `Err` value: NotComposable(\"Dag is not composable, because of output 1: Partition 0 has input coefficient 1.2100000000000002\")" + expected = "called `Result::unwrap()` on an `Err` value: NotComposable(\"At unknown location: please add `fhe.refresh(...)` to guarantee the function composability.\\nThe noise of the node 0 is contaminated by noise coming straight from the input (partition: 0, coeff: 1.21).\")" )] fn test_composition_with_growing_inputs_panics() { let mut dag = unparametrized::Dag::new(); @@ -789,7 +915,7 @@ pub mod tests { let oup = dag.add_levelled_op( [inp], LevelledComplexity::ZERO, - 1.1, + [1.1], Shape::number(), "comment", ); @@ -952,7 +1078,7 @@ pub mod tests { let _levelled = dag.add_levelled_op( [lut1, input2], LevelledComplexity::ZERO, - manp, + [manp, manp], &out_shape, "comment", ); @@ -1304,6 +1430,6 @@ pub mod tests { let p_cut = PartitionCut::from_precisions(&precisions); let dag = super::analyze(&dag, &CONFIG, &Some(p_cut.clone()), LOW_PRECISION_PARTITION).unwrap(); - assert!(dag.nb_partitions == p_cut.p_cut.len() + 1); + assert!(dag.nb_partitions == p_cut.n_partitions()); } } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/operations_value.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/operations_value.rs index e70b21426..7b0b90b26 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/operations_value.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/operations_value.rs @@ -193,6 +193,15 @@ impl OperationsValue { } } + pub fn is_nan(&self) -> bool { + for val in self.values.iter() { + if !val.is_nan() { + return false; + } + } + true + } + pub fn input(&mut self, partition: PartitionIndex) -> &mut f64 { &mut self.values[self.index.input(partition)] } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/mod.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/mod.rs index c146803ab..a5b218384 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/mod.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/mod.rs @@ -45,7 +45,7 @@ struct PartialMicroParameters { complexity: f64, } -#[derive(Debug, Copy, Clone, Eq, PartialEq)] +#[derive(Hash, Debug, Copy, Clone, Eq, PartialEq)] pub struct MacroParameters { pub glwe_params: GlweParameters, pub internal_dim: u64, @@ -920,6 +920,11 @@ pub fn optimize( ciphertext_modulus_log, }; + let dag_p_cut = p_cut.as_ref().map_or_else( + || PartitionCut::for_each_precision(dag), + std::clone::Clone::clone, + ); + let dag = analyze(dag, &noise_config, p_cut, default_partition)?; let kappa = error::sigma_scale_of_error_probability(config.maximum_acceptable_error_probability); @@ -954,11 +959,27 @@ pub fn optimize( let mut best_params: Option = None; for iter in 0..=10 { for partition in PartitionIndex::range(0, nb_partitions).rev() { + // reduce search space to the parameters of external partitions + let partition_search_space = if dag_p_cut.is_external_partition(&partition) { + let external_part = + &dag_p_cut.external_partitions[partition.0 - dag_p_cut.n_internal_partitions()]; + let mut reduced_search_space = search_space.clone(); + reduced_search_space.glwe_dimensions = + [external_part.macro_params.glwe_params.glwe_dimension].to_vec(); + reduced_search_space.glwe_log_polynomial_sizes = + [external_part.macro_params.glwe_params.log2_polynomial_size].to_vec(); + reduced_search_space.internal_lwe_dimensions = + [external_part.macro_params.internal_dim].to_vec(); + reduced_search_space + } else { + search_space.clone() + }; + let new_params = optimize_macro( security_level, ciphertext_modulus_log, fft_precision, - search_space, + &partition_search_space, partition, &used_tlu_keyswitch, &used_conversion_keyswitch, diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/tests.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/tests.rs index 1df078e1a..5e532874a 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/tests.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/optimize/tests.rs @@ -1,30 +1,17 @@ #![allow(clippy::float_cmp)] use once_cell::sync::Lazy; +use optimization::dag::multi_parameters::partition_cut::ExternalPartition; use super::*; use crate::computing_cost::cpu::CpuComplexity; -use crate::config; use crate::dag::operator::{FunctionTable, LevelledComplexity, Shape}; use crate::dag::unparametrized; +use crate::optimization::dag::multi_parameters::partitionning::tests::{ + get_tfhers_noise_br, SHARED_CACHES, TFHERS_MACRO_PARAMS, +}; use crate::optimization::dag::solo_key; use crate::optimization::dag::solo_key::optimize::{add_v0_dag, v0_dag}; -use crate::optimization::decomposition; - -const CIPHERTEXT_MODULUS_LOG: u32 = 64; -const FFT_PRECISION: u32 = 53; - -static SHARED_CACHES: Lazy = Lazy::new(|| { - let processing_unit = config::ProcessingUnit::Cpu; - decomposition::cache( - 128, - processing_unit, - None, - true, - CIPHERTEXT_MODULUS_LOG, - FFT_PRECISION, - ) -}); const _4_SIGMA: f64 = 0.000_063_342_483_999_973; @@ -436,7 +423,7 @@ fn optimize_sign_extract() { let input1 = dag.add_levelled_op( [small_input1], complexity, - 1.0, + [1.0], Shape::vector(1_000_000), "comment", ); @@ -489,7 +476,7 @@ fn test_partition_chain(decreasing: bool) { let sol = optimize(&dag, &Some(p_cut.clone()), PartitionIndex(0)).unwrap(); let nb_partitions = sol.macro_params.len(); assert!( - nb_partitions == (p_cut.p_cut.len() + 1), + nb_partitions == p_cut.n_partitions(), "bad nb partitions {} {p_cut}", sol.macro_params.len() ); @@ -587,7 +574,7 @@ fn test_chained_partitions_non_feasible_single_params() { lut_input = dag.add_levelled_op( [lut_input], LevelledComplexity::ZERO, - noise_factor, + [noise_factor], Shape::number(), "", ); @@ -844,10 +831,178 @@ fn test_bug_with_zero_noise() { let out_shape = Shape::number(); let mut dag = unparametrized::Dag::new(); let v0 = dag.add_input(2, &out_shape); - let v1 = dag.add_levelled_op([v0], complexity, 0.0, &out_shape, "comment"); - let v2 = dag.add_levelled_op([v1], complexity, 1.0, &out_shape, "comment"); + let v1 = dag.add_levelled_op([v0], complexity, [0.0], &out_shape, "comment"); + let v2 = dag.add_levelled_op([v1], complexity, [1.0], &out_shape, "comment"); let v3 = dag.add_unsafe_cast(v2, 1); let _ = dag.add_lut(v3, FunctionTable { values: vec![] }, 1); let sol = optimize(&dag, &None, PartitionIndex(0)); assert!(sol.is_some()); } + +#[test] +fn test_optimize_tfhers_in_out_dot_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 2.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let input1 = dag.add_input(16, Shape::number()); + let change_part1 = dag.add_change_partition(input1, Some(tfhers_partition.clone()), None); + let dot = dag.add_dot([change_part1], [2]); + _ = dag.add_change_partition(dot, None, Some(tfhers_partition.clone())); + + let sol = optimize(&dag, &None, PartitionIndex(0)); + assert!(sol.is_some()); + println!("solution: {:?}", sol.unwrap()); +} + +#[test] +fn test_optimize_tfhers_2lut_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition_in = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let tfhers_partition_out = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let tfhers_precision = 11; + let mut dag = unparametrized::Dag::new(); + let input = dag.add_input(tfhers_precision, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition_in), None); + let lut1 = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 4); + let lut2 = dag.add_lut(lut1, FunctionTable::UNKWOWN, tfhers_precision); + let _ = dag.add_change_partition(lut2, None, Some(tfhers_partition_out)); + + let sol = optimize(&dag, &None, PartitionIndex(0)); + assert!(sol.is_some()); +} + +#[test] +fn test_optimize_tfhers_different_in_out_2lut_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition_in = ExternalPartition { + name: String::from("tfhers_in"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 6.0, + variance, + }; + let tfhers_partition_out = ExternalPartition { + name: String::from("tfhers_out"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 6.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let tfhers_precision = 8; + let input = dag.add_input(tfhers_precision, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition_in), None); + let lut1 = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 4); + let lut2 = dag.add_lut(lut1, FunctionTable::UNKWOWN, tfhers_precision); + let _ = dag.add_change_partition(lut2, None, Some(tfhers_partition_out)); + + let sol = optimize(&dag, &None, PartitionIndex(0)); + assert!(sol.is_some()); +} + +#[test] +fn test_optimize_tfhers_input_constraints() { + let variances = [1.0, 6.14e-14, 2.14e-16]; + let dag_builder = |variance: f64| -> Dag { + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let tfhers_precision = 4; + let input = dag.add_input(tfhers_precision, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition), None); + let lut = dag.add_lut(change_part1, FunctionTable::UNKWOWN, tfhers_precision); + let out = dag.add_dot([lut], [128]); + dag.add_composition(out, input); + dag + }; + + let sol = optimize(&dag_builder(variances[0]), &None, PartitionIndex(0)); + assert!(sol.is_some()); + let mut last_complexity = sol.unwrap().complexity; + for variance in &variances[1..] { + let sol = optimize(&dag_builder(*variance), &None, PartitionIndex(0)); + assert!(sol.is_some()); + let complexity = sol.unwrap().complexity; + assert!(complexity > last_complexity); + last_complexity = complexity; + } +} + +#[test] +fn test_optimize_tfhers_output_constraints() { + let variances = [1.0, 6.14e-14, 2.14e-16]; + let dag_builder = |variance: f64| -> Dag { + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let tfhers_precision = 4; + let input = dag.add_input(tfhers_precision, Shape::number()); + let lut = dag.add_lut(input, FunctionTable::UNKWOWN, tfhers_precision); + let dot = dag.add_dot([lut], [128]); + let out = dag.add_change_partition(dot, None, Some(tfhers_partition.clone())); + dag.add_composition(out, input); + dag + }; + + let sol = optimize(&dag_builder(variances[0]), &None, PartitionIndex(0)); + assert!(sol.is_some()); + let mut last_complexity = sol.unwrap().complexity; + for variance in &variances[1..] { + let sol = optimize(&dag_builder(*variance), &None, PartitionIndex(0)); + assert!(sol.is_some()); + let complexity = sol.unwrap().complexity; + assert!(complexity > last_complexity); + last_complexity = complexity; + } +} + +#[test] +fn test_optimize_tfhers_to_concrete_and_back_example() { + let variance = get_tfhers_noise_br(); + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 8.0, + variance, + }; + let concrete_precision = 8; + let msg_width = 2; + let carry_width = 2; + let tfhers_precision = msg_width + carry_width; + + let mut dag = unparametrized::Dag::new(); + let input = dag.add_input( + tfhers_precision, + Shape::vector((concrete_precision / msg_width).into()), + ); + // to concrete + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition.clone()), None); + let lut1 = dag.add_lut(change_part1, FunctionTable::UNKWOWN, concrete_precision); + // from concrete + let lut2 = dag.add_lut(lut1, FunctionTable::UNKWOWN, tfhers_precision); + let _ = dag.add_change_partition(lut2, None, Some(tfhers_partition.clone())); + + let sol = optimize(&dag, &None, PartitionIndex(0)); + assert!(sol.is_some()); +} diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partition_cut.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partition_cut.rs index c3e607bb5..dbd5edc22 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partition_cut.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partition_cut.rs @@ -9,21 +9,62 @@ use crate::optimization::dag::multi_parameters::partitions::PartitionIndex; use crate::optimization::dag::solo_key::analyze::out_variances; use crate::optimization::dag::solo_key::symbolic_variance::SymbolicVariance; +use super::optimize::MacroParameters; + const ROUND_INNER_MULTI_PARAMETER: bool = false; const ROUND_EXTERNAL_MULTI_PARAMETER: bool = !ROUND_INNER_MULTI_PARAMETER && true; +#[derive(Clone, Debug)] +pub struct ExternalPartition { + pub name: String, + pub macro_params: MacroParameters, + pub max_variance: f64, + pub variance: f64, +} + +impl Eq for ExternalPartition {} + +impl PartialEq for ExternalPartition { + fn eq(&self, other: &Self) -> bool { + self.name == other.name + && self.macro_params == other.macro_params + && self.max_variance == other.max_variance + } +} + +impl std::hash::Hash for ExternalPartition { + fn hash(&self, state: &mut H) { + self.name.hash(state); + self.macro_params.hash(state); + } +} + +impl std::fmt::Display for ExternalPartition { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{{ name: {} }}", self.name)?; + Ok(()) + } +} + // TODO: keep both precisions // TODO: rounding lut should have its own partition based on max norm2 and precisions #[derive(Clone, Debug)] pub struct PartitionCut { + // TODO: add name to partitions + // partition0 precision <= p_cut[0] < partition 1 precision <= p_cut[1] ... // precision are in the sens of Lut input precision and are sorted pub p_cut: Vec<(Precision, f64)>, + // Whether it has internal partitions or not + pub has_internal_partitions: bool, + // # TODO RELATIVE NORM2 // # HIGHER NORM2 MEANS HIGHER VARIANCE IN CONSTRAINT // norm2 * 2 ** (out precision - in precision) pub rnorm2: Vec, + + pub external_partitions: Vec, } impl PartitionCut { @@ -31,17 +72,63 @@ impl PartitionCut { Self { p_cut: vec![], rnorm2: vec![], + external_partitions: vec![], + has_internal_partitions: true, } } + pub fn n_partitions(&self) -> usize { + self.n_internal_partitions() + self.n_external_partitions() + } + + pub fn n_internal_partitions(&self) -> usize { + self.p_cut.len() + self.has_internal_partitions as usize + } + + pub fn n_external_partitions(&self) -> usize { + self.external_partitions.len() + } + + pub fn external_partition_index(&self, partition: PartitionIndex) -> usize { + partition.0 - self.n_internal_partitions() + } + + pub fn is_external_partition(&self, partition: &PartitionIndex) -> bool { + partition.0 >= self.n_internal_partitions() && partition.0 < self.n_partitions() + } + + pub fn is_internal_partition(&self, partition: &PartitionIndex) -> bool { + partition.0 < self.n_internal_partitions() + } + pub fn from_precisions(precisions: &[Precision]) -> Self { let mut precisions: Vec<_> = precisions.to_vec(); + let has_internal_partitions = !precisions.is_empty(); precisions.sort_by(|a, b| a.partial_cmp(b).unwrap()); _ = precisions.pop(); Self { p_cut: precisions.iter().map(|p| (*p, f64::MAX)).collect(), rnorm2: vec![], + external_partitions: vec![], + has_internal_partitions, + } + } + + pub fn from_precisions_and_external_partitions( + precisions: &[Precision], + external_partitions: &[ExternalPartition], + ) -> Self { + let mut precisions: Vec<_> = precisions.to_vec(); + let has_internal_partitions = !precisions.is_empty(); + precisions.sort_by(|a, b| a.partial_cmp(b).unwrap()); + _ = precisions.pop(); + + Self { + p_cut: precisions.iter().map(|p| (*p, f64::MAX)).collect(), + rnorm2: vec![], + external_partitions: external_partitions.to_vec(), + has_internal_partitions, } } @@ -61,7 +148,7 @@ impl PartitionCut { let op = &dag.operators[op_i.0]; match op { Operator::Lut { input, .. } => { - assert!(!self.p_cut.is_empty()); + assert!(self.has_internal_partitions); for (partition, &(precision_cut, norm2_cut)) in self.p_cut.iter().enumerate() { if dag.out_precisions[input.0] <= precision_cut && self.rnorm2(op_i) <= norm2_cut @@ -71,6 +158,23 @@ impl PartitionCut { } Some(PartitionIndex(self.p_cut.len())) } + Operator::ChangePartition { + src_partition: Some(partition), + dst_partition: None, + .. + } + | Operator::ChangePartition { + src_partition: None, + dst_partition: Some(partition), + .. + } => { + for (i, external_partition) in self.external_partitions.iter().enumerate() { + if partition == external_partition { + return Some(PartitionIndex(self.n_internal_partitions() + i)); + } + } + None + } _ => None, } } @@ -78,15 +182,33 @@ impl PartitionCut { pub fn for_each_precision(dag: &unparametrized::Dag) -> Self { let (dag, _) = expand_round_and_index_map(dag); let mut lut_in_precisions: HashSet<_> = HashSet::default(); + let mut partitions: HashSet = HashSet::default(); for op in &dag.operators { if let Operator::Lut { input, .. } = op { _ = lut_in_precisions.insert(dag.out_precisions[input.0]); } } + for op in &dag.operators { + if let Operator::ChangePartition { + src_partition, + dst_partition, + .. + } = op + { + if let Some(partition) = src_partition { + _ = partitions.insert(partition.clone()); + } + if let Some(partition) = dst_partition { + _ = partitions.insert(partition.clone()); + } + } + } let precisions: Vec<_> = lut_in_precisions.iter().copied().collect(); - Self::from_precisions(&precisions) + let external_partitions = Vec::from_iter(partitions); + Self::from_precisions_and_external_partitions(&precisions, &external_partitions) } + #[allow(clippy::too_many_lines)] pub fn maximal_partitionning(original_dag: &unparametrized::Dag) -> Self { // Note: only keep one 0-bits, partition as the compiler will not support multi-parameter round // partition based on input precision and output log norm2 @@ -103,6 +225,7 @@ impl PartitionCut { let out_variances: Vec = out_variances(&dag); let mut noise_origins: Vec> = vec![HashSet::default(); out_variances.len()]; let mut max_output_norm2 = vec![f64::NAN; out_variances.len()]; + let mut external_partitions: Vec = vec![]; assert!(out_variances.len() == dag.operators.len()); // Find input lut log norm2 and lut as origins @@ -128,6 +251,21 @@ impl PartitionCut { max_output_norm2[op_i] = 1.0; // initial value that can be maxed noise_origins[op_i] = std::iter::once(op_i).collect(); } + Operator::ChangePartition { + src_partition: Some(partition), + dst_partition: None, + .. + } + | Operator::ChangePartition { + src_partition: None, + dst_partition: Some(partition), + .. + } => { + external_partitions.push(partition.clone()); + } + Operator::ChangePartition { .. } => { + panic!("change_partition not supported when src and dest partition are both set or unset"); + } // unreachable Operator::Round { .. } => panic!("expand_round failed"), } @@ -181,12 +319,16 @@ impl PartitionCut { } } let mut p_cut: Vec<_> = lut_partition.iter().copied().collect(); + let has_internal_partitions = !lut_partition.is_empty(); p_cut.sort_by(|a, b| a.partial_cmp(b).unwrap()); _ = p_cut.pop(); let p_cut = p_cut.iter().map(|(p, n)| (*p, n.into_inner())).collect(); + Self { p_cut, rnorm2: max_output_norm2, + external_partitions, + has_internal_partitions, } } @@ -197,9 +339,15 @@ impl PartitionCut { p_cut.push(cut); } } + let has_internal_partitions = self.has_internal_partitions + && self.is_internal_partition(&PartitionIndex( + used.iter().map(|u| u.0).min().unwrap_or(usize::MAX), + )); Self { p_cut, rnorm2: self.rnorm2.clone(), + external_partitions: self.external_partitions.clone(), + has_internal_partitions, } } } @@ -229,6 +377,13 @@ impl std::fmt::Display for PartitionCut { "partition {}: {prev_precision_cut} bits and higher", self.p_cut.len() )?; + for (i, e_partition) in self.external_partitions.iter().enumerate() { + writeln!( + f, + "partition {} (external): {e_partition}", + i + self.n_internal_partitions() + )?; + } Ok(()) } } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitionning.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitionning.rs index fb4d7d66d..e01648db1 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitionning.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitionning.rs @@ -55,7 +55,9 @@ fn extract_levelled_block(dag: &unparametrized::Dag) -> Blocks { // Block entry point and pre-exit point Op::Lut { .. } => (), // Connectors - Op::UnsafeCast { input, .. } => uf.union(input.0, op_i), + Op::UnsafeCast { input, .. } | Op::ChangePartition { input, .. } => { + uf.union(input.0, op_i); + } Op::LevelledOp { inputs, .. } | Op::Dot { inputs, .. } => { for input in inputs { uf.union(input.0, op_i); @@ -120,7 +122,7 @@ fn only_1_partition(dag: &unparametrized::Dag) -> Partitions { Op::Dot { inputs, .. } | Op::LevelledOp { inputs, .. } => { instrs_partition[op_i].inputs_transition = vec![None; inputs.len()]; } - Op::Lut { .. } | Op::UnsafeCast { .. } => { + Op::Lut { .. } | Op::UnsafeCast { .. } | Operator::ChangePartition { .. } => { instrs_partition[op_i].inputs_transition = vec![None]; } Op::Input { .. } => (), @@ -130,6 +132,7 @@ fn only_1_partition(dag: &unparametrized::Dag) -> Partitions { Partitions { nb_partitions: 1, instrs_partition, + p_cut: PartitionCut::empty(), } } @@ -146,7 +149,7 @@ fn resolve_by_levelled_block( .copied() .collect(); let nb_partitions = present_partitions.len().max(1); // no tlu = no constraints - if p_cut.p_cut.len() + 1 != nb_partitions { + if p_cut.n_partitions() != nb_partitions { return resolve_by_levelled_block( dag, &p_cut.delete_unused_cut(&present_partitions), @@ -169,7 +172,15 @@ fn resolve_by_levelled_block( 1 => get_singleton_value(&constraints.forced), _ => { let forced = constraints.forced; - if forced.contains(&default_partition) { + // in case of conflict, prioritize the external partition, then the default partition + let externals: Vec<_> = forced + .iter() + .filter(|p| p_cut.is_external_partition(p)) + .collect(); + assert!(externals.len() <= 1); + if externals.len() == 1 { + *externals[0] + } else if forced.contains(&default_partition) { default_partition } else { *forced.iter().min().unwrap() @@ -217,7 +228,7 @@ fn resolve_by_levelled_block( } } } - Op::UnsafeCast { input, .. } => { + Op::UnsafeCast { input, .. } | Op::ChangePartition { input, .. } => { instrs_p[op_i].instruction_partition = group_partition; let input_partition = instrs_p[input.0].instruction_partition; instrs_p[op_i].inputs_transition = if group_partition == input_partition { @@ -235,6 +246,7 @@ fn resolve_by_levelled_block( Partitions { nb_partitions, instrs_partition: instrs_p, + p_cut: p_cut.clone(), } // Now we can generate transitions // Input has no transtions @@ -247,7 +259,7 @@ pub fn partitionning_with_preferred( p_cut: &PartitionCut, default_partition: PartitionIndex, ) -> Partitions { - if p_cut.p_cut.is_empty() { + if p_cut.n_partitions() <= 1 { only_1_partition(dag) } else { resolve_by_levelled_block(dag, p_cut, default_partition) @@ -261,9 +273,32 @@ pub mod tests { pub const LOW_PRECISION_PARTITION: PartitionIndex = PartitionIndex(0); pub const HIGH_PRECISION_PARTITION: PartitionIndex = PartitionIndex(1); + use once_cell::sync::Lazy; + use super::*; - use crate::dag::operator::{FunctionTable, Shape, Weights}; + use crate::config; + use crate::dag::operator::{FunctionTable, LevelledComplexity, Shape, Weights}; use crate::dag::unparametrized; + use crate::optimization::dag::multi_parameters::optimize::MacroParameters; + use crate::optimization::dag::multi_parameters::partition_cut::ExternalPartition; + use crate::optimization::decomposition::cmux::get_noise_br; + use crate::optimization::decomposition::{self, PersistDecompCaches}; + use crate::parameters::GlweParameters; + + const CIPHERTEXT_MODULUS_LOG: u32 = 64; + const FFT_PRECISION: u32 = 53; + + pub static SHARED_CACHES: Lazy = Lazy::new(|| { + let processing_unit = config::ProcessingUnit::Cpu; + decomposition::cache( + 128, + processing_unit, + None, + true, + CIPHERTEXT_MODULUS_LOG, + FFT_PRECISION, + ) + }); fn default_p_cut() -> PartitionCut { PartitionCut::from_precisions(&[2, 128]) @@ -333,6 +368,316 @@ pub mod tests { } } + fn get_external_partition_index_or( + external_partition: &ExternalPartition, + p_cut: &PartitionCut, + default: usize, + ) -> PartitionIndex { + for (i, e_partition) in p_cut.external_partitions.iter().enumerate() { + if external_partition == e_partition { + return PartitionIndex(i + p_cut.n_internal_partitions()); + } + } + PartitionIndex(default) + } + + pub const GLWE_PARAMS: GlweParameters = GlweParameters { + log2_polynomial_size: 11, + glwe_dimension: 1, + }; + + pub const TFHERS_PBS_LEVEL: u64 = 1; + + pub const TFHERS_MACRO_PARAMS: MacroParameters = MacroParameters { + glwe_params: GLWE_PARAMS, + internal_dim: 841, + }; + + pub fn get_tfhers_noise_br() -> f64 { + get_noise_br( + SHARED_CACHES.caches(), + GLWE_PARAMS.log2_polynomial_size, + GLWE_PARAMS.glwe_dimension, + TFHERS_MACRO_PARAMS.internal_dim, + TFHERS_PBS_LEVEL, + None, + ) + .unwrap() + } + + #[test] + fn test_tfhers_in_out_dot_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let input1 = dag.add_input(16, Shape::number()); + let change_part1 = dag.add_change_partition(input1, Some(tfhers_partition.clone()), None); + let dot = dag.add_dot([change_part1], [2]); + _ = dag.add_change_partition(dot, None, Some(tfhers_partition)); + + let partitions = partitionning(&dag); + assert!(partitions.nb_partitions == 1); + let instrs_partition = partitions.instrs_partition; + show_partitionning(&dag, &instrs_partition); + assert!(instrs_partition[0].instruction_partition == LOW_PRECISION_PARTITION); + } + + #[test] + fn test_tfhers_in_out_lut_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 6.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let input = dag.add_input(16, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition.clone()), None); + let lut = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 16); + let change_part2 = dag.add_change_partition(lut, None, Some(tfhers_partition)); + + let partitions = partitionning(&dag); + assert!(partitions.nb_partitions == 2); + let tfhers_partition_index = PartitionIndex(1); + let instrs_partition = partitions.instrs_partition; + show_partitionning(&dag, &instrs_partition); + + let consider = |op_i: OperatorIndex| &instrs_partition[op_i.0]; + assert!(consider(input).instruction_partition == tfhers_partition_index); + assert!(consider(change_part1).instruction_partition == tfhers_partition_index); + assert!(consider(change_part1).inputs_transition == [None]); + assert!(consider(lut).instruction_partition == LOW_PRECISION_PARTITION); + assert!(consider(lut).alternative_output_representation.len() == 1); + assert!(consider(lut) + .alternative_output_representation + .contains(&tfhers_partition_index)); + assert!(consider(change_part2).instruction_partition == tfhers_partition_index); + assert!( + consider(change_part2).inputs_transition + == [Some(Transition::Additional { + src_partition: LOW_PRECISION_PARTITION + })] + ); + } + + #[test] + fn test_tfhers_in_out_lut_compute_mix_external() { + let variance = get_tfhers_noise_br(); + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 6.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let external_input = dag.add_input(16, Shape::number()); + let other_input = dag.add_input(16, Shape::number()); + let other_lut = dag.add_lut(other_input, FunctionTable::UNKWOWN, 16); + let mix_add = dag.add_levelled_op( + [external_input, other_lut], + LevelledComplexity::ADDITION, + [1.0, 1.0], + Shape::number(), + "add", + ); + let change_part1 = dag.add_change_partition(mix_add, Some(tfhers_partition.clone()), None); + let lut = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 16); + let change_part2 = dag.add_change_partition(lut, None, Some(tfhers_partition)); + + let partitions = partitionning(&dag); + assert!(partitions.nb_partitions == 2); + let tfhers_partition_index = PartitionIndex(1); + let instrs_partition = partitions.instrs_partition; + show_partitionning(&dag, &instrs_partition); + + let consider = |op_i: OperatorIndex| &instrs_partition[op_i.0]; + assert!(consider(external_input).instruction_partition == tfhers_partition_index); + assert!(consider(other_input).instruction_partition == LOW_PRECISION_PARTITION); + assert!(consider(other_lut).alternative_output_representation.len() == 1); + assert!(consider(other_lut) + .alternative_output_representation + .contains(&tfhers_partition_index)); + assert!(consider(change_part1).instruction_partition == tfhers_partition_index); + assert!(consider(change_part1).inputs_transition == [None]); + assert!(consider(lut).instruction_partition == LOW_PRECISION_PARTITION); + assert!(consider(lut).alternative_output_representation.len() == 1); + assert!(consider(lut) + .alternative_output_representation + .contains(&tfhers_partition_index)); + assert!(consider(change_part2).instruction_partition == tfhers_partition_index); + } + + #[test] + fn test_tfhers_different_in_out_lut_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition_in = ExternalPartition { + name: String::from("tfhers_in"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 2.0, + variance, + }; + let tfhers_partition_out = ExternalPartition { + name: String::from("tfhers_out"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 2.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let input = dag.add_input(16, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition_in.clone()), None); + let lut = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 16); + let change_part2 = dag.add_change_partition(lut, None, Some(tfhers_partition_out.clone())); + + let p_cut = PartitionCut::for_each_precision(&dag); + let partitions = partitionning_with_preferred(&dag, &p_cut, LOW_PRECISION_PARTITION); + assert!(partitions.nb_partitions == 3); + let tfhers_partition_index_in = + get_external_partition_index_or(&tfhers_partition_in, &p_cut, 1); + let tfhers_partition_index_out = + get_external_partition_index_or(&tfhers_partition_out, &p_cut, 2); + let instrs_partition = partitions.instrs_partition; + show_partitionning(&dag, &instrs_partition); + + let consider = |op_i: OperatorIndex| &instrs_partition[op_i.0]; + assert!(consider(input).instruction_partition == tfhers_partition_index_in); + assert!(consider(change_part1).instruction_partition == tfhers_partition_index_in); + assert!(consider(change_part1).inputs_transition == [None]); + assert!(consider(lut).instruction_partition == LOW_PRECISION_PARTITION); + assert!(consider(lut).alternative_output_representation.len() == 1); + assert!(consider(lut) + .alternative_output_representation + .contains(&tfhers_partition_index_out)); + assert!(consider(change_part2).instruction_partition == tfhers_partition_index_out); + assert!( + consider(change_part2).inputs_transition + == [Some(Transition::Additional { + src_partition: LOW_PRECISION_PARTITION + })] + ); + } + + #[test] + fn test_tfhers_in_out_2lut_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition = ExternalPartition { + name: String::from("tfhers"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let input = dag.add_input(16, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition.clone()), None); + let lut1 = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 4); + let lut2 = dag.add_lut(lut1, FunctionTable::UNKWOWN, 16); + let change_part2 = dag.add_change_partition(lut2, None, Some(tfhers_partition)); + + let partitions = partitionning(&dag); + assert!(partitions.nb_partitions == 3); + let tfhers_partition_index = PartitionIndex(2); + let instrs_partition = partitions.instrs_partition; + show_partitionning(&dag, &instrs_partition); + + let consider = |op_i: OperatorIndex| &instrs_partition[op_i.0]; + assert!(consider(input).instruction_partition == tfhers_partition_index); + assert!(consider(change_part1).instruction_partition == tfhers_partition_index); + assert!(consider(change_part1).inputs_transition == [None]); + assert!(consider(lut1).instruction_partition == HIGH_PRECISION_PARTITION); + assert!( + consider(lut1).inputs_transition + == [Some(Transition::Internal { + src_partition: tfhers_partition_index + })] + ); + assert!(consider(lut2).alternative_output_representation.len() == 1); + assert!(consider(lut2) + .alternative_output_representation + .contains(&tfhers_partition_index)); + assert!(consider(lut2).instruction_partition == LOW_PRECISION_PARTITION); + assert!( + consider(lut2).inputs_transition + == [Some(Transition::Internal { + src_partition: HIGH_PRECISION_PARTITION + })] + ); + assert!(consider(change_part2).instruction_partition == tfhers_partition_index); + assert!( + consider(change_part2).inputs_transition + == [Some(Transition::Additional { + src_partition: LOW_PRECISION_PARTITION + })] + ); + } + + #[test] + fn test_tfhers_different_in_out_2lut_compute() { + let variance = get_tfhers_noise_br(); + let tfhers_partition_in = ExternalPartition { + name: String::from("tfhers_in"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let tfhers_partition_out = ExternalPartition { + name: String::from("tfhers_out"), + macro_params: TFHERS_MACRO_PARAMS, + max_variance: variance * 4.0, + variance, + }; + let mut dag = unparametrized::Dag::new(); + let input = dag.add_input(16, Shape::number()); + let change_part1 = dag.add_change_partition(input, Some(tfhers_partition_in.clone()), None); + let lut1 = dag.add_lut(change_part1, FunctionTable::UNKWOWN, 4); + let lut2 = dag.add_lut(lut1, FunctionTable::UNKWOWN, 16); + let change_part2 = dag.add_change_partition(lut2, None, Some(tfhers_partition_out.clone())); + + let p_cut = PartitionCut::for_each_precision(&dag); + let partitions = partitionning_with_preferred(&dag, &p_cut, LOW_PRECISION_PARTITION); + assert!(partitions.nb_partitions == 4); + let tfhers_partition_index_in = + get_external_partition_index_or(&tfhers_partition_in, &p_cut, 2); + let tfhers_partition_index_out = + get_external_partition_index_or(&tfhers_partition_out, &p_cut, 3); + let instrs_partition = partitions.instrs_partition; + show_partitionning(&dag, &instrs_partition); + + let consider = |op_i: OperatorIndex| &instrs_partition[op_i.0]; + assert!(consider(input).instruction_partition == tfhers_partition_index_in); + assert!(consider(change_part1).instruction_partition == tfhers_partition_index_in); + assert!(consider(change_part1).inputs_transition == [None]); + assert!(consider(lut1).instruction_partition == HIGH_PRECISION_PARTITION); + assert!( + consider(lut1).inputs_transition + == [Some(Transition::Internal { + src_partition: tfhers_partition_index_in + })] + ); + assert!(consider(lut2).alternative_output_representation.len() == 1); + assert!(consider(lut2) + .alternative_output_representation + .contains(&tfhers_partition_index_out)); + assert!(consider(lut2).instruction_partition == LOW_PRECISION_PARTITION); + assert!( + consider(lut2).inputs_transition + == [Some(Transition::Internal { + src_partition: HIGH_PRECISION_PARTITION + })] + ); + assert!(consider(change_part2).instruction_partition == tfhers_partition_index_out); + assert!( + consider(change_part2).inputs_transition + == [Some(Transition::Additional { + src_partition: LOW_PRECISION_PARTITION + })] + ); + } + #[test] fn test_1_input_2_partitions() { let mut dag = unparametrized::Dag::new(); diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitions.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitions.rs index 28ee90c61..18dd8050d 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitions.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/partitions.rs @@ -6,6 +6,8 @@ use std::{ use crate::dag::operator::OperatorIndex; +use super::partition_cut::PartitionCut; + #[derive(Clone, Debug, PartialEq, Eq, Default, PartialOrd, Ord, Hash, Copy)] pub struct PartitionIndex(pub(crate) usize); @@ -78,6 +80,7 @@ impl InstructionPartition { pub struct Partitions { pub nb_partitions: usize, pub instrs_partition: Vec, + pub p_cut: PartitionCut, } impl Index for Partitions { diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/symbolic_variance.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/symbolic_variance.rs index 4bf70f5b8..7b120a48a 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/symbolic_variance.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/multi_parameters/symbolic_variance.rs @@ -54,6 +54,20 @@ impl SymbolicVariance { r } + pub fn from_external_partition( + nb_partitions: usize, + partition: PartitionIndex, + max_variance: f64, + ) -> Self { + let mut r = Self { + partition, + coeffs: OperationsValue::zero(nb_partitions), + }; + // rust ..., offset cannot be inlined + *r.coeffs.pbs(partition) = max_variance; + r + } + pub fn coeff_input(&self, partition: PartitionIndex) -> f64 { self.coeffs[self.coeffs.index.input(partition)] } @@ -144,38 +158,6 @@ impl SymbolicVariance { new } - #[allow(clippy::float_cmp)] - pub fn after_levelled_op(&self, manp: f64) -> Self { - let new_coeff = manp * manp; - // detect the previous base manp level - // this is the maximum value of fresh base noise and pbs base noise - let mut current_max: f64 = 0.0; - for partition in PartitionIndex::range(0, self.nb_partitions()) { - let fresh_coeff = self.coeff_input(partition); - let pbs_noise_coeff = self.coeff_pbs(partition); - current_max = current_max.max(fresh_coeff).max(pbs_noise_coeff); - } - // assert!(1.0 <= current_max); - // assert!( - // current_max <= new_coeff, - // "Non monotonious levelled op: {current_max} <= {new_coeff}" - // ); - // replace all current_max by new_coeff - // multiply everything else by new_coeff / current_max - let mut new = self.clone(); - if current_max == 0.0 { - return new; - } - for cell in &mut new.coeffs.values { - if *cell == current_max { - *cell = new_coeff; - } else { - *cell *= new_coeff / current_max; - } - } - new - } - pub fn max(&self, other: &Self) -> Self { let mut coeffs = self.coeffs.clone(); for (i, coeff) in coeffs.iter_mut().enumerate() { diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs index 84502b857..484338b12 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/analyze.rs @@ -1,4 +1,4 @@ -use super::symbolic_variance::{SymbolicVariance, VarianceOrigin}; +use super::symbolic_variance::SymbolicVariance; use crate::dag::operator::{ DotKind, LevelledComplexity, Operator, OperatorIndex, Precision, Shape, }; @@ -47,7 +47,8 @@ fn assert_inputs_index(op: &Operator, first_bad_index: usize) { Operator::Input { .. } => true, Operator::Lut { input, .. } | Operator::UnsafeCast { input, .. } - | Operator::Round { input, .. } => input.0 < first_bad_index, + | Operator::Round { input, .. } + | Operator::ChangePartition { input, .. } => input.0 < first_bad_index, Operator::LevelledOp { inputs, .. } | Operator::Dot { inputs, .. } => { inputs.iter().all(|input| input.0 < first_bad_index) } @@ -73,6 +74,15 @@ pub fn has_round(dag: &Dag) -> bool { false } +pub fn has_change_partition(dag: &Dag) -> bool { + for op in &dag.operators { + if matches!(op, Operator::ChangePartition { .. }) { + return true; + } + } + false +} + pub fn has_unsafe_cast(dag: &Dag) -> bool { for op in &dag.operators { if matches!(op, Operator::UnsafeCast { .. }) { @@ -86,6 +96,10 @@ pub fn assert_no_round(dag: &Dag) { assert!(!has_round(dag)); } +pub fn assert_no_change_partition(dag: &Dag) { + assert!(!has_change_partition(dag)); +} + fn assert_valid_variances(dag: &SoloKeyDag) { for &out_variance in &dag.out_variances { assert!( @@ -100,17 +114,6 @@ fn assert_properties_correctness(dag: &SoloKeyDag) { assert_valid_variances(dag); } -fn variance_origin(inputs: &[OperatorIndex], out_variances: &[SymbolicVariance]) -> VarianceOrigin { - let first_origin = first(inputs, out_variances).origin(); - for input in inputs.iter().skip(1) { - let item = &out_variances[input.0]; - if first_origin != item.origin() { - return VarianceOrigin::Mixed; - } - } - first_origin -} - #[derive(Clone, Debug)] pub struct SoloKeyDag { // Collect all operators output variances @@ -146,15 +149,15 @@ fn out_variance( match op { Operator::Input { .. } => SymbolicVariance::INPUT, Operator::Lut { .. } => SymbolicVariance::LUT, - Operator::LevelledOp { inputs, manp, .. } => { - let variance_factor = SymbolicVariance::manp_to_variance_factor(*manp); - let origin = match variance_origin(inputs, out_variances) { - VarianceOrigin::Input => SymbolicVariance::INPUT, - VarianceOrigin::Lut | VarianceOrigin::Mixed /* Mixed: assume the worst */ - => SymbolicVariance::LUT - }; - origin * variance_factor - } + Operator::LevelledOp { + inputs, weights, .. + } => inputs + .iter() + .map(|i| out_variances[i.0]) + .zip(weights) + .fold(SymbolicVariance::ZERO, |acc, (var, &weight)| { + acc + var * square(weight) + }), Operator::Dot { kind: DotKind::CompatibleTensor { .. }, .. @@ -187,7 +190,9 @@ fn out_variance( .fold(SymbolicVariance::ZERO, |acc, (weight, var)| { acc + var * square(*weight as f64) }), - Operator::UnsafeCast { input, .. } => out_variances[input.0], + Operator::UnsafeCast { input, .. } | Operator::ChangePartition { input, .. } => { + out_variances[input.0] + } Operator::Round { .. } => { unreachable!("Round should have been either expanded or integrated to a lut") } @@ -247,9 +252,10 @@ fn op_levelled_complexity(op: &Operator, out_shapes: &[Shape]) -> LevelledComple } Operator::LevelledOp { complexity, .. } => *complexity, - Operator::Input { .. } | Operator::Lut { .. } | Operator::UnsafeCast { .. } => { - LevelledComplexity::ZERO - } + Operator::Input { .. } + | Operator::Lut { .. } + | Operator::UnsafeCast { .. } + | Operator::ChangePartition { .. } => LevelledComplexity::ZERO, Operator::Round { .. } => { unreachable!("Round should have been either expanded or integrated to a lut") } @@ -385,6 +391,7 @@ pub fn analyze(dag: &Dag, noise_config: &NoiseBoundConfig) -> SoloKeyDag { assert_dag_correctness(dag); let dag = &expand_round(dag); assert_no_round(dag); + assert_no_change_partition(dag); let out_variances = out_variances(dag); let in_luts_variance = in_luts_variance(dag, &out_variances); let nb_luts = lut_count_from_dag(dag); @@ -552,7 +559,7 @@ impl SoloKeyDag { p_error = combine_errors(p_error, p_error_c); } - assert!(0.0 <= p_error && p_error <= 1.0); + assert!((0.0..=1.0).contains(&p_error)); p_error } @@ -702,14 +709,13 @@ pub mod tests { let cpx_dot = LevelledComplexity::ADDITION; let weights = Weights::vector([1, 2]); #[allow(clippy::imprecise_flops)] - let manp = (1.0 * 1.0 + 2.0 * 2_f64).sqrt(); - let dot = graph.add_levelled_op([input1, input1], cpx_dot, manp, Shape::number(), "dot"); + let dot = + graph.add_levelled_op([input1, input1], cpx_dot, [1., 2.], Shape::number(), "dot"); let analysis = analyze(&graph); let one_lut_cost = 100.0; let lwe_dim = 1024; let complexity_cost = analysis.complexity(lwe_dim, one_lut_cost); - assert!(analysis.out_variances[dot.0].origin() == VarianceOrigin::Input); assert_eq!(graph.out_precisions[dot.0], 3); let expected_square_norm2 = weights.square_norm2() as f64; let actual_square_norm2 = analysis.out_variances[dot.0].input_coeff; @@ -720,7 +726,6 @@ pub mod tests { let constraint = analysis.constraint(); assert!(constraint.pareto_in_lut.is_empty()); assert!(constraint.pareto_output.len() == 1); - assert_eq!(constraint.pareto_output[0].origin(), VarianceOrigin::Input); assert_f64_eq(constraint.pareto_output[0].input_coeff, 5.0); } @@ -763,10 +768,8 @@ pub mod tests { assert_f64_eq(expected_cost, complexity_cost); let constraint = analysis.constraint(); assert_eq!(constraint.pareto_output.len(), 1); - assert_eq!(constraint.pareto_output[0].origin(), VarianceOrigin::Lut); assert_f64_eq(constraint.pareto_output[0].lut_coeff, 1.0); assert_eq!(constraint.pareto_in_lut.len(), 1); - assert_eq!(constraint.pareto_in_lut[0].origin(), VarianceOrigin::Lut); assert_f64_eq( constraint.pareto_in_lut[0].lut_coeff, weights.square_norm2() as f64, @@ -796,7 +799,6 @@ pub mod tests { assert_eq!(constraint.pareto_output.len(), 1); assert_eq!(constraint.pareto_output[0], SymbolicVariance::LUT); assert_eq!(constraint.pareto_in_lut.len(), 1); - assert_eq!(constraint.pareto_in_lut[0].origin(), VarianceOrigin::Mixed); assert_eq!(constraint.pareto_in_lut[0], expected_mixed); } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/optimize.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/optimize.rs index 4d4ae204a..01bcb4e53 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/optimize.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/optimize.rs @@ -2,9 +2,8 @@ use concrete_cpu_noise_model::gaussian_noise::noise::modulus_switching::estimate use concrete_security_curves::gaussian::security::minimal_variance_lwe; use super::analyze; -use crate::dag::operator::{LevelledComplexity, Precision}; +use crate::dag::operator::LevelledComplexity; use crate::dag::unparametrized; -use crate::dag::unparametrized::Dag; use crate::noise_estimator::error; use crate::optimization::atomic_pattern::{ OptimizationDecompositionsConsts, OptimizationState, Solution, @@ -383,22 +382,21 @@ pub fn optimize( state } -pub fn add_v0_dag(dag: &mut Dag, sum_size: u64, precision: u64, noise_factor: f64) { +pub fn add_v0_dag(dag: &mut unparametrized::Dag, sum_size: u64, precision: u64, noise_factor: f64) { use crate::dag::operator::{FunctionTable, Shape}; - let same_scale_manp = 1.0; let manp = noise_factor; let out_shape = &Shape::number(); let complexity = LevelledComplexity::ADDITION * sum_size; let comment = "dot"; - let precision = precision as Precision; + let precision = precision as crate::dag::operator::Precision; let input1 = dag.add_input(precision, out_shape); - let dot1 = dag.add_levelled_op([input1], complexity, same_scale_manp, out_shape, comment); + let dot1 = dag.add_levelled_op([input1], complexity, [1.0], out_shape, comment); let lut1 = dag.add_lut(dot1, FunctionTable::UNKWOWN, precision); - let dot2 = dag.add_levelled_op([lut1], complexity, manp, out_shape, comment); + let dot2 = dag.add_levelled_op([lut1], complexity, [manp], out_shape, comment); let _lut2 = dag.add_lut(dot2, FunctionTable::UNKWOWN, precision); } -pub fn v0_dag(sum_size: u64, precision: u64, noise_factor: f64) -> Dag { +pub fn v0_dag(sum_size: u64, precision: u64, noise_factor: f64) -> unparametrized::Dag { let mut dag = unparametrized::Dag::new(); add_v0_dag(&mut dag, sum_size, precision, noise_factor); dag @@ -429,10 +427,9 @@ pub(crate) mod tests { use super::*; use crate::computing_cost::cpu::CpuComplexity; use crate::config; - use crate::dag::operator::{FunctionTable, Shape, Weights}; + use crate::dag::operator::{FunctionTable, Precision, Shape, Weights}; use crate::noise_estimator::p_error::repeat_p_error; use crate::optimization::config::SearchSpace; - use crate::optimization::dag::solo_key::symbolic_variance::VarianceOrigin; use crate::optimization::{atomic_pattern, decomposition}; use crate::utils::square; @@ -607,10 +604,8 @@ pub(crate) mod tests { let constraint = dag2.constraint(); assert_eq!(constraint.pareto_output.len(), 1); assert_eq!(constraint.pareto_in_lut.len(), 1); - assert_eq!(constraint.pareto_output[0].origin(), VarianceOrigin::Lut); assert_f64_eq(1.0, constraint.pareto_output[0].lut_coeff); assert!(constraint.pareto_in_lut.len() == 1); - assert_eq!(constraint.pareto_in_lut[0].origin(), VarianceOrigin::Lut); assert_f64_eq(square(weight) as f64, constraint.pareto_in_lut[0].lut_coeff); } diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/symbolic_variance.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/symbolic_variance.rs index e2fc192b2..b81a11d89 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/symbolic_variance.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/dag/solo_key/symbolic_variance.rs @@ -25,13 +25,6 @@ pub struct SymbolicVariance { // see pareto sorting and dominate_or_equal } -#[derive(Clone, Copy, Debug, PartialEq, Eq)] -pub enum VarianceOrigin { - Input, - Lut, - Mixed, -} - impl std::ops::Add for SymbolicVariance { type Output = Self; @@ -93,20 +86,6 @@ impl SymbolicVariance { lut_coeff: 1.0, }; - pub fn origin(&self) -> VarianceOrigin { - if self.lut_coeff == 0.0 { - VarianceOrigin::Input - } else if self.input_coeff == 0.0 { - VarianceOrigin::Lut - } else { - VarianceOrigin::Mixed - } - } - - pub fn manp_to_variance_factor(manp: f64) -> f64 { - manp * manp - } - pub fn dominate_or_equal(&self, other: &Self) -> bool { let extra_other_minimal_base_noise = 0.0_f64.max(other.input_coeff - self.input_coeff); other.lut_coeff + extra_other_minimal_base_noise <= self.lut_coeff diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/decomposition/cmux.rs b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/decomposition/cmux.rs index fc28b5f89..41a44e6ed 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/optimization/decomposition/cmux.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/optimization/decomposition/cmux.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; use std::sync::Arc; use super::common::VERSION; +use super::DecompCaches; #[derive(Clone, Copy, Debug, Serialize, Deserialize)] pub struct CmuxComplexityNoise { @@ -147,3 +148,32 @@ pub fn cache( }; PersistentCacheHashMap::new_no_read(&path, VERSION, function) } + +#[derive(Debug)] +pub enum MaxVarianceError { + PbsBaseLogNotFound, + PbsLevelNotFound, +} + +pub fn get_noise_br( + mut cache: DecompCaches, + log2_polynomial_size: u64, + glwe_dimension: u64, + lwe_dim: u64, + pbs_level: u64, + pbs_log2_base: Option, +) -> Result { + let cmux_quantities = cache.cmux.pareto_quantities(GlweParameters { + log2_polynomial_size, + glwe_dimension, + }); + for cmux_quantity in cmux_quantities { + if cmux_quantity.decomp.level == pbs_level { + if pbs_log2_base.is_some() && cmux_quantity.decomp.log2_base == pbs_log2_base.unwrap() { + return Err(MaxVarianceError::PbsBaseLogNotFound); + } + return Ok(cmux_quantity.noise_br(lwe_dim)); + } + } + Err(MaxVarianceError::PbsLevelNotFound) +} diff --git a/compilers/concrete-optimizer/concrete-optimizer/src/utils/viz.rs b/compilers/concrete-optimizer/concrete-optimizer/src/utils/viz.rs index 0ac2dc8e9..a54068ede 100644 --- a/compilers/concrete-optimizer/concrete-optimizer/src/utils/viz.rs +++ b/compilers/concrete-optimizer/concrete-optimizer/src/utils/viz.rs @@ -87,24 +87,28 @@ impl<'dag> Viz for crate::dag::unparametrized::DagOperator<'dag> { } else { "lightgreen" }; + let location = self.location; match self.operator { Operator::Input { out_precision, .. } => { - format!("{index} [label =\"{{%{index} = Input({input_string}) |{{out_precision:|{out_precision:?}}}}}\" fillcolor={color}];") + format!("{index} [label =\"{{%{index} = Input({input_string}) |{{out_precision:|{out_precision:?}}} | {{loc:|{location}}}}}\" fillcolor={color}];") } Operator::Lut { out_precision, .. } => { - format!("{index} [label = \"{{%{index} = Lut({input_string}) |{{out_precision:|{out_precision:?}}}}}\" fillcolor={color}];") + format!("{index} [label = \"{{%{index} = Lut({input_string}) |{{out_precision:|{out_precision:?}}}| {{loc:|{location}}}}}\" fillcolor={color}];") } Operator::Dot { .. } => { - format!("{index} [label = \"{{%{index} = Dot({input_string})}}\" fillcolor={color}];") + format!("{index} [label = \"{{%{index} = Dot({input_string})| {{loc:|{location}}}}}\" fillcolor={color}];") } - Operator::LevelledOp { manp, .. } => { - format!("{index} [label = \"{{%{index} = LevelledOp({input_string}) |{{manp:|{manp:?}}}}}\" fillcolor={color}];") + Operator::LevelledOp { weights, .. } => { + format!("{index} [label = \"{{%{index} = LevelledOp({input_string}) |{{weights:|{weights:?}}}| {{loc:|{location}}}}}\" fillcolor={color}];") } Operator::UnsafeCast { out_precision, .. } => format!( - "{index} [label = \"{{%{index} = UnsafeCast({input_string}) |{{out_precision:|{out_precision:?}}}}}\" fillcolor={color}];" + "{index} [label = \"{{%{index} = UnsafeCast({input_string}) |{{out_precision:|{out_precision:?}}}| {{loc:|{location}}}}}\" fillcolor={color}];" ), Operator::Round { out_precision, .. } => { - format!("{index} [label = \"{{%{index} = Round({input_string}) |{{out_precision:|{out_precision:?}}}}}\" fillcolor={color}];",) + format!("{index} [label = \"{{%{index} = Round({input_string}) |{{out_precision:|{out_precision:?}}}| {{loc:|{location}}}}}\" fillcolor={color}];",) + } + Operator::ChangePartition { .. } => { + format!("{index} [label = \"{{%{index} = ChangePartition({input_string})}}\" fillcolor={color}];",) } } } diff --git a/docker/Dockerfile.concrete-compiler-env b/docker/Dockerfile.concrete-compiler-env index 0f05601fd..467dcd77a 100644 --- a/docker/Dockerfile.concrete-compiler-env +++ b/docker/Dockerfile.concrete-compiler-env @@ -19,7 +19,7 @@ RUN ccache -F 0 # Install Rust RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH=/root/.cargo/bin:$PATH -RUN rustup install nightly-2024-01-31 +RUN rustup install nightly-2024-07-01 SHELL ["/bin/bash", "-c"] # Install boost ADD https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.gz /boost_1_71_0.tar.gz @@ -31,7 +31,6 @@ COPY --from=ghcr.io/zama-ai/hpx:latest /hpx /hpx ENV HPX_INSTALL_DIR=/hpx/build # Setup CUDA COPY --from=ghcr.io/zama-ai/cuda:11-8 /usr/local/cuda-11.8/ /usr/local/cuda-11.8/ -COPY --from=ghcr.io/zama-ai/cuda:11-8 /usr/lib64/libcuda.so* /usr/lib64/ ENV PATH "$PATH:/usr/local/cuda-11.8/bin" # Set the python path. Options: [cp37-cp37m, cp38-cp38, cp39-cp39, cp310-cp310] # Links and env would be available to use the appropriate python version @@ -45,7 +44,7 @@ RUN pip install numpy pybind11==2.8 PyYAML pytest wheel auditwheel COPY / /workdir WORKDIR /workdir/compilers/concrete-compiler/compiler RUN mkdir -p /build -RUN --mount=type=ssh make DATAFLOW_EXECUTION_ENABLED=ON BUILD_DIR=/build CCACHE=ON \ +RUN make DATAFLOW_EXECUTION_ENABLED=ON BUILD_DIR=/build CCACHE=ON \ Python3_EXECUTABLE=${PYTHON_EXEC} \ concretecompiler python-bindings ENV PYTHONPATH "$PYTHONPATH:/build/tools/concretelang/python_packages/concretelang_core" diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index b6aed9bad..512917194 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -7,15 +7,14 @@ * [What is Concrete?](get-started/readme.md) * [Installation](get-started/installing.md) * [Quick start](get-started/quick_start.md) -* [Compatibility](get-started/compatibility.md) +* [Quick overview](get-started/quick_overview.md) * [Terminology](get-started/terminology.md) -## Core features +## Operations -* [Overview](core-features/fhe_basics.md) -* [Table lookups (basics)](core-features/table_lookups.md) +* [Table Lookups basics](core-features/table_lookups.md) * [Non-linear operations](core-features/non_linear_operations.md) -* Advanced features +* Other operations * [Bit extraction](core-features/bit_extraction.md) * [Common tips](core-features/workarounds.md) * [Extensions](core-features/extensions.md) @@ -36,6 +35,7 @@ * [Simulation](execution-analysis/simulation.md) * [Debugging and artifact](execution-analysis/debug.md) +* [Performance](optimization/summary.md) * [GPU acceleration](execution-analysis/gpu_acceleration.md) * Other * [Statistics](compilation/statistics.md) @@ -47,6 +47,19 @@ * [Configure](guides/configure.md) * [Manage keys](guides/manage_keys.md) * [Deploy](guides/deploy.md) +* [Optimization](optimization/self.md) + * [Improve parallelism](optimization/improve-parallelism/self.md) + * [Dataflow parallelism](optimization/improve-parallelism/dataflow.md) + * [Tensorizing operations](optimization/improve-parallelism/tensorization.md) + * [Optimize table lookups](optimization/optimize-table-lookups/self.md) + * [Reducing TLU](optimization/optimize-table-lookups/reducing-amount.md) + * [Implementation strategies](optimization/optimize-table-lookups/strategies.md) + * [Round/truncating](optimization/optimize-table-lookups/round-truncate.md) + * [Approximate mode](optimization/optimize-table-lookups/approximate.md) + * [Bit extraction](optimization/optimize-table-lookups/bit-extraction.md) + * [Optimize cryptographic parameters](optimization/optimize-cryptographic-parameters/self.md) + * [Error probability](optimization/optimize-cryptographic-parameters/p-error.md) + * [Composition](optimization/optimize-cryptographic-parameters/composition.md) ## Tutorials @@ -57,12 +70,13 @@ ## References * [API](dev/api/README.md) +* [Supported operations](dev/compatibility.md) ## Explanations * [Compiler workflow](dev/compilation/compiler_workflow.md) -* Compiler internals - * [Table lookups](core-features/table_lookups_advanced.md) +* Advanced features + * [Table Lookups advanced](core-features/table_lookups_advanced.md) * [Rounding](core-features/rounding.md) * [Truncating](core-features/truncating.md) * [Floating points](core-features/floating_points.md) @@ -71,25 +85,26 @@ * [Bitwise operations](core-features/bitwise.md) * [Direct circuits](compilation/direct_circuits.md) * [Tagging](core-features/tagging.md) +* [Cryptography basics](core-features/fhe_basics.md) * [Security](explanations/security.md) * [Frontend fusing](explanations/fusing.md) ## Developers * [Contributing](dev/contributing.md) + * [Project layout](explanations/layout.md) + * [Compiler backend](explanations/backends/README.md) + * [Adding a new backend](explanations/backends/new_backend.md) + * [Optimizer](explanations/optimizer.md) + * [MLIR FHE dialects](explanations/dialects.md) + * [FHELinalg dialect](explanations/FHELinalgDialect.md) + * [FHE dialect](explanations/FHEDialect.md) + * [TFHE dialect](explanations/TFHEDialect.md) + * [Concrete dialect](explanations/ConcreteDialect.md) + * [Tracing dialect](explanations/TracingDialect.md) + * [Runtime dialect](explanations/RTDialect.md) + * [SDFG dialect](explanations/SDFGDialect.md) + * [Call FHE circuits from other languages](explanations/call_from_other_language.md) * [Release note](https://github.com/zama-ai/concrete/releases) * [Feature request](https://github.com/zama-ai/concrete/issues/new?assignees=\&labels=feature\&projects=\&template=features.md) * [Bug report](https://github.com/zama-ai/concrete/issues/new?assignees=\&labels=bug%2C+triage\&projects=\&template=bug_report.md) -* [Project layout](explanations/layout.md) -* [Compiler backend](explanations/backends/README.md) - * [Adding a new backend](explanations/backends/new_backend.md) -* [Optimizer](explanations/optimizer.md) -* [MLIR FHE dialects](explanations/dialects.md) - * [FHELinalg dialect](explanations/FHELinalgDialect.md) - * [FHE dialect](explanations/FHEDialect.md) - * [TFHE dialect](explanations/TFHEDialect.md) - * [Concrete dialect](explanations/ConcreteDialect.md) - * [Tracing dialect](explanations/TracingDialect.md) - * [Runtime dialect](explanations/RTDialect.md) - * [SDFG dialect](explanations/SDFGDialect.md) -* [Call FHE circuits from other languages](explanations/call_from_other_language.md) diff --git a/docs/_static/compilation/performance_tips/complexity_and_timing_per_bit_width.png b/docs/_static/compilation/performance_tips/complexity_and_timing_per_bit_width.png new file mode 100644 index 000000000..712c05b34 Binary files /dev/null and b/docs/_static/compilation/performance_tips/complexity_and_timing_per_bit_width.png differ diff --git a/docs/application-tutorial/sha256.ipynb b/docs/application-tutorial/sha256.ipynb deleted file mode 100644 index c0b84aaea..000000000 --- a/docs/application-tutorial/sha256.ipynb +++ /dev/null @@ -1,763 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "_FTzVxUkjQno" - }, - "source": [ - "# SHA-256 Implementation Using Concrete\n", - "\n", - "In this tutorial, we will explore the implementation of SHA-256, a widely used hashing algorithm, using concrete-python. Details about the algorithm can be found [here](https://en.wikipedia.org/wiki/SHA-2).\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "zXozpJvmcBH1", - "outputId": "79dfc00b-10cc-4ffd-d4b9-a10f18d8d01e" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", - "Requirement already satisfied: concrete-python in /usr/local/lib/python3.10/dist-packages (1.0.0)\n", - "Requirement already satisfied: numpy>=1.23 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (1.24.3)\n", - "Requirement already satisfied: scipy>=1.10 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (1.10.1)\n", - "Requirement already satisfied: torch>=1.13 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (2.0.0+cu118)\n", - "Requirement already satisfied: networkx>=2.6 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (3.1)\n", - "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (4.5.0)\n", - "Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (2.0.0)\n", - "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (1.11.1)\n", - "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (3.1.2)\n", - "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (3.12.0)\n", - "Requirement already satisfied: cmake in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch>=1.13->concrete-python) (3.25.2)\n", - "Requirement already satisfied: lit in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch>=1.13->concrete-python) (16.0.2)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.13->concrete-python) (2.1.2)\n", - "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.13->concrete-python) (1.3.0)\n" - ] - } - ], - "source": [ - "# Uncomment this line to install dependency\n", - "# ! pip install concrete-python\n", - "\n", - "# Required libraries\n", - "from concrete import fhe\n", - "import numpy as np" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "oCfjYazikbm_" - }, - "source": [ - "## Data Representation\n", - "As mentioned in the wiki page, all variables are $32$-bit unsigned integers. Additions should be calculated modulo $2^{32}$.\n", - "\n", - "While addition of 32-bit numbers are possible in the library, any other operations such modulizing, rotations, and bitwise operations are currently not possible. These operations require a lookup table with 32-bit inputs, but as of writing this tutorial, concrete-python supports up to 16-bit lookup tables. Higher precision lookup tables is still a research challenge in the homomorphic world and such a table would be dificult to compile and store at this moment.\n", - "\n", - "Thus, we need to break all the variables to **chunks** and work at the chunk level. Throughtout the code, *WIDTH* refers to the bitwidth of a chunk, and *NUM_CHUNKS* shows the number of chunks we need to represent a 32-bit data. These parameters are set at the begining of the code. We vary these parameters to see the impact of the *WIDTH* on the performance of the compiler and the circuit.\n", - "\n", - "![chunks.jpg](data:image/jpeg;base64,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25tTiVNsyIx2k9cYPYmi4+MHw+tfi1a/A6fUivjO80ltcisvIlKtp6zNAZfOCeSD5iMNpfdxnGMGgD02iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGbcnPHNfjZ4U+I3/DJdp+2d4FEv2IeFrtvFugLnaufEtuFgWLvsiuPIjOOhPrmv2Wr8rP2xf2QfiJ8Zv2m/hz428HWom8GavDaaV44/fQRJ/Zul6jFqEW+KR1eVpTlVMauVKLuwp5APGv2NfDA/Yj+LFz4C8XzSWuk+PfhvY+MLkykkQ6to6OdRgQt0KRySSN22hfQAeT+K/DOp2f/AASP8efErxHHs174qeIY/FV9u+8Xvtat0i5IyVaKJXH++T3r7m/4KP8A7N3xY+OnhDwjrXwJtvtPjHQrm/06VftENrnRtcs3tb8M9w6IQVCKVBztZtozXY/th/s9+KvFn7D99+z38F9KGr6np9podjp9p50Frvg0y5tsnzLh44lxFEW5cZxgZOAQDjPHAA/4KTfBb0/4QbVsf+ReazP+CoPwx8Kw/AC++P8AotvDovj74d32m6jpesW4EF0He9ggaNpFwXGHDKGzhlGMAnOh+0L4I/aL0D9qj4cfHv4O/DMfEWy8M+GbvSru2Os2OkbZrl3GPMumLHarbsqjA9MiuO8efCr9sr9tLUdH8D/HXwtpvwe+FFjfw32qafbapFquqaqtuwdLfzrYmJVyDzhNpIfDlVWgD3v9svWJvEX7BPj3xDdReTNqnhiK6dP7jTiJyvPoTivoX9n4H/hQ/wANz/1LWjf+kUVcT+1v8PPE3xH/AGYvH3w1+Humrfa1q+lG0sLNZIrdXcMm1A8rRxoMDjcwFen/AAe0PVPC3wl8E+GNdg+zalpGh6bZ3UW5X8ue3tY45F3oWVsMCMqSD1BI5oA/Hj9iL9pnxP8ACr4XeIvCmlfBnxp45t18U61P/aWhWKXFmTJMMx72dTvXHzDHevS/hh8VtW+L3/BS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X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/Sc18w+V+2h/z9fD//AMB9V/8AjtHlftof8/Xw/wD/AAH1X/47QB9Pc0tfMHlftof8/Xw//wDAfVf/AI7R5X7aH/P18P8A/wAB9V/+O0AfTuKdXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/SYr5h8r9tD/n6+H//AID6r/8AHaPK/bQ/5+vh/wD+A+q//HaAPp/NGa+X/J/bP/5+fh//AN+NV/8AjtHk/tn/APPz8P8A/vxqv/x2gD//1/38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBM+tRxzwygtC4kAJBKkHkdRTipzX88H7D/wAXPGX7M3iCTxZ44uDL8Fvil4q1TR5rkkiPQ9et5sQzSk/KsVzGQrtxwpY4EPzgH9DvnxeYId43kbgueceuKI54pgWhcSAHBKkEZH0r859fOf8Agql4aOeP+FWTf+nWfH9aZ/wS9wP2d9b7H/hL9e/9HLQB+jfnxeb5O8eZjdtzzjpn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)\n", - "\n", - "Figure 1: Shows a break down of 32 bit of data into 4 chunks of 8 bit. This is not the only way to chunk the input." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "yaz8cNzjQ1UW" - }, - "outputs": [], - "source": [ - "# Bitwidth of each chunk and number of chunks in each 32-bit number.\n", - "WIDTH, NUM_CHUNKS= 4, 8\n", - "\n", - "## Some other valid parameter sets\n", - "# WIDTH, NUM_CHUNKS= 8, 4\n", - "# WIDTH, NUM_CHUNKS= 2, 16\n", - "\n", - "assert (WIDTH * NUM_CHUNKS == 32)\n", - "\n", - "def break_down_data(data, data_size):\n", - " all_chunks = [\n", - " [ (x >> i*WIDTH)%(2**WIDTH) for i in range(data_size//WIDTH)[::-1] ]\n", - " for x in data\n", - " ]\n", - " return all_chunks\n", - "\n", - "def reshape_data(data):\n", - " return np.array(data).reshape(-1, NUM_CHUNKS)\n", - "\n", - "def chunks_to_uint32(chunks):\n", - " return int(sum([2**((NUM_CHUNKS-1-i)*WIDTH)*x for i, x in enumerate(chunks)]))\n", - "\n", - "def chunks_to_hexarray(chunks):\n", - " hexes = [hex(chunks_to_uint32(word))[2:] for word in chunks]\n", - " hexes = ['0'*(8-len(y))+y for y in hexes] #Appending leadning zero to the ones that are less than 8 characters TODO: write better\n", - " result = \"\".join(hexes)\n", - " return result\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "u7pA-B3As9u4" - }, - "source": [ - "### Creating Chunks\n", - "There are two list of constants in the algorithm, K and H. Before executing the algorithm, we need to break them to chunks using `split_to_chunks` function.\n", - "\n", - "\n", - "The input of the algorithm is arbitrary bytes. We might need to break each byte to smaller chunks based on the value of *WIDTH* after padding the data as per instructed by the algorithm. `break_down_data` function returns a numpy array of shape (48,NUM_CHUNKS)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "b8rlvVf42CIa" - }, - "source": [ - "## Operations\n", - "Now that the data is stores as chunks, we must modify all operations we need to work at the level of chunks. In this section we explain how we implemented the required operations. The main three category of operations that we need to implement SHA-256 are:\n", - "\n", - "* Bitwise operations (AND, OR, XOR, NEGATE)\n", - "* Shifts and Rotations\n", - "* Modular Addition " - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "zlM1RN-NnjDn" - }, - "source": [ - "### Bitwise Operations\n", - "Bitwise operations are easily implemented in concrete-numpy. A bitwise operation over a 32-bit number is equivalent to the same operation over the chunks." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "CxCwJOao2KCt" - }, - "source": [ - "### Rotation and Shifts\n", - "To understand how rotations work, consider a small example with 4 chunks of width 4, representing a 16-bit number, as shown in Figure 1. Most significant bits are located at index 0. So a 16-bit number will be `[[chunk_0], [chunk_1], [chunk_2], [chunk_3]]` with WIDTH=4. There are two possible scenario for rotations:\n", - "\n", - "1. Any rotation by a multiple of WIDTH (in this case, 4) will result in rotating the array of chunks. For example, right rotate(4) will be `[[chunk_3], [chunk_0], [chunk_1], [chunk_2]]`.\n", - "\n", - "2. For rotations less than WIDTH, for example `y`, we break every chunk into two parts of bitlength, `WIDTH-y` and `y`. We need to add the low `y`-bits of each chunk with the high `WIDTH-y` bits of the next chunk. Figure 2 illustrated this process. We leverage two lookup tables to extract the two segments of each chunk.\n", - "\n", - "\n", - "3. Rotations by other amounts are broken into the two steps described above.\n", - "\n", - "![Rotation.jpg](data:image/jpeg;base64,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ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//S/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOB+IXxQ+H3wo0m2174k+ILPw5p17dJZQXF5KIkkuZFd0iUnqzKjEDvg131fk3/AMFiRt/Zv8HSjjy/G+lt/wCSd8K/WSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9P9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/Jv/gsf8v7L3h6X/nl4w01v/JW8/wAa/WSvyd/4LJD/AIxN02QdY/FOnN/5L3Y/rX6wg5AI70ALRRTNxzigB9FNGfWnUAFFFFABRRRQAUUUUAFFFFABRTN2CRT6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9T9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/KX/gsam79kaBv7viTTj/5CuB/Wv1StH8y0hk/vIp/MV+W//BYZN37IBb+54h00/wDjsw/rX6faM/maRYyf3oIj+aigDSr8ef8Agr/8VPiZ8LPh98Pb74aeK9U8KXF/ql3HcS6XeTWbzIkClVcwspYA8gE8V+w1fh5/wW7/AOSa/DI+mr33/pOtAHkPxh+FP7en7NnwVh/aR0n9ozVPEunWcFjdXlnd3NzI0Ud88UcZSK7e4hmw8qhgwU4yQD0r9IPg9+3R4Ju/2OvDv7TPxzv4NBe586yu47dGY3GoW07wbLWEbmdpQnmbQSEBO4hVJH4lftm+Cv2tPhl4B+HVj8cviZe+L/h14phgeOKyZlgtzCkciwTRERpJKsTBot5IJVsEbSa9K/4KBeBfhv8AD/wl+y74Y8C3ct18Hmsbq4trkyb5Llbq4tri8uZWUKPNljlVuAMHIUKBgAH6h/Cf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oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9b9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApMClooA/lO/4Ksfs2f8ACmPj6/xF8PWvleFviOZb9Ai4jg1NCDexcdN7Msy9M72UDCGv0I/4I5/s4jwd8N9V/aG8R2u3VfGe6y0reuGi0q3k/eOM8j7ROnT+7EjDhq/RL9q/9mzwz+1R8I7v4YeIpzp832mC8sb5UDyWlxA3LoD13xF4yPRyeoFe7+FfDGheC/DOk+EPDNqtjpGiWsFlaQJ92KC3QJGo+igc96AOgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//X/fyiiigAopucUvX2oAWiiigAooooAKKKKACim5x1pMmgB9FJmjIouAtFJnNB+tK4C0UUmTTAWiiigAooooAKKKKACik/SgmgBaKbz60uc8UXAWikyKMii4BgUtN5paLgLRSUZoAWiiigAooooAKKKKACikJxRk0rgLRSZoyKdwFopMijIouAtFFNyaAHUUUUAFFFFABRRRQAUU3JoyTQA6im5OBS55oAWikzRkUXAWim5pc5FAWFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9/KKKKAPLfiN8QZ/AosvKsRd/bDJnc+wLs2+gPXdXmX/DQV730aP/AL/n/wCIq3+0H00Qe9x/7Tr5rFfpnDXD+Er4SNSrC7179/U/L+I+IMXQxcqdKei9D6J/4aDvf+gNH/3/AD/8RR/w0He/9AaP/v8An/4ivnaivf8A9VcB/wA+/wAWeF/rXj/+fn4I+if+Gg73/oDR/wDf8/8AxFH/AA0He/8AQGj/AO/5/wDiK+dqKP8AVXAf8+/xf+Yf614//n5+C/yPon/hoO9/6A0f/f8AP/xFH/DQd7/0Bo/+/wCf/iK+dqKP9VcB/wA+/wAWH+teP/5+fgj6Li+P968qodGQBmA/1xJwe4Gyu81v4nz6Rq9zpq2CyLA+zd5hGfw218fW/wDx8RD1Zf517d41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)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "575ogsJhFDIo" - }, - "source": [ - "### Shift\n", - "The shift operation is the same as rotation, but we prepend the encrypted scalar zero when we move the bits to the right." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "TRAFRZime-Jv" - }, - "outputs": [], - "source": [ - "def right_rotate_list_of_chunks(list_to_rotate, amount):\n", - " return np.concatenate((\n", - " list_to_rotate[-amount:],\n", - " list_to_rotate[:-amount]\n", - " ))\n", - " \n", - "def right_shift_list_of_chunks(list_to_rotate, amount):\n", - " return np.concatenate((\n", - " [0] * list_to_rotate[-amount:].shape[0] ,\n", - " list_to_rotate[:- amount]\n", - " ))\n", - " \n", - "def left_shift_list_of_chunks(list_to_rotate, amount):\n", - " return np.concatenate((\n", - " list_to_rotate[amount:] ,\n", - " [0] * list_to_rotate[:amount].shape[0]\n", - " ))\n", - "\n", - "def rotate_less_than_width(chunks, shift):\n", - " raised_low_bits = fhe.univariate(lambda x: (x % 2**shift) << (WIDTH-shift))(chunks)\n", - " shifted_raised_low_bits = right_rotate_list_of_chunks(raised_low_bits, 1)\n", - "\n", - " high_bits = chunks >> shift\n", - " return shifted_raised_low_bits + high_bits\n", - "\n", - "def right_rotate(chunks, rotate_amount):\n", - " x = rotate_amount // WIDTH\n", - " y = rotate_amount % WIDTH\n", - " if x != 0: \n", - " rotated_chunks = right_rotate_list_of_chunks(chunks, x)\n", - " else:\n", - " rotated_chunks = chunks\n", - " if y != 0:\n", - " rotated = rotate_less_than_width(rotated_chunks, y)\n", - " else:\n", - " rotated = rotated_chunks\n", - "\n", - " return rotated\n", - "\n", - "def right_shift(chunks, shift_amount):\n", - " x = shift_amount // WIDTH\n", - " y = shift_amount % WIDTH\n", - " if x != 0:\n", - " shifted_chunks = right_shift_list_of_chunks(chunks, x)\n", - " else:\n", - " shifted_chunks = chunks\n", - " if y != 0:\n", - " # shift within chunks\n", - " raised_low_bits = fhe.univariate(lambda x: (x % 2**y) << (WIDTH-y))(shifted_chunks)\n", - " shifted_raised_low_bits = right_shift_list_of_chunks(raised_low_bits, 1)\n", - " high_bits = shifted_chunks >> y\n", - " result = shifted_raised_low_bits + high_bits\n", - " else:\n", - " result = shifted_chunks\n", - " return result" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "SKg8mKFOPXSV" - }, - "source": [ - "### Modular 32-bit Addition\n", - "Modular 32-bit addition is frequently used in SHA256. While Concrete supports additions of 32-bit numbers, modulizing the result requires a lookup table which is too large for Concrete. Hence, the addition must be done over chunks.\n", - "\n", - "Below is the function to add two 32-bit numbers mod $2^{32}$." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "id": "EJEPvp2wQms9" - }, - "outputs": [], - "source": [ - "def add_two_32_bits(a,b):\n", - " added = np.sum([a,b], axis=0)\n", - "\n", - " for i in range(NUM_CHUNKS):\n", - " results = added % (2 ** WIDTH)\n", - " if i < NUM_CHUNKS-1:\n", - " carries = added >> WIDTH\n", - " added = left_shift_list_of_chunks(carries, 1) + results\n", - "\n", - " return results\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "id": "Uo6o_QMQn_fw" - }, - "outputs": [], - "source": [ - "# Testing the addition function, adding four 32-bit numbers\n", - "test_inputs = np.random.randint(0,2**32, size=(2,))\n", - "input_chunks = break_down_data(test_inputs, 32)\n", - "\n", - "assert(chunks_to_uint32(add_two_32_bits(input_chunks[0], input_chunks[1]))== np.sum(test_inputs) % (2**32))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "IOr8DTRJRYTl" - }, - "source": [ - "Adding two 4-bit numbers results in a 5-bit number. We then use two lookup tables:\n", - "\n", - "* `extract_carry` which extracts the carry of adding two chunks\n", - "* `extract_result` which extracts the 4-bit chunk which results from adding two chunks (without the carry)\n", - "\n", - "Each carry must now be added to the chunk next chunk and this process is repeated for as many chunks as there are. The figure below illustrates this process.\n", - "\n", - "![add-chunks.png](data:image/png;base64,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3QgggAACCCCAAAJeCRBAe8XGRggggAACCCCAAALBKkAAHaxHnnYjgAACCCCAAAIIeCVAAO0VGxshgAACCCCAAAIIBKsAAXSwHnnajQACCCCAAAIIIOCVAAG0V2xshAACCCCAAAIIIBCsAgTQwXrkaTcCCCCAAAIIIICAVwIE0F6xsRECCCCAAAIIIIBAsAoQQAfrkafdCCCAAAIIIIAAAl4JEEB7xcZGCCCAAAIIIIAAAsEqQAAdrEeediOAAAIIIIAAAgh4JUAA7RUbGyGAAAIIIIAAAggEqwABdLAeedqNAAIIIIAAAggg4JUAAbRXbGyEAAIIIIAAAgggEKwCBNDBeuRpNwIIIIAAAggggIBXAgTQXrGxEQIIIIAAAggggECwChBAB+uRp90IIIAAAggggAACXgkQQHvFxkYIIIAAAggggAACwSpAAB2sR552I4AAAggggAACCHglQADtFRsbIYAAAggggAACCASrAAF0sB552o0AAggggAACCCDglQABtFdsbIQAAggggAACCCAQrAIE0MF65Gk3AggggAACCCCAgFcCBNBesbERAggggAACCCCAQLAKEEAH65Gn3QgggAACCCCAAAJeCRBAe8XGRggggAACCCCAAALBKkAAHaxHnnYjgAACCCCAAAIIeCUQ7tVWbOR3Ais3nvC7OlGh7hSYP7VPdxZP2QgggAACCCDQpgABdJs0rEAgSASWvrg/SFpKMw2BO68Y3FUUExYu66qiKMcSAttX3Nol9cyZdnOXlEMhVhE4sOEJq1S1g/VkCEcHociGAAIIIIAAAggggIBdgACa8wABBBBAAAEEEEAAAQ8ECKA9wCIrAggggAACCCCAAAIE0JwDVhU4a2Ty2WNSw0JDXBugxKS4iMgITm9XG1IQQAABBBBAoLMCPETYWUG270KB5LiIySOSnQpc93FBTV2jU6LeJsZGRISHhob2anBZObx/XE5mbG5+1cf7S5RTMXZ4WGhtvUs+10JJCQ6By87NjIoIfWndsbr6JqcWh4eFpCVGllbUV9Y0OK3iLQISWPbTi+JjI2++77XK6jonEFtU+NABKUdPlhWWVDmt4i0C82af+d0bvvrSGxueWb7aVSOnf+/IyPA9+4+6riLFPwUIoP3zuARprdRnrJhYja/rXLDb0GiPipqaWmKjUdkJ2X1idhwoOZTHt1rAnlqZ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Nsr0TioBCUhAAhKQgAQkIIHSIqCALi1/aa0EJCABCUhAAhKQQCMTUEA3sgOcXgISkIAEJCABCUigtAiYA11a/mpYa4vtvbSGXa2jS0ACEpCABCQggZwIuAtHTtjsJAEJSEACEpCABCSQVAKmcCTV865bAhKQgAQkIAEJSCAnAgronLDZSQISkIAEJCABCUggqQQU0En1vOuWgAQkIAEJSEACEsiJgAI6J2x2koAEJCABCUhAAhJIKgEFdFI977olIAEJSEACEpCABHIioIDOCZudJCABCUhAAhKQgASSSkABnVTPu24JSEACEpCABCQggZwIKKBzwmYnCUhAAhKQgAQkIIGkElBAJ9XzrlsCEpCABCQgAQlIICcCCuicsNlJAhKQgAQkIAEJSCCpBBTQSfW865aABCQgAQlIQAISyImAAjonbHaSgAQkIAEJSEACEkgqAQV0Uj3vuiUgAQlIQAISkIAEciKggM4Jm50kIAEJSEACEpCABJJKQAGdVM+7bglIQAISkIAEJCCBnAgooHPCZicJSEACEpCABCQggaQSUEAn1fOuWwISkIAEJCABCUggJwIK6Jyw2UkCEpCABCQgAQlIIKkEFNBJ9bzrloAEJCABCUhAAhLIiYACOidsdpKABCQgAQlIQAISSCoBBXRSPe+6JSABCUhAAhKQgARyIqCAzgmbnSQgAQlIQAISkIAEkkpAAZ1Uz7tuCUhAAhKQgAQkIIGcCCigc8JmJwlIQAISkIAEJCCBpBJQQCfV865bAhKQgAQkIAEJSCAnAgronLDZSQISkIAEJCABCUggqQQU0En1vOuWgAQkIAEJSEACEsiJgAI6J2x2koAEJCABCUhAAhJIKgEFdFI977olIAEJSEACEpCABHIioIDOCZudJCABCSSJwPe+970BAwZUVFTwTTlJS3etEpCABNIQqNi0aVOaaqskIAEJSEACmwkMGjRo6tSpGzZsCDxatGjRr1+/iRMnikcCEpBAYgkYgU6s6124BCQggW0TGDFiRFw902HdunXUDB48eNudbSEBCUigTAkYgS5Tx7osCUhAAvkgQNpG2mH69u07c+bMtKeslIAEJFD2BIxAl72LXaAEJCCB3AkglNN2njVrVtp6KyUgAQkkgYACOgledo0SkIAEciTQpUuXpk2bpnSm5tJLL02p9FACEpBAcgiYwpEcX7tS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)\n", - "\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "4-dQk0wbtPOe" - }, - "source": [ - "The benefit of this addition algorithm is that it can be extended to the case where more two 32-bit numbers are added. The only difference is that the carry from the first iteration of the loop can be larger than 1. Specifically, by adding $k$ 4-bit numbers, the carry can be as big as $\\log_2 k$. For correctness, $\\log_2 k$ must be less than 4 or $k<16$.\n", - "\n", - "In our implementation of SHA-256, we only have two input and four input additions, so we only implement those.\n", - "\n", - "For four input addition, he first iteration of the loop, we use a different lookup table that extract a 2-bit carry and rest of the chunk. The rest of the algorithm does not change." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "id": "obO8wHRbXHfj" - }, - "outputs": [], - "source": [ - "def add_four_32_bits(a,b,c,d):\n", - " added = np.sum([a,b,c,d], axis=0)\n", - " \n", - " # First iteration of the loop is seperated\n", - " carries = added >> WIDTH\n", - " results = added % (2**WIDTH)\n", - " shifted_carries = left_shift_list_of_chunks(carries, 1)\n", - " added = shifted_carries + results\n", - "\n", - " for i in range(1,NUM_CHUNKS):\n", - " results = added % (2**WIDTH)\n", - " \n", - " # In the last iteration, carries need not be calculated\n", - " if i != NUM_CHUNKS-1: \n", - " carries = added >> WIDTH\n", - " shifted_carries = left_shift_list_of_chunks(carries, 1)\n", - " added = shifted_carries + results\n", - "\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "id": "zcwnDdPFdqE1" - }, - "outputs": [], - "source": [ - "# Testing the addition function, adding four 32-bit numbers\n", - "\n", - "for _ in range(1000):\n", - " test_inputs = np.random.randint(0,2**32, size=(4,))\n", - " input_chunks = break_down_data(test_inputs, 32)\n", - "\n", - " assert(chunks_to_uint32(add_four_32_bits(input_chunks[0], input_chunks[1], input_chunks[2], input_chunks[3]))== np.sum(test_inputs) % (2**32))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "1g6eEdhGoJl9" - }, - "source": [ - "## Operations for SHA-256\n", - "\n", - "Using the basic operations from the previous section, we can now implement all the necessary functions for SHA256" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "id": "uo7HfO1DpVFK" - }, - "outputs": [], - "source": [ - "# Used in the expansion\n", - "\n", - "def s0(w):\n", - " return right_rotate(w, 7) ^ right_rotate(w, 18) ^ right_shift(w, 3)\n", - "\n", - "def s1(w):\n", - " return right_rotate(w, 17) ^ right_rotate(w, 19) ^ right_shift(w, 10)\n", - "\n", - "# Used in main loop\n", - "\n", - "def S0(a_word):\n", - " return right_rotate(a_word, 2) ^ right_rotate(a_word, 13) ^ right_rotate(a_word, 22)\n", - "\n", - "def S1(e_word):\n", - " return right_rotate(e_word, 6) ^ right_rotate(e_word, 11) ^ right_rotate(e_word, 25)\n", - "\n", - "def Ch(e_word, f_word, g_word):\n", - " return (e_word & f_word) ^ ((2**WIDTH-1 - e_word) & g_word)\n", - "\n", - "def Maj(a_word, b_word, c_word):\n", - " return (a_word & b_word) ^ (a_word & c_word) ^ (b_word & c_word)\n", - "\n", - "def main_loop(args, w_i_plus_k_i):\n", - " a, b, c, d, e, f, g, h = args\n", - " temp1 = add_four_32_bits(h,S1(e),Ch(e, f, g), w_i_plus_k_i)\n", - " temp2 = add_two_32_bits(S0(a), Maj(a, b, c))\n", - " new_a = add_two_32_bits(temp1, temp2)\n", - " new_e = add_two_32_bits(d, temp1)\n", - " return np.array([new_a, a, b, c, new_e, e, f, g])" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "biM997KmvwUL" - }, - "source": [ - "We also need a function to pad the input as the first step of SHA256." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "fZ-3sEH5vopA" - }, - "source": [ - "Moreover, we need a function to parse the input given to the program. The input is given as bytes, but the chunks might be smaller. We extract smaller chunks from bytes using lookup tables." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "L4leg-z_skkU" - }, - "source": [ - "## Bringing it all together\n", - "Using all the components from the above, we can implement SHA256 as shown below." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "id": "tmSfvdpyrwUx" - }, - "outputs": [], - "source": [ - "K = [\n", - " 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n", - " 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n", - " 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n", - " 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n", - " 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n", - " 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n", - " 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n", - " 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n", - "]\n", - "H = [0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "id": "NHGCiC-Gk_tw" - }, - "outputs": [], - "source": [ - "k_in = reshape_data(break_down_data(K, 32))\n", - "h_in = reshape_data(break_down_data(H, 32))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "id": "yTiMkmBsHmKy" - }, - "outputs": [], - "source": [ - "def uint64_to_bin(uint64 : int):\n", - " return (\"\".join([str(uint64 >> i & 1) for i in range(63, -1, -1)]))\n", - "\n", - "def sha256_preprocess(text):\n", - " \"\"\"\n", - " Takes a message of arbitrary length and returns a message\n", - " of length that is a multiple of 512 bits, with the original message padded\n", - " with a 1 bit, followed by 0 bits, followed by the original message length\n", - " in bits\n", - " \"\"\"\n", - " data = text\n", - " # convert to uint4 and group into 32 bit words (8 uint4s)\n", - " # #log (\"data is:\", data, data.shape)\n", - " message_len = data.shape[0] * 8 # denoted as 'l' in spec\n", - " # find padding length 'k'\n", - " k = (((448 - 1 - message_len) % 512) + 512) % 512 \n", - " # #log (\"k is:\", k)\n", - " zero_pad_width_in_bits = k\n", - " padstring = \"1\" + \"0\" * zero_pad_width_in_bits + str(uint64_to_bin(message_len))\n", - " #log (\"padstring size:\", len(padstring))\n", - " #log (\"padstring is:\", padstring)\n", - "\n", - " total_size = len(padstring) + message_len\n", - " #log (\"total size:\", total_size)\n", - " assert total_size % 512 == 0\n", - "\n", - " pad = np.array([int(padstring[i:i+8], 2) for i in range(0, len(padstring), 8)], dtype=np.uint8)\n", - " padded = np.concatenate((data, pad))\n", - " words = break_down_data(padded, 8)\n", - " chunks = reshape_data(words)\n", - " return chunks" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "id": "3ox6Zs-ysoLr" - }, - "outputs": [], - "source": [ - "# Number of rounds must be 64 to have correct SHA256\n", - "# If looking to get a faster run, reduce the number of rounds (but it will not be correct)\n", - "\n", - "def sha256(data, number_of_rounds=64):\n", - " h_chunks = fhe.zeros((len(h_in), NUM_CHUNKS))\n", - " k_chunks = fhe.zeros((len(k_in), NUM_CHUNKS))\n", - " h_chunks += h_in\n", - " k_chunks += k_in\n", - "\n", - " num_of_iters = data.shape[0]*32//512\n", - " for chunk_iter in range(0, num_of_iters):\n", - " \n", - " # Initializing the variables\n", - " chunk = data[chunk_iter*16:(chunk_iter+1)*16]\n", - " w = [None for _ in range(number_of_rounds)]\n", - " # Starting the main loop and expansion\n", - " working_vars = h_chunks\n", - " for j in range(0, number_of_rounds):\n", - " if j<16:\n", - " w[j] = chunk[j]\n", - " else:\n", - " w[j] = add_four_32_bits(w[j-16], s0(w[j-15]), w[j-7], s1(w[j-2]))\n", - " w_i_k_i = add_two_32_bits(w[j], k_chunks[j])\n", - " working_vars = main_loop(working_vars,w_i_k_i)\n", - " \n", - " # Accumulating the results\n", - " for j in range(8):\n", - " h_chunks[j] = add_two_32_bits(h_chunks[j], working_vars[j])\n", - " return h_chunks" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "w89rhSOh4In2" - }, - "source": [ - "We can test the correctness of this function as below (this is not in encrypted form yet)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "006LZp7c0yBA", - "outputId": "31588127-23e9-4b49-e481-d14842e336e7" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " SHA256: a412c46b0be134c593b0ad520d4a4c4e1d8aecca799be0be2c4d233ccf455cb7\n", - "Our SHA256: a412c46b0be134c593b0ad520d4a4c4e1d8aecca799be0be2c4d233ccf455cb7\n", - "Match: True\n" - ] - } - ], - "source": [ - "import hashlib\n", - "text = (\n", - " b\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. \"\n", - " b\"Curabitur bibendum, urna eu bibendum egestas, neque augue eleifend odio, et sagittis viverra. and more than 150\"\n", - ")\n", - "\n", - "result = sha256(sha256_preprocess(np.frombuffer(text, dtype=np.uint8)))\n", - "\n", - "m = hashlib.sha256()\n", - "m.update(text)\n", - "\n", - "print(\" SHA256:\", m.hexdigest())\n", - "print(\"Our SHA256:\", chunks_to_hexarray(result))\n", - "print(\"Match:\", chunks_to_hexarray(result)==m.hexdigest())" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "id": "1uHN9GXgla_z" - }, - "outputs": [], - "source": [ - "class HomomorphicSHA:\n", - " circuit: fhe.Circuit\n", - " def __init__(self, input_size_in_bytes=150, number_of_rounds=64) -> None:\n", - " self.input_size_in_bytes=input_size_in_bytes\n", - " assert 0 <= number_of_rounds <= 64, \"Number of rounds must be betweem zero and 64\"\n", - " self.number_of_rounds=number_of_rounds\n", - " inputset=[\n", - " sha256_preprocess(np.random.randint(0, 2**8, size=(input_size_in_bytes,)))\n", - " for _ in range(100)\n", - " ]\n", - " # Compilation of the circuit should take a few minutes\n", - " compiler = fhe.Compiler(lambda data: sha256(data, self.number_of_rounds), {\"data\": \"encrypted\"})\n", - " self.circuit = compiler.compile(\n", - " inputset=inputset,\n", - " configuration=fhe.Configuration(\n", - " enable_unsafe_features=True,\n", - " use_insecure_key_cache=True,\n", - " insecure_key_cache_location=\".keys\",\n", - " dataflow_parallelize=True,\n", - " ),\n", - " verbose=False,\n", - " )\n", - " \n", - " def getSHA(self, data):\n", - " assert len(data) == self.input_size_in_bytes, f\"Input size is not correct, should be {self.input_size_in_bytes} bytes/characters\"\n", - " return self.circuit.encrypt_run_decrypt(sha256_preprocess(data))\n", - "\n", - " def getPlainSHA(self, data):\n", - " return sha256(sha256_preprocess(data), self.number_of_rounds)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "SpxY6dScee-k" - }, - "source": [ - "Now we are ready to compile the circuit! Note that **the compilation will take a long time**, so if you are looking to get a test run, you can set the number of rounds to something smaller than 64." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "id": "P0cMOZUGee-k" - }, - "outputs": [], - "source": [ - "# Warning: This will compile the circuit and will take a few minutes\n", - "\n", - "input_size_in_bytes = 150\n", - "running_small_example=True\n", - "\n", - "if running_small_example:\n", - " number_of_rounds = 2\n", - " sha = HomomorphicSHA(input_size_in_bytes, number_of_rounds)\n", - "else:\n", - " sha = HomomorphicSHA(input_size_in_bytes)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "zz1rd7VWee-k" - }, - "source": [ - "And after compilation, we are ready to run the circuit. Remember that the input size has to match what you gave in the previous cell. Our function will check this first to make sure the input is of the correct size. " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "EkF0UxTcv_cQ", - "outputId": "c4e2c710-02bc-40e2-a921-4a29ac88380b" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This cell is disabled. It can takes hours. If you want to run this cell, set accept_a_very_long_run=True\n" - ] - } - ], - "source": [ - "# WARNING: This takes a LONG time\n", - "accept_a_very_long_run = False\n", - "if not accept_a_very_long_run:\n", - " print(\"This cell is disabled. It can takes hours. If you want to run this cell, set accept_a_very_long_run=True\")\n", - "else:\n", - " text = (\n", - " b\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. \"\n", - " b\"Curabitur bibendum, urna eu bibendum egestas, neque augue eleifend odio, et sagittis viverra.\"\n", - " )\n", - " input_bytes = np.frombuffer(text, dtype=np.uint8)\n", - " encrypted_evaluation = sha.getSHA(input_bytes)\n", - "\n", - " print(\"Encrypted Evaluation: \", chunks_to_hexarray(encrypted_evaluation))\n", - " print(\" Plain Evaluation: \", chunks_to_hexarray(sha.getPlainSHA(input_bytes)))" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3.10.7 64-bit", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.7" - }, - "vscode": { - "interpreter": { - "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" - } - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/docs/compilation/composing_functions_with_modules.md b/docs/compilation/composing_functions_with_modules.md index 27f28345e..fa766b2cb 100644 --- a/docs/compilation/composing_functions_with_modules.md +++ b/docs/compilation/composing_functions_with_modules.md @@ -49,6 +49,12 @@ x_dec = CounterFhe.inc.decrypt(x_enc) assert x_dec == 15 ``` +The keyset can be generated beforehand by calling `keygen()` method on the compiled module: + +```python +CounterFhe.keygen() +``` + ## Multi inputs / outputs Composition is not limited to single input / single output. Here is an example that computes the 10 first elements of the Fibonacci sequence in FHE: diff --git a/docs/core-features/extensions.md b/docs/core-features/extensions.md index a58624e56..7a2ab8fc7 100644 --- a/docs/core-features/extensions.md +++ b/docs/core-features/extensions.md @@ -548,6 +548,18 @@ Identity extension can be used to clone an input while changing its bit-width. I Identity extension only works in `Native` encoding, which is usually selected when all table lookups in the circuit are below or equal to 8 bits. {% endhint %} +## fhe.refresh(value) + +It is similar to `fhe.identity` but with the extra guarantee that encryption noise is refreshed. + +{% hint style="info" %} +Refresh is useful when you want to control precisely where encryption noise is refreshed in your circuit. For instance if your are using modules, sometimes compilation rejects the module because it's *not composable*. This happens because a function of the module never refresh the encryption noise. Adding a `return fhe.refresh(result)` on the function result solves the issue. +{% endhint %} + +{% hint style="warning" %} +Refresh extension only works in `Native` encoding, which is usually selected when all table lookups in the circuit are below or equal to 8 bits. +{% endhint %} + ## fhe.inputset(...) Used for creating a random inputset with the given specifications: diff --git a/docs/core-features/fhe_basics.md b/docs/core-features/fhe_basics.md index a940006b3..3f20a5d0e 100644 --- a/docs/core-features/fhe_basics.md +++ b/docs/core-features/fhe_basics.md @@ -1,4 +1,6 @@ -# Overview +# Cryptography basics + +In this section, we remind a bit about what Fully Homomorphic Encryption (FHE) is. Much more complete resources are available on [this webpage](https://github.com/zama-ai/awesome-zama) or [fhe.org](https://fhe.org/resources/). ## Operations on encrypted values @@ -77,30 +79,3 @@ The only thing you should keep in mind is that it adds a constraint on the input Second takeaway is that PBS are the most costly operations in FHE, the less PBS in your circuit the faster it will run. It is an interesting metrics to optimize (you will see that Concrete could give you the number of PBS used in your circuit). Note also that PBS cost varies with the input variable precision (a circuit with 8 bit PBS will run faster than one with 16 bits PBS). - -## Development Workflow - -Allowing computation on encrypted data is particularly interesting in the client/server model, especially when the client data are sensitive and the server not trusted. You could split the workflow in two main steps: development and deployment. - -### Development - -During development, you will turn your program into its FHE equivalent. Concrete automates this task with the compilation process but you can make this process even easier by reducing the precision required, reducing the number of PBSs or allowing more parallelization in your code (e.g. working on bit chunks instead of high bit-width variables). - -Once happy with the code, the development process is over and you will create the compiler artifact that will be used during deployment. - -### Deployment - -A typical Concrete deployment will host on a server the compilation artifact: Client specifications required by the compiled circuits and the fhe executable itself. Client will ask for the circuit requirements, generate keys accordingly, then it will send an encrypted payload and receive an encrypted result. - -```mermaid -sequenceDiagram - Client->>Server: Client specifications? - Server-->>Client: Client specifications - Client->>Client: Private + Evaluation Keys Generation - Client->>Server: Encrypted(data) + Evaluation Key - Server->>Server: Compiled library execution - Server-->>Client: Encrypted(result) - Client->>Client: Decrypt(result) -``` - -For more information on deployment, see [Howto - Deploy](../guides/deploy.md) diff --git a/docs/core-features/non_linear_operations.md b/docs/core-features/non_linear_operations.md index c065abc39..65ddebf71 100644 --- a/docs/core-features/non_linear_operations.md +++ b/docs/core-features/non_linear_operations.md @@ -7,7 +7,7 @@ In Concrete, there are basically two types of operations: TLU are essential to be able to compile all functions, by keeping the semantic of user's program, but they can be slower, depending on the bitwidth of the inputs of the TLU. -In this document, we explain briefly, from a user point of view, how it works for non-linear operations as comparisons, min/max, bitwise operations, shifts. In [the poweruser documentation](table_lookups_advanced.md), we enter a bit more into the details. +In this document, we explain briefly, from a user point of view, how it works for non-linear operations as comparisons, min/max, bitwise operations, shifts. In [the TLU advanced documentation](table_lookups_advanced.md), we enter a bit more into the details. ## Changing bit width in the MLIR or dynamically with a TLU diff --git a/docs/core-features/table_lookups.md b/docs/core-features/table_lookups.md index 1b81e9271..88a7a9ed0 100644 --- a/docs/core-features/table_lookups.md +++ b/docs/core-features/table_lookups.md @@ -140,7 +140,7 @@ As we said in the beginning of this document, bitsize of the inputs of TLU are c For lot of use-cases, like for example in Machine Learning, it is possible to replace the table lookup `y = T[i]` by some `y = T'[i']`, where `i'` only has the most significant bits of `i` and `T'` is a much shorter table, and still maintain a good accuracy of the function. The interest of such a method stands in the fact that, since the table `T'` is much smaller, the corresponding TLU will be done much more quickly. -There are different flavors of doing this in Concrete. We describe them quickly here, and refer the user to the [poweruser documentation](table_lookups_advanced.md) for more explanations. +There are different flavors of doing this in Concrete. We describe them quickly here, and refer the user to the [TLU advanced documentation](table_lookups_advanced.md) for more explanations. The first possibility is to set `i'` as the truncation of `i`: here, we just take the most significant bits of `i`. This is done with `fhe.truncate_bit_pattern`. diff --git a/docs/core-features/workarounds.md b/docs/core-features/workarounds.md index 2bd8c7532..31cad722a 100644 --- a/docs/core-features/workarounds.md +++ b/docs/core-features/workarounds.md @@ -6,51 +6,9 @@ As explained in the [Basics of FHE](fhe\_basics.md), the challenge for developer All code snippets provided here are temporary workarounds. In future versions of Concrete, some functions described here could be directly available in a more generic and efficient form. These code snippets are coming from support answers in our [community forum](https://community.zama.ai) {% endhint %} -## Minimum for Two values +## Minimum/Maximum for several values -In this first example, we compute a minimum by creating the difference between two numbers `y` and `x` and conditionally remove this diff from `y` to either get `x` if `y>x` or `y` if `x>y`: - -```python -import numpy as np -from concrete import fhe - -@fhe.compiler({"x": "encrypted", "y": "encrypted"}) -def min_two(x, y): - diff = y - x - min_x_y = y - np.maximum(y - x, 0) - return min_x_y - -inputset = [tuple(np.random.randint(0, 16, size=2)) for _ in range(50)] -circuit = min_two.compile(inputset) - -x, y = np.random.randint(0, 16, size=2) -assert circuit.encrypt_run_decrypt(x, y) == min(x, y) -``` - -## Maximum for Two values - -The companion example of above with the maximum value of two integers instead of the minimum: - -```python -import numpy as np -from concrete import fhe - -@fhe.compiler({"x": "encrypted", "y": "encrypted"}) -def max_two(x, y): - diff = y - x - max_x_y = y - np.minimum(y - x, 0) - return max_x_y - -inputset = [tuple(np.random.randint(0, 16, size=2)) for _ in range(50)] -circuit = max_two.compile(inputset) - -x, y = np.random.randint(0, 16, size=2) -assert circuit.encrypt_run_decrypt(x, y) == max(x, y) -``` - -## Minimum for several values - -And an extension for more than two values: +Concrete supports `np.minimum`/`np.maximum` natively, but not `np.min`/`np.max` yet. To work around it, you can do a series of `np.minimum`/`np.maximum`s: ```python import numpy as np @@ -62,12 +20,11 @@ def fhe_min(args): while len(remaining) > 1: a = remaining.pop() b = remaining.pop() - min_a_b = b - np.maximum(b - a, 0) - remaining.insert(0, min_a_b) + remaining.insert(0, np.minimum(a, b)) return remaining[0] inputset = [np.random.randint(0, 16, size=5) for _ in range(50)] -circuit = fhe_min.compile(inputset) +circuit = fhe_min.compile(inputset, min_max_strategy_preference=fhe.MinMaxStrategy.ONE_TLU_PROMOTED) x1, x2, x3, x4, x5 = np.random.randint(0, 16, size=5) assert circuit.encrypt_run_decrypt([x1, x2, x3, x4, x5]) == min(x1, x2, x3, x4, x5) diff --git a/docs/dev/api/README.md b/docs/dev/api/README.md index 94f3f6587..eb9bcfe74 100644 --- a/docs/dev/api/README.md +++ b/docs/dev/api/README.md @@ -4,37 +4,13 @@ ## Modules -- [`concrete.compiler`](./concrete.compiler.md): Compiler submodule. -- [`concrete.compiler.client_parameters`](./concrete.compiler.client_parameters.md): Client parameters. -- [`concrete.compiler.client_support`](./concrete.compiler.client_support.md): Client support. -- [`concrete.compiler.compilation_context`](./concrete.compiler.compilation_context.md): CompilationContext. -- [`concrete.compiler.compilation_feedback`](./concrete.compiler.compilation_feedback.md): Compilation feedback. -- [`concrete.compiler.compilation_options`](./concrete.compiler.compilation_options.md): CompilationOptions. -- [`concrete.compiler.evaluation_keys`](./concrete.compiler.evaluation_keys.md): EvaluationKeys. -- [`concrete.compiler.key_set`](./concrete.compiler.key_set.md): KeySet. -- [`concrete.compiler.key_set_cache`](./concrete.compiler.key_set_cache.md): KeySetCache. -- [`concrete.compiler.lambda_argument`](./concrete.compiler.lambda_argument.md): LambdaArgument. -- [`concrete.compiler.library_compilation_result`](./concrete.compiler.library_compilation_result.md): LibraryCompilationResult. -- [`concrete.compiler.library_lambda`](./concrete.compiler.library_lambda.md): LibraryLambda. -- [`concrete.compiler.library_support`](./concrete.compiler.library_support.md): LibrarySupport. -- [`concrete.compiler.parameter`](./concrete.compiler.parameter.md): Parameter. -- [`concrete.compiler.public_arguments`](./concrete.compiler.public_arguments.md): PublicArguments. -- [`concrete.compiler.public_result`](./concrete.compiler.public_result.md): PublicResult. -- [`concrete.compiler.server_circuit`](./concrete.compiler.server_circuit.md): ServerCircuit. -- [`concrete.compiler.server_program`](./concrete.compiler.server_program.md): ServerProgram. -- [`concrete.compiler.simulated_value_decrypter`](./concrete.compiler.simulated_value_decrypter.md): SimulatedValueDecrypter. -- [`concrete.compiler.simulated_value_exporter`](./concrete.compiler.simulated_value_exporter.md): SimulatedValueExporter. -- [`concrete.compiler.utils`](./concrete.compiler.utils.md): Common utils for the compiler submodule. -- [`concrete.compiler.value`](./concrete.compiler.value.md): Value. -- [`concrete.compiler.value_decrypter`](./concrete.compiler.value_decrypter.md): ValueDecrypter. -- [`concrete.compiler.value_exporter`](./concrete.compiler.value_exporter.md): ValueExporter. -- [`concrete.compiler.wrapper`](./concrete.compiler.wrapper.md): Wrapper for native Cpp objects. - [`concrete.fhe`](./concrete.fhe.md): Concrete. - [`concrete.fhe.compilation`](./concrete.fhe.compilation.md): Glue the compilation process together. - [`concrete.fhe.compilation.artifacts`](./concrete.fhe.compilation.artifacts.md): Declaration of `DebugArtifacts` class. - [`concrete.fhe.compilation.circuit`](./concrete.fhe.compilation.circuit.md): Declaration of `Circuit` class. - [`concrete.fhe.compilation.client`](./concrete.fhe.compilation.client.md): Declaration of `Client` class. - [`concrete.fhe.compilation.compiler`](./concrete.fhe.compilation.compiler.md): Declaration of `Compiler` class. +- [`concrete.fhe.compilation.composition`](./concrete.fhe.compilation.composition.md): Declaration of classes related to composition. - [`concrete.fhe.compilation.configuration`](./concrete.fhe.compilation.configuration.md): Declaration of `Configuration` class. - [`concrete.fhe.compilation.decorators`](./concrete.fhe.compilation.decorators.md): Declaration of `circuit` and `compiler` decorators. - [`concrete.fhe.compilation.keys`](./concrete.fhe.compilation.keys.md): Declaration of `Keys` class. @@ -73,6 +49,7 @@ - [`concrete.fhe.mlir.converter`](./concrete.fhe.mlir.converter.md): Declaration of `Converter` class. - [`concrete.fhe.mlir.processors`](./concrete.fhe.mlir.processors.md): All graph processors. - [`concrete.fhe.mlir.processors.assign_bit_widths`](./concrete.fhe.mlir.processors.assign_bit_widths.md): Declaration of `AssignBitWidths` graph processor. +- [`concrete.fhe.mlir.processors.assign_node_ids`](./concrete.fhe.mlir.processors.assign_node_ids.md): Declaration of `AssignNodeIds` graph processor. - [`concrete.fhe.mlir.processors.check_integer_only`](./concrete.fhe.mlir.processors.check_integer_only.md): Declaration of `CheckIntegerOnly` graph processor. - [`concrete.fhe.mlir.processors.process_rounding`](./concrete.fhe.mlir.processors.process_rounding.md): Declaration of `ProcessRounding` graph processor. - [`concrete.fhe.mlir.utils`](./concrete.fhe.mlir.utils.md): Declaration of various functions and constants related to MLIR conversion. @@ -82,6 +59,10 @@ - [`concrete.fhe.representation.node`](./concrete.fhe.representation.node.md): Declaration of `Node` class. - [`concrete.fhe.representation.operation`](./concrete.fhe.representation.operation.md): Declaration of `Operation` enum. - [`concrete.fhe.representation.utils`](./concrete.fhe.representation.utils.md): Declaration of various functions and constants related to representation of computation. +- [`concrete.fhe.tfhers`](./concrete.fhe.tfhers.md): tfhers module to represent, and compute on tfhers integer values. +- [`concrete.fhe.tfhers.dtypes`](./concrete.fhe.tfhers.dtypes.md): Declaration of `TFHERSIntegerType` class. +- [`concrete.fhe.tfhers.tracing`](./concrete.fhe.tfhers.tracing.md): Tracing of tfhers operations. +- [`concrete.fhe.tfhers.values`](./concrete.fhe.tfhers.values.md): Declaration of `TFHERSInteger` which wraps values as being of tfhers types. - [`concrete.fhe.tracing`](./concrete.fhe.tracing.md): Provide `function` to `computation graph` functionality. - [`concrete.fhe.tracing.tracer`](./concrete.fhe.tracing.tracer.md): Declaration of `Tracer` class. - [`concrete.fhe.tracing.typing`](./concrete.fhe.tracing.typing.md): Declaration of type annotation. @@ -89,7 +70,32 @@ - [`concrete.fhe.values.scalar`](./concrete.fhe.values.scalar.md): Declaration of `ClearScalar` and `EncryptedScalar` wrappers. - [`concrete.fhe.values.tensor`](./concrete.fhe.values.tensor.md): Declaration of `ClearTensor` and `EncryptedTensor` wrappers. - [`concrete.fhe.values.value_description`](./concrete.fhe.values.value_description.md): Declaration of `ValueDescription` class. -- [`concrete.fhe.version`](./concrete.fhe.version.md) +- [`concrete.fhe.version`](./concrete.fhe.version.md): Version of the project, which is updated automatically by the CI right before releasing. +- [`concrete.compiler`](./concrete.compiler.md): Compiler submodule. +- [`concrete.compiler.client_parameters`](./concrete.compiler.client_parameters.md): Client parameters. +- [`concrete.compiler.client_support`](./concrete.compiler.client_support.md): Client support. +- [`concrete.compiler.compilation_context`](./concrete.compiler.compilation_context.md): CompilationContext. +- [`concrete.compiler.compilation_feedback`](./concrete.compiler.compilation_feedback.md): Compilation feedback. +- [`concrete.compiler.compilation_options`](./concrete.compiler.compilation_options.md): CompilationOptions. +- [`concrete.compiler.evaluation_keys`](./concrete.compiler.evaluation_keys.md): EvaluationKeys. +- [`concrete.compiler.key_set`](./concrete.compiler.key_set.md): KeySet. +- [`concrete.compiler.key_set_cache`](./concrete.compiler.key_set_cache.md): KeySetCache. +- [`concrete.compiler.lambda_argument`](./concrete.compiler.lambda_argument.md): LambdaArgument. +- [`concrete.compiler.library_compilation_result`](./concrete.compiler.library_compilation_result.md): LibraryCompilationResult. +- [`concrete.compiler.library_lambda`](./concrete.compiler.library_lambda.md): LibraryLambda. +- [`concrete.compiler.library_support`](./concrete.compiler.library_support.md): LibrarySupport. +- [`concrete.compiler.parameter`](./concrete.compiler.parameter.md): Parameter. +- [`concrete.compiler.public_arguments`](./concrete.compiler.public_arguments.md): PublicArguments. +- [`concrete.compiler.public_result`](./concrete.compiler.public_result.md): PublicResult. +- [`concrete.compiler.server_circuit`](./concrete.compiler.server_circuit.md): ServerCircuit. +- [`concrete.compiler.server_program`](./concrete.compiler.server_program.md): ServerProgram. +- [`concrete.compiler.simulated_value_decrypter`](./concrete.compiler.simulated_value_decrypter.md): SimulatedValueDecrypter. +- [`concrete.compiler.simulated_value_exporter`](./concrete.compiler.simulated_value_exporter.md): SimulatedValueExporter. +- [`concrete.compiler.utils`](./concrete.compiler.utils.md): Common utils for the compiler submodule. +- [`concrete.compiler.value`](./concrete.compiler.value.md): Value. +- [`concrete.compiler.value_decrypter`](./concrete.compiler.value_decrypter.md): ValueDecrypter. +- [`concrete.compiler.value_exporter`](./concrete.compiler.value_exporter.md): ValueExporter. +- [`concrete.compiler.wrapper`](./concrete.compiler.wrapper.md): Wrapper for native Cpp objects. - [`concrete.lang`](./concrete.lang.md): Concretelang python module - [`concrete.lang.dialects`](./concrete.lang.dialects.md) - [`concrete.lang.dialects.fhe`](./concrete.lang.dialects.fhe.md): FHE dialect module @@ -98,30 +104,6 @@ ## Classes -- [`client_parameters.ClientParameters`](./concrete.compiler.client_parameters.md): ClientParameters are public parameters used for key generation. -- [`client_support.ClientSupport`](./concrete.compiler.client_support.md): Client interface for doing key generation and encryption. -- [`compilation_context.CompilationContext`](./concrete.compiler.compilation_context.md): Support class for compilation context. -- [`compilation_feedback.CircuitCompilationFeedback`](./concrete.compiler.compilation_feedback.md): CircuitCompilationFeedback is a set of hint computed by the compiler engine for a circuit. -- [`compilation_feedback.ProgramCompilationFeedback`](./concrete.compiler.compilation_feedback.md): CompilationFeedback is a set of hint computed by the compiler engine. -- [`compilation_options.CompilationOptions`](./concrete.compiler.compilation_options.md): CompilationOptions holds different flags and options of the compilation process. -- [`evaluation_keys.EvaluationKeys`](./concrete.compiler.evaluation_keys.md): EvaluationKeys required for execution. -- [`key_set.KeySet`](./concrete.compiler.key_set.md): KeySet stores the different keys required for an encrypted computation. -- [`key_set_cache.KeySetCache`](./concrete.compiler.key_set_cache.md): KeySetCache is a cache for KeySet to avoid generating similar keys multiple times. -- [`lambda_argument.LambdaArgument`](./concrete.compiler.lambda_argument.md): LambdaArgument holds scalar or tensor values. -- [`library_compilation_result.LibraryCompilationResult`](./concrete.compiler.library_compilation_result.md): LibraryCompilationResult holds the result of the library compilation. -- [`library_lambda.LibraryLambda`](./concrete.compiler.library_lambda.md): LibraryLambda reference a compiled library and can be ran using LibrarySupport. -- [`library_support.LibrarySupport`](./concrete.compiler.library_support.md): Support class for library compilation and execution. -- [`parameter.Parameter`](./concrete.compiler.parameter.md): An FHE parameter. -- [`public_arguments.PublicArguments`](./concrete.compiler.public_arguments.md): PublicArguments holds encrypted and plain arguments, as well as public materials. -- [`public_result.PublicResult`](./concrete.compiler.public_result.md): PublicResult holds the result of an encrypted execution and can be decrypted using ClientSupport. -- [`server_circuit.ServerCircuit`](./concrete.compiler.server_circuit.md): ServerCircuit references a circuit that can be called for execution and simulation. -- [`server_program.ServerProgram`](./concrete.compiler.server_program.md): ServerProgram references compiled circuit objects. -- [`simulated_value_decrypter.SimulatedValueDecrypter`](./concrete.compiler.simulated_value_decrypter.md): A helper class to decrypt `Value`s. -- [`simulated_value_exporter.SimulatedValueExporter`](./concrete.compiler.simulated_value_exporter.md): A helper class to create `Value`s. -- [`value.Value`](./concrete.compiler.value.md): An encrypted/clear value which can be scalar/tensor. -- [`value_decrypter.ValueDecrypter`](./concrete.compiler.value_decrypter.md): A helper class to decrypt `Value`s. -- [`value_exporter.ValueExporter`](./concrete.compiler.value_exporter.md): A helper class to create `Value`s. -- [`wrapper.WrapperCpp`](./concrete.compiler.wrapper.md): Wrapper base class for native Cpp objects. - [`artifacts.DebugArtifacts`](./concrete.fhe.compilation.artifacts.md): DebugArtifacts class, to export information about the compilation process for single function. - [`artifacts.FunctionDebugArtifacts`](./concrete.fhe.compilation.artifacts.md): An object containing debug artifacts for a certain function in an fhe module. - [`artifacts.ModuleDebugArtifacts`](./concrete.fhe.compilation.artifacts.md): An object containing debug artifacts for an fhe module. @@ -129,6 +111,9 @@ - [`client.Client`](./concrete.fhe.compilation.client.md): Client class, which can be used to manage keys, encrypt arguments and decrypt results. - [`compiler.Compiler`](./concrete.fhe.compilation.compiler.md): Compiler class, to glue the compilation pipeline. - [`compiler.EncryptionStatus`](./concrete.fhe.compilation.compiler.md): EncryptionStatus enum, to represent encryption status of parameters. +- [`composition.CompositionClause`](./concrete.fhe.compilation.composition.md): A raw composition clause. +- [`composition.CompositionPolicy`](./concrete.fhe.compilation.composition.md): A protocol for composition policies. +- [`composition.CompositionRule`](./concrete.fhe.compilation.composition.md): A raw composition rule. - [`configuration.ApproximateRoundingConfig`](./concrete.fhe.compilation.configuration.md): Controls the behavior of approximate rounding. - [`configuration.BitwiseStrategy`](./concrete.fhe.compilation.configuration.md): BitwiseStrategy, to specify implementation preference for bitwise operations. - [`configuration.ComparisonStrategy`](./concrete.fhe.compilation.configuration.md): ComparisonStrategy, to specify implementation preference for comparisons. @@ -144,9 +129,19 @@ - [`module.FheFunction`](./concrete.fhe.compilation.module.md): Fhe function class, allowing to run or simulate one function of an fhe module. - [`module.FheModule`](./concrete.fhe.compilation.module.md): Fhe module class, to combine computation graphs, mlir, runtime objects into a single object. - [`module.SimulationRt`](./concrete.fhe.compilation.module.md): Runtime object class for simulation. +- [`module_compiler.AllComposable`](./concrete.fhe.compilation.module_compiler.md): Composition policy that allows to forward any output of the module to any of its input. +- [`module_compiler.AllInputs`](./concrete.fhe.compilation.module_compiler.md): All the inputs of a given function of a module. +- [`module_compiler.AllOutputs`](./concrete.fhe.compilation.module_compiler.md): All the outputs of a given function of a module. - [`module_compiler.DebugManager`](./concrete.fhe.compilation.module_compiler.md): A debug manager, allowing streamlined debugging. - [`module_compiler.FunctionDef`](./concrete.fhe.compilation.module_compiler.md): An object representing the definition of a function as used in an fhe module. +- [`module_compiler.Input`](./concrete.fhe.compilation.module_compiler.md): The input of a given function of a module. - [`module_compiler.ModuleCompiler`](./concrete.fhe.compilation.module_compiler.md): Compiler class for multiple functions, to glue the compilation pipeline. +- [`module_compiler.NotComposable`](./concrete.fhe.compilation.module_compiler.md): Composition policy that does not allow the forwarding of any output to any input. +- [`module_compiler.Output`](./concrete.fhe.compilation.module_compiler.md): The output of a given function of a module. +- [`module_compiler.Wire`](./concrete.fhe.compilation.module_compiler.md): A forwarding rule between an output and an input. +- [`module_compiler.WireInput`](./concrete.fhe.compilation.module_compiler.md): A protocol for wire inputs. +- [`module_compiler.WireOutput`](./concrete.fhe.compilation.module_compiler.md): A protocol for wire outputs. +- [`module_compiler.Wired`](./concrete.fhe.compilation.module_compiler.md): Composition policy which allows the forwarding of certain outputs to certain inputs. - [`server.Server`](./concrete.fhe.compilation.server.md): Server class, which can be used to perform homomorphic computation. - [`specs.ClientSpecs`](./concrete.fhe.compilation.specs.md): ClientSpecs class, to create Client objects. - [`value.Value`](./concrete.fhe.compilation.value.md): Value class, to store scalar or tensor values which can be encrypted or clear. @@ -155,7 +150,7 @@ - [`integer.Integer`](./concrete.fhe.dtypes.integer.md): Integer class, to represent integers. - [`bits.Bits`](./concrete.fhe.extensions.bits.md): Bits class, to provide indexing into the bits of integers. - [`round_bit_pattern.Adjusting`](./concrete.fhe.extensions.round_bit_pattern.md): Adjusting class, to be used as early stop signal during adjustment. -- [`round_bit_pattern.AutoRounder`](./concrete.fhe.extensions.round_bit_pattern.md): AutoRounder class, to optimize for number of msbs to keep druing round bit pattern operation. +- [`round_bit_pattern.AutoRounder`](./concrete.fhe.extensions.round_bit_pattern.md): AutoRounder class, to optimize for number of msbs to keep during round bit pattern operation. - [`table.LookupTable`](./concrete.fhe.extensions.table.md): LookupTable class, to provide a way to do direct table lookups. - [`truncate_bit_pattern.Adjusting`](./concrete.fhe.extensions.truncate_bit_pattern.md): Adjusting class, to be used as early stop signal during adjustment. - [`truncate_bit_pattern.AutoTruncator`](./concrete.fhe.extensions.truncate_bit_pattern.md): AutoTruncator class, to optimize for the number of msbs to keep during truncate operation. @@ -165,6 +160,7 @@ - [`converter.Converter`](./concrete.fhe.mlir.converter.md): Converter class, to convert a computation graph to MLIR. - [`assign_bit_widths.AdditionalConstraints`](./concrete.fhe.mlir.processors.assign_bit_widths.md): AdditionalConstraints class to customize bit-width assignment step easily. - [`assign_bit_widths.AssignBitWidths`](./concrete.fhe.mlir.processors.assign_bit_widths.md): AssignBitWidths graph processor, to assign proper bit-widths to be compatible with FHE. +- [`assign_node_ids.AssignNodeIds`](./concrete.fhe.mlir.processors.assign_node_ids.md) to node properties. - [`check_integer_only.CheckIntegerOnly`](./concrete.fhe.mlir.processors.check_integer_only.md): CheckIntegerOnly graph processor, to make sure the graph only contains integer nodes. - [`process_rounding.ProcessRounding`](./concrete.fhe.mlir.processors.process_rounding.md): ProcessRounding graph processor, to analyze rounding and support regular operations on it. - [`utils.Comparison`](./concrete.fhe.mlir.utils.md): Comparison enum, to store the result comparison in 2-bits as there are three possible outcomes. @@ -178,6 +174,8 @@ - [`graph.MultiGraphProcessor`](./concrete.fhe.representation.graph.md): MultiGraphProcessor base class, to define the API for a multiple graph processing pipeline. - [`node.Node`](./concrete.fhe.representation.node.md): Node class, to represent computation in a computation graph. - [`operation.Operation`](./concrete.fhe.representation.operation.md): Operation enum, to distinguish nodes within a computation graph. +- [`dtypes.TFHERSIntegerType`](./concrete.fhe.tfhers.dtypes.md) to represent tfhers integer types. +- [`values.TFHERSInteger`](./concrete.fhe.tfhers.values.md) into typed values, using tfhers types. - [`tracer.Annotation`](./concrete.fhe.tracing.tracer.md): Base annotation for direct definition. - [`tracer.ScalarAnnotation`](./concrete.fhe.tracing.tracer.md): Base scalar annotation for direct definition. - [`tracer.TensorAnnotation`](./concrete.fhe.tracing.tracer.md): Base tensor annotation for direct definition. @@ -314,13 +312,33 @@ - [`typing.uint8`](./concrete.fhe.tracing.typing.md): Scalar uint8 annotation. - [`typing.uint9`](./concrete.fhe.tracing.typing.md): Scalar uint9 annotation. - [`value_description.ValueDescription`](./concrete.fhe.values.value_description.md): ValueDescription class, to combine data type, shape, and encryption status into a single object. +- [`client_parameters.ClientParameters`](./concrete.compiler.client_parameters.md): ClientParameters are public parameters used for key generation. +- [`client_support.ClientSupport`](./concrete.compiler.client_support.md): Client interface for doing key generation and encryption. +- [`compilation_context.CompilationContext`](./concrete.compiler.compilation_context.md): Support class for compilation context. +- [`compilation_feedback.CircuitCompilationFeedback`](./concrete.compiler.compilation_feedback.md): CircuitCompilationFeedback is a set of hint computed by the compiler engine for a circuit. +- [`compilation_feedback.ProgramCompilationFeedback`](./concrete.compiler.compilation_feedback.md): CompilationFeedback is a set of hint computed by the compiler engine. +- [`compilation_options.CompilationOptions`](./concrete.compiler.compilation_options.md): CompilationOptions holds different flags and options of the compilation process. +- [`evaluation_keys.EvaluationKeys`](./concrete.compiler.evaluation_keys.md): EvaluationKeys required for execution. +- [`key_set.KeySet`](./concrete.compiler.key_set.md): KeySet stores the different keys required for an encrypted computation. +- [`key_set_cache.KeySetCache`](./concrete.compiler.key_set_cache.md): KeySetCache is a cache for KeySet to avoid generating similar keys multiple times. +- [`lambda_argument.LambdaArgument`](./concrete.compiler.lambda_argument.md): LambdaArgument holds scalar or tensor values. +- [`library_compilation_result.LibraryCompilationResult`](./concrete.compiler.library_compilation_result.md): LibraryCompilationResult holds the result of the library compilation. +- [`library_lambda.LibraryLambda`](./concrete.compiler.library_lambda.md): LibraryLambda reference a compiled library and can be ran using LibrarySupport. +- [`library_support.LibrarySupport`](./concrete.compiler.library_support.md): Support class for library compilation and execution. +- [`parameter.Parameter`](./concrete.compiler.parameter.md): An FHE parameter. +- [`public_arguments.PublicArguments`](./concrete.compiler.public_arguments.md): PublicArguments holds encrypted and plain arguments, as well as public materials. +- [`public_result.PublicResult`](./concrete.compiler.public_result.md): PublicResult holds the result of an encrypted execution and can be decrypted using ClientSupport. +- [`server_circuit.ServerCircuit`](./concrete.compiler.server_circuit.md): ServerCircuit references a circuit that can be called for execution and simulation. +- [`server_program.ServerProgram`](./concrete.compiler.server_program.md): ServerProgram references compiled circuit objects. +- [`simulated_value_decrypter.SimulatedValueDecrypter`](./concrete.compiler.simulated_value_decrypter.md): A helper class to decrypt `Value`s. +- [`simulated_value_exporter.SimulatedValueExporter`](./concrete.compiler.simulated_value_exporter.md): A helper class to create `Value`s. +- [`value.Value`](./concrete.compiler.value.md): An encrypted/clear value which can be scalar/tensor. +- [`value_decrypter.ValueDecrypter`](./concrete.compiler.value_decrypter.md): A helper class to decrypt `Value`s. +- [`value_exporter.ValueExporter`](./concrete.compiler.value_exporter.md): A helper class to create `Value`s. +- [`wrapper.WrapperCpp`](./concrete.compiler.wrapper.md): Wrapper base class for native Cpp objects. ## Functions -- [`compiler.init_dfr`](./concrete.compiler.md): Initialize dataflow parallelization. -- [`compiler.round_trip`](./concrete.compiler.md): Parse the MLIR input, then return it back. -- [`compilation_feedback.tag_from_location`](./concrete.compiler.compilation_feedback.md): Extract tag of the operation from its location. -- [`utils.lookup_runtime_lib`](./concrete.compiler.utils.md): Try to find the absolute path to the runtime library. - [`decorators.circuit`](./concrete.fhe.compilation.decorators.md): Provide a direct interface for compilation of single circuit programs. - [`decorators.compiler`](./concrete.fhe.compilation.decorators.md): Provide an easy interface for the compilation of single-circuit programs. - [`decorators.function`](./concrete.fhe.compilation.decorators.md): Provide an easy interface to define a function within an fhe module. @@ -365,6 +383,8 @@ - [`utils.flood_replace_none_values`](./concrete.fhe.mlir.utils.md): Use flooding algorithm to replace `None` values. - [`utils.format_constant`](./concrete.fhe.representation.utils.md): Get the textual representation of a constant. - [`utils.format_indexing_element`](./concrete.fhe.representation.utils.md): Format an indexing element. +- [`tracing.from_native`](./concrete.fhe.tfhers.tracing.md): Convert a Concrete integer to the tfhers representation. +- [`tracing.to_native`](./concrete.fhe.tfhers.tracing.md): Convert a tfhers integer to the Concrete representation. - [`scalar.clear_scalar_builder`](./concrete.fhe.values.scalar.md): Build a clear scalar value. - [`scalar.encrypted_scalar_builder`](./concrete.fhe.values.scalar.md): Build an encrypted scalar value. - [`scalar.clear_scalar_builder`](./concrete.fhe.values.scalar.md): Build a clear scalar value. @@ -373,3 +393,7 @@ - [`tensor.encrypted_tensor_builder`](./concrete.fhe.values.tensor.md): Build an encrypted tensor value. - [`tensor.clear_tensor_builder`](./concrete.fhe.values.tensor.md): Build a clear tensor value. - [`tensor.encrypted_tensor_builder`](./concrete.fhe.values.tensor.md): Build an encrypted tensor value. +- [`compiler.init_dfr`](./concrete.compiler.md): Initialize dataflow parallelization. +- [`compiler.round_trip`](./concrete.compiler.md): Parse the MLIR input, then return it back. +- [`compilation_feedback.tag_from_location`](./concrete.compiler.compilation_feedback.md): Extract tag of the operation from its location. +- [`utils.lookup_runtime_lib`](./concrete.compiler.utils.md): Try to find the absolute path to the runtime library. diff --git a/docs/dev/api/concrete.compiler.compilation_options.md b/docs/dev/api/concrete.compiler.compilation_options.md index e8b2715c4..cecdff2d2 100644 --- a/docs/dev/api/concrete.compiler.compilation_options.md +++ b/docs/dev/api/concrete.compiler.compilation_options.md @@ -43,7 +43,34 @@ Wrap the native Cpp object. --- - + + +### method `add_composition` + +```python +add_composition(from_func: str, from_pos: int, to_func: str, to_pos: int) +``` + +Adds a composition rule. + + + +**Args:** + + - `from_func` (str): the name of the circuit the output comes from. + - `from_pos` (int): the return position of the output. + - `to_func` (str): the name of the circuit the input targets. + - `to_pos` (int): the argument position of the input. + + + +**Raises:** + + - `TypeError`: if the inputs do not have the proper type. + +--- + + ### method `force_encoding` @@ -96,7 +123,7 @@ Build a CompilationOptions. --- - + ### method `set_all_v0_parameter` @@ -148,7 +175,7 @@ Set all the V0 parameters. --- - + ### method `set_auto_parallelize` @@ -172,7 +199,7 @@ Set option for auto parallelization. --- - + ### method `set_batch_tfhe_ops` @@ -196,7 +223,7 @@ Set flag that triggers the batching of scalar TFHE operations. --- - + ### method `set_composable` @@ -204,23 +231,23 @@ Set flag that triggers the batching of scalar TFHE operations. set_composable(composable: bool) ``` -Set option for composition. +Set composable flag. **Args:** - - `composable` (bool): whether to turn it on or off + - `composable` (bool): the composable flag. **Raises:** - - `TypeError`: if the value to set is not boolean + - `TypeError`: if the inputs do not have the proper type. --- - + ### method `set_compress_evaluation_keys` @@ -244,7 +271,7 @@ Set option for compression of evaluation keys. --- - + ### method `set_compress_input_ciphertexts` @@ -268,7 +295,7 @@ Set option for compression of input ciphertexts. --- - + ### method `set_dataflow_parallelize` @@ -292,7 +319,7 @@ Set option for dataflow parallelization. --- - + ### method `set_display_optimizer_choice` @@ -316,7 +343,7 @@ Set display flag of optimizer choices. --- - + ### method `set_emit_gpu_ops` @@ -340,7 +367,31 @@ Set flag that allows gpu ops to be emitted. --- - + + +### method `set_enable_overflow_detection_in_simulation` + +```python +set_enable_overflow_detection_in_simulation(enable_overflow_detection: bool) +``` + +Enable or disable overflow detection during simulation. + + + +**Args:** + + - `enable_overflow_detection` (bool): flag to enable or disable overflow detection + + + +**Raises:** + + - `TypeError`: if the value to set is not bool + +--- + + ### method `set_enable_tlu_fusing` @@ -364,7 +415,7 @@ Enable or disable tlu fusing. --- - + ### method `set_funcname` @@ -388,7 +439,7 @@ Set entrypoint function name. --- - + ### method `set_global_p_error` @@ -413,7 +464,7 @@ Set global error probability for the full circuit. --- - + ### method `set_loop_parallelize` @@ -437,7 +488,7 @@ Set option for loop parallelization. --- - + ### method `set_optimize_concrete` @@ -461,7 +512,7 @@ Set flag to enable/disable optimization of concrete intermediate representation. --- - + ### method `set_optimizer_multi_parameter_strategy` @@ -487,7 +538,7 @@ Set the strategy of the optimizer for multi-parameter. --- - + ### method `set_optimizer_strategy` @@ -511,7 +562,7 @@ Set the strategy of the optimizer. --- - + ### method `set_p_error` @@ -536,7 +587,7 @@ Set error probability for shared by each pbs. --- - + ### method `set_print_tlu_fusing` @@ -560,7 +611,7 @@ Enable or disable printing tlu fusing. --- - + ### method `set_security_level` @@ -585,7 +636,7 @@ Set security level. --- - + ### method `set_v0_parameter` @@ -623,7 +674,7 @@ Set the basic V0 parameters. --- - + ### method `set_verify_diagnostics` @@ -647,7 +698,7 @@ Set option for diagnostics verification. --- - + ### method `simulation` diff --git a/docs/dev/api/concrete.compiler.md b/docs/dev/api/concrete.compiler.md index 7d1167c01..09e64baac 100644 --- a/docs/dev/api/concrete.compiler.md +++ b/docs/dev/api/concrete.compiler.md @@ -80,7 +80,7 @@ init_dfr() Initialize dataflow parallelization. -It is not always required to initialize the dataflow runtime as it can be implicitly done during compilation. However, it is required in case no compilation has previously been done and the runtime is needed +It is not always required to initialize the dataflow runtime as it can be implicitely done during compilation. However, it is required in case no compilation has previously been done and the runtime is needed --- diff --git a/docs/dev/api/concrete.fhe.compilation.artifacts.md b/docs/dev/api/concrete.fhe.compilation.artifacts.md index 0d608f95e..131b1098d 100644 --- a/docs/dev/api/concrete.fhe.compilation.artifacts.md +++ b/docs/dev/api/concrete.fhe.compilation.artifacts.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.artifacts` Declaration of `DebugArtifacts` class. @@ -9,12 +9,12 @@ Declaration of `DebugArtifacts` class. --- - + ## class `FunctionDebugArtifacts` An object containing debug artifacts for a certain function in an fhe module. - + ### method `__init__` @@ -31,7 +31,7 @@ __init__() --- - + ### method `add_graph` @@ -50,7 +50,7 @@ Add a representation of the function being compiled. --- - + ### method `add_parameter_encryption_status` @@ -69,7 +69,7 @@ Add parameter encryption status of a parameter of the function being compiled. --- - + ### method `add_source_code` @@ -87,18 +87,18 @@ Add source code of the function being compiled. --- - + ## class `ModuleDebugArtifacts` An object containing debug artifacts for an fhe module. - + ### method `__init__` ```python __init__( - function_names: List[str], + function_names: Optional[List[str]] = None, output_directory: Union[str, Path] = PosixPath('.artifacts') ) ``` @@ -112,7 +112,7 @@ __init__( --- - + ### method `add_client_parameters` @@ -130,7 +130,7 @@ Add client parameters used. --- - + ### method `add_mlir_to_compile` @@ -147,7 +147,7 @@ Add textual representation of the resulting MLIR. --- - + ### method `export` @@ -160,12 +160,12 @@ Export the collected information to `self.output_directory`. --- - + ## class `DebugArtifacts` DebugArtifacts class, to export information about the compilation process for single function. - + ### method `__init__` @@ -194,7 +194,7 @@ Return the directory to export artifacts to. --- - + ### method `add_client_parameters` @@ -212,7 +212,7 @@ Add client parameters used. --- - + ### method `add_graph` @@ -231,7 +231,7 @@ Add a representation of the function being compiled. --- - + ### method `add_mlir_to_compile` @@ -248,7 +248,7 @@ Add textual representation of the resulting MLIR. --- - + ### method `add_parameter_encryption_status` @@ -267,7 +267,7 @@ Add parameter encryption status of a parameter of the function being compiled. --- - + ### method `add_source_code` @@ -284,7 +284,7 @@ Add source code of the function being compiled. --- - + ### method `export` diff --git a/docs/dev/api/concrete.fhe.compilation.circuit.md b/docs/dev/api/concrete.fhe.compilation.circuit.md index 35eed1a0a..5cc05cbc9 100644 --- a/docs/dev/api/concrete.fhe.compilation.circuit.md +++ b/docs/dev/api/concrete.fhe.compilation.circuit.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.circuit` Declaration of `Circuit` class. @@ -9,12 +9,12 @@ Declaration of `Circuit` class. --- - + ## class `Circuit` Circuit class, to combine computation graph, mlir, client and server into a single object. - + ### method `__init__` @@ -23,7 +23,8 @@ __init__( graph: Graph, mlir: Module, compilation_context: CompilationContext, - configuration: Optional[Configuration] = None + configuration: Optional[Configuration] = None, + composition_rules: Optional[Iterable[CompositionRule]] = None ) ``` @@ -172,6 +173,12 @@ Get the keys of the circuit. --- +#### property memory_usage_per_location + +Get the memory usage of operations in the circuit per location. + +--- + #### property mlir Textual representation of the MLIR module. @@ -276,7 +283,7 @@ Get all statistics of the circuit. --- - + ### method `cleanup` @@ -288,7 +295,7 @@ Cleanup the temporary library output directory. --- - + ### method `decrypt` @@ -312,7 +319,7 @@ Decrypt result(s) of evaluation. --- - + ### method `draw` @@ -346,7 +353,7 @@ That this function requires the python `pygraphviz` package which itself require --- - + ### method `enable_fhe_execution` @@ -358,7 +365,7 @@ Enable FHE execution. --- - + ### method `enable_fhe_simulation` @@ -370,7 +377,7 @@ Enable FHE simulation. --- - + ### method `encrypt` @@ -394,7 +401,7 @@ Encrypt argument(s) to for evaluation. --- - + ### method `encrypt_run_decrypt` @@ -416,7 +423,7 @@ Encrypt inputs, run the circuit, and decrypt the outputs in one go. --- - + ### method `keygen` @@ -441,7 +448,7 @@ Generate keys required for homomorphic evaluation. --- - + ### method `run` @@ -465,7 +472,7 @@ Evaluate the circuit. --- - + ### method `simulate` diff --git a/docs/dev/api/concrete.fhe.compilation.client.md b/docs/dev/api/concrete.fhe.compilation.client.md index d8c0dc8c5..a030f46fb 100644 --- a/docs/dev/api/concrete.fhe.compilation.client.md +++ b/docs/dev/api/concrete.fhe.compilation.client.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.client` Declaration of `Client` class. @@ -9,12 +9,12 @@ Declaration of `Client` class. --- - + ## class `Client` Client class, which can be used to manage keys, encrypt arguments and decrypt results. - + ### method `__init__` @@ -51,7 +51,7 @@ Get the keys for the client. --- - + ### method `decrypt` @@ -76,7 +76,7 @@ Decrypt result(s) of evaluation. --- - + ### method `encrypt` @@ -101,7 +101,7 @@ Encrypt argument(s) to for evaluation. --- - + ### method `keygen` @@ -126,7 +126,7 @@ Generate keys required for homomorphic evaluation. --- - + ### method `load` @@ -153,7 +153,7 @@ Load the client from the given path in zip format. --- - + ### method `save` diff --git a/docs/dev/api/concrete.fhe.compilation.compiler.md b/docs/dev/api/concrete.fhe.compilation.compiler.md index a7009a567..165c53d62 100644 --- a/docs/dev/api/concrete.fhe.compilation.compiler.md +++ b/docs/dev/api/concrete.fhe.compilation.compiler.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.compiler` Declaration of `Compiler` class. @@ -9,7 +9,7 @@ Declaration of `Compiler` class. --- - + ## class `EncryptionStatus` EncryptionStatus enum, to represent encryption status of parameters. @@ -20,12 +20,12 @@ EncryptionStatus enum, to represent encryption status of parameters. --- - + ## class `Compiler` Compiler class, to glue the compilation pipeline. - + ### method `__init__` @@ -45,7 +45,7 @@ __init__( --- - + ### method `assemble` @@ -81,7 +81,7 @@ Assemble a circuit from the raw parameter values, used in direct circuit definit --- - + ### method `compile` @@ -114,7 +114,7 @@ Compile the function using an inputset. --- - + ### method `trace` diff --git a/docs/dev/api/concrete.fhe.compilation.composition.md b/docs/dev/api/concrete.fhe.compilation.composition.md new file mode 100644 index 000000000..726bdd44d --- /dev/null +++ b/docs/dev/api/concrete.fhe.compilation.composition.md @@ -0,0 +1,78 @@ + + + + +# module `concrete.fhe.compilation.composition` +Declaration of classes related to composition. + + + +--- + + + +## class `CompositionClause` +A raw composition clause. + + + + +--- + + + +### method `create` + +```python +create(tup: Tuple[str, int]) → CompositionClause +``` + +Create a composition clause from a tuple of a function name and a position. + + +--- + + + +## class `CompositionRule` +A raw composition rule. + + + + +--- + + + +### method `create` + +```python +create(tup: Tuple[CompositionClause, CompositionClause]) → CompositionRule +``` + +Create a composition rule from a tuple containing an output clause and an input clause. + + +--- + + + +## class `CompositionPolicy` +A protocol for composition policies. + + + + +--- + + + +### method `get_rules_iter` + +```python +get_rules_iter(funcs: List[Graph]) → Iterable[CompositionRule] +``` + +Return an iterator over composition rules. + + diff --git a/docs/dev/api/concrete.fhe.compilation.configuration.md b/docs/dev/api/concrete.fhe.compilation.configuration.md index b04510c65..0cbc8cb1d 100644 --- a/docs/dev/api/concrete.fhe.compilation.configuration.md +++ b/docs/dev/api/concrete.fhe.compilation.configuration.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.configuration` Declaration of `Configuration` class. @@ -14,7 +14,7 @@ Declaration of `Configuration` class. --- - + ## class `ParameterSelectionStrategy` ParameterSelectionStrategy, to set optimization strategy. @@ -25,7 +25,7 @@ ParameterSelectionStrategy, to set optimization strategy. --- - + ## class `MultiParameterStrategy` MultiParamStrategy, to set optimization strategy for multi-parameter. @@ -36,7 +36,7 @@ MultiParamStrategy, to set optimization strategy for multi-parameter. --- - + ## class `Exactness` Exactness, to specify for specific operator the implementation preference (default and local). @@ -47,12 +47,12 @@ Exactness, to specify for specific operator the implementation preference (defau --- - + ## class `ApproximateRoundingConfig` Controls the behavior of approximate rounding. -In the following `k` is the ideal rounding output precision. Often the precision used after rounding is `k`+1 to avoid overflow. `logical_clipping`, `approximate_clipping_start_precision` can be used to stay at precision `k`, either logically or physically at the successor TLU. See examples in https://github.com/zama-ai/concrete/blob/main/docs/core-features/rounding.md. +In the following `k` is the ideal rounding output precision. Often the precision used after rounding is `k`+1 to avoid overflow. `logical_clipping`, `approximate_clipping_start_precision` can be used to stay at precision `k`, either logically or physically at the successor TLU. See examples in https://github.com/zama-ai/concrete/blob/main/docs/core-features/rounding.md. @@ -77,7 +77,7 @@ __init__( --- - + ## class `ComparisonStrategy` ComparisonStrategy, to specify implementation preference for comparisons. @@ -88,7 +88,7 @@ ComparisonStrategy, to specify implementation preference for comparisons. --- - + ## class `BitwiseStrategy` BitwiseStrategy, to specify implementation preference for bitwise operations. @@ -99,7 +99,7 @@ BitwiseStrategy, to specify implementation preference for bitwise operations. --- - + ## class `MultivariateStrategy` MultivariateStrategy, to specify implementation preference for multivariate operations. @@ -110,7 +110,7 @@ MultivariateStrategy, to specify implementation preference for multivariate oper --- - + ## class `MinMaxStrategy` MinMaxStrategy, to specify implementation preference for minimum and maximum operations. @@ -121,12 +121,12 @@ MinMaxStrategy, to specify implementation preference for minimum and maximum ope --- - + ## class `Configuration` Configuration class, to allow the compilation process to be customized. - + ### method `__init__` @@ -179,7 +179,12 @@ __init__( approximate_rounding_config: Optional[ApproximateRoundingConfig] = None, optimize_tlu_based_on_measured_bounds: bool = False, enable_tlu_fusing: bool = True, - print_tlu_fusing: bool = False + print_tlu_fusing: bool = False, + optimize_tlu_based_on_original_bit_width: Union[bool, int] = 8, + detect_overflow_in_simulation: bool = False, + dynamic_indexing_check_out_of_bounds: bool = True, + dynamic_assignment_check_out_of_bounds: bool = True, + simulate_encrypt_run_decrypt: bool = False ) ``` @@ -192,7 +197,7 @@ __init__( --- - + ### method `fork` @@ -245,7 +250,12 @@ fork( approximate_rounding_config: Optional[Keep, ApproximateRoundingConfig] = , optimize_tlu_based_on_measured_bounds: Union[Keep, bool] = , enable_tlu_fusing: Union[Keep, bool] = , - print_tlu_fusing: Union[Keep, bool] = + print_tlu_fusing: Union[Keep, bool] = , + optimize_tlu_based_on_original_bit_width: Union[Keep, bool, int] = , + detect_overflow_in_simulation: Union[Keep, bool] = , + dynamic_indexing_check_out_of_bounds: Union[Keep, bool] = , + dynamic_assignment_check_out_of_bounds: Union[Keep, bool] = , + simulate_encrypt_run_decrypt: Union[Keep, bool] = ) → Configuration ``` diff --git a/docs/dev/api/concrete.fhe.compilation.decorators.md b/docs/dev/api/concrete.fhe.compilation.decorators.md index e3055e4b0..e7197d7de 100644 --- a/docs/dev/api/concrete.fhe.compilation.decorators.md +++ b/docs/dev/api/concrete.fhe.compilation.decorators.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.decorators` Declaration of `circuit` and `compiler` decorators. @@ -8,7 +8,7 @@ Declaration of `circuit` and `compiler` decorators. --- - + ## function `circuit` @@ -37,7 +37,7 @@ Provide a direct interface for compilation of single circuit programs. --- - + ## function `compiler` @@ -55,7 +55,7 @@ Provide an easy interface for the compilation of single-circuit programs. --- - + ## function `module` @@ -68,7 +68,7 @@ Provide an easy interface for the compilation of multi functions modules. --- - + ## function `function` @@ -86,12 +86,12 @@ Provide an easy interface to define a function within an fhe module. --- - + ## class `Compilable` Compilable class, to wrap a function and provide methods to trace and compile it. - + ### method `__init__` @@ -108,7 +108,7 @@ __init__(function_: Callable, parameters) --- - + ### method `compile` @@ -141,7 +141,7 @@ Compile the function into a circuit. --- - + ### method `trace` diff --git a/docs/dev/api/concrete.fhe.compilation.keys.md b/docs/dev/api/concrete.fhe.compilation.keys.md index 7b3e60baf..a1d5a5e6c 100644 --- a/docs/dev/api/concrete.fhe.compilation.keys.md +++ b/docs/dev/api/concrete.fhe.compilation.keys.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.keys` Declaration of `Keys` class. @@ -9,14 +9,14 @@ Declaration of `Keys` class. --- - + ## class `Keys` Keys class, to manage generate/reuse keys. Includes encryption keys as well as evaluation keys. Be careful when serializing/saving keys! - + ### method `__init__` @@ -48,7 +48,7 @@ Get only evaluation keys. --- - + ### method `deserialize` @@ -70,7 +70,7 @@ Deserialize keys from bytes. --- - + ### method `generate` @@ -95,7 +95,7 @@ Generate new keys. --- - + ### method `load` @@ -112,7 +112,7 @@ Load keys from a location. --- - + ### method `load_if_exists_generate_and_save_otherwise` @@ -134,7 +134,7 @@ Load keys from a location if they exist, else generate new keys and save to that --- - + ### method `save` @@ -153,7 +153,7 @@ Saved keys are not encrypted, so be careful how you store/transfer them! --- - + ### method `serialize` diff --git a/docs/dev/api/concrete.fhe.compilation.md b/docs/dev/api/concrete.fhe.compilation.md index 83a38bcba..e2ac00bda 100644 --- a/docs/dev/api/concrete.fhe.compilation.md +++ b/docs/dev/api/concrete.fhe.compilation.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation` Glue the compilation process together. @@ -13,6 +13,7 @@ Glue the compilation process together. - **utils** - **value** - **client** +- **composition** - **configuration** - **server** - **circuit** diff --git a/docs/dev/api/concrete.fhe.compilation.module.md b/docs/dev/api/concrete.fhe.compilation.module.md index 71b3d2003..f71d5b22a 100644 --- a/docs/dev/api/concrete.fhe.compilation.module.md +++ b/docs/dev/api/concrete.fhe.compilation.module.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.module` Declaration of `FheModule` classes. @@ -9,7 +9,7 @@ Declaration of `FheModule` classes. --- - + ## class `ExecutionRt` Runtime object class for execution. @@ -20,7 +20,7 @@ Runtime object class for execution. --- - + ## class `SimulationRt` Runtime object class for simulation. @@ -31,17 +31,22 @@ Runtime object class for simulation. --- - + ## class `FheFunction` Fhe function class, allowing to run or simulate one function of an fhe module. - + ### method `__init__` ```python -__init__(name: str, runtime: Union[ExecutionRt, SimulationRt], graph: Graph) +__init__( + name: str, + runtime: Union[ExecutionRt, SimulationRt], + graph: Graph, + configuration: Configuration +) ``` @@ -239,7 +244,7 @@ Get all statistics of the function. --- - + ### method `decrypt` @@ -263,7 +268,7 @@ Decrypt result(s) of evaluation. --- - + ### method `draw` @@ -297,7 +302,7 @@ That this function requires the python `pygraphviz` package which itself require --- - + ### method `encrypt` @@ -321,7 +326,7 @@ Encrypt argument(s) to for evaluation. --- - + ### method `encrypt_run_decrypt` @@ -343,7 +348,7 @@ Encrypt inputs, run the function, and decrypt the outputs in one go. --- - + ### method `run` @@ -367,7 +372,7 @@ Evaluate the function. --- - + ### method `simulate` @@ -390,12 +395,12 @@ Simulate execution of the function. --- - + ## class `FheModule` Fhe module class, to combine computation graphs, mlir, runtime objects into a single object. - + ### method `__init__` @@ -404,7 +409,8 @@ __init__( graphs: Dict[str, Graph], mlir: Module, compilation_context: CompilationContext, - configuration: Optional[Configuration] = None + configuration: Optional[Configuration] = None, + composition_rules: Optional[Iterable[CompositionRule]] = None ) ``` @@ -413,6 +419,12 @@ __init__( +--- + +#### property client + +Returns the client object tied to the module if not in simulation mode. + --- #### property complexity @@ -451,6 +463,12 @@ Get probability of error for each simple TLU (on a scalar). --- +#### property server + +Get the server object tied to the module. + +--- + #### property size_of_bootstrap_keys Get size of the bootstrap keys of the module. @@ -477,7 +495,7 @@ Get all statistics of the module. --- - + ### method `cleanup` @@ -489,7 +507,7 @@ Cleanup the temporary library output directory. --- - + ### method `functions` @@ -501,7 +519,7 @@ Return a dictionnary containing all the functions of the module. --- - + ### method `keygen` diff --git a/docs/dev/api/concrete.fhe.compilation.module_compiler.md b/docs/dev/api/concrete.fhe.compilation.module_compiler.md index b8555fff2..4b713d7a0 100644 --- a/docs/dev/api/concrete.fhe.compilation.module_compiler.md +++ b/docs/dev/api/concrete.fhe.compilation.module_compiler.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.module_compiler` Declaration of `MultiCompiler` class. @@ -9,12 +9,12 @@ Declaration of `MultiCompiler` class. --- - + ## class `FunctionDef` An object representing the definition of a function as used in an fhe module. - + ### method `__init__` @@ -34,7 +34,7 @@ __init__( --- - + ### method `evaluate` @@ -62,12 +62,15 @@ Trace, fuse, measure bounds, and update values in the resulting graph in one go. --- - + ### method `trace` ```python -trace(sample: Union[Any, Tuple[Any, ]]) +trace( + sample: Union[Any, Tuple[Any, ]], + artifacts: Optional[FunctionDebugArtifacts] = None +) ``` Trace the function and fuse the resulting graph with a sample input. @@ -76,16 +79,247 @@ Trace the function and fuse the resulting graph with a sample input. **Args:** sample (Union[Any, Tuple[Any, ...]]): sample to use for tracing + - `artifacts`: Optiona[FunctionDebugArtifacts]: the object to store artifacts in --- - + + +## class `NotComposable` +Composition policy that does not allow the forwarding of any output to any input. + + + + +--- + + + +### method `get_rules_iter` + +```python +get_rules_iter(_funcs: List[FunctionDef]) → Iterable[CompositionRule] +``` + +Return an iterator over composition rules. + + +--- + + + +## class `AllComposable` +Composition policy that allows to forward any output of the module to any of its input. + + + + +--- + + + +### method `get_rules_iter` + +```python +get_rules_iter(funcs: List[Graph]) → Iterable[CompositionRule] +``` + +Return an iterator over composition rules. + + +--- + + + +## class `WireOutput` +A protocol for wire outputs. + + + + +--- + + + +### method `get_outputs_iter` + +```python +get_outputs_iter() → Iterable[CompositionClause] +``` + +Return an iterator over the possible outputs of the wire output. + + +--- + + + +## class `WireInput` +A protocol for wire inputs. + + + + +--- + + + +### method `get_inputs_iter` + +```python +get_inputs_iter() → Iterable[CompositionClause] +``` + +Return an iterator over the possible inputs of the wire input. + + +--- + + + +## class `Output` +The output of a given function of a module. + + + + +--- + + + +### method `get_outputs_iter` + +```python +get_outputs_iter() → Iterable[CompositionClause] +``` + +Return an iterator over the possible outputs of the wire output. + + +--- + + + +## class `AllOutputs` +All the outputs of a given function of a module. + + + + +--- + + + +### method `get_outputs_iter` + +```python +get_outputs_iter() → Iterable[CompositionClause] +``` + +Return an iterator over the possible outputs of the wire output. + + +--- + + + +## class `Input` +The input of a given function of a module. + + + + +--- + + + +### method `get_inputs_iter` + +```python +get_inputs_iter() → Iterable[CompositionClause] +``` + +Return an iterator over the possible inputs of the wire input. + + +--- + + + +## class `AllInputs` +All the inputs of a given function of a module. + + + + +--- + + + +### method `get_inputs_iter` + +```python +get_inputs_iter() → Iterable[CompositionClause] +``` + +Return an iterator over the possible inputs of the wire input. + + +--- + + + +## class `Wire` +A forwarding rule between an output and an input. + + + + +--- + + + +### method `get_rules_iter` + +```python +get_rules_iter(_) → Iterable[CompositionRule] +``` + +Return an iterator over composition rules. + + +--- + + + +## class `Wired` +Composition policy which allows the forwarding of certain outputs to certain inputs. + + + + +--- + + + +### method `get_rules_iter` + +```python +get_rules_iter(_) → Iterable[CompositionRule] +``` + +Return an iterator over composition rules. + + +--- + + ## class `DebugManager` A debug manager, allowing streamlined debugging. - + ### method `__init__` @@ -102,7 +336,7 @@ __init__(config: Configuration) --- - + ### method `debug_assigned_graph` @@ -114,7 +348,7 @@ Print assigned graphs if configuration tells so. --- - + ### method `debug_bit_width_assignments` @@ -126,7 +360,7 @@ Print bitwidth assignments if configuration tells so. --- - + ### method `debug_bit_width_constaints` @@ -138,7 +372,7 @@ Print bitwidth constraints if configuration tells so. --- - + ### method `debug_computation_graph` @@ -150,7 +384,7 @@ Print computation graph if configuration tells so. --- - + ### method `debug_mlir` @@ -162,7 +396,7 @@ Print mlir if configuration tells so. --- - + ### method `debug_statistics` @@ -174,7 +408,7 @@ Print statistics if configuration tells so. --- - + ### method `debug_table` @@ -186,7 +420,7 @@ Return a context manager that prints a table around what is printed inside the s --- - + ### method `show_assigned_graph` @@ -198,7 +432,7 @@ Tell if the configuration involves showing assigned graph. --- - + ### method `show_bit_width_assignments` @@ -210,7 +444,7 @@ Tell if the configuration involves showing bitwidth assignments. --- - + ### method `show_bit_width_constraints` @@ -222,7 +456,7 @@ Tell if the configuration involves showing bitwidth constraints. --- - + ### method `show_graph` @@ -234,7 +468,7 @@ Tell if the configuration involves showing graph. --- - + ### method `show_mlir` @@ -246,7 +480,7 @@ Tell if the configuration involves showing mlir. --- - + ### method `show_optimizer` @@ -258,7 +492,7 @@ Tell if the configuration involves showing optimizer. --- - + ### method `show_statistics` @@ -271,17 +505,17 @@ Tell if the configuration involves showing statistics. --- - + ## class `ModuleCompiler` Compiler class for multiple functions, to glue the compilation pipeline. - + ### method `__init__` ```python -__init__(functions: List[FunctionDef]) +__init__(functions: List[FunctionDef], composition: CompositionPolicy) ``` @@ -293,7 +527,7 @@ __init__(functions: List[FunctionDef]) --- - + ### method `compile` diff --git a/docs/dev/api/concrete.fhe.compilation.server.md b/docs/dev/api/concrete.fhe.compilation.server.md index fa4047d84..6d6dfb9e7 100644 --- a/docs/dev/api/concrete.fhe.compilation.server.md +++ b/docs/dev/api/concrete.fhe.compilation.server.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.server` Declaration of `Server` class. @@ -13,23 +13,24 @@ Declaration of `Server` class. --- - + ## class `Server` Server class, which can be used to perform homomorphic computation. - + ### method `__init__` ```python __init__( client_specs: ClientSpecs, - output_dir: Optional[TemporaryDirectory], + output_dir: Union[NoneType, str, Path], support: LibrarySupport, compilation_result: LibraryCompilationResult, server_program: ServerProgram, - is_simulated: bool + is_simulated: bool, + composition_rules: Optional[List[CompositionRule]] ) ``` @@ -84,7 +85,7 @@ Get all statistics of the compiled program. --- - + ### method `cleanup` @@ -96,7 +97,7 @@ Cleanup the temporary library output directory. --- - + ### method `clear_addition_count` @@ -108,7 +109,7 @@ Get the number of clear additions in the compiled program. --- - + ### method `clear_addition_count_per_parameter` @@ -122,7 +123,7 @@ Get the number of clear additions per parameter in the compiled program. --- - + ### method `clear_addition_count_per_tag` @@ -134,7 +135,7 @@ Get the number of clear additions per tag in the compiled program. --- - + ### method `clear_addition_count_per_tag_per_parameter` @@ -148,7 +149,7 @@ Get the number of clear additions per tag per parameter in the compiled program. --- - + ### method `clear_multiplication_count` @@ -160,7 +161,7 @@ Get the number of clear multiplications in the compiled program. --- - + ### method `clear_multiplication_count_per_parameter` @@ -174,7 +175,7 @@ Get the number of clear multiplications per parameter in the compiled program. --- - + ### method `clear_multiplication_count_per_tag` @@ -186,7 +187,7 @@ Get the number of clear multiplications per tag in the compiled program. --- - + ### method `clear_multiplication_count_per_tag_per_parameter` @@ -200,7 +201,7 @@ Get the number of clear multiplications per tag per parameter in the compiled pr --- - + ### method `create` @@ -209,7 +210,8 @@ create( mlir: Union[str, Module], configuration: Configuration, is_simulated: bool = False, - compilation_context: Optional[CompilationContext] = None + compilation_context: Optional[CompilationContext] = None, + composition_rules: Optional[Iterable[CompositionRule]] = None ) → Server ``` @@ -226,9 +228,11 @@ Create a server using MLIR and output sign information. compilation_context (CompilationContext): context to use for the Compiler + composition_rules (Iterable[Tuple[str, int, str, int]]): composition rules to be applied when compiling + --- - + ### method `encrypted_addition_count` @@ -240,7 +244,7 @@ Get the number of encrypted additions in the compiled program. --- - + ### method `encrypted_addition_count_per_parameter` @@ -254,7 +258,7 @@ Get the number of encrypted additions per parameter in the compiled program. --- - + ### method `encrypted_addition_count_per_tag` @@ -266,7 +270,7 @@ Get the number of encrypted additions per tag in the compiled program. --- - + ### method `encrypted_addition_count_per_tag_per_parameter` @@ -280,7 +284,7 @@ Get the number of encrypted additions per tag per parameter in the compiled prog --- - + ### method `encrypted_negation_count` @@ -292,7 +296,7 @@ Get the number of encrypted negations in the compiled program. --- - + ### method `encrypted_negation_count_per_parameter` @@ -306,7 +310,7 @@ Get the number of encrypted negations per parameter in the compiled program. --- - + ### method `encrypted_negation_count_per_tag` @@ -318,7 +322,7 @@ Get the number of encrypted negations per tag in the compiled program. --- - + ### method `encrypted_negation_count_per_tag_per_parameter` @@ -332,7 +336,7 @@ Get the number of encrypted negations per tag per parameter in the compiled prog --- - + ### method `key_switch_count` @@ -344,7 +348,7 @@ Get the number of key switches in the compiled program. --- - + ### method `key_switch_count_per_parameter` @@ -356,7 +360,7 @@ Get the number of key switches per parameter in the compiled program. --- - + ### method `key_switch_count_per_tag` @@ -368,7 +372,7 @@ Get the number of key switches per tag in the compiled program. --- - + ### method `key_switch_count_per_tag_per_parameter` @@ -382,7 +386,7 @@ Get the number of key switches per tag per parameter in the compiled program. --- - + ### method `load` @@ -404,7 +408,19 @@ Load the server from the given path in zip format. --- - + + +### method `memory_usage_per_location` + +```python +memory_usage_per_location(function: str = 'main') → Dict[str, int] +``` + +Get the memory usage of operations per location. + +--- + + ### method `packing_key_switch_count` @@ -416,7 +432,7 @@ Get the number of packing key switches in the compiled program. --- - + ### method `packing_key_switch_count_per_parameter` @@ -430,7 +446,7 @@ Get the number of packing key switches per parameter in the compiled program. --- - + ### method `packing_key_switch_count_per_tag` @@ -442,7 +458,7 @@ Get the number of packing key switches per tag in the compiled program. --- - + ### method `packing_key_switch_count_per_tag_per_parameter` @@ -456,7 +472,7 @@ Get the number of packing key switches per tag per parameter in the compiled pro --- - + ### method `programmable_bootstrap_count` @@ -468,7 +484,7 @@ Get the number of programmable bootstraps in the compiled program. --- - + ### method `programmable_bootstrap_count_per_parameter` @@ -482,7 +498,7 @@ Get the number of programmable bootstraps per parameter in the compiled program. --- - + ### method `programmable_bootstrap_count_per_tag` @@ -494,7 +510,7 @@ Get the number of programmable bootstraps per tag in the compiled program. --- - + ### method `programmable_bootstrap_count_per_tag_per_parameter` @@ -508,7 +524,7 @@ Get the number of programmable bootstraps per tag per parameter in the compiled --- - + ### method `run` @@ -538,7 +554,7 @@ Evaluate. --- - + ### method `save` @@ -557,7 +573,7 @@ Save the server into the given path in zip format. --- - + ### method `size_of_inputs` @@ -569,7 +585,7 @@ Get size of the inputs of the compiled program. --- - + ### method `size_of_outputs` diff --git a/docs/dev/api/concrete.fhe.compilation.specs.md b/docs/dev/api/concrete.fhe.compilation.specs.md index 81695d95c..10a5488da 100644 --- a/docs/dev/api/concrete.fhe.compilation.specs.md +++ b/docs/dev/api/concrete.fhe.compilation.specs.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.specs` Declaration of `ClientSpecs` class. @@ -9,12 +9,12 @@ Declaration of `ClientSpecs` class. --- - + ## class `ClientSpecs` ClientSpecs class, to create Client objects. - + ### method `__init__` @@ -31,7 +31,7 @@ __init__(client_parameters: ClientParameters) --- - + ### method `deserialize` @@ -53,7 +53,7 @@ Create client specs from its string representation. --- - + ### method `serialize` diff --git a/docs/dev/api/concrete.fhe.compilation.utils.md b/docs/dev/api/concrete.fhe.compilation.utils.md index 9840dd9f7..b6e9cf8c1 100644 --- a/docs/dev/api/concrete.fhe.compilation.utils.md +++ b/docs/dev/api/concrete.fhe.compilation.utils.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.utils` Declaration of various functions and constants related to compilation. @@ -8,7 +8,7 @@ Declaration of various functions and constants related to compilation. --- - + ## function `inputset` @@ -36,7 +36,7 @@ Generate a random inputset. --- - + ## function `validate_input_args` @@ -65,7 +65,7 @@ Validate input arguments. --- - + ## function `fuse` @@ -90,7 +90,7 @@ Fuse appropriate subgraphs in a graph to a single Operation.Generic node. --- - + ## function `find_float_subgraph_with_unique_terminal_node` @@ -118,7 +118,7 @@ Find a subgraph with float computations that end with an integer output. --- - + ## function `find_tlu_subgraph_with_multiple_variable_inputs_that_has_a_single_common_ancestor` @@ -146,7 +146,7 @@ Find a subgraph with a tlu computation that has multiple variable inputs whe --- - + ## function `find_single_lca` @@ -168,7 +168,7 @@ Returns Optional[Node]: single lca if it exists, None otherwise --- - + ## function `is_single_common_ancestor` @@ -198,7 +198,7 @@ Returns bool: True if `candidate` is a single common ancestor of `nodes`, Fals --- - + ## function `find_closest_integer_output_nodes` @@ -229,7 +229,7 @@ Find the closest upstream integer output nodes to a set of start nodes in a grap --- - + ## function `add_nodes_from_to` @@ -263,7 +263,7 @@ Add nodes from `from_nodes` to `to_nodes`, to `all_nodes`. --- - + ## function `convert_subgraph_to_subgraph_node` @@ -302,7 +302,7 @@ Convert a subgraph to Operation.Generic node. --- - + ## function `check_subgraph_fusibility` @@ -337,7 +337,7 @@ shuffling or reshaping a tensor make fusing impossible as there should be a one- --- - + ## function `friendly_type_format` @@ -350,7 +350,7 @@ Convert a type to a string. Remove package name and class/type keywords. --- - + ## function `get_terminal_size` diff --git a/docs/dev/api/concrete.fhe.compilation.value.md b/docs/dev/api/concrete.fhe.compilation.value.md index 396cfee79..bda9179e0 100644 --- a/docs/dev/api/concrete.fhe.compilation.value.md +++ b/docs/dev/api/concrete.fhe.compilation.value.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.compilation.value` Declaration of `Value` class. @@ -9,12 +9,12 @@ Declaration of `Value` class. --- - + ## class `Value` Value class, to store scalar or tensor values which can be encrypted or clear. - + ### method `__init__` @@ -31,7 +31,7 @@ __init__(inner: Value) --- - + ### method `deserialize` @@ -53,7 +53,7 @@ Deserialize data from bytes. --- - + ### method `serialize` diff --git a/docs/dev/api/concrete.fhe.dtypes.base.md b/docs/dev/api/concrete.fhe.dtypes.base.md index b7580f8cf..38df86ebd 100644 --- a/docs/dev/api/concrete.fhe.dtypes.base.md +++ b/docs/dev/api/concrete.fhe.dtypes.base.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.dtypes.base` Declaration of `BaseDataType` abstract class. @@ -9,7 +9,7 @@ Declaration of `BaseDataType` abstract class. --- - + ## class `BaseDataType` BaseDataType abstract class, to form a basis for data types. diff --git a/docs/dev/api/concrete.fhe.dtypes.float.md b/docs/dev/api/concrete.fhe.dtypes.float.md index 33a83934a..efff44380 100644 --- a/docs/dev/api/concrete.fhe.dtypes.float.md +++ b/docs/dev/api/concrete.fhe.dtypes.float.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.dtypes.float` Declaration of `Float` class. @@ -9,12 +9,12 @@ Declaration of `Float` class. --- - + ## class `Float` Float class, to represent floating point numbers. - + ### method `__init__` diff --git a/docs/dev/api/concrete.fhe.dtypes.integer.md b/docs/dev/api/concrete.fhe.dtypes.integer.md index a652a0d67..08736e2a9 100644 --- a/docs/dev/api/concrete.fhe.dtypes.integer.md +++ b/docs/dev/api/concrete.fhe.dtypes.integer.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.dtypes.integer` Declaration of `Integer` class. @@ -9,12 +9,12 @@ Declaration of `Integer` class. --- - + ## class `Integer` Integer class, to represent integers. - + ### method `__init__` @@ -31,7 +31,7 @@ __init__(is_signed: bool, bit_width: int) --- - + ### method `can_represent` @@ -53,7 +53,7 @@ Get whether `value` can be represented by the `Integer` or not. --- - + ### method `max` @@ -70,7 +70,7 @@ Get the maximum value that can be represented by the `Integer`. --- - + ### method `min` @@ -87,7 +87,7 @@ Get the minimum value that can be represented by the `Integer`. --- - + ### method `that_can_represent` @@ -111,6 +111,30 @@ Get the minimal `Integer` that can represent `value`. +**Raises:** + ValueError: if `value` cannot be represented by `Integer` + +--- + + + +### method `update_to_represent` + +```python +update_to_represent(value: Any, force_signed: bool = False) +``` + +Update sign and width inplace to be able to represent `value`. + + + +**Args:** + value (Any): value that needs to be represented + + force_signed (bool, default = False): whether to force signed integers or not + + + **Raises:** ValueError: if `value` cannot be represented by `Integer` diff --git a/docs/dev/api/concrete.fhe.dtypes.md b/docs/dev/api/concrete.fhe.dtypes.md index cf9aea6b1..327c61857 100644 --- a/docs/dev/api/concrete.fhe.dtypes.md +++ b/docs/dev/api/concrete.fhe.dtypes.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.dtypes` Define available data types and their semantics. diff --git a/docs/dev/api/concrete.fhe.dtypes.utils.md b/docs/dev/api/concrete.fhe.dtypes.utils.md index cc2a917f8..ae65b9337 100644 --- a/docs/dev/api/concrete.fhe.dtypes.utils.md +++ b/docs/dev/api/concrete.fhe.dtypes.utils.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.dtypes.utils` Declaration of various functions and constants related to data types. @@ -8,7 +8,7 @@ Declaration of various functions and constants related to data types. --- - + ## function `combine_dtypes` diff --git a/docs/dev/api/concrete.fhe.extensions.array.md b/docs/dev/api/concrete.fhe.extensions.array.md index 54d300597..75c160d3d 100644 --- a/docs/dev/api/concrete.fhe.extensions.array.md +++ b/docs/dev/api/concrete.fhe.extensions.array.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.array` Declaration of `array` function, to simplify creation of encrypted arrays. @@ -8,7 +8,7 @@ Declaration of `array` function, to simplify creation of encrypted arrays. --- - + ## function `array` diff --git a/docs/dev/api/concrete.fhe.extensions.bits.md b/docs/dev/api/concrete.fhe.extensions.bits.md index 7c2089324..20eec1369 100644 --- a/docs/dev/api/concrete.fhe.extensions.bits.md +++ b/docs/dev/api/concrete.fhe.extensions.bits.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.bits` Bit extraction extensions. @@ -12,7 +12,7 @@ Bit extraction extensions. --- - + ## function `bits` @@ -35,12 +35,12 @@ Extract bits of integers. --- - + ## class `Bits` Bits class, to provide indexing into the bits of integers. - + ### method `__init__` diff --git a/docs/dev/api/concrete.fhe.extensions.convolution.md b/docs/dev/api/concrete.fhe.extensions.convolution.md index bfe01ae10..a6d8e4367 100644 --- a/docs/dev/api/concrete.fhe.extensions.convolution.md +++ b/docs/dev/api/concrete.fhe.extensions.convolution.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.convolution` Tracing and evaluation of convolution. @@ -11,7 +11,7 @@ Tracing and evaluation of convolution. --- - + ## function `conv` diff --git a/docs/dev/api/concrete.fhe.extensions.hint.md b/docs/dev/api/concrete.fhe.extensions.hint.md index 9c93084ed..cd28738cd 100644 --- a/docs/dev/api/concrete.fhe.extensions.hint.md +++ b/docs/dev/api/concrete.fhe.extensions.hint.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.hint` Declaration of hinting extensions, to provide more information to Concrete. @@ -8,7 +8,7 @@ Declaration of hinting extensions, to provide more information to Concrete. --- - + ## function `hint` diff --git a/docs/dev/api/concrete.fhe.extensions.identity.md b/docs/dev/api/concrete.fhe.extensions.identity.md index 1d7fa7c2b..7e55fedd3 100644 --- a/docs/dev/api/concrete.fhe.extensions.identity.md +++ b/docs/dev/api/concrete.fhe.extensions.identity.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.identity` Declaration of `identity` extension. @@ -8,7 +8,7 @@ Declaration of `identity` extension. --- - + ## function `identity` diff --git a/docs/dev/api/concrete.fhe.extensions.maxpool.md b/docs/dev/api/concrete.fhe.extensions.maxpool.md index ff03406b1..845fb8a6b 100644 --- a/docs/dev/api/concrete.fhe.extensions.maxpool.md +++ b/docs/dev/api/concrete.fhe.extensions.maxpool.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.maxpool` Tracing and evaluation of maxpool. @@ -16,7 +16,7 @@ Tracing and evaluation of maxpool. --- - + ## function `maxpool` diff --git a/docs/dev/api/concrete.fhe.extensions.md b/docs/dev/api/concrete.fhe.extensions.md index ba3db8254..4fa512b8a 100644 --- a/docs/dev/api/concrete.fhe.extensions.md +++ b/docs/dev/api/concrete.fhe.extensions.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions` Provide additional features that are not present in numpy. diff --git a/docs/dev/api/concrete.fhe.extensions.multivariate.md b/docs/dev/api/concrete.fhe.extensions.multivariate.md index 229610dd9..6e8d0bd32 100644 --- a/docs/dev/api/concrete.fhe.extensions.multivariate.md +++ b/docs/dev/api/concrete.fhe.extensions.multivariate.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.multivariate` Declaration of `multivariate` extension. @@ -8,7 +8,7 @@ Declaration of `multivariate` extension. --- - + ## function `multivariate` diff --git a/docs/dev/api/concrete.fhe.extensions.ones.md b/docs/dev/api/concrete.fhe.extensions.ones.md index bbde30bba..ab303bf1d 100644 --- a/docs/dev/api/concrete.fhe.extensions.ones.md +++ b/docs/dev/api/concrete.fhe.extensions.ones.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.ones` Declaration of `ones` and `one` functions, to simplify creation of encrypted ones. @@ -8,7 +8,7 @@ Declaration of `ones` and `one` functions, to simplify creation of encrypted one --- - + ## function `ones` @@ -31,7 +31,7 @@ Create an encrypted array of ones. --- - + ## function `one` @@ -49,7 +49,7 @@ Create an encrypted scalar with the value of one. --- - + ## function `ones_like` diff --git a/docs/dev/api/concrete.fhe.extensions.relu.md b/docs/dev/api/concrete.fhe.extensions.relu.md index 7dd3a6af1..abe71bccc 100644 --- a/docs/dev/api/concrete.fhe.extensions.relu.md +++ b/docs/dev/api/concrete.fhe.extensions.relu.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.relu` Declaration of `relu` extension. @@ -8,7 +8,7 @@ Declaration of `relu` extension. --- - + ## function `relu` diff --git a/docs/dev/api/concrete.fhe.extensions.round_bit_pattern.md b/docs/dev/api/concrete.fhe.extensions.round_bit_pattern.md index 8aa1ce608..ca4269410 100644 --- a/docs/dev/api/concrete.fhe.extensions.round_bit_pattern.md +++ b/docs/dev/api/concrete.fhe.extensions.round_bit_pattern.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.round_bit_pattern` Declaration of `round_bit_pattern` function, to provide an interface for rounded table lookups. @@ -11,7 +11,7 @@ Declaration of `round_bit_pattern` function, to provide an interface for rounded --- - + ## function `round_bit_pattern` @@ -55,12 +55,12 @@ x = 0b_1011_1000 , lsbs_to_remove = 3 => 0b_1011_1000 x = 0b_1011_1001 , lsbs_to --- - + ## class `Adjusting` Adjusting class, to be used as early stop signal during adjustment. - + ### method `__init__` @@ -78,12 +78,12 @@ __init__(rounder: 'AutoRounder', input_min: int, input_max: int) --- - + ## class `AutoRounder` AutoRounder class, to optimize for number of msbs to keep during round bit pattern operation. - + ### method `__init__` @@ -100,7 +100,7 @@ __init__(target_msbs: int = 16) --- - + ### method `adjust` @@ -115,7 +115,7 @@ Adjust AutoRounders in a function using an inputset. --- - + ### method `dump_dict` @@ -127,7 +127,7 @@ Dump properties of the rounder to a dict. --- - + ### classmethod `load_dict` diff --git a/docs/dev/api/concrete.fhe.extensions.table.md b/docs/dev/api/concrete.fhe.extensions.table.md index 37a811375..ca09c198f 100644 --- a/docs/dev/api/concrete.fhe.extensions.table.md +++ b/docs/dev/api/concrete.fhe.extensions.table.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.table` Declaration of `LookupTable` class. @@ -9,12 +9,12 @@ Declaration of `LookupTable` class. --- - + ## class `LookupTable` LookupTable class, to provide a way to do direct table lookups. - + ### method `__init__` @@ -31,7 +31,7 @@ __init__(table: Any) --- - + ### method `apply` diff --git a/docs/dev/api/concrete.fhe.extensions.tag.md b/docs/dev/api/concrete.fhe.extensions.tag.md index 9bf0195c5..9ad0851b9 100644 --- a/docs/dev/api/concrete.fhe.extensions.tag.md +++ b/docs/dev/api/concrete.fhe.extensions.tag.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.tag` Declaration of `tag` context manager, to allow tagging certain nodes. diff --git a/docs/dev/api/concrete.fhe.extensions.truncate_bit_pattern.md b/docs/dev/api/concrete.fhe.extensions.truncate_bit_pattern.md index e4cbf4c17..931295d95 100644 --- a/docs/dev/api/concrete.fhe.extensions.truncate_bit_pattern.md +++ b/docs/dev/api/concrete.fhe.extensions.truncate_bit_pattern.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.truncate_bit_pattern` Declaration of `truncate_bit_pattern` extension. @@ -11,7 +11,7 @@ Declaration of `truncate_bit_pattern` extension. --- - + ## function `truncate_bit_pattern` @@ -43,12 +43,12 @@ x = 0b_0000 , lsbs_to_remove = 2 => 0b_0000 x = 0b_0001 , lsbs_to_remove = 2 => --- - + ## class `Adjusting` Adjusting class, to be used as early stop signal during adjustment. - + ### method `__init__` @@ -66,12 +66,12 @@ __init__(truncator: 'AutoTruncator', input_min: int, input_max: int) --- - + ## class `AutoTruncator` AutoTruncator class, to optimize for the number of msbs to keep during truncate operation. - + ### method `__init__` @@ -88,7 +88,7 @@ __init__(target_msbs: int = 16) --- - + ### method `adjust` @@ -103,7 +103,7 @@ Adjust AutoTruncators in a function using an inputset. --- - + ### method `dump_dict` @@ -115,7 +115,7 @@ Dump properties of the truncator to a dict. --- - + ### classmethod `load_dict` diff --git a/docs/dev/api/concrete.fhe.extensions.univariate.md b/docs/dev/api/concrete.fhe.extensions.univariate.md index 99941461a..bf2b58898 100644 --- a/docs/dev/api/concrete.fhe.extensions.univariate.md +++ b/docs/dev/api/concrete.fhe.extensions.univariate.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.univariate` Declaration of `univariate` function. @@ -8,7 +8,7 @@ Declaration of `univariate` function. --- - + ## function `univariate` diff --git a/docs/dev/api/concrete.fhe.extensions.zeros.md b/docs/dev/api/concrete.fhe.extensions.zeros.md index e3d711c57..7a1e14e60 100644 --- a/docs/dev/api/concrete.fhe.extensions.zeros.md +++ b/docs/dev/api/concrete.fhe.extensions.zeros.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.extensions.zeros` Declaration of `zeros` and `zero` functions, to simplify creation of encrypted zeros. @@ -8,7 +8,7 @@ Declaration of `zeros` and `zero` functions, to simplify creation of encrypted z --- - + ## function `zeros` @@ -31,7 +31,7 @@ Create an encrypted array of zeros. --- - + ## function `zero` @@ -44,12 +44,12 @@ Create an encrypted scalar with the value of zero. **Returns:** - Union[np.ndarray, Tracer]: Tracer that represents the operation during tracing ndarray with zero otherwise + Union[np.ndarray, Tracer]: Tracer that respresents the operation during tracing ndarray with zero otherwise --- - + ## function `zeros_like` diff --git a/docs/dev/api/concrete.fhe.internal.md b/docs/dev/api/concrete.fhe.internal.md index 88262c26f..f2fbb8c08 100644 --- a/docs/dev/api/concrete.fhe.internal.md +++ b/docs/dev/api/concrete.fhe.internal.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.internal` Export functions that are used internally by other modules for common things (e.g., assertions). diff --git a/docs/dev/api/concrete.fhe.internal.utils.md b/docs/dev/api/concrete.fhe.internal.utils.md index 6b9b670c9..5b1fee467 100644 --- a/docs/dev/api/concrete.fhe.internal.utils.md +++ b/docs/dev/api/concrete.fhe.internal.utils.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.internal.utils` Declaration of various functions and constants related to the entire project. @@ -8,7 +8,7 @@ Declaration of various functions and constants related to the entire project. --- - + ## function `assert_that` @@ -33,7 +33,7 @@ Assert a condition. --- - + ## function `unreachable` diff --git a/docs/dev/api/concrete.fhe.md b/docs/dev/api/concrete.fhe.md index 41664f8e9..38b927523 100644 --- a/docs/dev/api/concrete.fhe.md +++ b/docs/dev/api/concrete.fhe.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe` Concrete. @@ -12,6 +12,7 @@ Concrete. - **values** - **representation** - **tracing** +- **tfhers** - **mlir** - **extensions** - **compilation** diff --git a/docs/dev/api/concrete.fhe.mlir.context.md b/docs/dev/api/concrete.fhe.mlir.context.md index 01be6b659..734522360 100644 --- a/docs/dev/api/concrete.fhe.mlir.context.md +++ b/docs/dev/api/concrete.fhe.mlir.context.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.context` Declaration of `Context` class. @@ -10,16 +10,17 @@ Declaration of `Context` class. - **MAX_EXTRACTABLE_BIT** - **MIN_EXTRACTABLE_BIT** - **MAXIMUM_TLU_BIT_WIDTH** +- **LUT_COSTS_V0_NORM2_0** --- - + ## class `Context` Context class, to perform operations on conversions. - + ### method `__init__` @@ -36,7 +37,7 @@ __init__(context: Context, graph: Graph, configuration: Configuration) --- - + ### method `add` @@ -50,7 +51,7 @@ add(resulting_type: ConversionType, x: Conversion, y: Conversion) → Conversion --- - + ### method `array` @@ -64,16 +65,16 @@ array(resulting_type: ConversionType, elements: List[Conversion]) → Conversion --- - + -### method `assign_static` +### method `assign` ```python -assign_static( +assign( resulting_type: ConversionType, x: Conversion, y: Conversion, - index: Sequence[Union[int, integer, slice]] + index: Sequence[Union[int, integer, slice, ndarray, list, Conversion]] ) ``` @@ -83,7 +84,7 @@ assign_static( --- - + ### method `attribute` @@ -107,7 +108,7 @@ Create an MLIR attribute. --- - + ### method `best_chunk_ranges` @@ -140,7 +141,7 @@ Calculate best chunk ranges for given operands. --- - + ### method `bitwise` @@ -159,7 +160,7 @@ bitwise( --- - + ### method `bitwise_and` @@ -177,7 +178,7 @@ bitwise_and( --- - + ### method `bitwise_or` @@ -195,7 +196,7 @@ bitwise_or( --- - + ### method `bitwise_xor` @@ -213,7 +214,7 @@ bitwise_xor( --- - + ### method `broadcast_to` @@ -227,7 +228,7 @@ broadcast_to(x: Conversion, shape: Tuple[int, ]) --- - + ### method `cast` @@ -241,7 +242,7 @@ cast(resulting_type: ConversionType, x: Conversion) → Conversion --- - + ### method `cast_to_original_bit_width` @@ -253,7 +254,7 @@ Cast a value to its original bit width using multiplication and reinterpretation --- - + ### method `compare_with_subtraction` @@ -269,7 +270,7 @@ Apply the final comparison table and return comparison result. --- - + ### method `comparison` @@ -302,7 +303,7 @@ Compare two encrypted values. --- - + ### method `comparison_with_chunks` @@ -321,7 +322,7 @@ Idea: split x and y into small chunks compare the chunks using table lookups --- - + ### method `comparison_with_chunks_equals` @@ -343,7 +344,7 @@ Check equality of encrypted values using chunks. --- - + ### method `comparison_with_subtraction_trick` @@ -365,7 +366,7 @@ Additional Args: x_minus_y_dtype (Integer): minimal dtype that can be used to --- - + ### method `concatenate` @@ -383,12 +384,55 @@ concatenate( --- - + + +### method `conditional` + +```python +conditional( + resulting_type: Optional[ConversionType], + condition: Conversion, + then_builder: Callable[[], Optional[Conversion]], + else_builder: Optional[Callable[[], Optional[Conversion]]] = None +) → Optional[Conversion] +``` + +Create an if conditional. + + + +**Args:** + resulting_type (Optional[ConversionType]): resulting type of the operation + + condition (Conversion): condition of conditional + + then_builder (Callable[[], Optional[Conversion]]): builder of then block of conditional + + else_builder (Optional[Callable[[], Optional[Conversion]]], default = None): optional builder of else block of conditional + + + +**Returns:** + Optional[Conversion]: None if resulting type is None conversion of the created operation otherwise + + + +**Notes:** + +> - if resulting type is not None both then and else builders need to return a conversion with the same type as resulting type + +--- + + ### method `constant` ```python -constant(resulting_type: ConversionType, data: Any) → Conversion +constant( + resulting_type: ConversionType, + data: Any, + use_cache: bool = True +) → Conversion ``` @@ -397,7 +441,7 @@ constant(resulting_type: ConversionType, data: Any) → Conversion --- - + ### method `conv2d` @@ -420,7 +464,7 @@ conv2d( --- - + ### method `convert_to_chunks_and_map` @@ -465,7 +509,7 @@ Extract the chunks of two values, pack them in a single integer and map the inte --- - + ### method `dot` @@ -479,7 +523,7 @@ dot(resulting_type: ConversionType, x: Conversion, y: Conversion) → Conversion --- - + ### method `dynamic_tlu` @@ -497,7 +541,7 @@ dynamic_tlu( --- - + ### method `eint` @@ -509,7 +553,19 @@ Get encrypted unsigned integer type (e.g., !FHE.eint<3>, !FHE.eint<5>). --- - + + +### method `element_typeof` + +```python +element_typeof(value: Union[Conversion, ConversionType]) → ConversionType +``` + +Get type corresponding to the elements of a tensor type. + +--- + + ### method `encrypt` @@ -523,7 +579,7 @@ encrypt(resulting_type: ConversionType, x: Conversion) → Conversion --- - + ### method `equal` @@ -537,7 +593,7 @@ equal(resulting_type: ConversionType, x: Conversion, y: Conversion) → Conversi --- - + ### method `error` @@ -554,7 +610,7 @@ Fail compilation with an error. --- - + ### method `esint` @@ -566,7 +622,7 @@ Get encrypted signed integer type (e.g., !FHE.esint<3>, !FHE.esint<5>). --- - + ### method `extract_bits` @@ -584,7 +640,7 @@ extract_bits( --- - + ### method `flatten` @@ -598,7 +654,66 @@ flatten(x: Conversion) → Conversion --- - + + +### method `for_loop` + +```python +for_loop( + lower_bound: int, + upper_bound: int, + body: Union[Callable[[Conversion], Optional[Conversion]], Callable[[Conversion, Conversion], Optional[Conversion]]], + output: Optional[Conversion] = None, + step: int = 1 +) → Optional[Conversion] +``` + +Create a for loop. + + + +**Args:** + lower_bound (int): starting position of the for loop + + upper_bound (int): upper bound of the for loop + + body (Union[ Callable[[Conversion], Optional[Conversion]], Callable[[Conversion, Conversion], Optional[Conversion]], ]): body of the for loop + + output (Optional[Conversion], default = None): initial value of the output of the for loop + + step (int, default = 1): step between the iterations of the for loop + + + +**Returns:** + Optional[Conversion]: None if output is None conversion of the created operation otherwise + + + +**Notes:** + +> - if output is None body builder must take a single indexing variable argument - if output is not None body builder must take an indexing variable and output arguments and body must end with an scf yield operation with the updated output + +--- + + + +### method `fork_type` + +```python +fork_type( + type_: ConversionType, + bit_width: Optional[int] = None, + is_signed: Optional[bool] = None, + shape: Optional[Tuple[int, ]] = None +) → ConversionType +``` + +Fork a type with some properties update. + +--- + + ### method `greater` @@ -616,7 +731,7 @@ greater( --- - + ### method `greater_equal` @@ -634,7 +749,7 @@ greater_equal( --- - + ### method `i` @@ -646,7 +761,7 @@ Get clear signless integer type (e.g., i3, i5). --- - + ### method `identity` @@ -660,15 +775,15 @@ identity(resulting_type: ConversionType, x: Conversion) → Conversion --- - + -### method `index_static` +### method `index` ```python -index_static( +index( resulting_type: ConversionType, x: Conversion, - index: Sequence[Union[int, integer, slice, ndarray, list]] + index: Sequence[Union[int, integer, slice, ndarray, list, Conversion]] ) → Conversion ``` @@ -678,37 +793,19 @@ index_static( --- - - -### method `index_static_fancy` - -```python -index_static_fancy( - resulting_type: ConversionType, - x: Conversion, - index: Sequence[Union[int, integer, slice, ndarray, list]] -) → Conversion -``` - - - - - ---- - - + ### method `index_type` ```python -index_type() → Type +index_type() → ConversionType ``` Get index type. --- - + ### method `is_bit_width_compatible` @@ -720,7 +817,7 @@ Check if conversion types are compatible in terms of bit-width. --- - + ### method `less` @@ -734,7 +831,7 @@ less(resulting_type: ConversionType, x: Conversion, y: Conversion) → Conversio --- - + ### method `less_equal` @@ -752,7 +849,7 @@ less_equal( --- - + ### method `location` @@ -764,7 +861,7 @@ Create an MLIR location from the node that is being converted. --- - + ### method `lsb` @@ -778,7 +875,7 @@ lsb(resulting_type: ConversionType, x: Conversion) → Conversion --- - + ### method `matmul` @@ -796,7 +893,7 @@ matmul( --- - + ### method `maximum` @@ -814,7 +911,7 @@ maximum( --- - + ### method `maxpool2d` @@ -834,7 +931,7 @@ maxpool2d( --- - + ### method `minimum` @@ -852,7 +949,7 @@ minimum( --- - + ### method `minimum_maximum_with_chunks` @@ -869,7 +966,7 @@ Calculate minimum or maximum between two encrypted values using chunks. --- - + ### method `minimum_maximum_with_trick` @@ -891,7 +988,7 @@ Additional Args: x_minus_y_dtype (Integer): minimal dtype that can be used to --- - + ### method `mul` @@ -905,7 +1002,7 @@ mul(resulting_type: ConversionType, x: Conversion, y: Conversion) → Conversion --- - + ### method `multi_tlu` @@ -924,7 +1021,7 @@ multi_tlu( --- - + ### method `multiplication_with_boolean` @@ -942,7 +1039,7 @@ Calculate boolean * value using bits. --- - + ### method `multivariate_multi_tlu` @@ -961,7 +1058,7 @@ multivariate_multi_tlu( --- - + ### method `multivariate_tlu` @@ -979,7 +1076,7 @@ multivariate_tlu( --- - + ### method `neg` @@ -993,7 +1090,19 @@ neg(resulting_type: ConversionType, x: Conversion) → Conversion --- - + + +### method `none_type` + +```python +none_type() → ConversionType +``` + +Get none type. + +--- + + ### method `not_equal` @@ -1011,7 +1120,7 @@ not_equal( --- - + ### method `ones` @@ -1025,16 +1134,17 @@ ones(resulting_type: ConversionType) → Conversion --- - + ### method `operation` ```python operation( operation: Callable, - resulting_type: ConversionType, + resulting_type: Optional[ConversionType], *args, original_bit_width: Optional[int] = None, + use_cache: bool = True, **kwargs ) → Conversion ``` @@ -1046,12 +1156,14 @@ Create a conversion from an MLIR operation. **Args:** operation (Callable): MLIR operation to create (e.g., fhe.AddEintOp) - resulting_type (ConversionType): type of the output of the operation + resulting_type (Optional[ConversionType]): optional type of the output of the operation *args (Any): args to pass to the operation original_bit_width (Optional[int], default = None): original bit width of the resulting conversion + use_cache (bool, default = True): whether to use the operation cache or not + *kwargs (Any): kwargs to pass to the operation **Returns:** @@ -1059,7 +1171,7 @@ Create a conversion from an MLIR operation. --- - + ### method `pack_multivariate_inputs` @@ -1081,7 +1193,7 @@ Packs inputs of multivariate table lookups. --- - + ### method `reinterpret` @@ -1099,7 +1211,7 @@ reinterpret( --- - + ### method `relu` @@ -1113,7 +1225,7 @@ relu(resulting_type: ConversionType, x: Conversion) → Conversion --- - + ### method `reshape` @@ -1127,7 +1239,7 @@ reshape(x: Conversion, shape: Tuple[int, ]) → Conversion --- - + ### method `round_bit_pattern` @@ -1147,7 +1259,21 @@ round_bit_pattern( --- - + + +### method `safe_reduce_precision` + +```python +safe_reduce_precision(x: Conversion, bit_width: int) → Conversion +``` + + + + + +--- + + ### method `shift` @@ -1167,7 +1293,21 @@ shift( --- - + + +### method `shift_left_at_constant_precision` + +```python +shift_left_at_constant_precision(x: Conversion, rank: int) → Conversion +``` + + + + + +--- + + ### method `sub` @@ -1181,7 +1321,7 @@ sub(resulting_type: ConversionType, x: Conversion, y: Conversion) → Conversion --- - + ### method `sum` @@ -1200,7 +1340,7 @@ sum( --- - + ### method `tensor` @@ -1212,7 +1352,7 @@ Get tensor type (e.g., tensor<5xi3>, tensor<3x2x!FHE.eint<5>>). --- - + ### method `tensorize` @@ -1226,7 +1366,7 @@ tensorize(x: Conversion) → Conversion --- - + ### method `tlu` @@ -1240,7 +1380,7 @@ tlu(resulting_type: ConversionType, on: Conversion, table: Sequence[int]) --- - + ### method `to_signed` @@ -1254,7 +1394,7 @@ to_signed(x: Conversion) → Conversion --- - + ### method `to_signedness` @@ -1268,7 +1408,7 @@ to_signedness(x: Conversion, of: ConversionType) → Conversion --- - + ### method `to_unsigned` @@ -1282,7 +1422,7 @@ to_unsigned(x: Conversion) → Conversion --- - + ### method `transpose` @@ -1300,7 +1440,7 @@ transpose( --- - + ### method `tree_add` @@ -1314,7 +1454,7 @@ tree_add(resulting_type: ConversionType, xs: List[Conversion]) → Conversion --- - + ### method `truncate_bit_pattern` @@ -1328,7 +1468,7 @@ truncate_bit_pattern(x: Conversion, lsbs_to_remove: int) → Conversion --- - + ### method `try_comparison_with_clipping_trick` @@ -1357,19 +1497,19 @@ Additional Args: smaller_minus_clipped_bigger_dtype (Integer): minimal dtype t --- - + ### method `typeof` ```python -typeof(value: Union[ValueDescription, Node]) → ConversionType +typeof(value: Optional[ValueDescription, Node]) → ConversionType ``` Get type corresponding to a value or a node. --- - + ### method `where` @@ -1388,7 +1528,7 @@ where( --- - + ### method `zeros` diff --git a/docs/dev/api/concrete.fhe.mlir.conversion.md b/docs/dev/api/concrete.fhe.mlir.conversion.md index d83422f60..9d391b84a 100644 --- a/docs/dev/api/concrete.fhe.mlir.conversion.md +++ b/docs/dev/api/concrete.fhe.mlir.conversion.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.conversion` Declaration of `ConversionType` and `Conversion` classes. @@ -9,12 +9,12 @@ Declaration of `ConversionType` and `Conversion` classes. --- - + ## class `ConversionType` ConversionType class, to make it easier to work with MLIR types. - + ### method `__init__` @@ -64,12 +64,12 @@ __init__(mlir: Type) --- - + ## class `Conversion` Conversion class, to store MLIR operations with additional information. - + ### method `__init__` @@ -158,7 +158,7 @@ If not explicitly set, defaults to the actual bit width. --- - + ### method `set_original_bit_width` diff --git a/docs/dev/api/concrete.fhe.mlir.converter.md b/docs/dev/api/concrete.fhe.mlir.converter.md index 0f55a7349..4263a3a2d 100644 --- a/docs/dev/api/concrete.fhe.mlir.converter.md +++ b/docs/dev/api/concrete.fhe.mlir.converter.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.converter` Declaration of `Converter` class. @@ -12,17 +12,20 @@ Declaration of `Converter` class. --- - + ## class `Converter` Converter class, to convert a computation graph to MLIR. - + ### method `__init__` ```python -__init__(configuration: Configuration) +__init__( + configuration: Configuration, + composition_rules: Optional[Iterable[CompositionRule]] = None +) ``` @@ -34,7 +37,7 @@ __init__(configuration: Configuration) --- - + ### method `add` @@ -48,7 +51,7 @@ add(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `array` @@ -62,7 +65,21 @@ array(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + + +### method `assign_dynamic` + +```python +assign_dynamic(ctx: Context, node: Node, preds: List[Conversion]) → Conversion +``` + + + + + +--- + + ### method `assign_static` @@ -76,7 +93,7 @@ assign_static(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `bitwise_and` @@ -90,7 +107,7 @@ bitwise_and(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `bitwise_or` @@ -104,7 +121,7 @@ bitwise_or(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `bitwise_xor` @@ -118,7 +135,7 @@ bitwise_xor(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `broadcast_to` @@ -132,7 +149,7 @@ broadcast_to(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `concatenate` @@ -146,7 +163,7 @@ concatenate(ctx: Context, node: Node, preds: List[Conversion]) --- - + ### method `constant` @@ -160,7 +177,7 @@ constant(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `conv1d` @@ -174,7 +191,7 @@ conv1d(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `conv2d` @@ -188,7 +205,7 @@ conv2d(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `conv3d` @@ -202,7 +219,7 @@ conv3d(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `convert` @@ -229,7 +246,7 @@ Return: MlirModule: In-memory MLIR module corresponding to the graph --- - + ### method `convert_many` @@ -250,7 +267,7 @@ Return: MlirModule: In-memory MLIR module corresponding to the graph --- - + ### method `copy` @@ -264,7 +281,7 @@ copy(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `dot` @@ -278,7 +295,7 @@ dot(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `dynamic_tlu` @@ -292,7 +309,7 @@ dynamic_tlu(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `equal` @@ -306,7 +323,7 @@ equal(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `expand_dims` @@ -320,7 +337,7 @@ expand_dims(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `extract_bit_pattern` @@ -338,7 +355,7 @@ extract_bit_pattern( --- - + ### method `greater` @@ -352,7 +369,7 @@ greater(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `greater_equal` @@ -366,7 +383,7 @@ greater_equal(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `identity` @@ -380,7 +397,21 @@ identity(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + + +### method `index_dynamic` + +```python +index_dynamic(ctx: Context, node: Node, preds: List[Conversion]) → Conversion +``` + + + + + +--- + + ### method `index_static` @@ -394,7 +425,7 @@ index_static(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `left_shift` @@ -408,7 +439,7 @@ left_shift(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `less` @@ -422,7 +453,7 @@ less(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `less_equal` @@ -436,7 +467,7 @@ less_equal(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `matmul` @@ -450,7 +481,7 @@ matmul(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `maximum` @@ -464,7 +495,7 @@ maximum(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `maxpool1d` @@ -478,7 +509,7 @@ maxpool1d(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `maxpool2d` @@ -492,7 +523,7 @@ maxpool2d(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `maxpool3d` @@ -506,7 +537,7 @@ maxpool3d(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `minimum` @@ -520,7 +551,7 @@ minimum(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `multiply` @@ -534,7 +565,7 @@ multiply(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `negative` @@ -548,7 +579,7 @@ negative(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `node` @@ -571,7 +602,7 @@ Return: Conversion: conversion object corresponding to node --- - + ### method `not_equal` @@ -585,7 +616,7 @@ not_equal(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `ones` @@ -599,7 +630,7 @@ ones(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `process` @@ -616,7 +647,7 @@ Process a computation graph for MLIR conversion. --- - + ### method `relu` @@ -630,7 +661,7 @@ relu(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `reshape` @@ -644,7 +675,7 @@ reshape(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `right_shift` @@ -658,7 +689,7 @@ right_shift(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `round_bit_pattern` @@ -676,7 +707,7 @@ round_bit_pattern( --- - + ### method `simplify_tag` @@ -688,7 +719,7 @@ Keep only `n` higher tag parts. --- - + ### method `squeeze` @@ -702,7 +733,7 @@ squeeze(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `stdout_with_ansi_support` @@ -714,7 +745,7 @@ Detect if ansi characters can be used (e.g. not the case in notebooks). --- - + ### method `subtract` @@ -728,7 +759,7 @@ subtract(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `sum` @@ -742,7 +773,39 @@ sum(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + + +### method `tfhers_from_native` + +```python +tfhers_from_native( + ctx: Context, + node: Node, + preds: List[Conversion] +) → Conversion +``` + + + + + +--- + + + +### method `tfhers_to_native` + +```python +tfhers_to_native(ctx: Context, node: Node, preds: List[Conversion]) → Conversion +``` + + + + + +--- + + ### method `tlu` @@ -756,7 +819,7 @@ tlu(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### classmethod `tlu_adjust` @@ -770,7 +833,7 @@ tlu_adjust(table, variable_input, target_bit_width, clipping, reduce_precision) --- - + ### classmethod `trace_progress` @@ -795,7 +858,7 @@ Add a trace_message for progress. --- - + ### method `transpose` @@ -809,7 +872,7 @@ transpose(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `truncate_bit_pattern` @@ -827,7 +890,7 @@ truncate_bit_pattern( --- - + ### method `where` @@ -841,7 +904,7 @@ where(ctx: Context, node: Node, preds: List[Conversion]) → Conversion --- - + ### method `zeros` diff --git a/docs/dev/api/concrete.fhe.mlir.md b/docs/dev/api/concrete.fhe.mlir.md index 3b0416396..4a2e730ff 100644 --- a/docs/dev/api/concrete.fhe.mlir.md +++ b/docs/dev/api/concrete.fhe.mlir.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir` Provide `computation graph` to `mlir` functionality. diff --git a/docs/dev/api/concrete.fhe.mlir.processors.assign_bit_widths.md b/docs/dev/api/concrete.fhe.mlir.processors.assign_bit_widths.md index 018237b08..3b8f9d7da 100644 --- a/docs/dev/api/concrete.fhe.mlir.processors.assign_bit_widths.md +++ b/docs/dev/api/concrete.fhe.mlir.processors.assign_bit_widths.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.processors.assign_bit_widths` Declaration of `AssignBitWidths` graph processor. @@ -9,7 +9,7 @@ Declaration of `AssignBitWidths` graph processor. --- - + ## class `AssignBitWidths` AssignBitWidths graph processor, to assign proper bit-widths to be compatible with FHE. @@ -21,14 +21,14 @@ There are two modes: There is preference list for comparison strategies. - Strategies will be traversed in order and bit-widths will be assigned according to the first available strategy. - + ### method `__init__` ```python __init__( single_precision: bool, - composable: bool, + composition_rules: List[CompositionRule], comparison_strategy_preference: List[ComparisonStrategy], bitwise_strategy_preference: List[BitwiseStrategy], shifts_with_promotion: bool, @@ -46,7 +46,7 @@ __init__( --- - + ### method `apply_many` @@ -61,12 +61,12 @@ apply_many(graphs: Dict[str, Graph]) --- - + ## class `AdditionalConstraints` AdditionalConstraints class to customize bit-width assignment step easily. - + ### method `__init__` @@ -92,7 +92,7 @@ __init__( --- - + ### method `all_inputs_are_encrypted` @@ -106,7 +106,7 @@ all_inputs_are_encrypted(node: Node, preds: List[Node]) → bool --- - + ### method `bitwise` @@ -120,7 +120,7 @@ bitwise(node: Node, preds: List[Node]) --- - + ### method `comparison` @@ -134,7 +134,7 @@ comparison(node: Node, preds: List[Node]) --- - + ### method `constraint` @@ -148,7 +148,7 @@ constraint(node: Node, constraint: BoolRef) --- - + ### method `generate_for` @@ -167,7 +167,7 @@ Generate additional constraints for a node. --- - + ### method `has_overflow_protection` @@ -181,7 +181,7 @@ has_overflow_protection(node: Node, preds: List[Node]) → bool --- - + ### method `inputs_and_output_share_precision` @@ -195,7 +195,7 @@ inputs_and_output_share_precision(node: Node, preds: List[Node]) --- - + ### method `inputs_require_one_more_bit` @@ -209,7 +209,7 @@ inputs_require_one_more_bit(node: Node, preds: List[Node]) --- - + ### method `inputs_share_precision` @@ -223,7 +223,7 @@ inputs_share_precision(node: Node, preds: List[Node]) --- - + ### method `min_max` @@ -237,7 +237,7 @@ min_max(node: Node, preds: List[Node]) --- - + ### method `multivariate` @@ -251,7 +251,7 @@ multivariate(node: Node, preds: List[Node]) --- - + ### method `some_inputs_are_clear` diff --git a/docs/dev/api/concrete.fhe.mlir.processors.assign_node_ids.md b/docs/dev/api/concrete.fhe.mlir.processors.assign_node_ids.md new file mode 100644 index 000000000..748d4ee05 --- /dev/null +++ b/docs/dev/api/concrete.fhe.mlir.processors.assign_node_ids.md @@ -0,0 +1,34 @@ + + + + +# module `concrete.fhe.mlir.processors.assign_node_ids` +Declaration of `AssignNodeIds` graph processor. + + + +--- + + + +## class `AssignNodeIds` +AssignNodeIds graph processor, to assign node id (%0, %1, etc.) to node properties. + + + + +--- + + + +### method `apply_many` + +```python +apply_many(graphs: Dict[str, Graph]) +``` + + + + + + diff --git a/docs/dev/api/concrete.fhe.mlir.processors.check_integer_only.md b/docs/dev/api/concrete.fhe.mlir.processors.check_integer_only.md index 8b3cadcad..acb97450b 100644 --- a/docs/dev/api/concrete.fhe.mlir.processors.check_integer_only.md +++ b/docs/dev/api/concrete.fhe.mlir.processors.check_integer_only.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.processors.check_integer_only` Declaration of `CheckIntegerOnly` graph processor. @@ -9,7 +9,7 @@ Declaration of `CheckIntegerOnly` graph processor. --- - + ## class `CheckIntegerOnly` CheckIntegerOnly graph processor, to make sure the graph only contains integer nodes. @@ -19,7 +19,7 @@ CheckIntegerOnly graph processor, to make sure the graph only contains integer n --- - + ### method `apply` diff --git a/docs/dev/api/concrete.fhe.mlir.processors.md b/docs/dev/api/concrete.fhe.mlir.processors.md index 1ddc4d03e..e3796ff2e 100644 --- a/docs/dev/api/concrete.fhe.mlir.processors.md +++ b/docs/dev/api/concrete.fhe.mlir.processors.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.processors` All graph processors. @@ -8,6 +8,7 @@ All graph processors. **Global Variables** --------------- - **assign_bit_widths** +- **assign_node_ids** - **check_integer_only** - **process_rounding** diff --git a/docs/dev/api/concrete.fhe.mlir.processors.process_rounding.md b/docs/dev/api/concrete.fhe.mlir.processors.process_rounding.md index af4858577..767e2386e 100644 --- a/docs/dev/api/concrete.fhe.mlir.processors.process_rounding.md +++ b/docs/dev/api/concrete.fhe.mlir.processors.process_rounding.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.processors.process_rounding` Declaration of `ProcessRounding` graph processor. @@ -9,12 +9,12 @@ Declaration of `ProcessRounding` graph processor. --- - + ## class `ProcessRounding` ProcessRounding graph processor, to analyze rounding and support regular operations on it. - + ### method `__init__` @@ -31,7 +31,7 @@ __init__(rounding_exactness: Exactness) --- - + ### method `apply` @@ -45,7 +45,7 @@ apply(graph: Graph) --- - + ### method `process_predecessors` @@ -57,7 +57,7 @@ Process predecessors of the rounding. --- - + ### method `process_successors` @@ -69,7 +69,7 @@ Process successors of the rounding. --- - + ### method `replace_with_tlu` diff --git a/docs/dev/api/concrete.fhe.mlir.utils.md b/docs/dev/api/concrete.fhe.mlir.utils.md index 47f7f8706..94e5ee4c7 100644 --- a/docs/dev/api/concrete.fhe.mlir.utils.md +++ b/docs/dev/api/concrete.fhe.mlir.utils.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.mlir.utils` Declaration of various functions and constants related to MLIR conversion. @@ -11,7 +11,7 @@ Declaration of various functions and constants related to MLIR conversion. --- - + ## function `flood_replace_none_values` @@ -29,7 +29,7 @@ Use flooding algorithm to replace `None` values. --- - + ## function `construct_table_multivariate` @@ -54,7 +54,7 @@ Construct the lookup table for a multivariate node. --- - + ## function `construct_table` @@ -85,7 +85,7 @@ Construct the lookup table for an Operation.Generic node. --- - + ## function `construct_deduplicated_tables` @@ -132,12 +132,12 @@ means the lookup on 3x2 input will result in --- - + ## class `HashableNdarray` HashableNdarray class, to use numpy arrays in dictionaries. - + ### method `__init__` @@ -155,7 +155,7 @@ __init__(array: ndarray) --- - + ## class `Comparison` Comparison enum, to store the result comparison in 2-bits as there are three possible outcomes. diff --git a/docs/dev/api/concrete.fhe.representation.evaluator.md b/docs/dev/api/concrete.fhe.representation.evaluator.md index 97194330a..ca215a459 100644 --- a/docs/dev/api/concrete.fhe.representation.evaluator.md +++ b/docs/dev/api/concrete.fhe.representation.evaluator.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.representation.evaluator` Declaration of various `Evaluator` classes, to make graphs picklable. @@ -9,12 +9,12 @@ Declaration of various `Evaluator` classes, to make graphs picklable. --- - + ## class `ConstantEvaluator` ConstantEvaluator class, to evaluate Operation.Constant nodes. - + ### method `__init__` @@ -32,7 +32,7 @@ __init__(properties) --- - + ## class `InputEvaluator` InputEvaluator class, to evaluate Operation.Input nodes. @@ -43,12 +43,12 @@ InputEvaluator class, to evaluate Operation.Input nodes. --- - + ## class `GenericEvaluator` GenericEvaluator class, to evaluate Operation.Generic nodes. - + ### method `__init__` @@ -66,12 +66,12 @@ __init__(operation, properties) --- - + ## class `GenericTupleEvaluator` GenericEvaluator class, to evaluate Operation.Generic nodes where args are packed in a tuple. - + ### method `__init__` diff --git a/docs/dev/api/concrete.fhe.representation.graph.md b/docs/dev/api/concrete.fhe.representation.graph.md index d940c7948..7794c3d2c 100644 --- a/docs/dev/api/concrete.fhe.representation.graph.md +++ b/docs/dev/api/concrete.fhe.representation.graph.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.representation.graph` Declaration of `Graph` class. @@ -12,12 +12,12 @@ Declaration of `Graph` class. --- - + ## class `Graph` Graph class, to represent computation graphs. - + ### method `__init__` @@ -36,11 +36,23 @@ __init__( +--- + +#### property inputs_count + +Returns the number of inputs of the graph. + +--- + +#### property outputs_count + +Returns the number of outputs of the graph. + --- - + ### method `draw` @@ -74,7 +86,7 @@ That this function requires the python `pygraphviz` package which itself require --- - + ### method `evaluate` @@ -101,7 +113,7 @@ Perform the computation `Graph` represents and get resulting values for all node --- - + ### method `format` @@ -146,7 +158,7 @@ Get the textual representation of the `Graph`. --- - + ### method `format_bit_width_assignments` @@ -163,7 +175,7 @@ Get the textual representation of bit width assignments of the graph. --- - + ### method `format_bit_width_constraints` @@ -180,7 +192,7 @@ Get the textual representation of bit width constraints of the graph. --- - + ### method `integer_range` @@ -215,7 +227,7 @@ Only nodes after filtering will be used to calculate the result. --- - + ### method `maximum_integer_bit_width` @@ -253,7 +265,7 @@ Only nodes after filtering will be used to calculate the result. --- - + ### method `measure_bounds` @@ -291,7 +303,7 @@ e.g., --- - + ### method `ordered_inputs` @@ -308,7 +320,7 @@ Get the input nodes of the `Graph`, ordered by their indices. --- - + ### method `ordered_outputs` @@ -325,7 +337,7 @@ Get the output nodes of the `Graph`, ordered by their indices. --- - + ### method `ordered_preds_of` @@ -347,7 +359,7 @@ Get predecessors of `node`, ordered by their indices. --- - + ### method `prune_useless_nodes` @@ -359,7 +371,7 @@ Remove unreachable nodes from the graph. --- - + ### method `query_nodes` @@ -397,7 +409,7 @@ Filters work like so: str -> nodes without exact match is skipped List[str] -> --- - + ### method `update_with_bounds` @@ -415,7 +427,7 @@ Update `ValueDescription`s within the `Graph` according to measured bounds. --- - + ## class `GraphProcessor` GraphProcessor base class, to define the API for a graph processing pipeline. @@ -427,7 +439,7 @@ Process a single graph. --- - + ### method `apply` @@ -439,7 +451,7 @@ Process the graph. --- - + ### method `error` @@ -459,7 +471,7 @@ Fail processing with an error. --- - + ## class `MultiGraphProcessor` MultiGraphProcessor base class, to define the API for a multiple graph processing pipeline. @@ -471,7 +483,7 @@ Processes multiple graphs at once. --- - + ### method `apply` @@ -483,7 +495,7 @@ Process a single graph. --- - + ### method `apply_many` @@ -495,7 +507,7 @@ Process a dictionnary of graphs. --- - + ### method `error` diff --git a/docs/dev/api/concrete.fhe.representation.md b/docs/dev/api/concrete.fhe.representation.md index 32d92b74d..5103c358a 100644 --- a/docs/dev/api/concrete.fhe.representation.md +++ b/docs/dev/api/concrete.fhe.representation.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.representation` Define structures used to represent computation. diff --git a/docs/dev/api/concrete.fhe.representation.node.md b/docs/dev/api/concrete.fhe.representation.node.md index 1326e437a..a681f93b5 100644 --- a/docs/dev/api/concrete.fhe.representation.node.md +++ b/docs/dev/api/concrete.fhe.representation.node.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.representation.node` Declaration of `Node` class. @@ -13,12 +13,12 @@ Declaration of `Node` class. --- - + ## class `Node` Node class, to represent computation in a computation graph. - + ### method `__init__` @@ -74,7 +74,7 @@ Get whether the node is can be fused into a table lookup. --- - + ### method `constant` @@ -101,7 +101,7 @@ Create an Operation.Constant node. --- - + ### method `format` @@ -125,7 +125,7 @@ Get the textual representation of the `Node` (dependent to preds). --- - + ### method `generic` @@ -167,7 +167,7 @@ Create an Operation.Generic node. --- - + ### method `input` @@ -191,7 +191,7 @@ Create an Operation.Input node. --- - + ### method `label` diff --git a/docs/dev/api/concrete.fhe.representation.operation.md b/docs/dev/api/concrete.fhe.representation.operation.md index f720a6f13..53444dc11 100644 --- a/docs/dev/api/concrete.fhe.representation.operation.md +++ b/docs/dev/api/concrete.fhe.representation.operation.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.representation.operation` Declaration of `Operation` enum. @@ -9,7 +9,7 @@ Declaration of `Operation` enum. --- - + ## class `Operation` Operation enum, to distinguish nodes within a computation graph. diff --git a/docs/dev/api/concrete.fhe.representation.utils.md b/docs/dev/api/concrete.fhe.representation.utils.md index a07807aea..b2b902110 100644 --- a/docs/dev/api/concrete.fhe.representation.utils.md +++ b/docs/dev/api/concrete.fhe.representation.utils.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.representation.utils` Declaration of various functions and constants related to representation of computation. @@ -13,7 +13,7 @@ Declaration of various functions and constants related to representation of comp --- - + ## function `format_constant` @@ -44,7 +44,7 @@ Get the textual representation of a constant. --- - + ## function `format_indexing_element` diff --git a/docs/dev/api/concrete.fhe.tfhers.dtypes.md b/docs/dev/api/concrete.fhe.tfhers.dtypes.md new file mode 100644 index 000000000..1c3519a66 --- /dev/null +++ b/docs/dev/api/concrete.fhe.tfhers.dtypes.md @@ -0,0 +1,98 @@ + + + + +# module `concrete.fhe.tfhers.dtypes` +Declaration of `TFHERSIntegerType` class. + +**Global Variables** +--------------- +- **int8_2_2** +- **uint8_2_2** +- **int16_2_2** +- **uint16_2_2** + + +--- + + + +## class `TFHERSIntegerType` +TFHERSIntegerType (Subclass of Integer) to represent tfhers integer types. + + + +### method `__init__` + +```python +__init__(is_signed: bool, bit_width: int, carry_width: int, msg_width: int) +``` + + + + + + + + +--- + + + +### method `decode` + +```python +decode(value: ndarray) → Union[int, ndarray] +``` + +Decode a tfhers-encoded integer (scalar or tensor). + + + +**Args:** + + - `value` (np.ndarray): encoded value + + + +**Raises:** + + - `ValueError`: bad encoding + + + +**Returns:** + + - `Union[int, np.ndarray]`: decoded value + +--- + + + +### method `encode` + +```python +encode(value: Union[int, integer, ndarray]) → ndarray +``` + +Encode a scalar or tensor to tfhers integers. + + + +**Args:** + + - `value` (Union[int, np.ndarray]): scalar or tensor of integer to encode + + + +**Raises:** + + - `TypeError`: wrong value type + + + +**Returns:** + + - `np.ndarray`: encoded scalar or tensor + + diff --git a/docs/dev/api/concrete.fhe.tfhers.md b/docs/dev/api/concrete.fhe.tfhers.md new file mode 100644 index 000000000..60fe1740e --- /dev/null +++ b/docs/dev/api/concrete.fhe.tfhers.md @@ -0,0 +1,14 @@ + + + + +# module `concrete.fhe.tfhers` +tfhers module to represent, and compute on tfhers integer values. + +**Global Variables** +--------------- +- **dtypes** +- **values** +- **tracing** + + diff --git a/docs/dev/api/concrete.fhe.tfhers.tracing.md b/docs/dev/api/concrete.fhe.tfhers.tracing.md new file mode 100644 index 000000000..a23d6d6f1 --- /dev/null +++ b/docs/dev/api/concrete.fhe.tfhers.tracing.md @@ -0,0 +1,69 @@ + + + + +# module `concrete.fhe.tfhers.tracing` +Tracing of tfhers operations. + + +--- + + + +## function `to_native` + +```python +to_native(value: Union[Tracer, TFHERSInteger]) → Union[Tracer, int, ndarray] +``` + +Convert a tfhers integer to the Concrete representation. + + + +**Args:** + + - `value` (Union[Tracer, TFHERSInteger]): tfhers integer + + + +**Raises:** + + - `TypeError`: wrong input type + + + +**Returns:** + + - `Union[Tracer, int, ndarray]`: Tracer if the input is a tracer. int or ndarray otherwise. + + +--- + + + +## function `from_native` + +```python +from_native( + value: Union[Tracer, int, ndarray], + dtype_to: TFHERSIntegerType +) → Union[Tracer, int, ndarray] +``` + +Convert a Concrete integer to the tfhers representation. + +The returned value isn't wrapped in a TFHERSInteger, but should have its representation. + + + +**Args:** + + - `value` (Union[Tracer, int, ndarray]): Concrete value to convert to tfhers + - `dtype_to` (TFHERSIntegerType): tfhers integer type to convert to + + + +**Returns:** + Union[Tracer, int, ndarray] + + diff --git a/docs/dev/api/concrete.fhe.tfhers.values.md b/docs/dev/api/concrete.fhe.tfhers.values.md new file mode 100644 index 000000000..ea399e063 --- /dev/null +++ b/docs/dev/api/concrete.fhe.tfhers.values.md @@ -0,0 +1,100 @@ + + + + +# module `concrete.fhe.tfhers.values` +Declaration of `TFHERSInteger` which wraps values as being of tfhers types. + + + +--- + + + +## class `TFHERSInteger` +Wrap integer values (scalar or arrays) into typed values, using tfhers types. + + + +### method `__init__` + +```python +__init__(dtype: TFHERSIntegerType, value: Union[List, int, ndarray]) +``` + + + + + + +--- + +#### property dtype + +Get the type of the wrapped value. + + + +**Returns:** + TFHERSIntegerType + +--- + +#### property shape + +Get the shape of the wrapped value. + + + +**Returns:** + + - `tuple`: shape + +--- + +#### property value + +Get the wrapped value. + + + +**Returns:** + Union[int, np.ndarray] + + + +--- + + + +### method `max` + +```python +max() +``` + +Get the maximum value that can be represented by the current type. + + + +**Returns:** + int: maximum value that can be represented by the current type + +--- + + + +### method `min` + +```python +min() +``` + +Get the minimum value that can be represented by the current type. + + + +**Returns:** + int: minimum value that can be represented by the current type + + diff --git a/docs/dev/api/concrete.fhe.tracing.md b/docs/dev/api/concrete.fhe.tracing.md index f82f03566..7f1743c5a 100644 --- a/docs/dev/api/concrete.fhe.tracing.md +++ b/docs/dev/api/concrete.fhe.tracing.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.tracing` Provide `function` to `computation graph` functionality. diff --git a/docs/dev/api/concrete.fhe.tracing.tracer.md b/docs/dev/api/concrete.fhe.tracing.tracer.md index 5f119b2f2..3febee330 100644 --- a/docs/dev/api/concrete.fhe.tracing.tracer.md +++ b/docs/dev/api/concrete.fhe.tracing.tracer.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.tracing.tracer` Declaration of `Tracer` class. @@ -9,12 +9,12 @@ Declaration of `Tracer` class. --- - + ## class `Tracer` Tracer class, to create computation graphs from python functions. - + ### method `__init__` @@ -55,7 +55,7 @@ Trace numpy.ndarray.size. --- - + ### method `astype` @@ -69,7 +69,7 @@ Trace numpy.ndarray.astype(dtype). --- - + ### method `clip` @@ -81,7 +81,7 @@ Trace numpy.ndarray.clip(). --- - + ### method `dot` @@ -93,7 +93,7 @@ Trace numpy.ndarray.dot(). --- - + ### method `flatten` @@ -105,7 +105,7 @@ Trace numpy.ndarray.flatten(). --- - + ### method `reshape` @@ -117,7 +117,7 @@ Trace numpy.ndarray.reshape(newshape). --- - + ### method `round` @@ -129,7 +129,7 @@ Trace numpy.ndarray.round(). --- - + ### method `sanitize` @@ -151,7 +151,7 @@ Try to create a tracer from a value. --- - + ### method `trace` @@ -184,7 +184,7 @@ Trace `function` and create the `Graph` that represents it. --- - + ### method `transpose` @@ -197,12 +197,12 @@ Trace numpy.ndarray.transpose(). --- - + ## class `Annotation` Base annotation for direct definition. - + ### method `__init__` @@ -243,7 +243,7 @@ Trace numpy.ndarray.size. --- - + ### method `astype` @@ -257,7 +257,7 @@ Trace numpy.ndarray.astype(dtype). --- - + ### method `clip` @@ -269,7 +269,7 @@ Trace numpy.ndarray.clip(). --- - + ### method `dot` @@ -281,7 +281,7 @@ Trace numpy.ndarray.dot(). --- - + ### method `flatten` @@ -293,7 +293,7 @@ Trace numpy.ndarray.flatten(). --- - + ### method `reshape` @@ -305,7 +305,7 @@ Trace numpy.ndarray.reshape(newshape). --- - + ### method `round` @@ -317,7 +317,7 @@ Trace numpy.ndarray.round(). --- - + ### method `sanitize` @@ -339,7 +339,7 @@ Try to create a tracer from a value. --- - + ### method `trace` @@ -372,7 +372,7 @@ Trace `function` and create the `Graph` that represents it. --- - + ### method `transpose` @@ -385,12 +385,12 @@ Trace numpy.ndarray.transpose(). --- - + ## class `ScalarAnnotation` Base scalar annotation for direct definition. - + ### method `__init__` @@ -431,7 +431,7 @@ Trace numpy.ndarray.size. --- - + ### method `astype` @@ -445,7 +445,7 @@ Trace numpy.ndarray.astype(dtype). --- - + ### method `clip` @@ -457,7 +457,7 @@ Trace numpy.ndarray.clip(). --- - + ### method `dot` @@ -469,7 +469,7 @@ Trace numpy.ndarray.dot(). --- - + ### method `flatten` @@ -481,7 +481,7 @@ Trace numpy.ndarray.flatten(). --- - + ### method `reshape` @@ -493,7 +493,7 @@ Trace numpy.ndarray.reshape(newshape). --- - + ### method `round` @@ -505,7 +505,7 @@ Trace numpy.ndarray.round(). --- - + ### method `sanitize` @@ -527,7 +527,7 @@ Try to create a tracer from a value. --- - + ### method `trace` @@ -560,7 +560,7 @@ Trace `function` and create the `Graph` that represents it. --- - + ### method `transpose` @@ -573,12 +573,12 @@ Trace numpy.ndarray.transpose(). --- - + ## class `TensorAnnotation` Base tensor annotation for direct definition. - + ### method `__init__` @@ -619,7 +619,7 @@ Trace numpy.ndarray.size. --- - + ### method `astype` @@ -633,7 +633,7 @@ Trace numpy.ndarray.astype(dtype). --- - + ### method `clip` @@ -645,7 +645,7 @@ Trace numpy.ndarray.clip(). --- - + ### method `dot` @@ -657,7 +657,7 @@ Trace numpy.ndarray.dot(). --- - + ### method `flatten` @@ -669,7 +669,7 @@ Trace numpy.ndarray.flatten(). --- - + ### method `reshape` @@ -681,7 +681,7 @@ Trace numpy.ndarray.reshape(newshape). --- - + ### method `round` @@ -693,7 +693,7 @@ Trace numpy.ndarray.round(). --- - + ### method `sanitize` @@ -715,7 +715,7 @@ Try to create a tracer from a value. --- - + ### method `trace` @@ -748,7 +748,7 @@ Trace `function` and create the `Graph` that represents it. --- - + ### method `transpose` diff --git a/docs/dev/api/concrete.fhe.tracing.typing.md b/docs/dev/api/concrete.fhe.tracing.typing.md index 3ae3c47f5..06551b51b 100644 --- a/docs/dev/api/concrete.fhe.tracing.typing.md +++ b/docs/dev/api/concrete.fhe.tracing.typing.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.tracing.typing` Declaration of type annotation. @@ -9,7 +9,7 @@ Declaration of type annotation. --- - + ## class `f32` Scalar f32 annotation. @@ -44,7 +44,7 @@ Trace numpy.ndarray.size. --- - + ## class `f64` Scalar f64 annotation. @@ -79,7 +79,7 @@ Trace numpy.ndarray.size. --- - + ## class `int1` Scalar int1 annotation. @@ -114,7 +114,7 @@ Trace numpy.ndarray.size. --- - + ## class `int2` Scalar int2 annotation. @@ -149,7 +149,7 @@ Trace numpy.ndarray.size. --- - + ## class `int3` Scalar int3 annotation. @@ -184,7 +184,7 @@ Trace numpy.ndarray.size. --- - + ## class `int4` Scalar int4 annotation. @@ -219,7 +219,7 @@ Trace numpy.ndarray.size. --- - + ## class `int5` Scalar int5 annotation. @@ -254,7 +254,7 @@ Trace numpy.ndarray.size. --- - + ## class `int6` Scalar int6 annotation. @@ -289,7 +289,7 @@ Trace numpy.ndarray.size. --- - + ## class `int7` Scalar int7 annotation. @@ -324,7 +324,7 @@ Trace numpy.ndarray.size. --- - + ## class `int8` Scalar int8 annotation. @@ -359,7 +359,7 @@ Trace numpy.ndarray.size. --- - + ## class `int9` Scalar int9 annotation. @@ -394,7 +394,7 @@ Trace numpy.ndarray.size. --- - + ## class `int10` Scalar int10 annotation. @@ -429,7 +429,7 @@ Trace numpy.ndarray.size. --- - + ## class `int11` Scalar int11 annotation. @@ -464,7 +464,7 @@ Trace numpy.ndarray.size. --- - + ## class `int12` Scalar int12 annotation. @@ -499,7 +499,7 @@ Trace numpy.ndarray.size. --- - + ## class `int13` Scalar int13 annotation. @@ -534,7 +534,7 @@ Trace numpy.ndarray.size. --- - + ## class `int14` Scalar int14 annotation. @@ -569,7 +569,7 @@ Trace numpy.ndarray.size. --- - + ## class `int15` Scalar int15 annotation. @@ -604,7 +604,7 @@ Trace numpy.ndarray.size. --- - + ## class `int16` Scalar int16 annotation. @@ -639,7 +639,7 @@ Trace numpy.ndarray.size. --- - + ## class `int17` Scalar int17 annotation. @@ -674,7 +674,7 @@ Trace numpy.ndarray.size. --- - + ## class `int18` Scalar int18 annotation. @@ -709,7 +709,7 @@ Trace numpy.ndarray.size. --- - + ## class `int19` Scalar int19 annotation. @@ -744,7 +744,7 @@ Trace numpy.ndarray.size. --- - + ## class `int20` Scalar int20 annotation. @@ -779,7 +779,7 @@ Trace numpy.ndarray.size. --- - + ## class `int21` Scalar int21 annotation. @@ -814,7 +814,7 @@ Trace numpy.ndarray.size. --- - + ## class `int22` Scalar int22 annotation. @@ -849,7 +849,7 @@ Trace numpy.ndarray.size. --- - + ## class `int23` Scalar int23 annotation. @@ -884,7 +884,7 @@ Trace numpy.ndarray.size. --- - + ## class `int24` Scalar int24 annotation. @@ -919,7 +919,7 @@ Trace numpy.ndarray.size. --- - + ## class `int25` Scalar int25 annotation. @@ -954,7 +954,7 @@ Trace numpy.ndarray.size. --- - + ## class `int26` Scalar int26 annotation. @@ -989,7 +989,7 @@ Trace numpy.ndarray.size. --- - + ## class `int27` Scalar int27 annotation. @@ -1024,7 +1024,7 @@ Trace numpy.ndarray.size. --- - + ## class `int28` Scalar int28 annotation. @@ -1059,7 +1059,7 @@ Trace numpy.ndarray.size. --- - + ## class `int29` Scalar int29 annotation. @@ -1094,7 +1094,7 @@ Trace numpy.ndarray.size. --- - + ## class `int30` Scalar int30 annotation. @@ -1129,7 +1129,7 @@ Trace numpy.ndarray.size. --- - + ## class `int31` Scalar int31 annotation. @@ -1164,7 +1164,7 @@ Trace numpy.ndarray.size. --- - + ## class `int32` Scalar int32 annotation. @@ -1199,7 +1199,7 @@ Trace numpy.ndarray.size. --- - + ## class `int33` Scalar int33 annotation. @@ -1234,7 +1234,7 @@ Trace numpy.ndarray.size. --- - + ## class `int34` Scalar int34 annotation. @@ -1269,7 +1269,7 @@ Trace numpy.ndarray.size. --- - + ## class `int35` Scalar int35 annotation. @@ -1304,7 +1304,7 @@ Trace numpy.ndarray.size. --- - + ## class `int36` Scalar int36 annotation. @@ -1339,7 +1339,7 @@ Trace numpy.ndarray.size. --- - + ## class `int37` Scalar int37 annotation. @@ -1374,7 +1374,7 @@ Trace numpy.ndarray.size. --- - + ## class `int38` Scalar int38 annotation. @@ -1409,7 +1409,7 @@ Trace numpy.ndarray.size. --- - + ## class `int39` Scalar int39 annotation. @@ -1444,7 +1444,7 @@ Trace numpy.ndarray.size. --- - + ## class `int40` Scalar int40 annotation. @@ -1479,7 +1479,7 @@ Trace numpy.ndarray.size. --- - + ## class `int41` Scalar int41 annotation. @@ -1514,7 +1514,7 @@ Trace numpy.ndarray.size. --- - + ## class `int42` Scalar int42 annotation. @@ -1549,7 +1549,7 @@ Trace numpy.ndarray.size. --- - + ## class `int43` Scalar int43 annotation. @@ -1584,7 +1584,7 @@ Trace numpy.ndarray.size. --- - + ## class `int44` Scalar int44 annotation. @@ -1619,7 +1619,7 @@ Trace numpy.ndarray.size. --- - + ## class `int45` Scalar int45 annotation. @@ -1654,7 +1654,7 @@ Trace numpy.ndarray.size. --- - + ## class `int46` Scalar int46 annotation. @@ -1689,7 +1689,7 @@ Trace numpy.ndarray.size. --- - + ## class `int47` Scalar int47 annotation. @@ -1724,7 +1724,7 @@ Trace numpy.ndarray.size. --- - + ## class `int48` Scalar int48 annotation. @@ -1759,7 +1759,7 @@ Trace numpy.ndarray.size. --- - + ## class `int49` Scalar int49 annotation. @@ -1794,7 +1794,7 @@ Trace numpy.ndarray.size. --- - + ## class `int50` Scalar int50 annotation. @@ -1829,7 +1829,7 @@ Trace numpy.ndarray.size. --- - + ## class `int51` Scalar int51 annotation. @@ -1864,7 +1864,7 @@ Trace numpy.ndarray.size. --- - + ## class `int52` Scalar int52 annotation. @@ -1899,7 +1899,7 @@ Trace numpy.ndarray.size. --- - + ## class `int53` Scalar int53 annotation. @@ -1934,7 +1934,7 @@ Trace numpy.ndarray.size. --- - + ## class `int54` Scalar int54 annotation. @@ -1969,7 +1969,7 @@ Trace numpy.ndarray.size. --- - + ## class `int55` Scalar int55 annotation. @@ -2004,7 +2004,7 @@ Trace numpy.ndarray.size. --- - + ## class `int56` Scalar int56 annotation. @@ -2039,7 +2039,7 @@ Trace numpy.ndarray.size. --- - + ## class `int57` Scalar int57 annotation. @@ -2074,7 +2074,7 @@ Trace numpy.ndarray.size. --- - + ## class `int58` Scalar int58 annotation. @@ -2109,7 +2109,7 @@ Trace numpy.ndarray.size. --- - + ## class `int59` Scalar int59 annotation. @@ -2144,7 +2144,7 @@ Trace numpy.ndarray.size. --- - + ## class `int60` Scalar int60 annotation. @@ -2179,7 +2179,7 @@ Trace numpy.ndarray.size. --- - + ## class `int61` Scalar int61 annotation. @@ -2214,7 +2214,7 @@ Trace numpy.ndarray.size. --- - + ## class `int62` Scalar int62 annotation. @@ -2249,7 +2249,7 @@ Trace numpy.ndarray.size. --- - + ## class `int63` Scalar int63 annotation. @@ -2284,7 +2284,7 @@ Trace numpy.ndarray.size. --- - + ## class `int64` Scalar int64 annotation. @@ -2319,7 +2319,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint1` Scalar uint1 annotation. @@ -2354,7 +2354,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint2` Scalar uint2 annotation. @@ -2389,7 +2389,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint3` Scalar uint3 annotation. @@ -2424,7 +2424,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint4` Scalar uint4 annotation. @@ -2459,7 +2459,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint5` Scalar uint5 annotation. @@ -2494,7 +2494,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint6` Scalar uint6 annotation. @@ -2529,7 +2529,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint7` Scalar uint7 annotation. @@ -2564,7 +2564,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint8` Scalar uint8 annotation. @@ -2599,7 +2599,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint9` Scalar uint9 annotation. @@ -2634,7 +2634,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint10` Scalar uint10 annotation. @@ -2669,7 +2669,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint11` Scalar uint11 annotation. @@ -2704,7 +2704,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint12` Scalar uint12 annotation. @@ -2739,7 +2739,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint13` Scalar uint13 annotation. @@ -2774,7 +2774,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint14` Scalar uint14 annotation. @@ -2809,7 +2809,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint15` Scalar uint15 annotation. @@ -2844,7 +2844,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint16` Scalar uint16 annotation. @@ -2879,7 +2879,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint17` Scalar uint17 annotation. @@ -2914,7 +2914,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint18` Scalar uint18 annotation. @@ -2949,7 +2949,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint19` Scalar uint19 annotation. @@ -2984,7 +2984,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint20` Scalar uint20 annotation. @@ -3019,7 +3019,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint21` Scalar uint21 annotation. @@ -3054,7 +3054,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint22` Scalar uint22 annotation. @@ -3089,7 +3089,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint23` Scalar uint23 annotation. @@ -3124,7 +3124,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint24` Scalar uint24 annotation. @@ -3159,7 +3159,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint25` Scalar uint25 annotation. @@ -3194,7 +3194,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint26` Scalar uint26 annotation. @@ -3229,7 +3229,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint27` Scalar uint27 annotation. @@ -3264,7 +3264,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint28` Scalar uint28 annotation. @@ -3299,7 +3299,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint29` Scalar uint29 annotation. @@ -3334,7 +3334,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint30` Scalar uint30 annotation. @@ -3369,7 +3369,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint31` Scalar uint31 annotation. @@ -3404,7 +3404,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint32` Scalar uint32 annotation. @@ -3439,7 +3439,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint33` Scalar uint33 annotation. @@ -3474,7 +3474,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint34` Scalar uint34 annotation. @@ -3509,7 +3509,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint35` Scalar uint35 annotation. @@ -3544,7 +3544,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint36` Scalar uint36 annotation. @@ -3579,7 +3579,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint37` Scalar uint37 annotation. @@ -3614,7 +3614,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint38` Scalar uint38 annotation. @@ -3649,7 +3649,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint39` Scalar uint39 annotation. @@ -3684,7 +3684,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint40` Scalar uint40 annotation. @@ -3719,7 +3719,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint41` Scalar uint41 annotation. @@ -3754,7 +3754,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint42` Scalar uint42 annotation. @@ -3789,7 +3789,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint43` Scalar uint43 annotation. @@ -3824,7 +3824,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint44` Scalar uint44 annotation. @@ -3859,7 +3859,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint45` Scalar uint45 annotation. @@ -3894,7 +3894,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint46` Scalar uint46 annotation. @@ -3929,7 +3929,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint47` Scalar uint47 annotation. @@ -3964,7 +3964,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint48` Scalar uint48 annotation. @@ -3999,7 +3999,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint49` Scalar uint49 annotation. @@ -4034,7 +4034,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint50` Scalar uint50 annotation. @@ -4069,7 +4069,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint51` Scalar uint51 annotation. @@ -4104,7 +4104,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint52` Scalar uint52 annotation. @@ -4139,7 +4139,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint53` Scalar uint53 annotation. @@ -4174,7 +4174,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint54` Scalar uint54 annotation. @@ -4209,7 +4209,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint55` Scalar uint55 annotation. @@ -4244,7 +4244,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint56` Scalar uint56 annotation. @@ -4279,7 +4279,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint57` Scalar uint57 annotation. @@ -4314,7 +4314,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint58` Scalar uint58 annotation. @@ -4349,7 +4349,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint59` Scalar uint59 annotation. @@ -4384,7 +4384,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint60` Scalar uint60 annotation. @@ -4419,7 +4419,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint61` Scalar uint61 annotation. @@ -4454,7 +4454,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint62` Scalar uint62 annotation. @@ -4489,7 +4489,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint63` Scalar uint63 annotation. @@ -4524,7 +4524,7 @@ Trace numpy.ndarray.size. --- - + ## class `uint64` Scalar uint64 annotation. @@ -4559,7 +4559,7 @@ Trace numpy.ndarray.size. --- - + ## class `tensor` Tensor annotation. diff --git a/docs/dev/api/concrete.fhe.values.md b/docs/dev/api/concrete.fhe.values.md index ca35526df..89774aabb 100644 --- a/docs/dev/api/concrete.fhe.values.md +++ b/docs/dev/api/concrete.fhe.values.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.values` Define the available values and their semantics. diff --git a/docs/dev/api/concrete.fhe.values.scalar.md b/docs/dev/api/concrete.fhe.values.scalar.md index 16627c605..f7a58a9c7 100644 --- a/docs/dev/api/concrete.fhe.values.scalar.md +++ b/docs/dev/api/concrete.fhe.values.scalar.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.values.scalar` Declaration of `ClearScalar` and `EncryptedScalar` wrappers. @@ -8,7 +8,7 @@ Declaration of `ClearScalar` and `EncryptedScalar` wrappers. --- - + ## function `clear_scalar_builder` @@ -31,7 +31,7 @@ Build a clear scalar value. --- - + ## function `clear_scalar_builder` @@ -54,7 +54,7 @@ Build a clear scalar value. --- - + ## function `encrypted_scalar_builder` @@ -77,7 +77,7 @@ Build an encrypted scalar value. --- - + ## function `encrypted_scalar_builder` diff --git a/docs/dev/api/concrete.fhe.values.tensor.md b/docs/dev/api/concrete.fhe.values.tensor.md index 3e0fee849..9db6267ce 100644 --- a/docs/dev/api/concrete.fhe.values.tensor.md +++ b/docs/dev/api/concrete.fhe.values.tensor.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.values.tensor` Declaration of `ClearTensor` and `EncryptedTensor` wrappers. @@ -8,7 +8,7 @@ Declaration of `ClearTensor` and `EncryptedTensor` wrappers. --- - + ## function `clear_tensor_builder` @@ -36,7 +36,7 @@ Build a clear tensor value. --- - + ## function `clear_tensor_builder` @@ -64,7 +64,7 @@ Build a clear tensor value. --- - + ## function `encrypted_tensor_builder` @@ -92,7 +92,7 @@ Build an encrypted tensor value. --- - + ## function `encrypted_tensor_builder` diff --git a/docs/dev/api/concrete.fhe.values.value_description.md b/docs/dev/api/concrete.fhe.values.value_description.md index ffc5cae88..cac729d5c 100644 --- a/docs/dev/api/concrete.fhe.values.value_description.md +++ b/docs/dev/api/concrete.fhe.values.value_description.md @@ -1,6 +1,6 @@ - + # module `concrete.fhe.values.value_description` Declaration of `ValueDescription` class. @@ -9,12 +9,12 @@ Declaration of `ValueDescription` class. --- - + ## class `ValueDescription` ValueDescription class, to combine data type, shape, and encryption status into a single object. - + ### method `__init__` @@ -75,7 +75,7 @@ Get number of elements in the value. --- - + ### method `of` diff --git a/docs/dev/api/concrete.fhe.version.md b/docs/dev/api/concrete.fhe.version.md index 9bbb3e6d5..d6b4955cd 100644 --- a/docs/dev/api/concrete.fhe.version.md +++ b/docs/dev/api/concrete.fhe.version.md @@ -1,11 +1,9 @@ - + # module `concrete.fhe.version` - - - +Version of the project, which is updated automatically by the CI right before releasing. diff --git a/docs/get-started/compatibility.md b/docs/dev/compatibility.md similarity index 94% rename from docs/get-started/compatibility.md rename to docs/dev/compatibility.md index 8c9132aa3..cdbe58061 100644 --- a/docs/get-started/compatibility.md +++ b/docs/dev/compatibility.md @@ -161,17 +161,3 @@ Some operations are not supported between two encrypted values. If attempted, a * [np.ndarray.ndim](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.ndim.html) * [np.ndarray.size](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.size.html) * [np.ndarray.T](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.T.html) - -## Limitations - -### Control flow constraints - -Concrete doesn not support some control flow statements, including the `if` and `while` statement when the condition depends on an encrypted value. However, control flow statements with constant values are allowed, for example, `for i in range(SOME_CONSTANT)`, `if os.environ.get("SOME_FEATURE") == "ON":`. - -### Type constraints - -Floating-point inputs or floating-point outputs are not supported. You can have floating-point intermediate values as long as they can be converted to an integer Table Lookup, for example, `(60 * np.sin(x)).astype(np.int64)`. - -### Bit width constraints - -Bit width of encrypted values has a limit. We are constantly working on increasing the bit width limit. Exceeding this limit will trigger an error. diff --git a/docs/explanations/FHEDialect.md b/docs/explanations/FHEDialect.md index 4797da269..ff76c31cb 100644 --- a/docs/explanations/FHEDialect.md +++ b/docs/explanations/FHEDialect.md @@ -29,7 +29,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: Binary, BinaryEintInt, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: AdditiveNoise, Binary, BinaryEintInt, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) Effects: MemoryEffects::Effect{} @@ -67,7 +67,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: BinaryEint, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: AdditiveNoise, BinaryEint, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) Effects: MemoryEffects::Effect{} @@ -543,7 +543,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), UnaryEint +Interfaces: AdditiveNoise, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), UnaryEint Effects: MemoryEffects::Effect{} @@ -660,7 +660,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: Binary, BinaryEintInt, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: AdditiveNoise, Binary, BinaryEintInt, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) Effects: MemoryEffects::Effect{} @@ -698,7 +698,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: BinaryEint, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: AdditiveNoise, BinaryEint, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) Effects: MemoryEffects::Effect{} @@ -736,7 +736,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: Binary, BinaryIntEint, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: AdditiveNoise, Binary, BinaryIntEint, ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface) Effects: MemoryEffects::Effect{} @@ -870,7 +870,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: ConditionallySpeculatable, ConstantNoise, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ZeroNoise Effects: MemoryEffects::Effect{} @@ -894,7 +894,7 @@ Example: Traits: AlwaysSpeculatableImplTrait -Interfaces: ConditionallySpeculatable, ConstantNoise, NoMemoryEffect (MemoryEffectOpInterface) +Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ZeroNoise Effects: MemoryEffects::Effect{} diff --git a/docs/get-started/quick_overview.md b/docs/get-started/quick_overview.md new file mode 100644 index 000000000..03580b35e --- /dev/null +++ b/docs/get-started/quick_overview.md @@ -0,0 +1,62 @@ +# Quick overview + +In this document, we give a quick overview of the philosophy behind Concrete. + +## Functions + +### Available FHE-friendly functions + +Concrete is a compiler, which aims to turn Python code into its FHE equivalent, in a process which is +called the FHE compilation. The best efforts were made to simplify the process: in particular, +exceptions apart, the same functions than the Python users are used to use are available. More complete +list of available functions is given [in the reference section](../dev/compatibility.md). + +### Levelled vs non-levelled operations + +Basically, in the compiled circuit, there will be two kind of operations: +- levelled operations, which are the additions, subtractions or multiplications by a constant; these +operations are also called the linear operations +- table lookup (TLU) operations, which are used to do anything which is not linear. + +TLU operations are essential to be able to compile complex functions. We explain their use in +different sections of the documentation: [direct TLU use](../core-features/table_lookups.md) or +[internal use to replace some non-linear functions](../core-features/non_linear_operations.md). We have +tools in Concrete to replace univariate or multivariate non-linear functions (ie, functions of one +or more inputs) by TLU. + +TLU are more costly that levelled operations, so we also explain how to limit their impact. + +Remark that matrix multiplication (aka Gemm -- General Matrix multiplication) and convolutions are +levelled operations, since they imply only additions and multiplications by constant. + +### Conditional branches and loops + +Functions can't use conditional branches or non-constant-size loops, +unless [modules](../compilation/composing_functions_with_modules.md) are used. However, +control flow statements with constant values are allowed, for example, +`for i in range(SOME_CONSTANT)`, `if os.environ.get("SOME_FEATURE") == "ON":`. + +## Data + +### Integers + +In Concrete, everything needs to be an integer. Users needing floats can quantize to integers before +encryption, operate on integers and dequantize to floats after decryption: all of this is done for +the user in Concrete ML. However, you can have floating-point intermediate values as long as they can +be converted to an integer Table Lookup, for example, `(60 * np.sin(x)).astype(np.int64)`. + +### Scalars and tensors + +Functions can use scalar and tensors. As with Python, it is prefered to use tensorization, to make +computations faster. + +### Inputs + +Inputs of a compiled function can be either encrypted or clear. Use of clear inputs is however +quite limited. Remark that constants can appear in the program +without much constraints, they are different from clear inputs which are dynamic. + +## Bit width constraints + +Bit width of encrypted values has a limit. We are constantly working on increasing the bit width limit. +Exceeding this limit will trigger an error. diff --git a/docs/get-started/terminology.md b/docs/get-started/terminology.md index 2816c4eda..6e3fa97e6 100644 --- a/docs/get-started/terminology.md +++ b/docs/get-started/terminology.md @@ -10,3 +10,6 @@ This document provides clear definitions of key concepts used in **Concrete** fr * **Circuit:** The result of compilation. A circuit includes both client and server components. It has methods for various operations, such as printing and evaluation. +* **Table Lookup (TLU):** TLU stands for instructions in the form of y = T[i]. In FHE, this operation is performed with Programmable Bootstrapping, which is the equivalent operation on encrypted values." + +* **Programmable Bootstrapping (PBS):** PBS is equivalent to table lookup `y = T[i]` on encrypted values, which means that the inputs `i` and the outputs `y` are encrypted, but the table `T` is not encrypted. diff --git a/docs/guides/deploy.md b/docs/guides/deploy.md index 7349560c6..b45e769e2 100644 --- a/docs/guides/deploy.md +++ b/docs/guides/deploy.md @@ -2,9 +2,24 @@ After developing your circuit, you may want to deploy it. However, sharing the details of your circuit with every client might not be desirable. As well as this, you might want to perform the computation on dedicated servers. In this case, you can use the `Client` and `Server` features of **Concrete**. -## Development of the circuit +### Deployment -You can develop your circuit using the techniques discussed in previous chapters. Here is a simple example: +A typical Concrete deployment will host on a server the compilation artifact: Client specifications required by the compiled circuits and the fhe executable itself. Client will ask for the circuit requirements, generate keys accordingly, then it will send an encrypted payload and receive an encrypted result. + +```mermaid +sequenceDiagram + Client->>Server: Client specifications? + Server-->>Client: Client specifications + Client->>Client: Private + Evaluation Keys Generation + Client->>Server: Encrypted(data) + Evaluation Key + Server->>Server: Compiled library execution + Server-->>Client: Encrypted(result) + Client->>Client: Decrypt(result) +``` + +## Starting from an example + +You can develop your circuit using the techniques discussed in previous chapters. Let's take the following example to describe deployment: ```python @@ -115,6 +130,10 @@ serialized_result: bytes = result.serialize() Then, send the serialized result back to the client. After this, the client can decrypt to receive the result of the computation. +{% hint style="info" %} +Clear arguments can directly be passed to `server.run` (e.g., `server.run(x, 10, z, evaluation_keys=...)`). +{% endhint %} + ## Decrypting the result (on the client) Once you have received the serialized result of the computation from the server, you can deserialize it: diff --git a/docs/optimization/improve-parallelism/dataflow.md b/docs/optimization/improve-parallelism/dataflow.md new file mode 100644 index 000000000..701d69a36 --- /dev/null +++ b/docs/optimization/improve-parallelism/dataflow.md @@ -0,0 +1,102 @@ +### Enabling dataflow parallelism + +This guide teaches what data parallelism is and how it can improve the execution time of Concrete circuits. + +Dataflow parallelism is a great feature, especially when the circuit is doing a lot of scalar operations. + +Without dataflow parallelism, circuit is executed operation by operation, like an imperative language. If the operations themselves are not tensorized, loop parallelism would not be utilized and the entire execution would happen in a single thread. Dataflow parallelism changes this by analyzing the operations and their dependencies within the circuit to determine what can be done in parallel and what cannot. Then it distributes the tasks that can be done in parallel to different threads. + +For example: + +```python +import time + +import numpy as np +from concrete import fhe + +def f(x, y, z): + # normally, you'd use fhe.array to construct a concrete tensor + # but for this example, we just create a simple numpy array + # so the matrix multiplication can happen on a cellular level + a = np.array([[x, y], [z, 2]]) + b = np.array([[1, x], [z, y]]) + return fhe.array(a @ b) + +inputset = fhe.inputset(fhe.uint3, fhe.uint3, fhe.uint3) + +for dataflow_parallelize in [False, True]: + compiler = fhe.Compiler(f, {"x": "encrypted", "y": "encrypted", "z": "encrypted"}) + circuit = compiler.compile(inputset, dataflow_parallelize=dataflow_parallelize) + + circuit.keygen() + for sample in inputset[:3]: # warmup + circuit.encrypt_run_decrypt(*sample) + + timings = [] + for sample in inputset[3:13]: + start = time.time() + result = circuit.encrypt_run_decrypt(*sample) + end = time.time() + + assert np.array_equal(result, f(*sample)) + timings.append(end - start) + + if not dataflow_parallelize: + print(f"without dataflow parallelize -> {np.mean(timings):.03f}s") + else: + print(f" with dataflow parallelize -> {np.mean(timings):.03f}s") +``` + +prints: + +``` +without dataflow parallelize -> 0.609s + with dataflow parallelize -> 0.414s +``` + +and the reason for that is: + +``` +// this is the generated MLIR for the circuit +// without dataflow, every single line would be executed one after the other + +module { + func.func @main(%arg0: !FHE.eint<7>, %arg1: !FHE.eint<7>, %arg2: !FHE.eint<7>) -> tensor<2x2x!FHE.eint<7>> { + + // but if you look closely, you can see that this multiplication + %c1_i2 = arith.constant 1 : i2 + %0 = "FHE.mul_eint_int"(%arg0, %c1_i2) : (!FHE.eint<7>, i2) -> !FHE.eint<7> + + // is completely independent of this one, so dataflow makes them run in parallel + %1 = "FHE.mul_eint"(%arg1, %arg2) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + + // however, this addition needs the first two operations + // so dataflow waits until both are done before performing this one + %2 = "FHE.add_eint"(%0, %1) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + + // lastly, this multiplication is completely independent from the first three operations + // so its execution starts in parallel when execution starts with dataflow + %3 = "FHE.mul_eint"(%arg0, %arg0) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + + // similar logic can be applied to the remaining operations... + %4 = "FHE.mul_eint"(%arg1, %arg1) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + %5 = "FHE.add_eint"(%3, %4) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + %6 = "FHE.mul_eint_int"(%arg2, %c1_i2) : (!FHE.eint<7>, i2) -> !FHE.eint<7> + %c2_i3 = arith.constant 2 : i3 + %7 = "FHE.mul_eint_int"(%arg2, %c2_i3) : (!FHE.eint<7>, i3) -> !FHE.eint<7> + %8 = "FHE.add_eint"(%6, %7) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + %9 = "FHE.mul_eint"(%arg2, %arg0) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + %10 = "FHE.mul_eint_int"(%arg1, %c2_i3) : (!FHE.eint<7>, i3) -> !FHE.eint<7> + %11 = "FHE.add_eint"(%9, %10) : (!FHE.eint<7>, !FHE.eint<7>) -> !FHE.eint<7> + %from_elements = tensor.from_elements %2, %5, %8, %11 : tensor<2x2x!FHE.eint<7>> + return %from_elements : tensor<2x2x!FHE.eint<7>> + + } +} +``` + +To summarize, dataflow analyzes the circuit to determine which parts of the circuit can be run at the same time, and tries to run as many operations as possible in parallel. + +{% hint style="warning" %} +When the circuit is tensorized, dataflow might slow execution down since the tensor operations already use multiple threads and adding dataflow on top creates congestion in the CPU between the HPX (dataflow parallelism runtime) and OpenMP (loop parallelism runtime). So try both before deciding on whether to use dataflow or not. +{% endhint %} diff --git a/docs/optimization/improve-parallelism/self.md b/docs/optimization/improve-parallelism/self.md new file mode 100644 index 000000000..c5a6bd4fd --- /dev/null +++ b/docs/optimization/improve-parallelism/self.md @@ -0,0 +1,11 @@ +## Improve parallelism + +This guide teaches the different options for parallelism in Concrete and how to utilize them to improve the execution time of Concrete circuits. + +Modern CPUs have multiple cores to perform computation and utilizing multiple cores is a great way to boost performance. + +There are two kinds of parallelism in Concrete: +- Loop parallelism to make tensor operations parallel, achieved by using [OpenMP](https://www.openmp.org/) +- Dataflow parallelism to make independent operations parallel, achieved by using [HPX](https://hpx.stellar-group.org/) + +Loop parallelism is enabled by default, as it's supported on all platforms. Dataflow parallelism however is only supported on Linux, hence not enabled by default. diff --git a/docs/optimization/improve-parallelism/tensorization.md b/docs/optimization/improve-parallelism/tensorization.md new file mode 100644 index 000000000..9a7f9ce1e --- /dev/null +++ b/docs/optimization/improve-parallelism/tensorization.md @@ -0,0 +1,55 @@ +### Tensorizing operations + +This guide teaches what tensorization is and how it can improve the execution time of Concrete circuits. + +Tensors should be used instead of scalars when possible to maximize loop parallelism. + +For example: + +```python +import time + +import numpy as np +from concrete import fhe + +inputset = fhe.inputset(fhe.uint6, fhe.uint6, fhe.uint6) +for tensorize in [False, True]: + def f(x, y, z): + return ( + np.sum(fhe.array([x, y, z]) ** 2) + if tensorize + else (x ** 2) + (y ** 2) + (z ** 2) + ) + + compiler = fhe.Compiler(f, {"x": "encrypted", "y": "encrypted", "z": "encrypted"}) + circuit = compiler.compile(inputset) + + circuit.keygen() + for sample in inputset[:3]: # warmup + circuit.encrypt_run_decrypt(*sample) + + timings = [] + for sample in inputset[3:13]: + start = time.time() + result = circuit.encrypt_run_decrypt(*sample) + end = time.time() + + assert np.array_equal(result, f(*sample)) + timings.append(end - start) + + if not tensorize: + print(f"without tensorization -> {np.mean(timings):.03f}s") + else: + print(f" with tensorization -> {np.mean(timings):.03f}s") +``` + +prints: + +``` +without tensorization -> 0.214s + with tensorization -> 0.118s +``` + +{% hint style="info" %} +Enabling dataflow is kind of letting the runtime do this for you. It'd also help in the specific case. +{% endhint %} diff --git a/docs/optimization/optimize-cryptographic-parameters/composition.md b/docs/optimization/optimize-cryptographic-parameters/composition.md new file mode 100644 index 000000000..172ff80e8 --- /dev/null +++ b/docs/optimization/optimize-cryptographic-parameters/composition.md @@ -0,0 +1,65 @@ +### Specifying composition when using modules + +This guide explains how to optimize cryptographic parameters by specifying composition when using [modules](../../compilation/composing_functions_with_modules.md). + +When using [modules](../../compilation/composing_functions_with_modules.md) make sure to specify [composition](../../compilation/composing_functions_with_modules.md#optimizing-runtimes-with-composition-policies) so that the compiler can select more optimal parameters based on how the functions in the module would be used. + +For example: + +```python +import numpy as np +from concrete import fhe + + +@fhe.module() +class PowerWithoutComposition: + @fhe.function({"x": "encrypted"}) + def square(x): + return x ** 2 + + @fhe.function({"x": "encrypted"}) + def cube(x): + return x ** 3 + +without_composition = PowerWithoutComposition.compile( + { + "square": fhe.inputset(fhe.uint2), + "cube": fhe.inputset(fhe.uint4), + } +) +print(f"without composition -> {int(without_composition.complexity):>10_} complexity") + + +@fhe.module() +class PowerWithComposition: + @fhe.function({"x": "encrypted"}) + def square(x): + return x ** 2 + + @fhe.function({"x": "encrypted"}) + def cube(x): + return x ** 3 + + composition = fhe.Wired( + [ + fhe.Wire(fhe.Output(square, 0), fhe.Input(cube, 0)) + ] + ) + +with_composition = PowerWithComposition.compile( + { + "square": fhe.inputset(fhe.uint2), + "cube": fhe.inputset(fhe.uint4), + } +) +print(f" with composition -> {int(with_composition.complexity):>10_} complexity") +``` + +prints: + +``` +without composition -> 185_863_835 complexity + with composition -> 135_871_612 complexity +``` + +which means specifying composition resulted in ~35% improvement to complexity for computing `cube(square(x))`. diff --git a/docs/optimization/optimize-cryptographic-parameters/p-error.md b/docs/optimization/optimize-cryptographic-parameters/p-error.md new file mode 100644 index 000000000..7f5e01465 --- /dev/null +++ b/docs/optimization/optimize-cryptographic-parameters/p-error.md @@ -0,0 +1,31 @@ +### Adjusting table lookup error probability + +This guide teaches how setting `p_error` configuration option can affect the performance of Concrete circuits. + +Adjusting table lookup error probability is discussed extensively in [Table lookup exactness](../../core-features/table_lookups_advanced.md#table-lookup-exactness) section. The idea is to sacrifice exactness to gain performance. + +For example: + +```python +import numpy as np +from concrete import fhe + +def f(x, y): + return (x // 2) * (y // 3) + +inputset = fhe.inputset(fhe.uint4, fhe.uint4) +for p_error in [(1 / 1_000_000), (1 / 100_000), (1 / 10_000), (1 / 1_000), (1 / 100)]: + compiler = fhe.Compiler(f, {"x": "encrypted", "y": "encrypted"}) + circuit = compiler.compile(inputset, p_error=p_error) + print(f"p_error of {p_error:.6f} -> {int(circuit.complexity):_} complexity") +``` + +prints: + +``` +p_error of 0.000001 -> 294_773_524 complexity +p_error of 0.000010 -> 286_577_520 complexity +p_error of 0.000100 -> 275_887_080 complexity +p_error of 0.001000 -> 265_196_640 complexity +p_error of 0.010000 -> 184_144_972 complexity +``` diff --git a/docs/optimization/optimize-cryptographic-parameters/self.md b/docs/optimization/optimize-cryptographic-parameters/self.md new file mode 100644 index 000000000..f19f57501 --- /dev/null +++ b/docs/optimization/optimize-cryptographic-parameters/self.md @@ -0,0 +1,5 @@ +## Optimize cryptographic parameters + +This guide teaches how to help Concrete Optimizer to select more performant parameters to improve the execution time of Concrete circuits. + +The idea is to obtain more optimal cryptographic parameters (especially for table lookups) without changing the operations within the circuit. diff --git a/docs/optimization/optimize-table-lookups/approximate.md b/docs/optimization/optimize-table-lookups/approximate.md new file mode 100644 index 000000000..bf2be5293 --- /dev/null +++ b/docs/optimization/optimize-table-lookups/approximate.md @@ -0,0 +1,36 @@ +### Activating approximate mode for rounding + +This guide teaches how to improve the execution time of Concrete circuits by using approximate mode for rounding. + +You can enable [approximate mode](../../core-features/rounding.md#exactness) to gain even more performance when using rounding by sacrificing some more exactness: + +```python +import numpy as np +from concrete import fhe + +inputset = fhe.inputset(fhe.uint10) +for lsbs_to_remove in range(0, 10): + def f(x): + return fhe.round_bit_pattern(x, lsbs_to_remove, exactness=fhe.Exactness.APPROXIMATE) // 2 + + compiler = fhe.Compiler(f, {"x": "encrypted"}) + circuit = compiler.compile(inputset) + + print(f"{lsbs_to_remove=} -> {int(circuit.complexity):>13_} complexity") + +``` + +prints: + +``` +lsbs_to_remove=0 -> 9_134_406_574 complexity +lsbs_to_remove=1 -> 5_548_275_712 complexity +lsbs_to_remove=2 -> 2_430_793_927 complexity +lsbs_to_remove=3 -> 1_058_638_119 complexity +lsbs_to_remove=4 -> 409_952_712 complexity +lsbs_to_remove=5 -> 172_138_947 complexity +lsbs_to_remove=6 -> 99_198_195 complexity +lsbs_to_remove=7 -> 71_644_380 complexity +lsbs_to_remove=8 -> 55_860_516 complexity +lsbs_to_remove=9 -> 50_978_148 complexity +``` diff --git a/docs/optimization/optimize-table-lookups/bit-extraction.md b/docs/optimization/optimize-table-lookups/bit-extraction.md new file mode 100644 index 000000000..b4e4f59ac --- /dev/null +++ b/docs/optimization/optimize-table-lookups/bit-extraction.md @@ -0,0 +1,38 @@ +### Utilizing bit extraction + +This guide teaches how to improve the execution time of Concrete circuits by using bit extraction. + +[Bit extraction](../../core-features/bit_extraction.md) is a cheap way to extract certain bits of encrypted values. It can be very useful for improving the performance of circuits. + +For example: + +```python +import numpy as np +from concrete import fhe + +inputset = fhe.inputset(fhe.uint6) +for bit_extraction in [False, True]: + def is_even(x): + return ( + x % 2 == 0 + if not bit_extraction + else 1 - fhe.bits(x)[0] + ) + + compiler = fhe.Compiler(is_even, {"x": "encrypted"}) + circuit = compiler.compile(inputset) + + if not bit_extraction: + print(f"without bit extraction -> {int(circuit.complexity):>11_} complexity") + else: + print(f" with bit extraction -> {int(circuit.complexity):>11_} complexity") +``` + +prints: + +``` +without bit extraction -> 230_210_706 complexity + with bit extraction -> 29_506_014 complexity +``` + +That's almost 8x improvement to circuit complexity! diff --git a/docs/optimization/optimize-table-lookups/reducing-amount.md b/docs/optimization/optimize-table-lookups/reducing-amount.md new file mode 100644 index 000000000..0f6eaa5d1 --- /dev/null +++ b/docs/optimization/optimize-table-lookups/reducing-amount.md @@ -0,0 +1,94 @@ +### Reducing the amount of table lookups + +This guide teaches how to improve the execution time of Concrete circuits by reducing the amount of table lookups. + +Reducing the amount of table lookups is probably the most complicated guide in this section as it's not automated. The idea is to use mathematical properties of operations to reduce the amount of table lookups needed to achieve the result. + +One great example is in adding big integers in bitmap representation. Here is the basic implementation: + +```python +def add_bitmaps(x, y): + result = fhe.zeros((N,)) + carry = 0 + + addition = x + y + for i in range(N): + addition_and_carry = addition[i] + carry + carry = addition_and_carry >> 1 + result[i] = addition_and_carry % 2 + + return result +``` + +There are two table lookups within the loop body, one for `>>` and one for `%`. + +This implementation is not optimal though, since the same output can be achieved with just a single table lookup: + +```python +def add_bitmaps(x, y): + result = fhe.zeros((N,)) + carry = 0 + + addition = x + y + for i in range(N): + addition_and_carry = addition[i] + carry + carry = addition_and_carry >> 1 + result[i] = addition_and_carry - (carry * 2) + + return result +``` + +It was possible to do this because the original operations had a mathematical equivalence with the optimized operations and optimized operations achieved the same output with less table lookups! + +Here is the full code example and some numbers for this optimization: + +```python +import numpy as np +from concrete import fhe + +N = 32 + +def add_bitmaps_naive(x, y): + result = fhe.zeros((N,)) + carry = 0 + + addition = x + y + for i in range(N): + addition_and_carry = addition[i] + carry + carry = addition_and_carry >= 2 + result[i] = addition_and_carry % 2 + + return result + +def add_bitmaps_optimized(x, y): + result = fhe.zeros((N,)) + carry = 0 + + addition = x + y + for i in range(N): + addition_and_carry = addition[i] + carry + carry = addition_and_carry >> 1 + result[i] = addition_and_carry - (carry * 2) + + return result + +inputset = fhe.inputset(fhe.tensor[fhe.uint1, N], fhe.tensor[fhe.uint1, N]) +for (name, implementation) in [("naive", add_bitmaps_naive), ("optimized", add_bitmaps_optimized)]: + compiler = fhe.Compiler(implementation, {"x": "encrypted", "y": "encrypted"}) + circuit = compiler.compile(inputset) + + print( + f"{name:>9} implementation " + f"-> {int(circuit.programmable_bootstrap_count)} table lookups " + f"-> {int(circuit.complexity):_} complexity" + ) +``` + +prints: + +``` + naive implementation -> 63 table lookups -> 2_427_170_697 complexity +optimized implementation -> 32 table lookups -> 1_224_206_208 complexity +``` + +which is almost half the amount of table lookups and ~2x less complexity for the same operation! diff --git a/docs/optimization/optimize-table-lookups/round-truncate.md b/docs/optimization/optimize-table-lookups/round-truncate.md new file mode 100644 index 000000000..b4f4e6805 --- /dev/null +++ b/docs/optimization/optimize-table-lookups/round-truncate.md @@ -0,0 +1,37 @@ +### Using round/truncate bit pattern before table lookups + +This guide teaches how to improve the execution time of Concrete circuits by using some special operations that reduce the bit width of the input of the table lookup. + +There are two extensions which can reduce the bit width of the table lookup input, [fhe.round_bit_pattern(...)](../../core-features/rounding.md) and [fhe.truncate_bit_pattern(...)](../../core-features/truncating.md), which can improve performance by sacrificing exactness. + +For example the following code: + +```python +import numpy as np +from concrete import fhe + +inputset = fhe.inputset(fhe.uint10) +for lsbs_to_remove in range(0, 10): + def f(x): + return fhe.round_bit_pattern(x, lsbs_to_remove) // 2 + + compiler = fhe.Compiler(f, {"x": "encrypted"}) + circuit = compiler.compile(inputset) + + print(f"{lsbs_to_remove=} -> {int(circuit.complexity):>13_} complexity") +``` + +prints: + +``` +lsbs_to_remove=0 -> 9_134_406_574 complexity +lsbs_to_remove=1 -> 3_209_430_092 complexity +lsbs_to_remove=2 -> 1_536_476_735 complexity +lsbs_to_remove=3 -> 1_588_749_586 complexity +lsbs_to_remove=4 -> 848_133_081 complexity +lsbs_to_remove=5 -> 525_987_801 complexity +lsbs_to_remove=6 -> 358_276_023 complexity +lsbs_to_remove=7 -> 373_311_341 complexity +lsbs_to_remove=8 -> 400_596_351 complexity +lsbs_to_remove=9 -> 438_681_996 complexity +``` diff --git a/docs/optimization/optimize-table-lookups/self.md b/docs/optimization/optimize-table-lookups/self.md new file mode 100644 index 000000000..3fc8bb0f6 --- /dev/null +++ b/docs/optimization/optimize-table-lookups/self.md @@ -0,0 +1,78 @@ +## Optimize table lookups + +This guide teaches how costly table lookups are, and how to optimize them to improve the execution time of Concrete circuits. + +The most costly operation in Concrete is the table lookup operation, so one of the primary goals of optimizing performance is to reduce the amount of table lookups. + +Furthermore, the bit width of the input of the table lookup plays a major role in performance. + +```python +import time + +import numpy as np +import matplotlib.pyplot as plt +from concrete import fhe + +def f(x): + return x // 2 + +bit_widths = list(range(2, 9)) +complexities = [] +timings = [] + +for bit_width in bit_widths: + inputset = fhe.inputset(lambda _: np.random.randint(0, 2 ** bit_width)) + + compiler = fhe.Compiler(f, {"x": "encrypted"}) + circuit = compiler.compile(inputset) + + circuit.keygen() + for sample in inputset[:3]: # warmup + circuit.encrypt_run_decrypt(*sample) + + current_timings = [] + for sample in inputset[3:13]: + start = time.time() + result = circuit.encrypt_run_decrypt(*sample) + end = time.time() + + assert np.array_equal(result, f(*sample)) + current_timings.append(end - start) + + complexities.append(int(circuit.complexity)) + timings.append(float(np.mean(current_timings))) + + print(f"{bit_width} bits -> {complexities[-1]:>13_} complexity -> {timings[-1]:.06f}s") + +figure, complexity_axis = plt.subplots() + +color = "tab:red" +complexity_axis.set_xlabel("bit width") +complexity_axis.set_ylabel("complexity", color=color) +complexity_axis.plot(bit_widths, complexities, color=color) +complexity_axis.tick_params(axis="y", labelcolor=color) + +timing_axis = complexity_axis.twinx() + +color = 'tab:blue' +timing_axis.set_ylabel('execution time', color=color) +timing_axis.plot(bit_widths, timings, color=color) +timing_axis.tick_params(axis='y', labelcolor=color) + +figure.tight_layout() +plt.show() +``` + +The code above prints: +``` +2 bits -> 29_944_416 complexity -> 0.019826s +3 bits -> 42_154_798 complexity -> 0.020093s +4 bits -> 61_979_934 complexity -> 0.021961s +5 bits -> 99_198_195 complexity -> 0.029475s +6 bits -> 230_210_706 complexity -> 0.062841s +7 bits -> 535_706_740 complexity -> 0.139669s +8 bits -> 1_217_510_420 complexity -> 0.318838s +``` + +And displays: +![](../../_static/compilation/performance_tips/complexity_and_timing_per_bit_width.png) diff --git a/docs/optimization/optimize-table-lookups/strategies.md b/docs/optimization/optimize-table-lookups/strategies.md new file mode 100644 index 000000000..492743cf3 --- /dev/null +++ b/docs/optimization/optimize-table-lookups/strategies.md @@ -0,0 +1,98 @@ +### Changing the implementation strategy of complex operations + +This guide teaches how to improve the execution time of Concrete circuits by using different conversion strategies for complex operations. + +Concrete provides multiple implementation strategies for these complex operations: + +- [comparisons (<,<=,==,!=,>=,>)](../../core-features/comparisons.md) +- [bitwise operations (<<,&,|,^,>>)](../../core-features/bitwise.md) +- [minimum and maximum operations](../../core-features/minmax.md) +- [multivariate extension](../../core-features/extensions.md#fhemultivariatefunction) + +{% hint style="info" %} +The default strategy is the one that doesn't increase the input bit width, even if it's less optimal than the others. If you don't care about the input bit widths (e.g., if the inputs are only used in this operation), you should definitely change the default strategy. +{% endhint %} + +Choosing the correct strategy can lead to big speedups. So if you are not sure which one to use, you can compile with different strategies and compare the complexity. + +For example, the following code: + +```python +import numpy as np +from concrete import fhe + +def f(x, y): + return x & y + +inputset = fhe.inputset(fhe.uint3, fhe.uint4) +strategies = [ + fhe.BitwiseStrategy.ONE_TLU_PROMOTED, + fhe.BitwiseStrategy.THREE_TLU_CASTED, + fhe.BitwiseStrategy.TWO_TLU_BIGGER_PROMOTED_SMALLER_CASTED, + fhe.BitwiseStrategy.TWO_TLU_BIGGER_CASTED_SMALLER_PROMOTED, + fhe.BitwiseStrategy.CHUNKED, +] + +for strategy in strategies: + compiler = fhe.Compiler(f, {"x": "encrypted", "y": "encrypted"}) + circuit = compiler.compile(inputset, bitwise_strategy_preference=strategy) + print( + f"{strategy:>55} " + f"-> {circuit.programmable_bootstrap_count:>2} TLUs " + f"-> {int(circuit.complexity):>12_} complexity" + ) +``` + +prints: + +``` + BitwiseStrategy.ONE_TLU_PROMOTED -> 1 TLUs -> 535_706_740 complexity + BitwiseStrategy.THREE_TLU_CASTED -> 3 TLUs -> 599_489_229 complexity + BitwiseStrategy.TWO_TLU_BIGGER_PROMOTED_SMALLER_CASTED -> 2 TLUs -> 522_239_955 complexity + BitwiseStrategy.TWO_TLU_BIGGER_CASTED_SMALLER_PROMOTED -> 2 TLUs -> 519_246_216 complexity + BitwiseStrategy.CHUNKED -> 6 TLUs -> 358_905_521 complexity +``` + +or: + +```python +import numpy as np +from concrete import fhe + +def f(x, y): + return x == y + +inputset = fhe.inputset(fhe.uint4, fhe.uint7) +strategies = [ + fhe.ComparisonStrategy.ONE_TLU_PROMOTED, + fhe.ComparisonStrategy.THREE_TLU_CASTED, + fhe.ComparisonStrategy.TWO_TLU_BIGGER_PROMOTED_SMALLER_CASTED, + fhe.ComparisonStrategy.TWO_TLU_BIGGER_CASTED_SMALLER_PROMOTED, + fhe.ComparisonStrategy.THREE_TLU_BIGGER_CLIPPED_SMALLER_CASTED, + fhe.ComparisonStrategy.TWO_TLU_BIGGER_CLIPPED_SMALLER_PROMOTED, + fhe.ComparisonStrategy.CHUNKED, +] + +for strategy in strategies: + compiler = fhe.Compiler(f, {"x": "encrypted", "y": "encrypted"}) + circuit = compiler.compile(inputset, comparison_strategy_preference=strategy) + print( + f"{strategy:>58} " + f"-> {circuit.programmable_bootstrap_count:>2} TLUs " + f"-> {int(circuit.complexity):>13_} complexity" + ) +``` + +prints: + +``` + ComparisonStrategy.ONE_TLU_PROMOTED -> 1 TLUs -> 1_217_510_420 complexity + ComparisonStrategy.THREE_TLU_CASTED -> 3 TLUs -> 751_172_128 complexity + ComparisonStrategy.TWO_TLU_BIGGER_PROMOTED_SMALLER_CASTED -> 2 TLUs -> 1_043_702_103 complexity + ComparisonStrategy.TWO_TLU_BIGGER_CASTED_SMALLER_PROMOTED -> 2 TLUs -> 1_898_305_707 complexity +ComparisonStrategy.THREE_TLU_BIGGER_CLIPPED_SMALLER_CASTED -> 3 TLUs -> 751_172_128 complexity +ComparisonStrategy.TWO_TLU_BIGGER_CLIPPED_SMALLER_PROMOTED -> 2 TLUs -> 682_694_770 complexity + ComparisonStrategy.CHUNKED -> 3 TLUs -> 751_172_128 complexity +``` + +As you can see, strategies can affect the performance a lot! So make sure to select the appropriate one for your use case if you want to optimize performance. diff --git a/docs/optimization/self.md b/docs/optimization/self.md new file mode 100644 index 000000000..171e935cb --- /dev/null +++ b/docs/optimization/self.md @@ -0,0 +1,8 @@ +# Optimization + +This guide teaches how to optimize Concrete circuits extensively. + +It's split in 3 sections: +- [Improve parallelism](./improve-parallelism/self.md): to show how to make circuits utilize more cores. +- [Optimize table lookups](./optimize-table-lookups/self.md): to show how to optimize the most expensive operation in Concrete. +- [Optimize cryptographic parameters](./optimize-cryptographic-parameters/self.md): to show how to make Concrete select more performant parameters. diff --git a/docs/optimization/summary.md b/docs/optimization/summary.md new file mode 100644 index 000000000..cc7f8f723 --- /dev/null +++ b/docs/optimization/summary.md @@ -0,0 +1,15 @@ +# Performance + +This document shows some basic things you can do to improve the performance of your circuit. + +Here are some quick tips to reduce the execution time of your circuit: + +- Reduce the amount of [table lookups](../core-features/table_lookups.md) in the circuit. +- Try different implementation strategies for [complex operations](../core-features/non_linear_operations.md#comparisons). +- Utilize [rounding](../core-features/rounding.md) and [truncating](../core-features/truncating.md) if your application doesn't require precise execution. +- Use tensors as much as possible in your circuits. +- Enable dataflow parallelization, by setting `dataflow_parallelize=True` in the [configuration](../guides/configure.md). +- Tweak `p_error` configuration option until you get optimal exactness vs performance tradeoff for your application. +- Specify composition when using [modules](../compilation/composing_functions_with_modules.md#optimizing-runtimes-with-composition-policies). + +You can refer to our full [Optimization Guide](../optimization/self.md) for detailed examples of how to do each of these, and more! diff --git a/docs/tutorials/see-all-tutorials.md b/docs/tutorials/see-all-tutorials.md index e5f20fd2f..cfd62260e 100644 --- a/docs/tutorials/see-all-tutorials.md +++ b/docs/tutorials/see-all-tutorials.md @@ -9,16 +9,18 @@ #### Code examples on GitHub -* [Key value database](../application-tutorial/key_value_database.ipynb) -* [SHA-256 ](../application-tutorial/sha256.ipynb) -* [Game of Life](../../frontends/concrete-python/examples/game_of_life/game_of_life.md) -* [XOR distance](../../frontends/concrete-python/examples/xor_distance/xor_distance.md) -* [SHA1 with Modules](../../frontends/concrete-python/examples/sha1/sha1.md) +* [Floating points](../../frontends/concrete-python/examples/floating_point/floating_point.ipynb) +* [Key value database](../../frontends/concrete-python/examples/key_value_database/key_value_database.ipynb) +* [SHA-256 ](../../frontends/concrete-python/examples/sha256/sha256.ipynb) +* [Game of Life](../../frontends/concrete-python/examples/game_of_life/README.md) +* [XOR distance](../../frontends/concrete-python/examples/xor_distance/README.md) +* [SHA1 with Modules](../../frontends/concrete-python/examples/sha1/README.md) +* [Levenshtein distance with Modules](../../frontends/concrete-python/examples/levenshtein_distance/README.md) #### Blog tutorials -* [The Encrypted Game of Life in Python Using Concrete](https://www.zama.ai/post/the-encrypted-game-of-life-using-concrete-python) - November 7, 2023 -* [Encrypted Key-value Database Using Homomorphic Encryption](https://www.zama.ai/post/encrypted-key-value-database-using-homomorphic-encryption) - March 16, 2023 +* [The Encrypted Game of Life in Python Using Concrete](https://www.zama.ai/post/the-encrypted-game-of-life-using-concrete-python) - November 2023 +* [Encrypted Key-value Database Using Homomorphic Encryption](https://www.zama.ai/post/encrypted-key-value-database-using-homomorphic-encryption) - March 2023 #### Video tutorials @@ -31,4 +33,4 @@ **Zama 5-Question Developer Survey** We want to hear from you! Take 1 minute to share your thoughts and helping us enhance our documentation and libraries. **👉** [**Click here**](https://zvajd6l0ngk.typeform.com/to/I7mXXanI) to participate. -{% endhint %} \ No newline at end of file +{% endhint %} diff --git a/frontends/concrete-python/.gitignore b/frontends/concrete-python/.gitignore index 19a65cacc..1813eb406 100644 --- a/frontends/concrete-python/.gitignore +++ b/frontends/concrete-python/.gitignore @@ -141,3 +141,7 @@ dmypy.json # fhe keys .keys + +# progress tracker +progress.json +progress.processed.json diff --git a/frontends/concrete-python/.ruff.toml b/frontends/concrete-python/.ruff.toml index 2b95aca54..b520e6e7d 100644 --- a/frontends/concrete-python/.ruff.toml +++ b/frontends/concrete-python/.ruff.toml @@ -20,3 +20,5 @@ ignore = [ "concrete/fhe/mlir/converter.py" = ["ARG002", "B011", "F403", "F405"] "examples/**" = ["PLR2004"] "tests/**" = ["PLR2004", "PLW0603", "SIM300", "S311"] +"benchmarks/**" = ["S311", "B023"] +"scripts/**" = ["DTZ005"] diff --git a/frontends/concrete-python/Makefile b/frontends/concrete-python/Makefile index 420e5d280..b5324c31a 100644 --- a/frontends/concrete-python/Makefile +++ b/frontends/concrete-python/Makefile @@ -5,6 +5,11 @@ COMPILER_BUILD_DIRECTORY ?= $(PWD)/../../compilers/concrete-compiler/compiler/bu BINDINGS_DIRECTORY=${COMPILER_BUILD_DIRECTORY}/tools/concretelang/python_packages/concretelang_core/ RUNTIME_LIBRARY=${COMPILER_BUILD_DIRECTORY}/lib/libConcretelangRuntime.so +CONCRETE_VERSION?="" # empty mean latest +# E.g. to use a previous version: `make CONCRETE_VERSION="<2.7.0" venv` +# E.g. to use a nightly: `make CONCRETE_VERSION="==2.7.0dev20240801` +# see https://pypi.zama.ai/cpu/concrete-python/index.html for available versions + .ONESHELL: .PHONY: .SILENT: @@ -16,7 +21,9 @@ RUNTIME_LIBRARY=${COMPILER_BUILD_DIRECTORY}/lib/libConcretelangRuntime.so venv: $(PYTHON) -m venv .venv . .venv/bin/activate - +ifeq (,$(wildcard ${RUNTIME_LIBRARY})) + $(PIP) install --extra-index-url https://pypi.zama.ai/cpu "concrete-python$(CONCRETE_VERSION)" +endif $(PIP) install -r requirements.dev.txt $(PIP) install -r requirements.extra-full.txt $(PIP) install -r requirements.txt @@ -26,11 +33,17 @@ venv: @echo "You can have the same activation in a terminal using:" @echo 'eval $$(make cp_activate)' -cp_activate: +cp_activate: silent_cp_activate @echo "echo 'Activating virtual env and local concrete-python and local compiler bindings' ;" + +silent_cp_activate: @echo "export PATH=$(PWD)/.venv/bin:$$PATH;" +ifeq (,$(wildcard ${RUNTIME_LIBRARY})) + @echo "export PYTHONPATH=$(PWD);" +else @echo "export LD_PRELOAD=$(RUNTIME_LIBRARY);" - @echo "export PYTHONPATH=$(BINDINGS_DIRECTORY);" + @echo "export PYTHONPATH=${BINDINGS_DIRECTORY}:$(PWD);" +endif licenses: bash scripts/versioning/summary.sh @@ -42,19 +55,16 @@ licenses: pytest: pytest-default pytest-default: - export LD_PRELOAD=$(RUNTIME_LIBRARY) - export PYTHONPATH=$(BINDINGS_DIRECTORY) + eval $(shell make silent_cp_activate) pytest tests -svv -n auto \ --cov=concrete.fhe \ - --cov-fail-under=95 \ + --cov-fail-under=98.9 \ --cov-report=term-missing:skip-covered \ --key-cache "${KEY_CACHE_DIRECTORY}" \ -m "${PYTEST_MARKERS}" pytest-single: - export LD_PRELOAD=$(RUNTIME_LIBRARY) - export PYTHONPATH=$(BINDINGS_DIRECTORY) - + eval $(shell make silent_cp_activate) # test single precision, mono params pytest tests -svv -n auto \ --precision=single \ @@ -63,9 +73,7 @@ pytest-single: -m "${PYTEST_MARKERS}" pytest-multi: - export LD_PRELOAD=$(RUNTIME_LIBRARY) - export PYTHONPATH=$(BINDINGS_DIRECTORY) - + eval $(shell make silent_cp_activate) # test multi precision, multi params pytest tests -svv -n auto \ --precision=multi \ @@ -77,9 +85,7 @@ pytest-multi: -m "${PYTEST_MARKERS}" pytest-gpu: - export LD_PRELOAD=$(RUNTIME_LIBRARY) - export PYTHONPATH=$(BINDINGS_DIRECTORY) - + eval $(shell make silent_cp_activate) # test single precision pytest tests -svv -n0 --use_gpu \ --key-cache "${KEY_CACHE_DIRECTORY}" \ @@ -94,18 +100,36 @@ pytest-gpu: --key-cache "${KEY_CACHE_DIRECTORY}" \ -m "${PYTEST_MARKERS}" +benchmark: + eval $(shell make silent_cp_activate) + export PROGRESS_SAMPLES=3 + export PROGRESS_OUTPUT_INDENT=2 + + rm -rf progress.json + find ./benchmarks/ -name "*.py" | xargs python + +process-benchmark-results-for-grafana: + eval $(shell make silent_cp_activate) + python scripts/benchmark/postprocessor.py \ + --source progress.json \ + --target progress.processed.json \ + --path_to_repository ../.. + # ========== # Formatting # ========== format: + eval $(shell make silent_cp_activate) bash scripts/format/formatter.sh \ --dir concrete \ --dir examples \ --dir scripts \ - --dir tests + --dir tests \ + --dir benchmarks sanitize-notebooks: + eval $(shell make silent_cp_activate) $(PYTHON) scripts/notebook/sanitizer.py docs conformance: format sanitize-notebooks @@ -115,29 +139,37 @@ conformance: format sanitize-notebooks # ======= check-format: + eval $(shell make silent_cp_activate) bash scripts/format/formatter.sh --check \ --dir concrete \ --dir examples \ --dir scripts \ - --dir tests + --dir tests \ + --dir benchmarks check-sanitize-notebooks: + eval $(shell make silent_cp_activate) $(PYTHON) scripts/notebook/sanitizer.py docs --check mypy: - mypy concrete examples scripts tests --ignore-missing-imports + eval $(shell make silent_cp_activate) + mypy concrete examples scripts tests benchmarks --ignore-missing-imports pydocstyle: + eval $(shell make silent_cp_activate) pydocstyle concrete --convention google --add-ignore=D1,D200,D202,D212,D402 --add-select=D401 pylint: + eval $(shell make silent_cp_activate) pylint --rcfile=.pylintrc concrete pylint --rcfile=.pylintrc examples --disable=C0103,C0114,C0115,C0116,E0401,R1721 pylint --rcfile=.pylintrc scripts pylint --rcfile=.pylintrc tests --disable=C0301,W0108 + pylint --rcfile=.pylintrc benchmarks ruff: - ruff concrete/ examples/ scripts/ tests/ + eval $(shell make silent_cp_activate) + ruff concrete/ examples/ scripts/ tests/ benchmarks/ pcc: check-format check-sanitize-notebooks mypy pydocstyle pylint ruff diff --git a/frontends/concrete-python/benchmarks/primitive.py b/frontends/concrete-python/benchmarks/primitive.py new file mode 100644 index 000000000..c5dfec54e --- /dev/null +++ b/frontends/concrete-python/benchmarks/primitive.py @@ -0,0 +1,134 @@ +""" +Benchmark primitive operations. +""" + +# pylint: disable=import-error,cell-var-from-loop,redefined-outer-name + +import random + +import py_progress_tracker as progress + +from concrete import fhe + +targets = [] +configuration = fhe.Configuration() + +# Table Lookup +for bit_width in range(2, 8 + 1): + targets.append( + { + "id": f"table-lookup :: tlu[eint{bit_width}]", + "name": f"{bit_width}-bit table lookup", + "parameters": { + "function": lambda x: x // 2, + "encryption": {"x": "encrypted"}, + "inputset": fhe.inputset(lambda _: random.randint(0, (2**bit_width) - 1)), + "configuration": configuration, + }, + } + ) + +# Encrypted Multiplication +for bit_width in range(2, 8 + 1): + targets.append( + { + "id": f"encrypted-multiplication :: eint{bit_width} * eint{bit_width}", + "name": f"{bit_width}-bit encrypted multiplication", + "parameters": { + "function": lambda x, y: x * y, + "encryption": {"x": "encrypted", "y": "encrypted"}, + "inputset": fhe.inputset( + lambda _: random.randint(0, (2**bit_width) - 1), + lambda _: random.randint(0, (2**bit_width) - 1), + ), + "configuration": configuration, + }, + } + ) + + +@progress.track(targets) +def main(function, encryption, inputset, configuration): + """ + Benchmark a target. + + Args: + function: + function to benchmark + + encryption: + encryption status of the arguments of the function + + inputset: + inputset to use for compiling the function + + configuration: + configuration to use for compilation + """ + + compiler = fhe.Compiler(function, encryption) + + print("Compiling...") + with progress.measure(id="compilation-time-ms", label="Compilation Time (ms)"): + circuit = compiler.compile(inputset, configuration) + + progress.measure( + id="complexity", + label="Complexity", + value=circuit.complexity, + ) + + print("Generating keys...") + with progress.measure(id="key-generation-time-ms", label="Key Generation Time (ms)"): + circuit.keygen(force=True) + + progress.measure( + id="evaluation-key-size-mb", + label="Evaluation Key Size (MB)", + value=(len(circuit.keys.evaluation.serialize()) / (1024 * 1024)), + ) + + # pylint: disable=unused-variable + + print("Warming up...") + sample = random.choice(inputset) + encrypted = circuit.encrypt(*sample) + ran = circuit.run(encrypted) + decrypted = circuit.decrypt(ran) # noqa: F841 + + # pylint: enable=unused-variable + + def calculate_input_output_size(input_output): + if isinstance(input_output, tuple): + result = sum(len(value.serialize()) for value in input_output) + else: + result = len(input_output.serialize()) + return result / (1024 * 1024) + + progress.measure( + id="input-ciphertext-size-mb", + label="Input Ciphertext Size (MB)", + value=calculate_input_output_size(encrypted), + ) + progress.measure( + id="output-ciphertext-size-mb", + label="Output Ciphertext Size (MB)", + value=calculate_input_output_size(ran), + ) + + for i in range(10): + print(f"Running subsample {i + 1} out of 10...") + + sample = random.choice(inputset) + with progress.measure(id="encryption-time-ms", label="Encryption Time (ms)"): + encrypted = circuit.encrypt(*sample) + with progress.measure(id="evaluation-time-ms", label="Evaluation Time (ms)"): + ran = circuit.run(encrypted) + with progress.measure(id="decryption-time-ms", label="Decryption Time (ms)"): + output = circuit.decrypt(ran) + + progress.measure( + id="accuracy", + label="Accuracy", + value=int(output == function(*sample)), + ) diff --git a/frontends/concrete-python/concrete/fhe/__init__.py b/frontends/concrete-python/concrete/fhe/__init__.py index 866e9dfa7..723616cb4 100644 --- a/frontends/concrete-python/concrete/fhe/__init__.py +++ b/frontends/concrete-python/concrete/fhe/__init__.py @@ -57,6 +57,7 @@ from .extensions import ( one, ones, ones_like, + refresh, relu, round_bit_pattern, tag, diff --git a/frontends/concrete-python/concrete/fhe/compilation/compiler.py b/frontends/concrete-python/concrete/fhe/compilation/compiler.py index da0138840..17ca58360 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/compiler.py +++ b/frontends/concrete-python/concrete/fhe/compilation/compiler.py @@ -49,6 +49,7 @@ class Compiler: configuration: Configuration artifacts: Optional[DebugArtifacts] + location: str inputset: List[Any] graph: Optional[Graph] @@ -168,6 +169,9 @@ class Compiler: self._is_direct = False self._parameter_values = {} + self.location = ( + f"{self.function.__code__.co_filename}:{self.function.__code__.co_firstlineno}" + ) def __call__( self, @@ -219,7 +223,7 @@ class Compiler: ) } - self.graph = Tracer.trace(self.function, parameters) + self.graph = Tracer.trace(self.function, parameters, location=self.location) if self.artifacts is not None: self.artifacts.add_graph("initial", self.graph) fuse( @@ -244,7 +248,9 @@ class Compiler: """ if self._is_direct: - self.graph = Tracer.trace(self.function, self._parameter_values, is_direct=True) + self.graph = Tracer.trace( + self.function, self._parameter_values, is_direct=True, location=self.location + ) if self.artifacts is not None: self.artifacts.add_graph("initial", self.graph) # pragma: no cover diff --git a/frontends/concrete-python/concrete/fhe/compilation/module_compiler.py b/frontends/concrete-python/concrete/fhe/compilation/module_compiler.py index de76e6b6a..0654fa81b 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/module_compiler.py +++ b/frontends/concrete-python/concrete/fhe/compilation/module_compiler.py @@ -54,6 +54,7 @@ class FunctionDef: inputset: List[Any] graph: Optional[Graph] _parameter_values: Dict[str, ValueDescription] + location: str def __init__( self, @@ -111,6 +112,9 @@ class FunctionDef: self.graph = None self.name = function.__name__ self._parameter_values = {} + self.location = ( + f"{self.function.__code__.co_filename}:{self.function.__code__.co_firstlineno}" + ) def trace( self, @@ -144,7 +148,7 @@ class FunctionDef: ) } - self.graph = Tracer.trace(self.function, parameters, name=self.name) + self.graph = Tracer.trace(self.function, parameters, name=self.name, location=self.location) if artifacts is not None: artifacts.add_graph("initial", self.graph) diff --git a/frontends/concrete-python/concrete/fhe/compilation/server.py b/frontends/concrete-python/concrete/fhe/compilation/server.py index 5978d5182..55e68d463 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/server.py +++ b/frontends/concrete-python/concrete/fhe/compilation/server.py @@ -8,11 +8,12 @@ import json import shutil import tempfile from pathlib import Path -from typing import Dict, Iterable, List, Optional, Tuple, Union +from typing import Dict, Iterable, List, Optional, Set, Tuple, Union # mypy: disable-error-code=attr-defined import concrete.compiler import jsonpickle +import numpy as np from concrete.compiler import ( CompilationContext, CompilationOptions, @@ -23,6 +24,7 @@ from concrete.compiler import ( ProgramCompilationFeedback, PublicArguments, ServerProgram, + SimulatedValueExporter, set_compiler_logging, set_llvm_debug_flag, ) @@ -45,6 +47,7 @@ from .configuration import ( ParameterSelectionStrategy, ) from .specs import ClientSpecs +from .utils import friendly_type_format from .value import Value # pylint: enable=import-error,no-member,no-name-in-module @@ -68,6 +71,9 @@ class Server: _configuration: Optional[Configuration] _composition_rules: Optional[List[CompositionRule]] + _clear_input_indices: Dict[str, Set[int]] + _clear_input_shapes: Dict[str, Dict[int, Tuple[int, ...]]] + def __init__( self, client_specs: ClientSpecs, @@ -89,6 +95,23 @@ class Server: self._mlir = None self._composition_rules = composition_rules + self._clear_input_indices = {} + self._clear_input_shapes = {} + + functions_parameters = json.loads(client_specs.client_parameters.serialize())["circuits"] + for function_parameters in functions_parameters: + name = function_parameters["name"] + self._clear_input_indices[name] = { + index + for index, input_spec in enumerate(function_parameters["inputs"]) + if "plaintext" in input_spec["typeInfo"] + } + self._clear_input_shapes[name] = { + index: tuple(input_spec["rawInfo"]["shape"]["dimensions"]) + for index, input_spec in enumerate(function_parameters["inputs"]) + if "plaintext" in input_spec["typeInfo"] + } + assert_that( support.load_client_parameters(compilation_result).serialize() == client_specs.client_parameters.serialize() @@ -299,7 +322,7 @@ class Server: shutil.make_archive(path, "zip", self._output_dir) @staticmethod - def load(path: Union[str, Path]) -> "Server": + def load(path: Union[str, Path], **kwargs) -> "Server": """ Load the server from the given path in zip format. @@ -307,6 +330,10 @@ class Server: path (Union[str, Path]): path to load the server from + kwargs (Dict[str, Any]): + configuration options to overwrite when loading a server saved with `via_mlir` + if server isn't loaded via mlir, kwargs are ignored + Returns: Server: server loaded from the filesystem @@ -343,7 +370,7 @@ class Server: mlir = f.read() with open(output_dir_path / "configuration.json", "r", encoding="utf-8") as f: - configuration = Configuration().fork(**jsonpickle.loads(f.read())) + configuration = Configuration().fork(**jsonpickle.loads(f.read())).fork(**kwargs) return Server.create( mlir, configuration, is_simulated, composition_rules=composition_rules @@ -412,10 +439,32 @@ class Server: raise ValueError(message) if not isinstance(arg, Value): - message = f"Expected argument {i} to be an fhe.Value but it's {type(arg).__name__}" - raise ValueError(message) + if i not in self._clear_input_indices[function_name]: + message = ( + f"Expected argument {i} to be an fhe.Value " + f"but it's {friendly_type_format(type(arg))}" + ) + raise ValueError(message) - buffers.append(arg.inner) + # Simulated value exporter can be used here + # as "clear" fhe.Values have the same + # internal representation as "simulation" fhe.Values + + exporter = SimulatedValueExporter.new( + self.client_specs.client_parameters, + function_name, + ) + + if isinstance(arg, (int, np.integer)): + arg = exporter.export_scalar(i, arg) + else: + arg = np.array(arg) + arg = exporter.export_tensor(i, arg.flatten().tolist(), arg.shape) + + if isinstance(arg, Value): + buffers.append(arg.inner) + else: + buffers.append(arg) public_args = PublicArguments.new(self.client_specs.client_parameters, buffers) server_circuit = self._server_program.get_server_circuit(function_name) diff --git a/frontends/concrete-python/concrete/fhe/compilation/utils.py b/frontends/concrete-python/concrete/fhe/compilation/utils.py index 2ba2c7c39..7010a8627 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/utils.py +++ b/frontends/concrete-python/concrete/fhe/compilation/utils.py @@ -82,10 +82,16 @@ def validate_input_args( Returns: List[Optional[Union[int, np.ndarray]]]: ordered validated args """ + functions_parameters = json.loads(client_specs.client_parameters.serialize())["circuits"] - client_parameters_json = next( - filter(lambda x: x["name"] == function_name, functions_parameters) - ) + for function_parameters in functions_parameters: + if function_parameters["name"] == function_name: + client_parameters_json = function_parameters + break + else: + message = f"Function `{function_name}` is not in the module" + raise ValueError(message) + assert "inputs" in client_parameters_json input_specs = client_parameters_json["inputs"] if len(args) != len(input_specs): diff --git a/frontends/concrete-python/concrete/fhe/extensions/__init__.py b/frontends/concrete-python/concrete/fhe/extensions/__init__.py index 825074896..e6437e1c4 100644 --- a/frontends/concrete-python/concrete/fhe/extensions/__init__.py +++ b/frontends/concrete-python/concrete/fhe/extensions/__init__.py @@ -8,7 +8,7 @@ from .array import array from .bits import bits from .convolution import conv from .hint import hint -from .identity import identity +from .identity import identity, refresh from .maxpool import maxpool from .multivariate import multivariate from .ones import one, ones, ones_like diff --git a/frontends/concrete-python/concrete/fhe/extensions/identity.py b/frontends/concrete-python/concrete/fhe/extensions/identity.py index ab13fc7db..cd2eca82b 100644 --- a/frontends/concrete-python/concrete/fhe/extensions/identity.py +++ b/frontends/concrete-python/concrete/fhe/extensions/identity.py @@ -35,3 +35,33 @@ def identity(x: Union[Tracer, Any]) -> Union[Tracer, Any]: lambda x: deepcopy(x), # pylint: disable=unnecessary-lambda ) return Tracer(computation, [x]) + + +def refresh(x: Union[Tracer, Any]) -> Union[Tracer, Any]: + """ + Refresh x. + + Refresh encryption noise, the output noise is usually smaller compared to the input noise. + Bit-width of the input and the output can be different. + + Args: + x (Union[Tracer, Any]): + input to identity + + Returns: + Union[Tracer, Any]: + identity tracer if called with a tracer + deepcopy of the input otherwise + """ + + if not isinstance(x, Tracer): + return deepcopy(x) + + computation = Node.generic( + "identity", + [deepcopy(x.output)], + x.output, + lambda x, **_kwargs: deepcopy(x), + kwargs={"force_noise_refresh": True}, + ) + return Tracer(computation, [x]) diff --git a/frontends/concrete-python/concrete/fhe/mlir/context.py b/frontends/concrete-python/concrete/fhe/mlir/context.py index 0f9b90f1c..9b058dc0c 100644 --- a/frontends/concrete-python/concrete/fhe/mlir/context.py +++ b/frontends/concrete-python/concrete/fhe/mlir/context.py @@ -2507,9 +2507,6 @@ class Context: assert lsb is not None bit_value = self.to_signedness(lsb, of=resulting_type) - bit_value = self.reinterpret( - bit_value, bit_width=max(resulting_type.bit_width, max_bit) - ) delta_precision = position - actual_position assert actual_position < 0 or 0 <= delta_precision < resulting_type.bit_width, ( @@ -2518,6 +2515,9 @@ class Context: resulting_type.bit_width, ) if delta_precision: + bit_value = self.reinterpret( + bit_value, bit_width=max(resulting_type.bit_width, max_bit) + ) bit_value = self.shift_left_at_constant_precision(bit_value, delta_precision) bit_value = self.reinterpret(bit_value, bit_width=resulting_type.bit_width) @@ -2540,7 +2540,9 @@ class Context: ) -> Conversion: return self.comparison(resulting_type, x, y, accept={Comparison.GREATER, Comparison.EQUAL}) - def identity(self, resulting_type: ConversionType, x: Conversion) -> Conversion: + def identity( + self, resulting_type: ConversionType, x: Conversion, force_noise_refresh: bool + ) -> Conversion: assert ( x.is_encrypted and resulting_type.is_encrypted @@ -2548,7 +2550,7 @@ class Context: and x.is_signed == resulting_type.is_signed ) - if resulting_type.bit_width == x.bit_width: + if resulting_type.bit_width == x.bit_width and not force_noise_refresh: return x result = self.extract_bits( @@ -3776,7 +3778,12 @@ class Context: result = self.add(resulting_type, result, constant) return result - table += [0] * ((2**on.bit_width) - len(table)) + padding = [0] * ((2**on.bit_width) - len(table)) + if padding: + if on.is_unsigned: + table += padding + else: + table = table[: len(table) // 2] + padding + table[-len(table) // 2 :] dialect = fhe if on.is_scalar else fhelinalg operation = dialect.ApplyLookupTableEintOp diff --git a/frontends/concrete-python/concrete/fhe/mlir/converter.py b/frontends/concrete-python/concrete/fhe/mlir/converter.py index 42dea77e3..ad4fe2240 100644 --- a/frontends/concrete-python/concrete/fhe/mlir/converter.py +++ b/frontends/concrete-python/concrete/fhe/mlir/converter.py @@ -78,34 +78,45 @@ class Converter: input_types = [ctx.typeof(node).mlir for node in graph.ordered_inputs()] - @func.FuncOp.from_py_func(*input_types, name=name) - def main(*args): - for index, node in enumerate(graph.ordered_inputs()): - conversion = Conversion(node, args[index]) - if "original_bit_width" in node.properties: - conversion.set_original_bit_width( - node.properties["original_bit_width"] + location = graph.location.split(":") + with MlirLocation.file( + location[0], line=int(location[1]), col=0, context=context + ): + + @func.FuncOp.from_py_func(*input_types, name=name) + def main(*args): + for index, node in enumerate(graph.ordered_inputs()): + conversion = Conversion(node, args[index]) + if "original_bit_width" in node.properties: + conversion.set_original_bit_width( + node.properties["original_bit_width"] + ) + ctx.conversions[node] = conversion + + ordered_nodes = [ + node + for node in nx.lexicographical_topological_sort(graph.graph) + if node.operation != Operation.Input + ] + + for progress_index, node in enumerate(ordered_nodes): + self.trace_progress( + self.configuration, progress_index, ordered_nodes ) - ctx.conversions[node] = conversion + preds = [ + ctx.conversions[pred] for pred in graph.ordered_preds_of(node) + ] + self.node(ctx, node, preds) + self.trace_progress( + self.configuration, len(ordered_nodes), ordered_nodes + ) - ordered_nodes = [ - node - for node in nx.lexicographical_topological_sort(graph.graph) - if node.operation != Operation.Input - ] + outputs = [] + for node in graph.ordered_outputs(): + assert node in ctx.conversions + outputs.append(ctx.conversions[node].result) - for progress_index, node in enumerate(ordered_nodes): - self.trace_progress(self.configuration, progress_index, ordered_nodes) - preds = [ctx.conversions[pred] for pred in graph.ordered_preds_of(node)] - self.node(ctx, node, preds) - self.trace_progress(self.configuration, len(ordered_nodes), ordered_nodes) - - outputs = [] - for node in graph.ordered_outputs(): - assert node in ctx.conversions - outputs.append(ctx.conversions[node].result) - - return tuple(outputs) + return tuple(outputs) return module @@ -434,7 +445,8 @@ class Converter: def identity(self, ctx: Context, node: Node, preds: List[Conversion]) -> Conversion: assert len(preds) == 1 - return ctx.identity(ctx.typeof(node), preds[0]) + force_noise_refresh = node.properties["kwargs"].get("force_noise_refresh", False) + return ctx.identity(ctx.typeof(node), preds[0], force_noise_refresh) def index_dynamic(self, ctx: Context, node: Node, preds: List[Conversion]) -> Conversion: assert len(preds) >= 2 diff --git a/frontends/concrete-python/concrete/fhe/representation/graph.py b/frontends/concrete-python/concrete/fhe/representation/graph.py index 5ba9c8ce9..1a501f39b 100644 --- a/frontends/concrete-python/concrete/fhe/representation/graph.py +++ b/frontends/concrete-python/concrete/fhe/representation/graph.py @@ -42,6 +42,8 @@ class Graph: name: str + location: str + def __init__( self, graph: nx.MultiDiGraph, @@ -49,6 +51,7 @@ class Graph: output_nodes: Dict[int, Node], is_direct: bool = False, name: str = "main", + location: str = "", ): self.graph = graph @@ -63,6 +66,7 @@ class Graph: self.bit_width_constraints = None self.name = name + self.location = location self.prune_useless_nodes() @@ -209,7 +213,7 @@ class Graph: horizontal: bool = False, save_to: Optional[Union[Path, str]] = None, show: bool = False, - ) -> Path: + ) -> Path: # pragma: no cover """ Draw the graph. diff --git a/frontends/concrete-python/concrete/fhe/tracing/tracer.py b/frontends/concrete-python/concrete/fhe/tracing/tracer.py index 0cd805304..4907ae977 100644 --- a/frontends/concrete-python/concrete/fhe/tracing/tracer.py +++ b/frontends/concrete-python/concrete/fhe/tracing/tracer.py @@ -39,6 +39,7 @@ class Tracer: parameters: Dict[str, ValueDescription], is_direct: bool = False, name: str = "main", + location: str = "", ) -> Graph: """ Trace `function` and create the `Graph` that represents it. @@ -168,7 +169,7 @@ class Tracer: output_idx: tracer.computation for output_idx, tracer in enumerate(output_tracers) } - return Graph(graph, input_nodes, output_nodes, is_direct, name) + return Graph(graph, input_nodes, output_nodes, is_direct, name, location=location) # pylint: enable=too-many-statements diff --git a/frontends/concrete-python/examples/floating_point/floating_point.ipynb b/frontends/concrete-python/examples/floating_point/floating_point.ipynb new file mode 100644 index 000000000..7b1332228 --- /dev/null +++ b/frontends/concrete-python/examples/floating_point/floating_point.ipynb @@ -0,0 +1,613 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "13fd4510-107e-4eb4-b3af-c91da321c3bd", + "metadata": {}, + "source": [ + "# Floating point management in Concrete" + ] + }, + { + "cell_type": "markdown", + "id": "de110128-c4cc-42a3-a19e-aaba6bc9008d", + "metadata": {}, + "source": [ + "In this tutorial, we are going to explain how to manage circuits with floating points. \n", + "\n", + "As we explain in the documentation, TFHE operations are limited to integers. However, it is most of the time not a limit, since it is possible to turn floating-point operations into integer operations. This is what we are going to study in this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0a8b3dc3-1629-4647-9a29-d757313162b9", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import concrete.fhe as fhe\n", + "from time import time\n", + "\n", + "from numpy.random import randint\n", + "from numpy.random import rand\n", + "from numpy import round" + ] + }, + { + "cell_type": "markdown", + "id": "bf3b2a7d-6b7e-4c05-b54f-c23c2bdffccb", + "metadata": {}, + "source": [ + "## Starting with an integer circuit" + ] + }, + { + "cell_type": "markdown", + "id": "6b146f03-2b38-4aa7-a0b3-7cd640c44b88", + "metadata": {}, + "source": [ + "Let's start with a very simple circuit, directly on integers. We'll take an example inspired by the README example." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8af17025-e184-4238-b579-a68a454cd5a7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Compilation and test look good, with FHE execution time of about 0.00 seconds per inference\n" + ] + } + ], + "source": [ + "nb_bits = 4\n", + "length_inputset = 100\n", + "nb_test_samples = 16\n", + "\n", + "@fhe.compiler({\"x\": \"encrypted\", \"y\": \"encrypted\"})\n", + "def add_integers(x, y):\n", + " return x + y\n", + "\n", + "# Compile\n", + "inputset = [(randint(2**nb_bits), randint(2**nb_bits)) for _ in range(length_inputset)]\n", + "circuit = add_integers.compile(inputset)\n", + "\n", + "# Check\n", + "time_begin = time()\n", + "\n", + "for _ in range(nb_test_samples):\n", + " random_sample = (randint(2**nb_bits), randint(2**nb_bits))\n", + " assert circuit.encrypt_run_decrypt(*random_sample) == add_integers(*random_sample)\n", + " \n", + "print(f\"Compilation and test look good, with FHE execution time of about {(time() - time_begin) / nb_test_samples:.2f} seconds per inference\")" + ] + }, + { + "cell_type": "markdown", + "id": "b798da0d-2f5e-469c-b263-4ad4b9b8949a", + "metadata": {}, + "source": [ + "Here, we have defined a function `add_integers`, which takes 2 encrypted inputs and add them. We have compiled this function using an inputset of random inputs of `nb_bits = 4` bits. At the end, we check the FHE execution, by comparing `encrypt_run_decrypt` execution (which conveniently pack encryption, FHE run and decryption together, for testing purposes) and the clear execution `add_integers(*random_sample)`. " + ] + }, + { + "cell_type": "markdown", + "id": "3eec2673-500a-4eff-8efb-8e1f63294881", + "metadata": {}, + "source": [ + "Let's even see the MLIR circuit" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "13708d3e-edc6-4235-8838-72e4fbaae5d3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "module {\n", + " func.func @main(%arg0: !FHE.eint<5>, %arg1: !FHE.eint<5>) -> !FHE.eint<5> {\n", + " %0 = \"FHE.add_eint\"(%arg0, %arg1) : (!FHE.eint<5>, !FHE.eint<5>) -> !FHE.eint<5>\n", + " return %0 : !FHE.eint<5>\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "print(circuit.mlir)" + ] + }, + { + "cell_type": "markdown", + "id": "ff805dec-57b4-422e-b35a-e05529148bf8", + "metadata": {}, + "source": [ + "Here we see that inputs and outputs are considered as 5b integers" + ] + }, + { + "cell_type": "markdown", + "id": "1f62fa64-d0ca-4d48-8f66-fa6797d6611e", + "metadata": {}, + "source": [ + "## Trying to use it with floats" + ] + }, + { + "cell_type": "markdown", + "id": "f28fa70f-b41a-4617-b68e-8248995e87d8", + "metadata": {}, + "source": [ + "Now, let's try to use this circuit with floats. As you can imagine, it's not going to work." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ab241720-ac18-4147-b99f-ae905c4eeec8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Expected argument 0 to be EncryptedScalar but it's EncryptedScalar\n" + ] + } + ], + "source": [ + "random_sample = (1.5, 2.42)\n", + "try:\n", + " circuit.encrypt_run_decrypt(*random_sample)\n", + "except Exception as err:\n", + " print(err)\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "id": "da4ba411-5f0c-41bd-ad47-283ed797f4ef", + "metadata": {}, + "source": [ + "It raises an error `ValueError: Expected argument 0 to be EncryptedScalar but it's EncryptedScalar`. Let's see now how to deal with this situation." + ] + }, + { + "cell_type": "markdown", + "id": "5c19943d-ec4c-4630-b19a-de16c4c1811e", + "metadata": {}, + "source": [ + "## Creating a circuit for floats" + ] + }, + { + "cell_type": "markdown", + "id": "30310f38-4a14-4f10-8ad0-cc828b124fb2", + "metadata": {}, + "source": [ + "What we are going to do is:\n", + "- chose a scaling factor\n", + "- multiply floats by this scaling factor\n", + "- round to integer\n", + "- encrypt\n", + "- make FHE computations over integers, classically\n", + "- decrypt the result\n", + "- unscale\n" + ] + }, + { + "cell_type": "markdown", + "id": "d9c61142-a047-4c46-a91a-441640be9538", + "metadata": {}, + "source": [ + "scaling_factor = 100" + ] + }, + { + "cell_type": "markdown", + "id": "26239c84-882a-4b43-b5f1-8adca56313e5", + "metadata": {}, + "source": [ + "Here, we chose a scaling factor which is a power of 10, to be easier to read, but it could be anything, including a float value." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c357758a-d380-4e43-95fc-9b07b3fec61e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Showing an example\n", + "random_sample=(1.583812144515164, 0.38770109380525164)\n", + "scaled_sample=(158, 39)\n", + "scaled_result=197\n", + "\n", + "FHE: 1.97\n", + "clear: 1.9715132383204157\n", + "bounded error: 0.02\n", + "\n", + "Compilation and test look good, with FHE execution time of about 0.00 seconds per inference\n" + ] + } + ], + "source": [ + "max_value_for_floats = 2.5\n", + "scaling_factor = 100\n", + "\n", + "@fhe.compiler({\"x\": \"encrypted\", \"y\": \"encrypted\"})\n", + "def add_integers(x, y):\n", + " return x + y\n", + "\n", + "def are_almost_the_same(a, b, threshold):\n", + " abs_diff = abs(b - a)\n", + " assert abs_diff <= threshold, f\"Too far {a=} {b=} {abs_diff=} > {threshold=}\"\n", + "\n", + "# Compile\n", + "inputset = [(round(scaling_factor * rand() * max_value_for_floats).astype(np.uint32), round(scaling_factor * rand() * max_value_for_floats).astype(np.uint32)) for _ in range(length_inputset)]\n", + "circuit = add_integers.compile(inputset)\n", + "\n", + "# Check\n", + "verbose = True\n", + "time_begin = time()\n", + "\n", + "for _ in range(nb_test_samples):\n", + " # Take a random float input\n", + " random_sample = (rand() * max_value_for_floats, rand() * max_value_for_floats)\n", + " if verbose:\n", + " print(\"Showing an example\")\n", + " print(f\"{random_sample=}\")\n", + " \n", + " # Scale it and round\n", + " scaled_sample = (round(random_sample[0] * scaling_factor).astype(np.uint32), round(random_sample[1] * scaling_factor).astype(np.uint32))\n", + " if verbose:\n", + " print(f\"{scaled_sample=}\")\n", + " \n", + " # Encrypt\n", + " encrypted_scaled_sample = circuit.encrypt(*scaled_sample)\n", + " \n", + " # Computations in FHE\n", + " encrypted_scaled_result = circuit.run(*encrypted_scaled_sample)\n", + " \n", + " # Decrypt\n", + " scaled_result = circuit.decrypt(encrypted_scaled_result)\n", + " if verbose:\n", + " print(f\"{scaled_result=}\")\n", + " \n", + " # Unscale\n", + " result = scaled_result * 1. / scaling_factor\n", + "\n", + " bounded_error = 2. / scaling_factor\n", + " clear_result = random_sample[0] + random_sample[1]\n", + " \n", + " if verbose:\n", + " print()\n", + " print(f\"FHE: {result}\")\n", + " print(f\"clear: {clear_result}\")\n", + " print(f\"bounded error: {bounded_error}\")\n", + "\n", + " are_almost_the_same(result, clear_result, bounded_error)\n", + "\n", + " verbose = False\n", + " \n", + "print(f\"\\nCompilation and test look good, with FHE execution time of about {(time() - time_begin) / nb_test_samples:.2f} seconds per inference\")" + ] + }, + { + "cell_type": "markdown", + "id": "68c26f6b-20bb-40e5-a343-9f4892c7d86b", + "metadata": {}, + "source": [ + "Here, our testing loop checks that the results are the expected ones, with a tolerance error of `bounded_error = 2. / scaling_factor`. We also see one example: \n", + "- random_sample is a pair of floats\n", + "- scaled_sample is this same pair multiplied by the scaling factor and rounded to integers\n", + "- scaled_result is the result of the FHE computation, over integers\n", + "- at the end, we see the FHE result and the clear result. They are close but not the same, due to rounding errors.\n", + "\n", + "To have more precise computations, one needs to take a larger scaling factor. However, keep in mind it has impact on performances, since integers will be larger. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9ef68e15-8eb8-41ed-924c-a767ef8fbee8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "module {\n", + " func.func @main(%arg0: !FHE.eint<9>, %arg1: !FHE.eint<9>) -> !FHE.eint<9> {\n", + " %0 = \"FHE.add_eint\"(%arg0, %arg1) : (!FHE.eint<9>, !FHE.eint<9>) -> !FHE.eint<9>\n", + " return %0 : !FHE.eint<9>\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "print(circuit.mlir)" + ] + }, + { + "cell_type": "markdown", + "id": "87123b2e-ae99-444c-bf19-95a292536342", + "metadata": {}, + "source": [ + "Here, we see that our integers in the circuits have 9 bits, which corresponds to code integers which are smaller than `max_value_for_floats * scaling_factor = 250` plus 1 for the addition carry. Taking `scaling_factor = 1000` for example would give more precise results (`bounded_error` reduces from 0.02 to 0.0002) but now the circuits would have integers of 13 bits. \n", + "\n", + "As our circuits doesn't have programmable bootstrapping (PBS), it doesn't have a big impact, but if we had non linear operations (as we have in the following), the timing impact will be much more important.\n" + ] + }, + { + "cell_type": "markdown", + "id": "d3502aef-767b-4f96-b465-771763c1b4ea", + "metadata": {}, + "source": [ + "## More complex case with Programmable Bootstrapping" + ] + }, + { + "cell_type": "markdown", + "id": "a7f6e053-bc1a-45d3-aa15-9bbd63ae382a", + "metadata": {}, + "source": [ + "Let's do the same for computing the norm of a vector. Here, we'll have a square root so some PBS." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "db901dcb-412c-4b52-8c1e-3d41782bc650", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximal bitwidth in the circuit: 10\n", + "\n", + "Showing an example\n", + "random_sample=(0.6597925446542308, 2.2648103856817494)\n", + "scaled_sample=(5, 18)\n", + "scaled_result=19\n", + "\n", + "FHE: 2.375\n", + "clear: 2.358960000736176\n", + "bounded error: 0.25\n", + "\n", + "Compilation and test look good, with FHE execution time of about 11.16 seconds per inference\n" + ] + } + ], + "source": [ + "max_value_for_floats = 2.5\n", + "scaling_factor = 8\n", + "nb_test_samples = 10\n", + "\n", + "@fhe.compiler({\"x\": \"encrypted\", \"y\": \"encrypted\"})\n", + "def norm(x, y):\n", + " return np.round(fhe.univariate(lambda x: np.sqrt(x))(x**2 + y**2)).astype(np.int64)\n", + "\n", + "# Compile\n", + "inputset = [(round(scaling_factor * rand() * max_value_for_floats).astype(np.uint32), round(scaling_factor * rand() * max_value_for_floats).astype(np.uint32)) for _ in range(length_inputset)]\n", + "circuit = norm.compile(inputset, show_mlir=False)\n", + "\n", + "print(f\"Maximal bitwidth in the circuit: {circuit.graph.maximum_integer_bit_width()}\\n\")\n", + "\n", + "# Check\n", + "verbose = True\n", + "time_begin = time()\n", + "\n", + "for _ in range(nb_test_samples):\n", + " # Take a random float input\n", + " random_sample = (rand() * max_value_for_floats, rand() * max_value_for_floats)\n", + " if verbose:\n", + " print(\"Showing an example\")\n", + " print(f\"{random_sample=}\")\n", + " \n", + " # Scale it and round\n", + " scaled_sample = (round(random_sample[0] * scaling_factor).astype(np.uint32), round(random_sample[1] * scaling_factor).astype(np.uint32))\n", + " if verbose:\n", + " print(f\"{scaled_sample=}\")\n", + " \n", + " # Encrypt\n", + " encrypted_scaled_sample = circuit.encrypt(*scaled_sample)\n", + " \n", + " # Computations in FHE\n", + " encrypted_scaled_result = circuit.run(*encrypted_scaled_sample)\n", + " \n", + " # Decrypt\n", + " scaled_result = circuit.decrypt(encrypted_scaled_result)\n", + " if verbose:\n", + " print(f\"{scaled_result=}\")\n", + " \n", + " # Unscale\n", + " result = scaled_result * 1. / scaling_factor\n", + "\n", + " bounded_error = 2. / scaling_factor\n", + " clear_result = np.sqrt(random_sample[0]**2 + random_sample[1]**2)\n", + " \n", + " if verbose:\n", + " print()\n", + " print(f\"FHE: {result}\")\n", + " print(f\"clear: {clear_result}\")\n", + " print(f\"bounded error: {bounded_error}\")\n", + "\n", + " are_almost_the_same(result, clear_result, bounded_error)\n", + "\n", + " verbose = False\n", + " \n", + "print(f\"\\nCompilation and test look good, with FHE execution time of about {(time() - time_begin) / nb_test_samples:.2f} seconds per inference\")" + ] + }, + { + "cell_type": "markdown", + "id": "560956ce-8791-4dd8-b7c0-c9c489f22063", + "metadata": {}, + "source": [ + "We can remark that here, the function is much slower, since it includes PBS. Furthermore, the input of the PBS is as large as twice the square of typical inputs, which can quickly become large. That's why we have had to reduce the scaling factor and the precision. When more precision is needed, one would have to be a bit more patient." + ] + }, + { + "cell_type": "markdown", + "id": "85995459-8036-4b18-92f0-261d524b1a6e", + "metadata": {}, + "source": [ + "## Final example" + ] + }, + { + "cell_type": "markdown", + "id": "afc5c7eb-db95-49c7-accc-5897e53db414", + "metadata": {}, + "source": [ + "We finish with a more complex example, where one needs to understand what kind of computations are done and cancel some scaling factors during the computation, to ensure correct computations.\n", + "\n", + "Let's suppose we want to convert `f(x, y) = (x**2 + 4y) / 1.33` to FHE. What we'll do is that, we'll scale `x` and `y` with a scaling factor `scaling_factor`, before encryption. Then, in `x**2`, scaling factors will multiply (so we'll have a scaling factor of `scaling_factor**2`) while in `4y` scaling factor would remain as `scaling_factor`. To keep the addition homogeneous, we have two possibilities:\n", + "- multiply `4y` by `scaling_factor` in the FHE circuit, and at the end, unscale by dividing by `scaling_factor**2`\n", + "- or, divide `x**2` by `scaling_factor`in the FHE circuit, and at the end, unscale by dividing by `scaling_factor`.\n", + "We have chose the second approach, since it avoids to enlarge too much integers, making that our FHE execution is more efficient.\n", + "\n", + "The error bound is more complicated to compute: we can use an estimation.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e3fdb20c-3e28-489e-8ede-640331674b7a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximal bitwidth in the circuit: 7\n", + "\n", + "Showing an example\n", + "random_sample=(0.43374356260757363, 1.6491834206477578)\n", + "scaled_sample=(3, 13)\n", + "scaled_result=40\n", + "\n", + "FHE: 5.0\n", + "clear: 5.10140388022146\n", + "bounded error: 0.375\n", + "\n", + "Compilation and test look good, with FHE execution time of about 0.82 seconds per inference\n" + ] + } + ], + "source": [ + "max_value_for_floats = 2\n", + "scaling_factor = 8\n", + "nb_test_samples = 8\n", + "\n", + "def special_function_in_clear(x, y):\n", + " u = x**2\n", + " v = u + 4 * y\n", + " return v / 1.33\n", + "\n", + "@fhe.compiler({\"x\": \"encrypted\", \"y\": \"encrypted\"})\n", + "def special_function(x, y):\n", + " u = fhe.univariate(lambda x: x**2 // scaling_factor)(x)\n", + " v = u + 4 * y \n", + " return np.round(fhe.univariate(lambda x: x / 1.33)(v)).astype(np.int64)\n", + "\n", + "# Compile\n", + "inputset = [(round(scaling_factor * rand() * max_value_for_floats).astype(np.uint32), round(scaling_factor * rand() * max_value_for_floats).astype(np.uint32)) for _ in range(length_inputset)]\n", + "circuit = special_function.compile(inputset, show_mlir=False)\n", + "\n", + "print(f\"Maximal bitwidth in the circuit: {circuit.graph.maximum_integer_bit_width()}\\n\")\n", + "\n", + "# Check\n", + "verbose = True\n", + "time_begin = time()\n", + "\n", + "for _ in range(nb_test_samples):\n", + " # Take a random float input\n", + " random_sample = (rand() * max_value_for_floats, rand() * max_value_for_floats)\n", + " if verbose:\n", + " print(\"Showing an example\")\n", + " print(f\"{random_sample=}\")\n", + " \n", + " # Scale it and round\n", + " scaled_sample = (round(random_sample[0] * scaling_factor).astype(np.uint32), round(random_sample[1] * scaling_factor).astype(np.uint32))\n", + " if verbose:\n", + " print(f\"{scaled_sample=}\")\n", + " \n", + " # Encrypt\n", + " encrypted_scaled_sample = circuit.encrypt(*scaled_sample)\n", + " \n", + " # Computations in FHE\n", + " encrypted_scaled_result = circuit.run(*encrypted_scaled_sample)\n", + " \n", + " # Decrypt\n", + " scaled_result = circuit.decrypt(encrypted_scaled_result)\n", + " if verbose:\n", + " print(f\"{scaled_result=}\")\n", + " \n", + " # Unscale\n", + " result = scaled_result * 1. / scaling_factor\n", + "\n", + " bounded_error = 3. / scaling_factor\n", + " clear_result = special_function_in_clear(*random_sample)\n", + " \n", + " if verbose:\n", + " print()\n", + " print(f\"FHE: {result}\")\n", + " print(f\"clear: {clear_result}\")\n", + " print(f\"bounded error: {bounded_error}\")\n", + "\n", + " are_almost_the_same(result, clear_result, bounded_error)\n", + "\n", + " verbose = False\n", + "\n", + "print(f\"\\nCompilation and test look good, with FHE execution time of about {(time() - time_begin) / nb_test_samples:.2f} seconds per inference\")" + ] + }, + { + "cell_type": "markdown", + "id": "3b228ca3-017f-4502-9b9d-ff17d9cd9171", + "metadata": {}, + "source": [ + "## Conclusion\n", + "\n", + "As one knows, floats are not natively supported in TFHE and thus in Concrete. However, we have shown in this tutorial that by scaling floats to integers, it's completely possible to make the computations in FHE. Finally, we'll add that such techniques, called quantization techniques, are directly integrated into Concrete ML for what is related to machine learning. More information are also given in the Concrete ML documentation, see https://docs.zama.ai/concrete-ml/explanations/quantization. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": ".venv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/frontends/concrete-python/examples/game_of_life/game_of_life.md b/frontends/concrete-python/examples/game_of_life/README.md similarity index 100% rename from frontends/concrete-python/examples/game_of_life/game_of_life.md rename to frontends/concrete-python/examples/game_of_life/README.md diff --git a/frontends/concrete-python/examples/key-value-database/dynamic-size.py b/frontends/concrete-python/examples/key_value_database/dynamic-size.py similarity index 100% rename from frontends/concrete-python/examples/key-value-database/dynamic-size.py rename to frontends/concrete-python/examples/key_value_database/dynamic-size.py diff --git a/docs/application-tutorial/key_value_database.ipynb b/frontends/concrete-python/examples/key_value_database/key_value_database.ipynb similarity index 91% rename from docs/application-tutorial/key_value_database.ipynb rename to frontends/concrete-python/examples/key_value_database/key_value_database.ipynb index 93cf418f5..07c207aab 100644 --- a/docs/application-tutorial/key_value_database.ipynb +++ b/frontends/concrete-python/examples/key_value_database/key_value_database.ipynb @@ -8,7 +8,7 @@ "\n", "This is an interactive tutorial of an Encrypted Key Value Database. The database allows for three operations, **Insert, Replace, and Query**. All the operations are implemented as fully-homomorphic encrypted circuits.\n", "\n", - "In `examples/key-value-database/`, you will find the following files:\n", + "In `frontends/concrete-python/examples/key_value_database/`, you will find the following files:\n", "\n", "- `static-size.py`: This file contains a static size database implementation, meaning that the number of entries is given as a parameter at the beginning.\n", "- `dynamic-size.py`: This file contains a dynamic size database implementation, meaning that the database starts as a zero entry database, and is grown as needed.\n", @@ -62,7 +62,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "# The number of entries in the database\n", "NUMBER_OF_ENTRIES = 5\n", "# The number of bits in each chunk\n", @@ -94,7 +93,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "# Key and Value size must be a multiple of chunk size\n", "assert KEY_SIZE % CHUNK_SIZE == 0\n", "assert VALUE_SIZE % CHUNK_SIZE == 0\n", @@ -123,7 +121,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "# Indexers for each part of the state\n", "FLAG = 0\n", "KEY = slice(1, 1 + NUMBER_OF_KEY_CHUNKS)\n", @@ -166,13 +163,15 @@ "source": [ "def encode(number: int, width: int) -> np.array:\n", " binary_repr = np.binary_repr(number, width=width)\n", - " blocks = [binary_repr[i:i+CHUNK_SIZE] for i in range(0, len(binary_repr), CHUNK_SIZE)]\n", + " blocks = [binary_repr[i : i + CHUNK_SIZE] for i in range(0, len(binary_repr), CHUNK_SIZE)]\n", " return np.array([int(block, 2) for block in blocks])\n", "\n", + "\n", "# Encode a number with the key size\n", "def encode_key(number: int) -> np.array:\n", " return encode(number, width=KEY_SIZE)\n", "\n", + "\n", "# Encode a number with the value size\n", "def encode_value(number: int) -> np.array:\n", " return encode(number, width=VALUE_SIZE)" @@ -202,7 +201,7 @@ "def decode(encoded_number: np.array) -> int:\n", " result = 0\n", " for i in range(len(encoded_number)):\n", - " result += 2**(CHUNK_SIZE*i) * encoded_number[(len(encoded_number) - i) - 1]\n", + " result += 2 ** (CHUNK_SIZE * i) * encoded_number[(len(encoded_number) - i) - 1]\n", " return result" ] }, @@ -224,10 +223,10 @@ "outputs": [], "source": [ "def keep_selected(value, selected):\n", - " if selected:\n", - " return value\n", - " else:\n", - " return 0" + " if selected:\n", + " return value\n", + " else:\n", + " return 0" ] }, { @@ -269,8 +268,8 @@ "outputs": [], "source": [ "def keep_selected_using_lut(value, selected):\n", - " packed = (2 ** CHUNK_SIZE) * selected + value\n", - " return keep_selected_lut[packed]" + " packed = (2**CHUNK_SIZE) * selected + value\n", + " return keep_selected_lut[packed]" ] }, { @@ -308,7 +307,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "# Insert a key value pair into the database\n", "# - state: The state of the database\n", "# - key: The key to insert\n", @@ -334,11 +332,11 @@ " # | 1 | 1 | -> Used, skip\n", " packed_flag_and_found = (found * 2) + flags[i]\n", " # Use the packed flag and found bit to determine if the entry is unused\n", - " is_selected = (packed_flag_and_found == 0)\n", + " is_selected = packed_flag_and_found == 0\n", "\n", " # Update the selection array\n", " selection[i] = is_selected\n", - " # Update the found bit, so all entries will be \n", + " # Update the found bit, so all entries will be\n", " # skipped after the first unused entry is found\n", " found += is_selected\n", "\n", @@ -352,12 +350,12 @@ "\n", " # Create a packed selection and key array\n", " # This array is used to update the key of the selected entry\n", - " packed_selection_and_key = (selection * (2 ** CHUNK_SIZE)) + key\n", + " packed_selection_and_key = (selection * (2**CHUNK_SIZE)) + key\n", " key_update = keep_selected_lut[packed_selection_and_key]\n", "\n", " # Create a packed selection and value array\n", " # This array is used to update the value of the selected entry\n", - " packed_selection_and_value = selection * (2 ** CHUNK_SIZE) + value\n", + " packed_selection_and_value = selection * (2**CHUNK_SIZE) + value\n", " value_update = keep_selected_lut[packed_selection_and_value]\n", "\n", " # Update the state update array with the key and value update arrays\n", @@ -391,7 +389,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "# Replace the value of a key in the database\n", "# If the key is not in the database, nothing happens\n", "# If the key is in the database, the value is replaced\n", @@ -405,8 +402,6 @@ " keys = state[:, KEY]\n", " values = state[:, VALUE]\n", "\n", - " \n", - "\n", " # Create an equal_rows array\n", " # This array is used to select all entries with the given key\n", " # The equal_rows array is created by comparing the keys in the state\n", @@ -415,7 +410,7 @@ " # keys = [[1, 0, 1, 0], [0, 1, 0, 1, 1]]\n", " # key = [1, 0, 1, 0]\n", " # equal_rows = [1, 0]\n", - " equal_rows = (np.sum((keys - key) == 0, axis=1) == NUMBER_OF_KEY_CHUNKS)\n", + " equal_rows = np.sum((keys - key) == 0, axis=1) == NUMBER_OF_KEY_CHUNKS\n", "\n", " # Create a selection array\n", " # This array is used to select the entry to change the value of\n", @@ -424,10 +419,10 @@ " # The reason for combining the equal_rows array with the flags array\n", " # is to make sure that only used entries are selected\n", " selection = (flags * 2 + equal_rows == 3).reshape((-1, 1))\n", - " \n", + "\n", " # Create a packed selection and value array\n", " # This array is used to update the value of the selected entry\n", - " packed_selection_and_value = selection * (2 ** CHUNK_SIZE) + value\n", + " packed_selection_and_value = selection * (2**CHUNK_SIZE) + value\n", " set_value = keep_selected_lut[packed_selection_and_value]\n", "\n", " # Create an inverse selection array\n", @@ -439,7 +434,7 @@ "\n", " # Create a packed inverse selection and value array\n", " # This array is used to keep the value of the entries that are not selected\n", - " packed_inverse_selection_and_values = inverse_selection * (2 ** CHUNK_SIZE) + values\n", + " packed_inverse_selection_and_values = inverse_selection * (2**CHUNK_SIZE) + values\n", " kept_values = keep_selected_lut[packed_inverse_selection_and_values]\n", "\n", " # Update the values of the state with the new values\n", @@ -470,7 +465,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", "# Query the database for a key and return the value\n", "# - state: The state of the database\n", "# - key: The key to query\n", @@ -500,7 +494,7 @@ "\n", " # Create a packed selection and value array\n", " # This array is used to get the value of the selected entry\n", - " packed_selection_and_values = selection * (2 ** CHUNK_SIZE) + values\n", + " packed_selection_and_values = selection * (2**CHUNK_SIZE) + values\n", " value_selection = keep_selected_lut[packed_selection_and_values]\n", "\n", " # Sum the value selection array to get the value\n", @@ -530,7 +524,7 @@ " A key-value database that uses fully homomorphic encryption circuits to store the data.\n", " \"\"\"\n", "\n", - " # The state of the database, it holds all the \n", + " # The state of the database, it holds all the\n", " # keys and values as a table of entries\n", " _state: np.ndarray\n", "\n", @@ -541,38 +535,47 @@ "\n", " # Below is the initialization of the database.\n", "\n", - " # First, we initialize the state, and provide the necessary input sets. \n", - " # In versions later than concrete-numpy.0.9.0, we can use the `direct circuit` \n", - " # functionality to define the bit-widths of encrypted values rather than using \n", - " # `input sets`. Input sets are used to determine the required bit-width of the \n", - " # encrypted values. Hence, we add the largest possible value in the database \n", + " # First, we initialize the state, and provide the necessary input sets.\n", + " # In versions later than concrete-numpy.0.9.0, we can use the `direct circuit`\n", + " # functionality to define the bit-widths of encrypted values rather than using\n", + " # `input sets`. Input sets are used to determine the required bit-width of the\n", + " # encrypted values. Hence, we add the largest possible value in the database\n", " # to the input sets.\n", "\n", - " # Within the initialization phase, we create the required configuration, \n", - " # compilers, circuits, and keys. Circuit and key generation phase is \n", + " # Within the initialization phase, we create the required configuration,\n", + " # compilers, circuits, and keys. Circuit and key generation phase is\n", " # timed and printed in the output.\n", "\n", " def __init__(self):\n", " # Initialize the state to all zeros\n", " self._state = np.zeros(STATE_SHAPE, dtype=np.int64)\n", "\n", - " ## Input sets for initialization of the circuits\n", - " # The input sets are used to initialize the circuits with the correct parameters\n", + " sample_state = np.array(\n", + " [\n", + " [i % 2] + encode_key(i).tolist() + encode_value(i).tolist()\n", + " for i in range(STATE_SHAPE[0])\n", + " ]\n", + " )\n", "\n", - " # The input set for the query circuit\n", - " inputset_binary = [\n", + " insert_replace_inputset = [\n", " (\n", - " np.zeros(STATE_SHAPE, dtype=np.int64), # state\n", - " np.ones(NUMBER_OF_KEY_CHUNKS, dtype=np.int64) * (2**CHUNK_SIZE - 1), # key\n", + " # state\n", + " sample_state,\n", + " # key\n", + " encode_key(i),\n", + " # value\n", + " encode_key(i),\n", " )\n", + " for i in range(20)\n", " ]\n", - " # The input set for the insert and replace circuits\n", - " inputset_ternary = [\n", + " query_inputset = [\n", " (\n", - " np.zeros(STATE_SHAPE, dtype=np.int64), # state\n", - " np.ones(NUMBER_OF_KEY_CHUNKS, dtype=np.int64) * (2**CHUNK_SIZE - 1), # key\n", - " np.ones(NUMBER_OF_VALUE_CHUNKS, dtype=np.int64) * (2**CHUNK_SIZE - 1), # value\n", + " # state\n", + " sample_state,\n", + " # key\n", + " encode_key(i),\n", " )\n", + " for i in range(20)\n", " ]\n", "\n", " ## Circuit compilation\n", @@ -591,18 +594,12 @@ " # - \"encrypted\": The input is encrypted\n", " # - \"plain\": The input is not encrypted\n", " insert_compiler = fhe.Compiler(\n", - " _insert_impl,\n", - " {\"state\": \"encrypted\", \"key\": \"encrypted\", \"value\": \"encrypted\"}\n", + " _insert_impl, {\"state\": \"encrypted\", \"key\": \"encrypted\", \"value\": \"encrypted\"}\n", " )\n", " replace_compiler = fhe.Compiler(\n", - " _replace_impl,\n", - " {\"state\": \"encrypted\", \"key\": \"encrypted\", \"value\": \"encrypted\"}\n", + " _replace_impl, {\"state\": \"encrypted\", \"key\": \"encrypted\", \"value\": \"encrypted\"}\n", " )\n", - " query_compiler = fhe.Compiler(\n", - " _query_impl,\n", - " {\"state\": \"encrypted\", \"key\": \"encrypted\"}\n", - " )\n", - "\n", + " query_compiler = fhe.Compiler(_query_impl, {\"state\": \"encrypted\", \"key\": \"encrypted\"})\n", "\n", " ## Compile the circuits\n", " # The circuits are compiled with the input set and the configuration\n", @@ -611,7 +608,7 @@ "\n", " print(\"Compiling insertion circuit...\")\n", " start = time.time()\n", - " self._insert_circuit = insert_compiler.compile(inputset_ternary, configuration)\n", + " self._insert_circuit = insert_compiler.compile(insert_replace_inputset, configuration)\n", " end = time.time()\n", " print(f\"(took {end - start:.3f} seconds)\")\n", "\n", @@ -619,7 +616,7 @@ "\n", " print(\"Compiling replacement circuit...\")\n", " start = time.time()\n", - " self._replace_circuit = replace_compiler.compile(inputset_ternary, configuration)\n", + " self._replace_circuit = replace_compiler.compile(insert_replace_inputset, configuration)\n", " end = time.time()\n", " print(f\"(took {end - start:.3f} seconds)\")\n", "\n", @@ -627,7 +624,7 @@ "\n", " print(\"Compiling query circuit...\")\n", " start = time.time()\n", - " self._query_circuit = query_compiler.compile(inputset_binary, configuration)\n", + " self._query_circuit = query_compiler.compile(query_inputset, configuration)\n", " end = time.time()\n", " print(f\"(took {end - start:.3f} seconds)\")\n", "\n", @@ -659,10 +656,10 @@ " print(f\"(took {end - start:.3f} seconds)\")\n", "\n", " ### The Interface Functions\n", - " \n", - " # The following methods are used to interact with the database. \n", - " # They are used to insert, replace and query the database. \n", - " # The methods are implemented by encrypting the inputs, \n", + "\n", + " # The following methods are used to interact with the database.\n", + " # They are used to insert, replace and query the database.\n", + " # The methods are implemented by encrypting the inputs,\n", " # running the circuit and decrypting the output.\n", "\n", " # Insert a key-value pair into the database\n", @@ -703,16 +700,14 @@ " print()\n", " print(f\"Querying...\")\n", " start = time.time()\n", - " result = self._query_circuit.encrypt_run_decrypt(\n", - " self._state, encode_key(key)\n", - " )\n", + " result = self._query_circuit.encrypt_run_decrypt(self._state, encode_key(key))\n", " end = time.time()\n", " print(f\"(took {end - start:.3f} seconds)\")\n", "\n", " if result[0] == 0:\n", " return None\n", "\n", - " return decode(result[1:])\n" + " return decode(result[1:])" ] }, { @@ -992,10 +987,10 @@ "source": [ "# Define lower/upper bounds for the key\n", "minimum_key = 1\n", - "maximum_key = 2 ** KEY_SIZE - 1\n", + "maximum_key = 2**KEY_SIZE - 1\n", "# Define lower/upper bounds for the value\n", "minimum_value = 1\n", - "maximum_value = 2 ** VALUE_SIZE - 1" + "maximum_value = 2**VALUE_SIZE - 1" ] }, { @@ -1076,8 +1071,25 @@ "metadata": { "execution": { "timeout": 10800 + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/frontends/concrete-python/examples/key-value-database/static-size.py b/frontends/concrete-python/examples/key_value_database/static-size.py similarity index 100% rename from frontends/concrete-python/examples/key-value-database/static-size.py rename to frontends/concrete-python/examples/key_value_database/static-size.py diff --git a/frontends/concrete-python/examples/levenshtein_distance/README.md b/frontends/concrete-python/examples/levenshtein_distance/README.md new file mode 100644 index 000000000..b7a686e83 --- /dev/null +++ b/frontends/concrete-python/examples/levenshtein_distance/README.md @@ -0,0 +1,207 @@ +# Computing the Levenshtein distance in FHE + +## Levenshtein distance + +Levenshtein distance is a classical distance to compare two strings. Let's write strings a and b as +vectors of characters, meaning a[0] is the first char of a and a[1:] is the rest of the string. +Levenshtein distance is defined as: + + Levenshtein(a, b) := + length(a) if length(b) == 0, or + length(b) if length(a) == 0, or + Levenshtein(a[1:], b[1:]) if a[0] == b[0], or + 1 + min(Levenshtein(a[1:], b), Levenshtein(a, b[1:]), Levenshtein(a[1:], b[1:])) + +More information can be found for example on the [Wikipedia page](https://en.wikipedia.org/wiki/Levenshtein_distance). + +## Computing the distance in FHE + +It can be interesting to compute this distance over encrypted data, for example in the banking sector. +We show in [our code](levenshtein_distance.py) how to do that simply, with our FHE modules. + +Available options are: + +``` +usage: levenshtein_distance.py [-h] [--show_mlir] [--show_optimizer] [--autotest] [--autoperf] [--distance DISTANCE DISTANCE] + [--alphabet {string,STRING,StRiNg,ACTG}] [--max_string_length MAX_STRING_LENGTH] + +Levenshtein distance in Concrete. + +optional arguments: + -h, --help show this help message and exit + --show_mlir Show the MLIR + --show_optimizer Show the optimizer outputs + --autotest Run random tests + --autoperf Run benchmarks + --distance DISTANCE DISTANCE + Compute a distance + --alphabet {string,STRING,StRiNg,ACTG} + Setting the alphabet + --max_string_length MAX_STRING_LENGTH + Setting the maximal size of strings +``` + +The different alphabets are: +- string: non capitalized letters, ie `[a-z]*` +- STRING: capitalized letters, ie `[A-Z]*` +- StRiNg: non capitalized letters and capitalized letters +- ACTG: `[ACTG]*`, for DNA analysis + +It is very easy to add a new alphabet in the code. + +The most important usages are: + +- `python levenshtein_distance.py --distance Zama amazing --alphabet StRiNg --max_string_length 7`: Compute the distance between +strings "Zama" and "amazing", considering the chars of "StRiNg" alphabet + +``` + +Running distance between strings 'Zama' and 'amazing' for alphabet StRiNg: + + Computing Levenshtein between strings 'Zama' and 'amazing' - distance is 5, computed in 44.51 seconds + +Successful end +``` + +- `python levenshtein_distance.py --autotest`: Run random tests with the alphabet. + +``` +Making random tests with alphabet string +Letters are abcdefghijklmnopqrstuvwxyz + +Computations in simulation + + Computing Levenshtein between strings '' and '' - OK + Computing Levenshtein between strings '' and 'p' - OK + Computing Levenshtein between strings '' and 'vv' - OK + Computing Levenshtein between strings '' and 'mxg' - OK + Computing Levenshtein between strings '' and 'iuxf' - OK + Computing Levenshtein between strings 'k' and '' - OK + Computing Levenshtein between strings 'p' and 'g' - OK + Computing Levenshtein between strings 'v' and 'ky' - OK + Computing Levenshtein between strings 'f' and 'uoq' - OK + Computing Levenshtein between strings 'f' and 'kwfj' - OK + Computing Levenshtein between strings 'ut' and '' - OK + Computing Levenshtein between strings 'pa' and 'g' - OK + Computing Levenshtein between strings 'bu' and 'sx' - OK + Computing Levenshtein between strings 'is' and 'diy' - OK + Computing Levenshtein between strings 'fz' and 'unda' - OK + Computing Levenshtein between strings 'sem' and '' - OK + Computing Levenshtein between strings 'dbr' and 'o' - OK + Computing Levenshtein between strings 'dgj' and 'hk' - OK + Computing Levenshtein between strings 'ejb' and 'tfo' - OK + Computing Levenshtein between strings 'afa' and 'ygqo' - OK + Computing Levenshtein between strings 'lhcc' and '' - OK + Computing Levenshtein between strings 'uoiu' and 'u' - OK + Computing Levenshtein between strings 'tztt' and 'xo' - OK + Computing Levenshtein between strings 'ufsa' and 'mil' - OK + Computing Levenshtein between strings 'uuzl' and 'dzkr' - OK + +Computations in FHE + + Computing Levenshtein between strings '' and '' - OK in 1.29 seconds + Computing Levenshtein between strings '' and 'p' - OK in 0.26 seconds + Computing Levenshtein between strings '' and 'vv' - OK in 0.26 seconds + Computing Levenshtein between strings '' and 'mxg' - OK in 0.22 seconds + Computing Levenshtein between strings '' and 'iuxf' - OK in 0.22 seconds + Computing Levenshtein between strings 'k' and '' - OK in 0.22 seconds + Computing Levenshtein between strings 'p' and 'g' - OK in 1.09 seconds + Computing Levenshtein between strings 'v' and 'ky' - OK in 1.93 seconds + Computing Levenshtein between strings 'f' and 'uoq' - OK in 3.09 seconds + Computing Levenshtein between strings 'f' and 'kwfj' - OK in 3.98 seconds + Computing Levenshtein between strings 'ut' and '' - OK in 0.25 seconds + Computing Levenshtein between strings 'pa' and 'g' - OK in 1.90 seconds + Computing Levenshtein between strings 'bu' and 'sx' - OK in 3.52 seconds + Computing Levenshtein between strings 'is' and 'diy' - OK in 5.04 seconds + Computing Levenshtein between strings 'fz' and 'unda' - OK in 6.53 seconds + Computing Levenshtein between strings 'sem' and '' - OK in 0.22 seconds + Computing Levenshtein between strings 'dbr' and 'o' - OK in 2.78 seconds + Computing Levenshtein between strings 'dgj' and 'hk' - OK in 4.92 seconds + Computing Levenshtein between strings 'ejb' and 'tfo' - OK in 7.18 seconds + Computing Levenshtein between strings 'afa' and 'ygqo' - OK in 9.25 seconds + Computing Levenshtein between strings 'lhcc' and '' - OK in 0.22 seconds + Computing Levenshtein between strings 'uoiu' and 'u' - OK in 3.52 seconds + Computing Levenshtein between strings 'tztt' and 'xo' - OK in 6.45 seconds + Computing Levenshtein between strings 'ufsa' and 'mil' - OK in 9.11 seconds + Computing Levenshtein between strings 'uuzl' and 'dzkr' - OK in 12.01 seconds + +Successful end +``` + +- `python levenshtein_distance.py --autoperf`: Benchmark with random strings, for the different alphabets. + +``` +Typical performances for alphabet ACTG, with string of maximal length: + + Computing Levenshtein between strings 'GCGA' and 'GTCA' - OK in 6.04 seconds + Computing Levenshtein between strings 'TCGA' and 'ACAA' - OK in 5.57 seconds + Computing Levenshtein between strings 'CAGT' and 'CGTT' - OK in 5.63 seconds + +Typical performances for alphabet string, with string of maximal length: + + Computing Levenshtein between strings 'ctow' and 'qtor' - OK in 17.54 seconds + Computing Levenshtein between strings 'vwky' and 'enfh' - OK in 16.46 seconds + Computing Levenshtein between strings 'dqse' and 'spps' - OK in 16.49 seconds + +Typical performances for alphabet STRING, with string of maximal length: + + Computing Levenshtein between strings 'TQBW' and 'LKIZ' - OK in 16.62 seconds + Computing Levenshtein between strings 'HANA' and 'CFVO' - OK in 16.32 seconds + Computing Levenshtein between strings 'BEXY' and 'YAWM' - OK in 16.58 seconds + +Typical performances for alphabet StRiNg, with string of maximal length: + + Computing Levenshtein between strings 'iYmH' and 'ONnz' - OK in 30.56 seconds + Computing Levenshtein between strings 'hZyX' and 'vhHH' - OK in 30.11 seconds + Computing Levenshtein between strings 'sJdj' and 'strn' - OK in 30.48 seconds + +Successful end +``` + +## Complexity analysis + +Let's analyze a bit the complexity of the function `levenshtein_fhe` in FHE. We can see that the +function cannot apply `if`'s as in the clear function `levenshtein_clear`: it has to compute the two +branches (the one for the True, and the one for the False), and finally compute an `fhe.if_then_else` +of the two possible values. This slowdown is not specific to Concrete, it is by nature of FHE, where +encrypted conditions imply such a trick. + +Another interesting part is the impact of the choice of the alphabet: in `run`, we are going to +compare two chars of the alphabet, and return an encrypted boolean to code for the equality / inequality +of these two chars. This is basically done with a single programmable bootstrapping (PBS) of `w+1` +bits, where `w` is the floored log2 value of the number of chars in the alphabet. For example, for +the 'string' alphabet, which has 26 letters, `w = 5` and so we use a signed 6-bit value as input of a +table lookup. For the larger 'StRiNg' alphabet, that's a signed 7-bit PBS. For small DNA alphabet 'ACTG', +it's only signed 3-bit PBS. + +## Benchmarks on hpc7a + +The benchmarks were done using Concrete 2.7 on `hpc7a` machine on AWS, and give: + +``` +Typical performances for alphabet ACTG, with string of maximal length: + + Computing Levenshtein between strings 'AGTC' and 'TGGA' - OK in 6.00 seconds + Computing Levenshtein between strings 'GTAA' and 'AGAC' - OK in 5.51 seconds + Computing Levenshtein between strings 'TCTT' and 'CACG' - OK in 5.49 seconds + +Typical performances for alphabet string, with string of maximal length: + + Computing Levenshtein between strings 'jqdk' and 'zqlf' - OK in 17.43 seconds + Computing Levenshtein between strings 'uquc' and 'qvvp' - OK in 16.50 seconds + Computing Levenshtein between strings 'vebm' and 'ybqo' - OK in 16.46 seconds + +Typical performances for alphabet STRING, with string of maximal length: + + Computing Levenshtein between strings 'UQES' and 'NWXQ' - OK in 16.53 seconds + Computing Levenshtein between strings 'LAJG' and 'NEGP' - OK in 16.26 seconds + Computing Levenshtein between strings 'OSQG' and 'OTEH' - OK in 16.52 seconds + +Typical performances for alphabet StRiNg, with string of maximal length: + + Computing Levenshtein between strings 'ixgu' and 'cOSy' - OK in 30.94 seconds + Computing Levenshtein between strings 'QGCj' and 'Lknx' - OK in 29.82 seconds + Computing Levenshtein between strings 'fKVC' and 'xqaI' - OK in 30.27 seconds + +Successful end +``` diff --git a/frontends/concrete-python/examples/levenshtein_distance/levenshtein_distance.py b/frontends/concrete-python/examples/levenshtein_distance/levenshtein_distance.py new file mode 100644 index 000000000..617464731 --- /dev/null +++ b/frontends/concrete-python/examples/levenshtein_distance/levenshtein_distance.py @@ -0,0 +1,456 @@ +# Computing Levenstein distance between strings, https://en.wikipedia.org/wiki/Levenshtein_distance + +# ruff: noqa:S311,N805 +# pylint: disable=no-self-argument + +import argparse +import random +import time +from functools import lru_cache + +import numpy as np + +from concrete import fhe + +# mypy: disable-error-code="valid-type" + + +class Alphabet: + letters: str = "" + mapping_to_int: dict + + @staticmethod + def lowercase(): + """Set lower case alphabet.""" + return Alphabet("abcdefghijklmnopqrstuvwxyz") + + @staticmethod + def uppercase(): + """Set upper case alphabet.""" + return Alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZ") + + @staticmethod + def anycase(): + """Set any-case alphabet.""" + return Alphabet.lowercase() + Alphabet.uppercase() + + @staticmethod + def dna(): + """Set DNA alphabet.""" + return Alphabet("ATGC") + + def __init__(self, letters: str): + self.letters = letters + self.mapping_to_int = {} + + for i, c in enumerate(self.letters): + self.mapping_to_int[c] = i + + def __add__(self, other: "Alphabet") -> "Alphabet": + return Alphabet(self.letters + other.letters) + + @staticmethod + def return_available_alphabets() -> list: + """Return available alphabets.""" + return ["string", "STRING", "StRiNg", "ACTG"] + + @staticmethod + def init_by_name(alphabet_name: str) -> "Alphabet": + """Set the alphabet.""" + assert ( + alphabet_name in Alphabet.return_available_alphabets() + ), f"Unknown alphabet {alphabet_name}" + + if alphabet_name == "string": + return Alphabet.lowercase() + if alphabet_name == "STRING": + return Alphabet.uppercase() + if alphabet_name == "StRiNg": + return Alphabet.anycase() + + assert alphabet_name == "ACTG", f"Unknown alphabet {alphabet_name}" + return Alphabet.dna() + + def random_pick_in_values(self) -> int: + """Pick the integer-encoding of a random char in an alphabet.""" + return np.random.randint(len(self.mapping_to_int)) + + def _random_string(self, length: int) -> str: + """Pick a random string in the alphabet.""" + ans = "".join([random.choice(list(self.mapping_to_int)) for _ in range(length)]) + check = [c in self.letters for c in ans] + assert all(check), "Issue in generation" + return ans + + def prepare_random_patterns(self, len_min: int, len_max: int, nb_strings: int) -> list: + """Prepare random patterns of different lengths.""" + assert len(self.mapping_to_int) > 0, "Mapping not defined" + + list_patterns = [] + for _ in range(nb_strings): + for length_1 in range(len_min, len_max + 1): + for length_2 in range(len_min, len_max + 1): + list_patterns += [ + ( + self._random_string(length_1), + self._random_string(length_2), + ) + for _ in range(1) + ] + + return list_patterns + + def encode(self, string: str) -> tuple: + """Encode a string, ie map it to integers using the alphabet.""" + + assert len(self.mapping_to_int) > 0, "Mapping not defined" + + for si in string: + if si not in self.mapping_to_int: + error_string = ( + f"Char {si} of {string} is not in alphabet " + + f"{list(self.mapping_to_int.keys())}, please choose the right --alphabet" + ) + raise ValueError(error_string) + + return tuple(self.mapping_to_int[si] for si in string) + + +class LevenshteinDistance: + alphabet: Alphabet + module: fhe.module # type: ignore + + def __init__(self, alphabet: Alphabet, args): + self.alphabet = alphabet + + self._compile_module(args) + + def calculate(self, a: str, b: str, mode: str, show_distance: bool = False): + """Compute a distance between two strings, either in fhe or in simulate.""" + if mode == "simulate": + self._compute_in_simulation([(a, b)]) + else: + assert mode == "fhe", "Only 'simulate' and 'fhe' mode are available" + self._compute_in_fhe([(a, b)], show_distance=show_distance) + + def calculate_list(self, pairs_to_compute_on: list, mode: str): + """Compute a distance between strings of a list, either in fhe or in simulate.""" + for a, b in pairs_to_compute_on: + self.calculate(a, b, mode) + + def _encode_and_encrypt_strings(self, a: str, b: str) -> tuple: + """Encode a string, ie map it to integers using the alphabet, and then encrypt + the integers.""" + a_as_int = self.alphabet.encode(a) + b_as_int = self.alphabet.encode(b) + + a_enc = tuple(self.module.equal.encrypt(ai, None)[0] for ai in a_as_int) # type: ignore + b_enc = tuple(self.module.equal.encrypt(None, bi)[1] for bi in b_as_int) # type: ignore + + return a_enc, b_enc + + def _compile_module(self, args): + """Compile the FHE module.""" + assert len(self.alphabet.mapping_to_int) > 0, "Mapping not defined" + + inputset_equal = [ + ( + self.alphabet.random_pick_in_values(), + self.alphabet.random_pick_in_values(), + ) + for _ in range(1000) + ] + inputset_mix = [ + ( + np.random.randint(2), + np.random.randint(args.max_string_length), + np.random.randint(args.max_string_length), + np.random.randint(args.max_string_length), + np.random.randint(args.max_string_length), + ) + for _ in range(1000) + ] + + # pylint: disable-next=no-member + self.module = LevenshsteinModule.compile( + { + "equal": inputset_equal, + "mix": inputset_mix, + "constant": [i for i in range(len(self.alphabet.mapping_to_int))], + }, + show_mlir=args.show_mlir, + p_error=10**-20, + show_optimizer=args.show_optimizer, + comparison_strategy_preference=fhe.ComparisonStrategy.ONE_TLU_PROMOTED, + min_max_strategy_preference=fhe.MinMaxStrategy.ONE_TLU_PROMOTED, + ) + + def _compute_in_simulation(self, list_patterns: list): + """Check equality between distance in simulation and clear distance.""" + for a, b in list_patterns: + print(f" Computing Levenshtein between strings '{a}' and '{b}'", end="") + + a_as_int = self.alphabet.encode(a) + b_as_int = self.alphabet.encode(b) + + l1_simulate = levenshtein_simulate(self.module, a_as_int, b_as_int) + l1_clear = levenshtein_clear(a_as_int, b_as_int) + + assert l1_simulate == l1_clear, f" {l1_simulate=} and {l1_clear=} are different" + print(" - OK") + + def _compute_in_fhe(self, list_patterns: list, show_distance: bool = False): + """Check equality between distance in FHE and clear distance.""" + self.module.keygen() # type: ignore + + # Checks in FHE + for a, b in list_patterns: + print(f" Computing Levenshtein between strings '{a}' and '{b}'", end="") + + a_enc, b_enc = self._encode_and_encrypt_strings(a, b) + + time_begin = time.time() + l1_fhe_enc = levenshtein_fhe(self.module, a_enc, b_enc) + time_end = time.time() + + l1_fhe = self.module.mix.decrypt(l1_fhe_enc) # type: ignore + + l1_clear = levenshtein_clear(a, b) + + assert l1_fhe == l1_clear, f" {l1_fhe=} and {l1_clear=} are different" + + if not show_distance: + print(f" - OK in {time_end - time_begin:.2f} seconds") + else: + print(f" - distance is {l1_fhe}, computed in {time_end - time_begin:.2f} seconds") + + +# Module FHE +@fhe.module() +class LevenshsteinModule: + @fhe.function({"x": "encrypted", "y": "encrypted"}) + def equal(x, y): + """Assert equality between two chars of the alphabet.""" + return x == y + + @fhe.function({"x": "clear"}) + def constant(x): + return fhe.zero() + x + + @fhe.function( + { + "is_equal": "encrypted", + "if_equal": "encrypted", + "case_1": "encrypted", + "case_2": "encrypted", + "case_3": "encrypted", + } + ) + def mix(is_equal, if_equal, case_1, case_2, case_3): + """Compute the min of (case_1, case_2, case_3), and then return `if_equal` if `is_equal` is + True, or the min in the other case.""" + min_12 = np.minimum(case_1, case_2) + min_123 = np.minimum(min_12, case_3) + + return fhe.if_then_else(is_equal, if_equal, 1 + min_123) + + # There is a single output in mix: it can go to + # - input 1 of mix + # - input 2 of mix + # - input 3 of mix + # - input 4 of mix + # or just be the final output + # + # There is a single output of equal, it goes to input 0 of mix + composition = fhe.Wired( + [ + fhe.Wire(fhe.AllOutputs(equal), fhe.Input(mix, 0)), + fhe.Wire(fhe.AllOutputs(mix), fhe.Input(mix, 1)), + fhe.Wire(fhe.AllOutputs(mix), fhe.Input(mix, 2)), + fhe.Wire(fhe.AllOutputs(mix), fhe.Input(mix, 3)), + fhe.Wire(fhe.AllOutputs(mix), fhe.Input(mix, 4)), + fhe.Wire(fhe.AllOutputs(constant), fhe.Input(mix, 1)), + fhe.Wire(fhe.AllOutputs(constant), fhe.Input(mix, 2)), + fhe.Wire(fhe.AllOutputs(constant), fhe.Input(mix, 3)), + fhe.Wire(fhe.AllOutputs(constant), fhe.Input(mix, 4)), + ] + ) + + +@lru_cache +def levenshtein_clear(x: str, y: str): + """Compute the distance in clear, for reference and comparison.""" + if len(x) == 0: + return len(y) + if len(y) == 0: + return len(x) + + if x[0] == y[0]: + return levenshtein_clear(x[1:], y[1:]) + + case_1 = levenshtein_clear(x[1:], y) + case_2 = levenshtein_clear(x, y[1:]) + case_3 = levenshtein_clear(x[1:], y[1:]) + + return 1 + min(case_1, case_2, case_3) + + +@lru_cache +def levenshtein_simulate(module: fhe.module, x: str, y: str): + """Compute the distance in simulation.""" + if len(x) == 0: + return len(y) + if len(y) == 0: + return len(x) + + if_equal = levenshtein_simulate(module, x[1:], y[1:]) + case_1 = levenshtein_simulate(module, x[1:], y) + case_2 = levenshtein_simulate(module, x, y[1:]) + case_3 = if_equal + + is_equal = module.equal(x[0], y[0]) # type: ignore + returned_value = module.mix(is_equal, if_equal, case_1, case_2, case_3) # type: ignore + + return returned_value + + +@lru_cache +def levenshtein_fhe(module: fhe.module, x: str, y: str): + """Compute the distance in FHE.""" + if len(x) == 0: + return module.constant.run(module.constant.encrypt(len(y))) # type: ignore + if len(y) == 0: + return module.constant.run(module.constant.encrypt(len(x))) # type: ignore + + if_equal = levenshtein_fhe(module, x[1:], y[1:]) + case_1 = levenshtein_fhe(module, x[1:], y) + case_2 = levenshtein_fhe(module, x, y[1:]) + case_3 = if_equal + + is_equal = module.equal.run(x[0], y[0]) # type: ignore + returned_value = module.mix.run(is_equal, if_equal, case_1, case_2, case_3) # type: ignore + + return returned_value + + +def manage_args(): + """Manage user arguments.""" + parser = argparse.ArgumentParser(description="Levenshtein distance in Concrete.") + parser.add_argument( + "--show_mlir", + dest="show_mlir", + action="store_true", + help="Show the MLIR", + ) + parser.add_argument( + "--show_optimizer", + dest="show_optimizer", + action="store_true", + help="Show the optimizer outputs", + ) + parser.add_argument( + "--autotest", + dest="autotest", + action="store_true", + help="Run random tests", + ) + parser.add_argument( + "--autoperf", + dest="autoperf", + action="store_true", + help="Run benchmarks", + ) + parser.add_argument( + "--distance", + dest="distance", + nargs=2, + type=str, + action="store", + help="Compute a distance", + ) + parser.add_argument( + "--alphabet", + dest="alphabet", + choices=Alphabet.return_available_alphabets(), + default="string", + help="Setting the alphabet", + ) + parser.add_argument( + "--max_string_length", + dest="max_string_length", + type=int, + default=4, + help="Setting the maximal size of strings", + ) + args = parser.parse_args() + + # At least one option + assert ( + args.autoperf + args.autotest + (args.distance is not None) > 0 + ), "must activate one option --autoperf or --autotest or --distance" + + return args + + +def main(): + """Main function.""" + print() + + # Options by the user + args = manage_args() + + # Do what the user requested + if args.autotest: + alphabet = Alphabet.init_by_name(args.alphabet) + levenshtein_distance = LevenshteinDistance(alphabet, args) + + print(f"Making random tests with alphabet {args.alphabet}") + print(f"Letters are {alphabet.letters}\n") + + list_patterns = alphabet.prepare_random_patterns(0, args.max_string_length, 1) + print("Computations in simulation\n") + levenshtein_distance.calculate_list(list_patterns, mode="simulate") + print("\nComputations in FHE\n") + levenshtein_distance.calculate_list(list_patterns, mode="fhe") + print("") + + if args.autoperf: + for alphabet_name in ["ACTG", "string", "STRING", "StRiNg"]: + print( + f"Typical performances for alphabet {alphabet_name}, with string of " + "maximal length:\n" + ) + + alphabet = Alphabet.init_by_name(alphabet_name) + levenshtein_distance = LevenshteinDistance(alphabet, args) + list_patterns = alphabet.prepare_random_patterns( + args.max_string_length, args.max_string_length, 3 + ) + levenshtein_distance.calculate_list(list_patterns, mode="fhe") + print("") + + if args.distance is not None: + print( + f"Running distance between strings '{args.distance[0]}' and '{args.distance[1]}' " + f"for alphabet {args.alphabet}:\n" + ) + + if max(len(args.distance[0]), len(args.distance[1])) > args.max_string_length: + args.max_string_length = max(len(args.distance[0]), len(args.distance[1])) + print( + "Warning, --max_string_length was smaller than lengths of the input strings, " + "fixing it" + ) + + alphabet = Alphabet.init_by_name(args.alphabet) + levenshtein_distance = LevenshteinDistance(alphabet, args) + levenshtein_distance.calculate( + args.distance[0], args.distance[1], mode="fhe", show_distance=True + ) + print("") + + print("Successful end\n") + + +if __name__ == "__main__": + main() diff --git a/frontends/concrete-python/examples/sha1/sha1.md b/frontends/concrete-python/examples/sha1/README.md similarity index 61% rename from frontends/concrete-python/examples/sha1/sha1.md rename to frontends/concrete-python/examples/sha1/README.md index c188d2693..6be2ea0ca 100644 --- a/frontends/concrete-python/examples/sha1/sha1.md +++ b/frontends/concrete-python/examples/sha1/README.md @@ -65,50 +65,18 @@ class MyModule: @fhe.function({"x": "encrypted", "y": "encrypted"}) def add2(x, y): - ans = fhe.zeros((32,)) - cy = 0 - - for i in range(32): - t = x[i] + y[i] + cy - cy, tr = t >= 2, t % 2 - ans[i] = tr - - return ans + return fhe.bits(add_chunked_number(x, y))[0] @fhe.function( {"x": "encrypted", "y": "encrypted", "u": "encrypted", "v": "encrypted", "w": "encrypted"} ) def add5(x, y, u, v, w): - ans = fhe.zeros((32,)) - cy = 0 + result = add_chunked_number(x, y) + result = add_chunked_number(result, u) + result = add_chunked_number(result, v) + result = add_chunked_number(result, w) - for i in range(32): - t = x[i] + y[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - cy = 0 - - for i in range(32): - t = ans[i] + u[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - cy = 0 - - for i in range(32): - t = ans[i] + v[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - cy = 0 - - for i in range(32): - t = ans[i] + w[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - return ans + return fhe.bits(result)[0] ``` We then compile this Module, setting `p_error=10**-8` as a very small value to avoid computation @@ -220,79 +188,79 @@ computed in: 320.265383 seconds ## Benchmarks -We have executed our implementation on an HPC7a machine with Concrete 2.7.0rc1. +We have executed our implementation on an HPC7a machine with Concrete 2.7. `python sha1.py --autotest` typically returns: ``` -Checking SHA1(fdASguUMBwhPcKuDpPqoRlQXLrLQbnxEvPJSQSIUDTBoaqrJlBualgoWEINmDZDYSuGuSOpGBWwWzjAfktWYZZUliv) for an input length 90 -sha1-digest: 5bb539fd423875ccc8a33148dae724f5b2cf9391 -computed in: 295.306287 seconds -Checking SHA1(BYwXTbqE) for an input length 8 -sha1-digest: 90a8dcad6ddff7ca8fd487b80a37fcd250c56bed -computed in: 145.341164 seconds -Checking SHA1(rnPZh) for an input length 5 -sha1-digest: 47610d2c26ee8b45ab0f4c8f8e4d405b2cd37f1f -computed in: 145.318081 seconds -Checking SHA1(orRaJMGbUJtxITQvqiOCPjKJWYuHomuiexCQQgZyTeAAFJcgCftDCRAkcLKjRECelIMPQphGEUlSNthE) for an input length 80 -sha1-digest: bd74b4e64349d308f3b95b54cf61ee416bdd6b18 -computed in: 288.240576 seconds -Checking SHA1(ROokDcdczajNPjlCPoWotaRJHBtOVyiyxMIIeCtxaDCjk) for an input length 45 -sha1-digest: 1ff546c3a64f27339781c095cbc097f392c2cccd -computed in: 143.621941 seconds -Checking SHA1(KbCXFt) for an input length 6 -sha1-digest: 7e5789f0c83fa5102004fbeeef3ac22244d1cdac -computed in: 143.509567 seconds -Checking SHA1(mpKnkHtrgokxgQSzcIjFtxKnhmMfZbIbkJavnkSxW) for an input length 41 -sha1-digest: 1308d9f7cba634ab2617edb5116b8bdf434f16f5 -computed in: 143.341450 seconds -Checking SHA1(oauoWKJGyjjTcXqRIxFGuVuMwiwjKYfttQ) for an input length 34 -sha1-digest: 60367153b7049ca92eb979ad7b809c5a3f47a64e -computed in: 143.693254 seconds -Checking SHA1(ZMGiaIOmBJPncOsUCxj) for an input length 19 -sha1-digest: fafba9f2fe6b5a0fddad4ad765909c8fc32117c6 -computed in: 143.720215 seconds -Checking SHA1(HwCXIHnFoGUgIBqaQrrpDnhEvPBX) for an input length 28 -sha1-digest: 5224cace20f8d20fa3ea8d9974b5ff3a0be7fd48 -computed in: 143.523006 seconds -Checking SHA1(AfyzsimngrqeWoqZKOBRwVuvttfgJTpegMbiHjUNdWzTg) for an input length 45 -sha1-digest: 8ca27aca1c362ca63e50d58aa7065b4322f028a0 -computed in: 143.481069 seconds -Checking SHA1(hNEUPakrqQpGGZvtHvht) for an input length 20 -sha1-digest: 36ae34ed85e62ac0f922e36fc98b23e725695be1 -computed in: 143.478666 seconds -Checking SHA1(CjgfYYlNKqZdHeXFfqTwhycbGBeSpzpxKPwWItriiNKZCcEJRZlM) for an input length 52 -sha1-digest: 3c012f41c5fe4581f80e2901fc4bbbb70ff7a9ba -computed in: 143.490262 seconds -Checking SHA1(EXIGkYzWpcqpfRKCSbBJJqqmUBkFwWfPGooJvsVAshWjMr) for an input length 46 -sha1-digest: 2518c4d13ec7608f59632ac993b726e572c3aaae -computed in: 143.840785 seconds -Checking SHA1(sgzaAqZnhXmFJOJMyfGxweYFMmLeUHmMCWETfqzstzpFYKaGpnasiLHPTcJtukHztEQpXzquREcbtoJDaoqjfM) for an input length 86 -sha1-digest: 46f4b0653ed7ea0ce89cc18f6720e5e334d63a45 -computed in: 288.155301 seconds -Checking SHA1(oRaisdHJovDxCnwyComEGejqMceBTOVhJucVnwgC) for an input length 40 -sha1-digest: 909f9c6275aa9f41d8ecaf52203bb0e24cf978d7 -computed in: 143.466817 seconds -Checking SHA1(mtTWxtHerQgLdBGftWdiCwBKqtu) for an input length 27 -sha1-digest: 624a7dcec460061a2a6499dae978fe4afd674110 -computed in: 145.389956 seconds -Checking SHA1(beYzkJLvZMmoXbQwqoVThpyaQ) for an input length 25 -sha1-digest: 25a9df47bd055384a9ee614c1dc7213c04f2087c -computed in: 147.234881 seconds -Checking SHA1(CpQWXXRNlXIoSZNxmXUwWHqmUAdlOrDyZPzzOhznlpGntrUgvktlZ) for an input length 53 -sha1-digest: f2bde6574d8f6aa360929f6a5f919700b16e093b -computed in: 147.154393 seconds -Checking SHA1(busWigrVdsXnkjTh) for an input length 16 -sha1-digest: fe47568d433278a38a4729f7891d03eaacdb0e40 -computed in: 147.465694 seconds +Checking SHA1(yozulCBAPuFosqTBMwPTVmvQvmfhGFJjdtSSiemdytn) for an input length 43 +sha1-digest: aa1871c2d560221e14f18b43d559aafc4920d9bc +computed in: 93.844131 seconds +Checking SHA1(HwXFZxXUGckiuWysDtrpIijiRwRGPJZPGaNpJMlfbPptfNhzKOXZMiZnoLlaRCXqK) for an input length 65 +sha1-digest: 8555e05fc2396a3b291e983901bdfa02cb454a72 +computed in: 181.812173 seconds +Checking SHA1(am) for an input length 2 +sha1-digest: 96e8155732e8324ae26f64d4516eb6fe696ac84f +computed in: 91.206739 seconds +Checking SHA1(OTzaWtYfzqKyTHIgBSlmI) for an input length 21 +sha1-digest: c76426dbecb3afd015b132e0e44a1b4d0fc664cb +computed in: 91.182635 seconds +Checking SHA1(MBwAxKkvLOUzXkHILdVchwjfcUTlofyQdSqaonqcXvRVVwEJpmaGKOsNDCUGkt) for an input length 62 +sha1-digest: 2231cecd803a9000c117a2f2d3ea35f70ecf6fce +computed in: 179.300580 seconds +Checking SHA1(iqObpuNHZXKztrUZYrpmAPjFflNLacYyUTBLZdbjbPcjbLOseIKqZNYCbsoaDuwvgbvfWE) for an input length 70 +sha1-digest: 87cdf7a7f984ef5843d0cfc95a69eaef3e82e31b +computed in: 182.332336 seconds +Checking SHA1(nPIZWXYUXOerncJAeBQrcPhuHsXbYcQkKMRoAGzxFZjBXWvproNcHlHIFNNGzQChEVjZvsEmSOpQuoihPgudlqizwAfXzgU) for an input length 95 +sha1-digest: 601db1e338e8b817f5309c7c3bf89450d70425a1 +computed in: 182.233933 seconds +Checking SHA1(SfUDDjhLqcmifCpLlqnUZKFjwtPjfCrpdRChUWypdrhdDTjizF) for an input length 50 +sha1-digest: 8c57e70e92af96c6df5aecb4f3740e68b0686883 +computed in: 91.378782 seconds +Checking SHA1(VePVJXHljlLpkThrANZaEkkbYoFZVdSFFsvVkQPDlrwyisOIZqAUhGwHYYhxnFjOrUgFV) for an input length 69 +sha1-digest: b54a98dc0f74b50669a5e0c81199a2819e26d3e9 +computed in: 182.419465 seconds +Checking SHA1(hCOuPvLrBXYhaWLeSnyRxpJZmXyEeTCBdfkgvDwvFIgoVaXNPzHoHkitSvZLosTMEcDpuoLGqeCkuwLmQQLbSibizfPwxp) for an input length 94 +sha1-digest: 19432e37fe0bbc7c5a5c9379ed38c4298d796fe6 +computed in: 182.285430 seconds +Checking SHA1(IRZuLcbBXJAfgYMuFwGWUXiKgfoWwSAOTOoQiLaZHKwuTbGGsTChMLEdlaRXkIOYUFJRxRyAVHhQbFKyKOFDNairicMm) for an input length 92 +sha1-digest: 4307a80365937a3ff6703763a8f1a759362c35e5 +computed in: 182.162872 seconds +Checking SHA1(hsTWqDAwjdLiAhmLsnBJJozejydFLcksQmSQVcojeAhdZizXMzjKSAGjQUjRPGZlwGaKnE) for an input length 70 +sha1-digest: 3889e4448d11e9d801608ab3a94378ee8d41aaa0 +computed in: 182.288777 seconds +Checking SHA1(GihWwpolRavMdWHiNGVlOVsziPqZcYkPEyTmgfbBtwMowfKMipRxADcqqzMBlpCrWEOJpnZQcqAwt) for an input length 77 +sha1-digest: 4b048588c8ec5d1602487124b5232889668f6b6a +computed in: 182.184901 seconds +Checking SHA1(GiSbjYHQyEozGliG) for an input length 16 +sha1-digest: dc7a31c2e17ae503c6c808a02c05f8d1ad4b346f +computed in: 91.260812 seconds +Checking SHA1(boVGLdzvbKOTYUSErbeSyoiJQMox) for an input length 28 +sha1-digest: 50a40fb6d0362087ed9b6dceda5378c14b96a743 +computed in: 91.119592 seconds +Checking SHA1(kiaAjFJrzBaRFvSgIzIQdlJZokXGPBpjNRPqEcVDyCFGkxNzeiRNHuSmD) for an input length 57 +sha1-digest: 44e423eaa7616d2a93b235d99b61f76a6f58e236 +computed in: 179.129039 seconds +Checking SHA1(IylnzdjqldIJGkolzRlJhFz) for an input length 23 +sha1-digest: 463137090865b283801d49d1546ce0dea45f2529 +computed in: 91.211171 seconds +Checking SHA1(QEyszfMlKJjKIf) for an input length 14 +sha1-digest: 937bfdff3bb97e9037a23bca4055302f97a90eb3 +computed in: 91.124824 seconds +Checking SHA1(IOTanBIVaq) for an input length 10 +sha1-digest: b8dca6ad5df447549f5a95d4c195b889f5be6069 +computed in: 91.110348 seconds +Checking SHA1(FiWWroKJVGeMPfmaNKmXdalAyIRLpYJdFgCfBIEMXPDfWR) for an input length 46 +sha1-digest: 84775d2c31df2ab191a0417cf26028f989d2cd9c +computed in: 91.031444 seconds Checking SHA1() sha1-digest: da39a3ee5e6b4b0d3255bfef95601890afd80709 -computed in: 147.256297 seconds +computed in: 91.044046 seconds Checking SHA1(The quick brown fox jumps over the lazy dog) sha1-digest: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 -computed in: 147.697102 seconds +computed in: 90.971023 seconds ``` These results mean that: -- one block of compression takes about 147 seconds -- two blocks of compression take about 290 seconds +- one block of compression takes about 92 seconds +- two blocks of compression take about 181 seconds diff --git a/frontends/concrete-python/examples/sha1/sha1.py b/frontends/concrete-python/examples/sha1/sha1.py index 05a918e54..78be8f698 100755 --- a/frontends/concrete-python/examples/sha1/sha1.py +++ b/frontends/concrete-python/examples/sha1/sha1.py @@ -68,6 +68,19 @@ def get_random_string(length): return result_str +def add_chunked_number(x, y): + result = fhe.zeros((32,)) + carry = 0 + + addition = x + y + for i in range(32): + addition_and_carry = addition[i] + carry + carry = addition_and_carry >> 1 + result[i] = addition_and_carry - (carry * 2) + + return result + + # FHE functions @fhe.module() class MyModule: @@ -105,51 +118,19 @@ class MyModule: @staticmethod @fhe.function({"x": "encrypted", "y": "encrypted"}) def add2(x, y): - ans = fhe.zeros((32,)) - cy = 0 - - for i in range(32): - t = x[i] + y[i] + cy - cy, tr = t >= 2, t % 2 - ans[i] = tr - - return ans + return fhe.bits(add_chunked_number(x, y))[0] @staticmethod @fhe.function( {"x": "encrypted", "y": "encrypted", "u": "encrypted", "v": "encrypted", "w": "encrypted"} ) def add5(x, y, u, v, w): - ans = fhe.zeros((32,)) - cy = 0 + result = add_chunked_number(x, y) + result = add_chunked_number(result, u) + result = add_chunked_number(result, v) + result = add_chunked_number(result, w) - for i in range(32): - t = x[i] + y[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - cy = 0 - - for i in range(32): - t = ans[i] + u[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - cy = 0 - - for i in range(32): - t = ans[i] + v[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - cy = 0 - - for i in range(32): - t = ans[i] + w[i] + cy - cy, tr = t // 2, t % 2 - ans[i] = tr - - return ans + return fhe.bits(result)[0] # Compilation of the FHE functions @@ -202,7 +183,6 @@ my_module = MyModule.compile( # type: ignore # Split and encrypt on the client side def message_schedule_and_split_and_encrypt(chunk): - assert len(chunk) == 64 w = [0] * 80 @@ -239,25 +219,21 @@ def _process_encrypted_chunk_server_side( for i in range(80): if 0 <= i <= 19: - # Do f = d ^ (b & (c ^ d)) fsplit_enc = my_module.iftern.run(bsplit_enc, csplit_enc, dsplit_enc) ksplit = split(0x5A827999) elif 20 <= i <= 39: - # Do f = b ^ c ^ d fsplit_enc = my_module.xor3.run(bsplit_enc, csplit_enc, dsplit_enc) ksplit = split(0x6ED9EBA1) elif 40 <= i <= 59: - # Do f = (b & c) | (b & d) | (c & d) fsplit_enc = my_module.maj.run(bsplit_enc, csplit_enc, dsplit_enc) ksplit = split(0x8F1BBCDC) elif 60 <= i <= 79: - # Do f = b ^ c ^ d fsplit_enc = my_module.xor3.run(bsplit_enc, csplit_enc, dsplit_enc) @@ -346,7 +322,6 @@ class Sha1Hash: # Read the rest of the data, 64 bytes at a time while len(chunk) == 64: - wsplit_enc = message_schedule_and_split_and_encrypt(chunk) self._hsplit_enc = _process_encrypted_chunk_server_side(wsplit_enc, *self._hsplit_enc) self._message_byte_length += 64 @@ -390,7 +365,6 @@ class Sha1Hash: hsplit_enc = _process_encrypted_chunk_server_side(wsplit_enc, *self._hsplit_enc) if len(message) != 64: - wsplit_enc = message_schedule_and_split_and_encrypt(message[64:]) hsplit_enc = _process_encrypted_chunk_server_side(wsplit_enc, *hsplit_enc) @@ -446,12 +420,10 @@ if __name__ == "__main__": args = parser.parse_args() if args.autotest: - filename = "tmp_sha1_test_file.txt" # Checking random patterns for _ in range(20): - string_length = np.random.randint(100) # Take a random string @@ -486,7 +458,6 @@ if __name__ == "__main__": "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12", ), ]: - with open(filename, "w", encoding="utf-8") as file: file.write(f"{hash_input}") @@ -528,7 +499,6 @@ if __name__ == "__main__": if os.path.isfile(argument): # An argument is given and it's a valid file. Read it with open(filename, "rb") as data: - # Show the final digest print_timed_sha1(data) diff --git a/frontends/concrete-python/examples/sha256/sha256.ipynb b/frontends/concrete-python/examples/sha256/sha256.ipynb new file mode 100644 index 000000000..a873d787c --- /dev/null +++ b/frontends/concrete-python/examples/sha256/sha256.ipynb @@ -0,0 +1,844 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "_FTzVxUkjQno" + }, + "source": [ + "# SHA-256 Implementation Using Concrete\n", + "\n", + "In this tutorial, we will explore the implementation of SHA-256, a widely used hashing algorithm, using concrete-python. Details about the algorithm can be found [here](https://en.wikipedia.org/wiki/SHA-2).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zXozpJvmcBH1", + "outputId": "79dfc00b-10cc-4ffd-d4b9-a10f18d8d01e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Requirement already satisfied: concrete-python in /usr/local/lib/python3.10/dist-packages (1.0.0)\n", + "Requirement already satisfied: numpy>=1.23 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (1.24.3)\n", + "Requirement already satisfied: scipy>=1.10 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (1.10.1)\n", + "Requirement already satisfied: torch>=1.13 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (2.0.0+cu118)\n", + "Requirement already satisfied: networkx>=2.6 in /usr/local/lib/python3.10/dist-packages (from concrete-python) (3.1)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (4.5.0)\n", + "Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (2.0.0)\n", + "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (1.11.1)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (3.1.2)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.13->concrete-python) (3.12.0)\n", + "Requirement already satisfied: cmake in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch>=1.13->concrete-python) (3.25.2)\n", + "Requirement already satisfied: lit in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch>=1.13->concrete-python) (16.0.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.13->concrete-python) (2.1.2)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.13->concrete-python) (1.3.0)\n" + ] + } + ], + "source": [ + "# Uncomment this line to install dependency\n", + "# ! pip install concrete-python\n", + "\n", + "# Required libraries\n", + "from concrete import fhe\n", + "import numpy as np" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "oCfjYazikbm_" + }, + "source": [ + "## Data Representation\n", + "As mentioned in the wiki page, all variables are $32$-bit unsigned integers. Additions should be calculated modulo $2^{32}$.\n", + "\n", + "While addition of 32-bit numbers are possible in the library, any other operations such modulizing, rotations, and bitwise operations are currently not possible. These operations require a lookup table with 32-bit inputs, but as of writing this tutorial, concrete-python supports up to 16-bit lookup tables. Higher precision lookup tables is still a research challenge in the homomorphic world and such a table would be dificult to compile and store at this moment.\n", + "\n", + "Thus, we need to break all the variables to **chunks** and work at the chunk level. Throughtout the code, *WIDTH* refers to the bitwidth of a chunk, and *NUM_CHUNKS* shows the number of chunks we need to represent a 32-bit data. These parameters are set at the begining of the code. We vary these parameters to see the impact of the *WIDTH* on the performance of the compiler and the circuit.\n", + "\n", + "![chunks.jpg](data:image/jpeg;base64,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25tTiVNsyIx2k9cYPYmi4+MHw+tfi1a/A6fUivjO80ltcisvIlKtp6zNAZfOCeSD5iMNpfdxnGMGgD02iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGbcnPHNfjZ4U+I3/DJdp+2d4FEv2IeFrtvFugLnaufEtuFgWLvsiuPIjOOhPrmv2Wr8rP2xf2QfiJ8Zv2m/hz428HWom8GavDaaV44/fQRJ/Zul6jFqEW+KR1eVpTlVMauVKLuwp5APGv2NfDA/Yj+LFz4C8XzSWuk+PfhvY+MLkykkQ6to6OdRgQt0KRySSN22hfQAeT+K/DOp2f/AASP8efErxHHs174qeIY/FV9u+8Xvtat0i5IyVaKJXH++T3r7m/4KP8A7N3xY+OnhDwjrXwJtvtPjHQrm/06VftENrnRtcs3tb8M9w6IQVCKVBztZtozXY/th/s9+KvFn7D99+z38F9KGr6np9podjp9p50Frvg0y5tsnzLh44lxFEW5cZxgZOAQDjPHAA/4KTfBb0/4QbVsf+ReazP+CoPwx8Kw/AC++P8AotvDovj74d32m6jpesW4EF0He9ggaNpFwXGHDKGzhlGMAnOh+0L4I/aL0D9qj4cfHv4O/DMfEWy8M+GbvSru2Os2OkbZrl3GPMumLHarbsqjA9MiuO8efCr9sr9tLUdH8D/HXwtpvwe+FFjfw32qafbapFquqaqtuwdLfzrYmJVyDzhNpIfDlVWgD3v9svWJvEX7BPj3xDdReTNqnhiK6dP7jTiJyvPoTivoX9n4H/hQ/wANz/1LWjf+kUVcT+1v8PPE3xH/AGYvH3w1+Humrfa1q+lG0sLNZIrdXcMm1A8rRxoMDjcwFen/AAe0PVPC3wl8E+GNdg+zalpGh6bZ3UW5X8ue3tY45F3oWVsMCMqSD1BI5oA/Hj9iL9pnxP8ACr4XeIvCmlfBnxp45t18U61P/aWhWKXFmTJMMx72dTvXHzDHevS/hh8VtW+L3/BS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X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/Sc18w+V+2h/z9fD//AMB9V/8AjtHlftof8/Xw/wD/AAH1X/47QB9Pc0tfMHlftof8/Xw//wDAfVf/AI7R5X7aH/P18P8A/wAB9V/+O0AfTuKdXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/RXzB5X7aH/P18P/8AwH1X/wCO0eV+2h/z9fD/AP8AAfVf/jtAH0/SYr5h8r9tD/n6+H//AID6r/8AHaPK/bQ/5+vh/wD+A+q//HaAPp/NGa+X/J/bP/5+fh//AN+NV/8AjtHk/tn/APPz8P8A/vxqv/x2gD//1/38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBM+tRxzwygtC4kAJBKkHkdRTipzX88H7D/wAXPGX7M3iCTxZ44uDL8Fvil4q1TR5rkkiPQ9et5sQzSk/KsVzGQrtxwpY4EPzgH9DvnxeYId43kbgueceuKI54pgWhcSAHBKkEZH0r859fOf8Agql4aOeP+FWTf+nWfH9aZ/wS9wP2d9b7H/hL9e/9HLQB+jfnxeb5O8eZjdtzzjpn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)\n", + "\n", + "Figure 1: Shows a break down of 32 bit of data into 4 chunks of 8 bit. This is not the only way to chunk the input." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "yaz8cNzjQ1UW" + }, + "outputs": [], + "source": [ + "# Bitwidth of each chunk and number of chunks in each 32-bit number.\n", + "WIDTH, NUM_CHUNKS = 4, 8\n", + "\n", + "## Some other valid parameter sets\n", + "# WIDTH, NUM_CHUNKS= 8, 4\n", + "# WIDTH, NUM_CHUNKS= 2, 16\n", + "\n", + "assert WIDTH * NUM_CHUNKS == 32\n", + "\n", + "\n", + "def break_down_data(data, data_size):\n", + " all_chunks = [\n", + " [(x >> i * WIDTH) % (2**WIDTH) for i in range(data_size // WIDTH)[::-1]] for x in data\n", + " ]\n", + " return all_chunks\n", + "\n", + "\n", + "def reshape_data(data):\n", + " return np.array(data).reshape(-1, NUM_CHUNKS)\n", + "\n", + "\n", + "def chunks_to_uint32(chunks):\n", + " return int(sum([2 ** ((NUM_CHUNKS - 1 - i) * WIDTH) * x for i, x in enumerate(chunks)]))\n", + "\n", + "\n", + "def chunks_to_hexarray(chunks):\n", + " hexes = [hex(chunks_to_uint32(word))[2:] for word in chunks]\n", + " hexes = [\n", + " \"0\" * (8 - len(y)) + y for y in hexes\n", + " ] # Appending leadning zero to the ones that are less than 8 characters TODO: write better\n", + " result = \"\".join(hexes)\n", + " return result" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "u7pA-B3As9u4" + }, + "source": [ + "### Creating Chunks\n", + "There are two list of constants in the algorithm, K and H. Before executing the algorithm, we need to break them to chunks using `split_to_chunks` function.\n", + "\n", + "\n", + "The input of the algorithm is arbitrary bytes. We might need to break each byte to smaller chunks based on the value of *WIDTH* after padding the data as per instructed by the algorithm. `break_down_data` function returns a numpy array of shape (48,NUM_CHUNKS)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "b8rlvVf42CIa" + }, + "source": [ + "## Operations\n", + "Now that the data is stores as chunks, we must modify all operations we need to work at the level of chunks. In this section we explain how we implemented the required operations. The main three category of operations that we need to implement SHA-256 are:\n", + "\n", + "* Bitwise operations (AND, OR, XOR, NEGATE)\n", + "* Shifts and Rotations\n", + "* Modular Addition " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "zlM1RN-NnjDn" + }, + "source": [ + "### Bitwise Operations\n", + "Bitwise operations are easily implemented in concrete-numpy. A bitwise operation over a 32-bit number is equivalent to the same operation over the chunks." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "CxCwJOao2KCt" + }, + "source": [ + "### Rotation and Shifts\n", + "To understand how rotations work, consider a small example with 4 chunks of width 4, representing a 16-bit number, as shown in Figure 1. Most significant bits are located at index 0. So a 16-bit number will be `[[chunk_0], [chunk_1], [chunk_2], [chunk_3]]` with WIDTH=4. There are two possible scenario for rotations:\n", + "\n", + "1. Any rotation by a multiple of WIDTH (in this case, 4) will result in rotating the array of chunks. For example, right rotate(4) will be `[[chunk_3], [chunk_0], [chunk_1], [chunk_2]]`.\n", + "\n", + "2. For rotations less than WIDTH, for example `y`, we break every chunk into two parts of bitlength, `WIDTH-y` and `y`. We need to add the low `y`-bits of each chunk with the high `WIDTH-y` bits of the next chunk. Figure 2 illustrated this process. We leverage two lookup tables to extract the two segments of each chunk.\n", + "\n", + "\n", + "3. Rotations by other amounts are broken into the two steps described above.\n", + "\n", + "![Rotation.jpg](data:image/jpeg;base64,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ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//S/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOB+IXxQ+H3wo0m2174k+ILPw5p17dJZQXF5KIkkuZFd0iUnqzKjEDvg131fk3/AMFiRt/Zv8HSjjy/G+lt/wCSd8K/WSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9P9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/Jv/gsf8v7L3h6X/nl4w01v/JW8/wAa/WSvyd/4LJD/AIxN02QdY/FOnN/5L3Y/rX6wg5AI70ALRRTNxzigB9FNGfWnUAFFFFABRRRQAUUUUAFFFFABRTN2CRT6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9T9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/KX/gsam79kaBv7viTTj/5CuB/Wv1StH8y0hk/vIp/MV+W//BYZN37IBb+54h00/wDjsw/rX6faM/maRYyf3oIj+aigDSr8ef8Agr/8VPiZ8LPh98Pb74aeK9U8KXF/ql3HcS6XeTWbzIkClVcwspYA8gE8V+w1fh5/wW7/AOSa/DI+mr33/pOtAHkPxh+FP7en7NnwVh/aR0n9ozVPEunWcFjdXlnd3NzI0Ud88UcZSK7e4hmw8qhgwU4yQD0r9IPg9+3R4Ju/2OvDv7TPxzv4NBe586yu47dGY3GoW07wbLWEbmdpQnmbQSEBO4hVJH4lftm+Cv2tPhl4B+HVj8cviZe+L/h14phgeOKyZlgtzCkciwTRERpJKsTBot5IJVsEbSa9K/4KBeBfhv8AD/wl+y74Y8C3ct18Hmsbq4trkyb5Llbq4tri8uZWUKPNljlVuAMHIUKBgAH6h/Cf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oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9b9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApMClooA/lO/4Ksfs2f8ACmPj6/xF8PWvleFviOZb9Ai4jg1NCDexcdN7Msy9M72UDCGv0I/4I5/s4jwd8N9V/aG8R2u3VfGe6y0reuGi0q3k/eOM8j7ROnT+7EjDhq/RL9q/9mzwz+1R8I7v4YeIpzp832mC8sb5UDyWlxA3LoD13xF4yPRyeoFe7+FfDGheC/DOk+EPDNqtjpGiWsFlaQJ92KC3QJGo+igc96AOgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//X/fyiiigAopucUvX2oAWiiigAooooAKKKKACim5x1pMmgB9FJmjIouAtFJnNB+tK4C0UUmTTAWiiigAooooAKKKKACik/SgmgBaKbz60uc8UXAWikyKMii4BgUtN5paLgLRSUZoAWiiigAooooAKKKKACikJxRk0rgLRSZoyKdwFopMijIouAtFFNyaAHUUUUAFFFFABRRRQAUU3JoyTQA6im5OBS55oAWikzRkUXAWim5pc5FAWFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9/KKKKAPLfiN8QZ/AosvKsRd/bDJnc+wLs2+gPXdXmX/DQV730aP/AL/n/wCIq3+0H00Qe9x/7Tr5rFfpnDXD+Er4SNSrC7179/U/L+I+IMXQxcqdKei9D6J/4aDvf+gNH/3/AD/8RR/w0He/9AaP/v8An/4ivnaivf8A9VcB/wA+/wAWeF/rXj/+fn4I+if+Gg73/oDR/wDf8/8AxFH/AA0He/8AQGj/AO/5/wDiK+dqKP8AVXAf8+/xf+Yf614//n5+C/yPon/hoO9/6A0f/f8AP/xFH/DQd7/0Bo/+/wCf/iK+dqKP9VcB/wA+/wAWH+teP/5+fgj6Li+P968qodGQBmA/1xJwe4Gyu81v4nz6Rq9zpq2CyLA+zd5hGfw218fW/wDx8RD1Zf517d41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)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "575ogsJhFDIo" + }, + "source": [ + "### Shift\n", + "The shift operation is the same as rotation, but we prepend the encrypted scalar zero when we move the bits to the right." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "TRAFRZime-Jv" + }, + "outputs": [], + "source": [ + "def right_rotate_list_of_chunks(list_to_rotate, amount):\n", + " return np.concatenate((list_to_rotate[-amount:], list_to_rotate[:-amount]))\n", + "\n", + "\n", + "def right_shift_list_of_chunks(list_to_rotate, amount):\n", + " return np.concatenate(([0] * list_to_rotate[-amount:].shape[0], list_to_rotate[:-amount]))\n", + "\n", + "\n", + "def left_shift_list_of_chunks(list_to_rotate, amount):\n", + " return np.concatenate((list_to_rotate[amount:], [0] * list_to_rotate[:amount].shape[0]))\n", + "\n", + "\n", + "def rotate_less_than_width(chunks, shift):\n", + " raised_low_bits = fhe.univariate(lambda x: (x % 2**shift) << (WIDTH - shift))(chunks)\n", + " shifted_raised_low_bits = right_rotate_list_of_chunks(raised_low_bits, 1)\n", + "\n", + " high_bits = chunks >> shift\n", + " return shifted_raised_low_bits + high_bits\n", + "\n", + "\n", + "def right_rotate(chunks, rotate_amount):\n", + " x = rotate_amount // WIDTH\n", + " y = rotate_amount % WIDTH\n", + " if x != 0:\n", + " rotated_chunks = right_rotate_list_of_chunks(chunks, x)\n", + " else:\n", + " rotated_chunks = chunks\n", + " if y != 0:\n", + " rotated = rotate_less_than_width(rotated_chunks, y)\n", + " else:\n", + " rotated = rotated_chunks\n", + "\n", + " return rotated\n", + "\n", + "\n", + "def right_shift(chunks, shift_amount):\n", + " x = shift_amount // WIDTH\n", + " y = shift_amount % WIDTH\n", + " if x != 0:\n", + " shifted_chunks = right_shift_list_of_chunks(chunks, x)\n", + " else:\n", + " shifted_chunks = chunks\n", + " if y != 0:\n", + " # shift within chunks\n", + " raised_low_bits = fhe.univariate(lambda x: (x % 2**y) << (WIDTH - y))(shifted_chunks)\n", + " shifted_raised_low_bits = right_shift_list_of_chunks(raised_low_bits, 1)\n", + " high_bits = shifted_chunks >> y\n", + " result = shifted_raised_low_bits + high_bits\n", + " else:\n", + " result = shifted_chunks\n", + " return result" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "SKg8mKFOPXSV" + }, + "source": [ + "### Modular 32-bit Addition\n", + "Modular 32-bit addition is frequently used in SHA256. While Concrete supports additions of 32-bit numbers, modulizing the result requires a lookup table which is too large for Concrete. Hence, the addition must be done over chunks.\n", + "\n", + "Below is the function to add two 32-bit numbers mod $2^{32}$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "EJEPvp2wQms9" + }, + "outputs": [], + "source": [ + "def add_two_32_bits(a, b):\n", + " added = np.sum([a, b], axis=0)\n", + "\n", + " for i in range(NUM_CHUNKS):\n", + " results = added % (2**WIDTH)\n", + " if i < NUM_CHUNKS - 1:\n", + " carries = added >> WIDTH\n", + " added = left_shift_list_of_chunks(carries, 1) + results\n", + "\n", + " return results" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "Uo6o_QMQn_fw" + }, + "outputs": [], + "source": [ + "# Testing the addition function, adding four 32-bit numbers\n", + "test_inputs = np.random.randint(0, 2**32, size=(2,))\n", + "input_chunks = break_down_data(test_inputs, 32)\n", + "\n", + "assert chunks_to_uint32(add_two_32_bits(input_chunks[0], input_chunks[1])) == np.sum(\n", + " test_inputs\n", + ") % (2**32)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "IOr8DTRJRYTl" + }, + "source": [ + "Adding two 4-bit numbers results in a 5-bit number. We then use two lookup tables:\n", + "\n", + "* `extract_carry` which extracts the carry of adding two chunks\n", + "* `extract_result` which extracts the 4-bit chunk which results from adding two chunks (without the carry)\n", + "\n", + "Each carry must now be added to the chunk next chunk and this process is repeated for as many chunks as there are. The figure below illustrates this process.\n", + "\n", + "![add-chunks.png](data:image/png;base64,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3QgggAACCCCAAAJeCRBAe8XGRggggAACCCCAAALBKkAAHaxHnnYjgAACCCCAAAIIeCVAAO0VGxshgAACCCCAAAIIBKsAAXSwHnnajQACCCCAAAIIIOCVAAG0V2xshAACCCCAAAIIIBCsAgTQwXrkaTcCCCCAAAIIIICAVwIE0F6xsRECCCCAAAIIIIBAsAoQQAfrkafdCCCAAAIIIIAAAl4JEEB7xcZGCCCAAAIIIIAAAsEqQAAdrEeediOAAAIIIIAAAgh4JUAA7RUbGyGAAAIIIIAAAggEqwABdLAeedqNAAIIIIAAAggg4JUAAbRXbGyEAAIIIIAAAgggEKwCBNDBeuRpNwIIIIAAAggggIBXAgTQXrGxEQIIIIAAAggggECwChBAB+uRp90IIIAAAggggAACXgkQQHvFxkYIIIAAAggggAACwSpAAB2sR552I4AAAggggAACCHglQADtFRsbIYAAAggggAACCASrAAF0sB552o0AAggggAACCCDglQABtFdsbIQAAggggAACCCAQrAIE0MF65Gk3AggggAACCCCAgFcCBNBesbERAggggAACCCCAQLAKEEAH65Gn3QgggAACCCCAAAJeCRBAe8XGRggggAACCCCAAALBKkAAHaxHnnYjgAACCCCAAAIIeCUQ7tVWbOR3Ais3nvC7OlGh7hSYP7VPdxZP2QgggAACCCDQpgABdJs0rEAgSASWvrg/SFpKMw2BO68Y3FUUExYu66qiKMcSAttX3Nol9cyZdnOXlEMhVhE4sOEJq1S1g/VkCEcHociGAAIIIIAAAggggIBdgACa8wABBBBAAAEEEEAAAQ8ECKA9wCIrAggggAACCCCAAAIE0JwDVhU4a2Ty2WNSw0JDXBugxKS4iMgITm9XG1IQQAABBBBAoLMCPETYWUG270KB5LiIySOSnQpc93FBTV2jU6LeJsZGRISHhob2anBZObx/XE5mbG5+1cf7S5RTMXZ4WGhtvUs+10JJCQ6By87NjIoIfWndsbr6JqcWh4eFpCVGllbUV9Y0OK3iLQISWPbTi+JjI2++77XK6jonEFtU+NABKUdPlhWWVDmt4i0C82af+d0bvvrSGxueWb7aVSOnf+/IyPA9+4+6riLFPwUIoP3zuARprdRnrJhYja/rXLDb0GiPipqaWmKjUdkJ2X1idhwoOZTHt1rAnlqZ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Nsr0TioBCUhAAhKQgAQkIIHSIqCALi1/aa0EJCABCUhAAhKQQCMTUEA3sgOcXgISkIAEJCABCUigtAiYA11a/mpYa4vtvbSGXa2jS0ACEpCABCQggZwIuAtHTtjsJAEJSEACEpCABCSQVAKmcCTV865bAhKQgAQkIAEJSCAnAgronLDZSQISkIAEJCABCUggqQQU0En1vOuWgAQkIAEJSEACEsiJgAI6J2x2koAEJCABCUhAAhJIKgEFdFI977olIAEJSEACEpCABHIioIDOCZudJCABCUhAAhKQgASSSkABnVTPu24JSEACEpCABCQggZwIKKBzwmYnCUhAAhKQgAQkIIGkElBAJ9XzrlsCEpCABCQgAQlIICcCCuicsNlJAhKQgAQkIAEJSCCpBBTQSfW865aABCQgAQlIQAISyImAAjonbHaSgAQkIAEJSEACEkgqAQV0Uj3vuiUgAQlIQAISkIAEciKggM4Jm50kIAEJSEACEpCABJJKQAGdVM+7bglIQAISkIAEJCCBnAgooHPCZicJSEACEpCABCQggaQSUEAn1fOuWwISkIAEJCABCUggJwIK6Jyw2UkCEpCABCQgAQlIIKkEFNBJ9bzrloAEJCABCUhAAhLIiYACOidsdpKABCQgAQlIQAISSCoBBXRSPe+6JSABCUhAAhKQgARyIqCAzgmbnSQgAQlIQAISkIAEkkpAAZ1Uz7tuCUhAAhKQgAQkIIGcCCigc8JmJwlIQAISkIAEJCCBpBJQQCfV865bAhKQgAQkIAEJSCAnAgronLDZSQISkIAEJCABCUggqQQU0En1vOuWgAQkIAEJSEACEsiJgAI6J2x2koAEJCABCUhAAhJIKgEFdFI977olIAEJSEACEpCABHIioIDOCZudJCABCSSJwPe+970BAwZUVFTwTTlJS3etEpCABNIQqNi0aVOaaqskIAEJSEACmwkMGjRo6tSpGzZsCDxatGjRr1+/iRMnikcCEpBAYgkYgU6s6124BCQggW0TGDFiRFw902HdunXUDB48eNudbSEBCUigTAkYgS5Tx7osCUhAAvkgQNpG2mH69u07c+bMtKeslIAEJFD2BIxAl72LXaAEJCCB3AkglNN2njVrVtp6KyUgAQkkgYACOgledo0SkIAEciTQpUuXpk2bpnSm5tJLL02p9FACEpBAcgiYwpEcX7tS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)\n", + "\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "4-dQk0wbtPOe" + }, + "source": [ + "The benefit of this addition algorithm is that it can be extended to the case where more two 32-bit numbers are added. The only difference is that the carry from the first iteration of the loop can be larger than 1. Specifically, by adding $k$ 4-bit numbers, the carry can be as big as $\\log_2 k$. For correctness, $\\log_2 k$ must be less than 4 or $k<16$.\n", + "\n", + "In our implementation of SHA-256, we only have two input and four input additions, so we only implement those.\n", + "\n", + "For four input addition, he first iteration of the loop, we use a different lookup table that extract a 2-bit carry and rest of the chunk. The rest of the algorithm does not change." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "obO8wHRbXHfj" + }, + "outputs": [], + "source": [ + "def add_four_32_bits(a, b, c, d):\n", + " added = np.sum([a, b, c, d], axis=0)\n", + "\n", + " # First iteration of the loop is seperated\n", + " carries = added >> WIDTH\n", + " results = added % (2**WIDTH)\n", + " shifted_carries = left_shift_list_of_chunks(carries, 1)\n", + " added = shifted_carries + results\n", + "\n", + " for i in range(1, NUM_CHUNKS):\n", + " results = added % (2**WIDTH)\n", + "\n", + " # In the last iteration, carries need not be calculated\n", + " if i != NUM_CHUNKS - 1:\n", + " carries = added >> WIDTH\n", + " shifted_carries = left_shift_list_of_chunks(carries, 1)\n", + " added = shifted_carries + results\n", + "\n", + " return results" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "zcwnDdPFdqE1" + }, + "outputs": [], + "source": [ + "# Testing the addition function, adding four 32-bit numbers\n", + "\n", + "for _ in range(1000):\n", + " test_inputs = np.random.randint(0, 2**32, size=(4,))\n", + " input_chunks = break_down_data(test_inputs, 32)\n", + "\n", + " assert chunks_to_uint32(\n", + " add_four_32_bits(input_chunks[0], input_chunks[1], input_chunks[2], input_chunks[3])\n", + " ) == np.sum(test_inputs) % (2**32)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "1g6eEdhGoJl9" + }, + "source": [ + "## Operations for SHA-256\n", + "\n", + "Using the basic operations from the previous section, we can now implement all the necessary functions for SHA256" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "uo7HfO1DpVFK" + }, + "outputs": [], + "source": [ + "# Used in the expansion\n", + "\n", + "\n", + "def s0(w):\n", + " return right_rotate(w, 7) ^ right_rotate(w, 18) ^ right_shift(w, 3)\n", + "\n", + "\n", + "def s1(w):\n", + " return right_rotate(w, 17) ^ right_rotate(w, 19) ^ right_shift(w, 10)\n", + "\n", + "\n", + "# Used in main loop\n", + "\n", + "\n", + "def S0(a_word):\n", + " return right_rotate(a_word, 2) ^ right_rotate(a_word, 13) ^ right_rotate(a_word, 22)\n", + "\n", + "\n", + "def S1(e_word):\n", + " return right_rotate(e_word, 6) ^ right_rotate(e_word, 11) ^ right_rotate(e_word, 25)\n", + "\n", + "\n", + "def Ch(e_word, f_word, g_word):\n", + " return (e_word & f_word) ^ ((2**WIDTH - 1 - e_word) & g_word)\n", + "\n", + "\n", + "def Maj(a_word, b_word, c_word):\n", + " return (a_word & b_word) ^ (a_word & c_word) ^ (b_word & c_word)\n", + "\n", + "\n", + "def main_loop(args, w_i_plus_k_i):\n", + " a, b, c, d, e, f, g, h = args\n", + " temp1 = add_four_32_bits(h, S1(e), Ch(e, f, g), w_i_plus_k_i)\n", + " temp2 = add_two_32_bits(S0(a), Maj(a, b, c))\n", + " new_a = add_two_32_bits(temp1, temp2)\n", + " new_e = add_two_32_bits(d, temp1)\n", + " return np.array([new_a, a, b, c, new_e, e, f, g])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "biM997KmvwUL" + }, + "source": [ + "We also need a function to pad the input as the first step of SHA256." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "fZ-3sEH5vopA" + }, + "source": [ + "Moreover, we need a function to parse the input given to the program. The input is given as bytes, but the chunks might be smaller. We extract smaller chunks from bytes using lookup tables." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "L4leg-z_skkU" + }, + "source": [ + "## Bringing it all together\n", + "Using all the components from the above, we can implement SHA256 as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "id": "tmSfvdpyrwUx" + }, + "outputs": [], + "source": [ + "K = [\n", + " 0x428A2F98,\n", + " 0x71374491,\n", + " 0xB5C0FBCF,\n", + " 0xE9B5DBA5,\n", + " 0x3956C25B,\n", + " 0x59F111F1,\n", + " 0x923F82A4,\n", + " 0xAB1C5ED5,\n", + " 0xD807AA98,\n", + " 0x12835B01,\n", + " 0x243185BE,\n", + " 0x550C7DC3,\n", + " 0x72BE5D74,\n", + " 0x80DEB1FE,\n", + " 0x9BDC06A7,\n", + " 0xC19BF174,\n", + " 0xE49B69C1,\n", + " 0xEFBE4786,\n", + " 0x0FC19DC6,\n", + " 0x240CA1CC,\n", + " 0x2DE92C6F,\n", + " 0x4A7484AA,\n", + " 0x5CB0A9DC,\n", + " 0x76F988DA,\n", + " 0x983E5152,\n", + " 0xA831C66D,\n", + " 0xB00327C8,\n", + " 0xBF597FC7,\n", + " 0xC6E00BF3,\n", + " 0xD5A79147,\n", + " 0x06CA6351,\n", + " 0x14292967,\n", + " 0x27B70A85,\n", + " 0x2E1B2138,\n", + " 0x4D2C6DFC,\n", + " 0x53380D13,\n", + " 0x650A7354,\n", + " 0x766A0ABB,\n", + " 0x81C2C92E,\n", + " 0x92722C85,\n", + " 0xA2BFE8A1,\n", + " 0xA81A664B,\n", + " 0xC24B8B70,\n", + " 0xC76C51A3,\n", + " 0xD192E819,\n", + " 0xD6990624,\n", + " 0xF40E3585,\n", + " 0x106AA070,\n", + " 0x19A4C116,\n", + " 0x1E376C08,\n", + " 0x2748774C,\n", + " 0x34B0BCB5,\n", + " 0x391C0CB3,\n", + " 0x4ED8AA4A,\n", + " 0x5B9CCA4F,\n", + " 0x682E6FF3,\n", + " 0x748F82EE,\n", + " 0x78A5636F,\n", + " 0x84C87814,\n", + " 0x8CC70208,\n", + " 0x90BEFFFA,\n", + " 0xA4506CEB,\n", + " 0xBEF9A3F7,\n", + " 0xC67178F2,\n", + "]\n", + "H = [0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "NHGCiC-Gk_tw" + }, + "outputs": [], + "source": [ + "k_in = reshape_data(break_down_data(K, 32))\n", + "h_in = reshape_data(break_down_data(H, 32))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "yTiMkmBsHmKy" + }, + "outputs": [], + "source": [ + "def uint64_to_bin(uint64: int):\n", + " return \"\".join([str(uint64 >> i & 1) for i in range(63, -1, -1)])\n", + "\n", + "\n", + "def sha256_preprocess(text):\n", + " \"\"\"\n", + " Takes a message of arbitrary length and returns a message\n", + " of length that is a multiple of 512 bits, with the original message padded\n", + " with a 1 bit, followed by 0 bits, followed by the original message length\n", + " in bits\n", + " \"\"\"\n", + " data = text\n", + " # convert to uint4 and group into 32 bit words (8 uint4s)\n", + " # #log (\"data is:\", data, data.shape)\n", + " message_len = data.shape[0] * 8 # denoted as 'l' in spec\n", + " # find padding length 'k'\n", + " k = (((448 - 1 - message_len) % 512) + 512) % 512\n", + " # #log (\"k is:\", k)\n", + " zero_pad_width_in_bits = k\n", + " padstring = \"1\" + \"0\" * zero_pad_width_in_bits + str(uint64_to_bin(message_len))\n", + " # log (\"padstring size:\", len(padstring))\n", + " # log (\"padstring is:\", padstring)\n", + "\n", + " total_size = len(padstring) + message_len\n", + " # log (\"total size:\", total_size)\n", + " assert total_size % 512 == 0\n", + "\n", + " pad = np.array(\n", + " [int(padstring[i : i + 8], 2) for i in range(0, len(padstring), 8)], dtype=np.uint8\n", + " )\n", + " padded = np.concatenate((data, pad))\n", + " words = break_down_data(padded, 8)\n", + " chunks = reshape_data(words)\n", + " return chunks" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "3ox6Zs-ysoLr" + }, + "outputs": [], + "source": [ + "# Number of rounds must be 64 to have correct SHA256\n", + "# If looking to get a faster run, reduce the number of rounds (but it will not be correct)\n", + "\n", + "\n", + "def sha256(data, number_of_rounds=64):\n", + " h_chunks = fhe.zeros((len(h_in), NUM_CHUNKS))\n", + " k_chunks = fhe.zeros((len(k_in), NUM_CHUNKS))\n", + " h_chunks += h_in\n", + " k_chunks += k_in\n", + "\n", + " num_of_iters = data.shape[0] * 32 // 512\n", + " for chunk_iter in range(0, num_of_iters):\n", + "\n", + " # Initializing the variables\n", + " chunk = data[chunk_iter * 16 : (chunk_iter + 1) * 16]\n", + " w = [None for _ in range(number_of_rounds)]\n", + " # Starting the main loop and expansion\n", + " working_vars = h_chunks\n", + " for j in range(0, number_of_rounds):\n", + " if j < 16:\n", + " w[j] = chunk[j]\n", + " else:\n", + " w[j] = add_four_32_bits(w[j - 16], s0(w[j - 15]), w[j - 7], s1(w[j - 2]))\n", + " w_i_k_i = add_two_32_bits(w[j], k_chunks[j])\n", + " working_vars = main_loop(working_vars, w_i_k_i)\n", + "\n", + " # Accumulating the results\n", + " for j in range(8):\n", + " h_chunks[j] = add_two_32_bits(h_chunks[j], working_vars[j])\n", + " return h_chunks" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "w89rhSOh4In2" + }, + "source": [ + "We can test the correctness of this function as below (this is not in encrypted form yet)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "006LZp7c0yBA", + "outputId": "31588127-23e9-4b49-e481-d14842e336e7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " SHA256: a412c46b0be134c593b0ad520d4a4c4e1d8aecca799be0be2c4d233ccf455cb7\n", + "Our SHA256: a412c46b0be134c593b0ad520d4a4c4e1d8aecca799be0be2c4d233ccf455cb7\n", + "Match: True\n" + ] + } + ], + "source": [ + "import hashlib\n", + "\n", + "text = (\n", + " b\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. \"\n", + " b\"Curabitur bibendum, urna eu bibendum egestas, neque augue eleifend odio, et sagittis viverra. and more than 150\"\n", + ")\n", + "\n", + "result = sha256(sha256_preprocess(np.frombuffer(text, dtype=np.uint8)))\n", + "\n", + "m = hashlib.sha256()\n", + "m.update(text)\n", + "\n", + "print(\" SHA256:\", m.hexdigest())\n", + "print(\"Our SHA256:\", chunks_to_hexarray(result))\n", + "print(\"Match:\", chunks_to_hexarray(result) == m.hexdigest())" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "1uHN9GXgla_z" + }, + "outputs": [], + "source": [ + "class HomomorphicSHA:\n", + " circuit: fhe.Circuit\n", + "\n", + " def __init__(self, input_size_in_bytes=150, number_of_rounds=64) -> None:\n", + " self.input_size_in_bytes = input_size_in_bytes\n", + " assert 0 <= number_of_rounds <= 64, \"Number of rounds must be betweem zero and 64\"\n", + " self.number_of_rounds = number_of_rounds\n", + " inputset = [\n", + " sha256_preprocess(np.random.randint(0, 2**8, size=(input_size_in_bytes,)))\n", + " for _ in range(100)\n", + " ]\n", + " # Compilation of the circuit should take a few minutes\n", + " compiler = fhe.Compiler(\n", + " lambda data: sha256(data, self.number_of_rounds), {\"data\": \"encrypted\"}\n", + " )\n", + " self.circuit = compiler.compile(\n", + " inputset=inputset,\n", + " configuration=fhe.Configuration(\n", + " enable_unsafe_features=True,\n", + " use_insecure_key_cache=True,\n", + " insecure_key_cache_location=\".keys\",\n", + " dataflow_parallelize=True,\n", + " ),\n", + " verbose=False,\n", + " )\n", + "\n", + " def getSHA(self, data):\n", + " assert (\n", + " len(data) == self.input_size_in_bytes\n", + " ), f\"Input size is not correct, should be {self.input_size_in_bytes} bytes/characters\"\n", + " return self.circuit.encrypt_run_decrypt(sha256_preprocess(data))\n", + "\n", + " def getPlainSHA(self, data):\n", + " return sha256(sha256_preprocess(data), self.number_of_rounds)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "SpxY6dScee-k" + }, + "source": [ + "Now we are ready to compile the circuit! Note that **the compilation will take a long time**, so if you are looking to get a test run, you can set the number of rounds to something smaller than 64." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "P0cMOZUGee-k" + }, + "outputs": [], + "source": [ + "# Warning: This will compile the circuit and will take a few minutes\n", + "\n", + "input_size_in_bytes = 150\n", + "running_small_example = True\n", + "\n", + "if running_small_example:\n", + " number_of_rounds = 2\n", + " sha = HomomorphicSHA(input_size_in_bytes, number_of_rounds)\n", + "else:\n", + " sha = HomomorphicSHA(input_size_in_bytes)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "zz1rd7VWee-k" + }, + "source": [ + "And after compilation, we are ready to run the circuit. Remember that the input size has to match what you gave in the previous cell. Our function will check this first to make sure the input is of the correct size. " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EkF0UxTcv_cQ", + "outputId": "c4e2c710-02bc-40e2-a921-4a29ac88380b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This cell is disabled. It can takes hours. If you want to run this cell, set accept_a_very_long_run=True\n" + ] + } + ], + "source": [ + "# WARNING: This takes a LONG time\n", + "accept_a_very_long_run = False\n", + "if not accept_a_very_long_run:\n", + " print(\n", + " \"This cell is disabled. It can takes hours. If you want to run this cell, set accept_a_very_long_run=True\"\n", + " )\n", + "else:\n", + " text = (\n", + " b\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. \"\n", + " b\"Curabitur bibendum, urna eu bibendum egestas, neque augue eleifend odio, et sagittis viverra.\"\n", + " )\n", + " input_bytes = np.frombuffer(text, dtype=np.uint8)\n", + " encrypted_evaluation = sha.getSHA(input_bytes)\n", + "\n", + " print(\"Encrypted Evaluation: \", chunks_to_hexarray(encrypted_evaluation))\n", + " print(\" Plain Evaluation: \", chunks_to_hexarray(sha.getPlainSHA(input_bytes)))" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3.10.7 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + }, + "vscode": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/frontends/concrete-python/examples/xor_distance/xor_distance.md b/frontends/concrete-python/examples/xor_distance/README.md similarity index 72% rename from frontends/concrete-python/examples/xor_distance/xor_distance.md rename to frontends/concrete-python/examples/xor_distance/README.md index 578fdc361..240f69ecf 100644 --- a/frontends/concrete-python/examples/xor_distance/xor_distance.md +++ b/frontends/concrete-python/examples/xor_distance/README.md @@ -4,8 +4,11 @@ We describe how to compute a XOR distance (as known as an Hamming weight distanc can be useful in particular for biometry use-cases, where obviously, private is a very interesting feature. -The full code can be done [here](hamming_distance.py). Execution times of the different functions are given in the -final section. +We present the XOR distance in two contexts, with corresponding codes: +- the XOR distance between [two encrypted tensors](hamming_distance.py) +- the XOR distance between [one encrypted tensor and one clear tensor](hamming_distance_to_clear.py) + +Execution times of the different functions are given in the different sections. ## The Goal @@ -34,7 +37,9 @@ This is a distance function, which can be used for various purpose, including me vectors are close to each other. In the context of biometry (or others), it may be very interesting to compute this function over encrypted `x` and `y` vectors. -## First Implementation +## Distance Between Two Encrypted Tensors + +### First Implementation In the [full code](hamming_distance.py), we use a first implementation, which is @@ -45,7 +50,7 @@ def dist_in_fhe_directly_from_cp(x, y): Here, it's a pure copy of the code in Concrete, and it compiles directly into FHE code! -## Second Implementation with `fhe.bits` +### Second Implementation with `fhe.bits` In the [full code](hamming_distance.py), we use a second implementation, which is @@ -60,7 +65,7 @@ This function only works for bit-vectors `x` and `y` (as opposed to other functi `fhe.bits` operator to extract the least-significant bit of the addition `x+y`: indeed, this least signification bit is exactly `x ^ y`. -## Third Implementation with Concatenation +### Third Implementation with Concatenation In the [full code](hamming_distance.py), we use a third implementation, which is @@ -78,7 +83,7 @@ def dist_in_fhe_with_xor_internal(x, y, bitsize_w): Here, we concatenate the elements of `x` and `y` (which are of bitsize `bitsize_w`) into a `2 * bitsize_w` input, and use a `2 * bitsize_w`-bit programmable bootstrapping. -## Fourth Implementation with `fhe.multivariate` +### Fourth Implementation with `fhe.multivariate` In the [full code](hamming_distance.py), we use a fourth implementation, which is @@ -90,7 +95,7 @@ def dist_in_fhe_with_multivariate_internal(x, y): Here, we use `fhe.multivariate`, which is a function which takes the two inputs `x` and `y`. Under the hood, it's going to be replaced by a `2 * bitsize_w`-bit programmable bootstrapping. -## Execution Time +### Execution Time Between Two Encrypted Tensors _All of the following timings were measured on an `hpc7a` machine, with Concrete 2.5.1._ @@ -151,3 +156,30 @@ And finally, for 12804-bit vectors, execution times should be: dist_in_fhe_with_multivariate_tables on 4 bits: 40.89 seconds ``` +## Distance Between One Encrypted Tensor and One Clear Tensor + +In [this code](hamming_distance_to_clear.py), we propose a simple implementation for the special case +where one of the vectors (here, `y`) is not encrypted. The function `dist_in_fhe` is based on the +following idea: `x` is seen as a line-vector of bits, while `y` is seen as a column-vector of bits. +`x` and `y` follow a simple transform (before the encryption): bits 0 are mapped to -1, while bits 1 +are mapped to 1. Then we just compute the scalar product `u` between mapped `x` and `y`. + +Bits which are equal between mapped `x` and `y` will be either (1, 1) or (-1, -1) so corresponding +impact on the sum of the scalar multiplication is a 1. On the opposite, for bits which are different, +so (1, -1) or (-1, 1), the impact on the sum of the scalar multiplication is a -1. All in all, +`u = n - 2 HW(x^y)`, where `n` is the number of bits of `x` (which is the number of bits of `y` too). + +In the code, we compute `n - u`, and we divide by 2 after the decryption, which doesn't reduce the +privacy of the computation. + +### Execution Time Between One Encrypted Tensor and One Clear Tensor + +This case is really fast, since there is no programmable bootstrapping (PBS) in the code. It's a +purely levelled FHE circuit. + +For 12804-bit vectors, on an `hpc7a` machine, with Concrete 2.7.0, we have: + +``` +Computing XOR distance on 12804 bits using algorithm dist_in_fhe, using vectors of 1b cells +Distance between encrypted vectors done in 0.43 seconds in average +``` diff --git a/frontends/concrete-python/examples/xor_distance/hamming_distance_to_clear.py b/frontends/concrete-python/examples/xor_distance/hamming_distance_to_clear.py new file mode 100644 index 000000000..5cda5cee7 --- /dev/null +++ b/frontends/concrete-python/examples/xor_distance/hamming_distance_to_clear.py @@ -0,0 +1,169 @@ +import argparse +import time + +import numpy as np + +from concrete import fhe + +# Hamming weight computation +hw_table_values = [np.binary_repr(x).count("1") for x in range(2**8)] + +# fmt: off +assert np.array_equal(hw_table_values, [ + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, + 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, + 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, + 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, + 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, + 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, + 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, + 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, + 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, + 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8] +) +# fmt: on + +hw = fhe.LookupTable(hw_table_values) + + +def mapme(x): + """Map 0 to -1, and keep 1 as 1.""" + return 2 * x - 1 + + +def dist_in_clear(x, y): + """Compute the distance in the clear.""" + return np.sum(hw[x ^ y]) + + +def dist_in_fhe(x_mapped, y_mapped): + """Compute the distance in FHE.""" + + # x is a line tensor, whose 0's have been replaced by -1 + # y_clear is a column tensor, whose 0's have been replaced by -1 + assert x_mapped.ndim == y_mapped.ndim == 2 + assert x_mapped.shape[0] == y_mapped.shape[1] == 1 + + u = np.matmul(x_mapped, y_mapped)[0][0] + + # So, u is a scalar: + # - bits which are the same between x and y_clear (either two -1's or two 1's) count for a +1 + # in the scalar + # - bits which are different between x and y_clear (either (-1, 1) or (1, -1)) count for a -1 + # in the scalar + # Hence the HW distance is (len(x) - u) / 2 + final_result = np.prod(x_mapped.shape) - u + + # The result which is returned is the double of the distance, we'll halve this in the clear + return final_result + + +def manage_args(): + """Manage user args.""" + parser = argparse.ArgumentParser( + description="Hamming weight (aka XOR) distance in Concrete, between an encrypted vector " + "and a clear vector." + ) + parser.add_argument( + "--nb_bits", + dest="nb_bits", + action="store", + type=int, + default=120, + help="Number of bits (better to be a multiple of 12 to test all bitwidths)", + ) + parser.add_argument( + "--show_mlir", + dest="show_mlir", + action="store_true", + help="Show the MLIR", + ) + parser.add_argument( + "--repeat", + dest="repeat", + action="store", + type=int, + default=5, + help="Repeat x times", + ) + args = parser.parse_args() + return args + + +def main(): + """Main function.""" + print() + + # Options by the user + args = manage_args() + + nb_bits = args.nb_bits + + # Info + print( + f"Computing XOR distance on {nb_bits} bits using algorithm dist_in_fhe, using vectors of " + "1b cells" + ) + + # Compile the circuit + inputset = [ + ( + mapme(np.random.randint(2**1, size=(1, nb_bits))), + mapme(np.transpose(np.random.randint(2**1, size=(1, nb_bits)))), + ) + for _ in range(100) + ] + + compiler = fhe.Compiler(dist_in_fhe, {"x_mapped": "encrypted", "y_mapped": "clear"}) + circuit = compiler.compile( + inputset, + show_mlir=args.show_mlir, + bitwise_strategy_preference=fhe.BitwiseStrategy.ONE_TLU_PROMOTED, + multivariate_strategy_preference=fhe.MultivariateStrategy.PROMOTED, + ) + + # Then generate the keys + circuit.keygen() + + total_time = 0 + + nb_samples_for_warmup = 10 + + # Then use + for i in range(nb_samples_for_warmup + args.repeat): + # Take a random input pair + x, y = ( + np.random.randint(2**1, size=(1, nb_bits)), + np.random.randint(2**1, size=(1, nb_bits)), + ) + + x_mapped = mapme(x) + y_mapped = mapme(np.transpose(y)) + + # Encrypt + encrypted_input = circuit.encrypt(x_mapped, y_mapped) + + # Compute the distance in FHE + begin_time = time.time() + encrypted_result = circuit.run(encrypted_input) + end_time = time.time() + + # Don't count the warmup samples + if i >= nb_samples_for_warmup: + total_time += end_time - begin_time + + # Decrypt + result = circuit.decrypt(encrypted_result) + + # Halve this in the clear, to have the final result + result /= 2 + + # Check + assert result == dist_in_clear(x, y) + + average_time = total_time / args.repeat + print(f"Distance between encrypted vectors done in {average_time:.2f} " f"seconds in average") + + +if __name__ == "__main__": + main() diff --git a/frontends/concrete-python/requirements.dev.txt b/frontends/concrete-python/requirements.dev.txt index bcf5a297a..9b92bce31 100644 --- a/frontends/concrete-python/requirements.dev.txt +++ b/frontends/concrete-python/requirements.dev.txt @@ -16,3 +16,5 @@ ruff==0.0.259 auditwheel==5.3.0; sys_platform == 'linux' delocate==0.10.4; sys_platform == 'darwin' wheel==0.40.0 + +py-progress-tracker==0.7.0 diff --git a/frontends/concrete-python/scripts/benchmark/postprocessor.py b/frontends/concrete-python/scripts/benchmark/postprocessor.py new file mode 100644 index 000000000..0650c9bab --- /dev/null +++ b/frontends/concrete-python/scripts/benchmark/postprocessor.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python +"""Used to convert output format from python-progress-tracker to new postgres DB format""" + +# pylint: disable=import-error + +import argparse +import json +import math +import subprocess +import sys +from datetime import datetime +from pathlib import Path +from typing import Any, List, Optional, Tuple, Union + +from concrete import fhe + +# pylint: disable=import-error + + +def is_git_diff(path: Union[None, Path, str]) -> bool: + """Check if there is a diff in a repository.""" + path = path if path is not None else "." + completed_process = subprocess.run( + ["git", "diff", "HEAD"], capture_output=True, cwd=path, check=True + ) + if completed_process.stderr: + message = f"Check git diff raised an error:\n {completed_process.stderr.decode()}" + raise ValueError(message) + return bool(completed_process.stdout) + + +def get_git_branch(path: Union[None, Path, str]) -> str: + """Get git branch of repository.""" + path = path if path is not None else "." + completed_process = subprocess.run( + ["git", "rev-parse", "--abbrev-ref", "HEAD"], capture_output=True, cwd=path, check=True + ) + if completed_process.stderr: + message = "Check git branch raised an error:\n" f"{completed_process.stderr.decode()}" + raise ValueError(message) + return completed_process.stdout.decode().strip() + + +def get_git_hash(path: Union[None, Path, str]) -> str: + """Get git hash of repository.""" + path = path if path is not None else "." + completed_process = subprocess.run( + ["git", "rev-parse", "HEAD"], capture_output=True, cwd=path, check=True + ) + if completed_process.stderr: + message = "Check git hash raised an error:\n" f"{completed_process.stderr.decode()}" + raise ValueError(message) + return completed_process.stdout.decode().strip() + + +def get_git_hash_date(hash_str: str, path: Union[None, Path, str]) -> str: + """Get repository git hash date.""" + path = path if path is not None else "." + # We get the author date (%ai) and not the commit date (%ci) + # for more details please refer to https://git-scm.com/docs/git-show + completed_process = subprocess.run( + ["git", "show", "-s", "--date=iso-strict", "--format=%ai", hash_str], + capture_output=True, + cwd=path, + check=True, + ) + if completed_process.stderr: + message = f"Check git hash raised an error:\n {completed_process.stderr.decode()}" + raise ValueError(message) + print(completed_process.stdout.decode().strip()) + return completed_process.stdout.decode().strip() + + +def git_iso_to_python_iso(date_str: str) -> str: + """Transform git iso into Python iso.""" + splitted = date_str.split() + return f"{splitted[0]}T{splitted[1]}{splitted[2][:3]}:{splitted[2][3:]}" + + +def find_element_in_zip(elements: List[Tuple[str, Any]], key: str) -> Any: + """Find the element in a dict represented as a zip.""" + for key_, value in elements: + if key_ == key: + return value + message = f"Couldn't find key {key} in {[key for key, _ in elements]}" + raise ValueError(message) + + +def convert_to_new_postgres( + source: Path, target: Path, path_to_repository: Path, machine_name: Optional[str] = None +): + """Convert json file generated via python-progress-tracker to new format.""" + # Load from direct result of script + assert source.exists(), source + with open(source, "r", encoding="utf-8") as file: + progress = json.load(file) + + # Get git information + # assert not is_git_diff(path_to_repository) + current_git_branch = get_git_branch(path_to_repository) + current_git_hash = get_git_hash(path_to_repository) + current_git_hash_timestamp = datetime.fromisoformat( + git_iso_to_python_iso(get_git_hash_date(current_git_hash, path_to_repository)) + ) + current_timestamp = datetime.now() + + session_data = { + "database": "concrete_python", + "hardware": progress["machine"]["name"] if machine_name is None else machine_name, + "project_version": fhe.__version__, + "branch": current_git_branch, + "insert_date": current_timestamp.astimezone().isoformat(timespec="seconds"), + "commit_date": current_git_hash_timestamp.astimezone().isoformat(timespec="seconds"), + "points": [], + } + + # Create experiments + for target_name, target_data in progress["targets"].items(): + if "measurements" in target_data: + for metric_id, metric_value in target_data["measurements"].items(): + metric_type = progress["metrics"][metric_id]["label"] + if math.isnan(metric_value): # NaN + continue + + operation_and_case = target_name.split("::") + + point = { + "type": metric_type, + "backend": "cpu", + "name": operation_and_case[0].strip(), + "test": operation_and_case[1].strip(), + "class": "", + "operator": "", + "params": None, + "value": metric_value, + } + + session_data["points"].append(point) + + # Dump modified file + with open(target, "w", encoding="utf-8") as file: + json.dump(session_data, file) + + +def main(): + """Main function to convert json into new format.""" + parser = argparse.ArgumentParser() + parser.add_argument( + "--source", + dest="source", + type=Path, + default=Path("./source.json"), + help="Path to json file to convert.", + ) + parser.add_argument( + "--target", + dest="target", + type=Path, + default=Path("./target.json"), + help="Path to converted json file.", + ) + parser.add_argument( + "--path_to_repository", + dest="path_to_repository", + type=Path, + default=Path("./"), + help="Path to repository used to run the benchmark", + ) + parser.add_argument( + "--machine_name", + dest="machine_name", + type=str, + default=None, + help="Overwrite machine_name (default is None)", + ) + args = parser.parse_args(sys.argv[1:]) + convert_to_new_postgres( + source=args.source, + target=args.target, + path_to_repository=args.path_to_repository, + machine_name=args.machine_name, + ) + + +if __name__ == "__main__": + main() diff --git a/frontends/concrete-python/tests/compilation/test_circuit.py b/frontends/concrete-python/tests/compilation/test_circuit.py index 8e6e5bc8f..816038cf1 100644 --- a/frontends/concrete-python/tests/compilation/test_circuit.py +++ b/frontends/concrete-python/tests/compilation/test_circuit.py @@ -291,6 +291,41 @@ def test_client_server_api(helpers): server.cleanup() +def test_client_server_api_run_with_clear(helpers): + """ + Test running server run API with a clear input. + """ + + configuration = helpers.configuration() + + @fhe.compiler({"x": "encrypted", "y": "clear", "z": "clear"}) + def function(x, y, z): + return x + y + z + + inputset = fhe.inputset(fhe.uint3, fhe.uint3, fhe.tensor[fhe.uint3, 2, 2]) # type: ignore + circuit = function.compile(inputset, configuration.fork()) + + client = circuit.client + server = circuit.server + + x, y, z = 3, 2, [[1, 2], [3, 4]] + + encrypted_x, _, _ = client.encrypt(x, None, None) + encrypted_result = server.run(encrypted_x, y, z, evaluation_keys=client.evaluation_keys) + result = client.decrypt(encrypted_result) + assert np.array_equal(result, x + y + np.array(z)) + + with pytest.raises(ValueError) as excinfo: + server.run(1, 2, 3, evaluation_keys=client.evaluation_keys) + + assert str(excinfo.value) == "Expected argument 0 to be an fhe.Value but it's int" + + with pytest.raises(RuntimeError) as excinfo: + server.run(encrypted_x, [2, 2], 3, evaluation_keys=client.evaluation_keys) + + assert str(excinfo.value) == "Tried to transform plaintext value with incompatible shape." + + def test_client_server_api_crt(helpers): """ Test client/server API on a CRT circuit. @@ -397,6 +432,31 @@ def test_client_server_api_via_mlir(helpers): server.cleanup() +def test_server_loading_via_mlir_kwargs(helpers): + """ + Test server loading via MLIR with kwarg overrides. + """ + + configuration = helpers.configuration().fork(global_p_error=None, p_error=0.001) + + @fhe.compiler({"x": "encrypted", "y": "encrypted"}) + def function(x, y): + return x == y + + inputset = fhe.inputset(fhe.uint4, fhe.uint4) + circuit = function.compile(inputset, configuration) + + with tempfile.TemporaryDirectory() as tmp_dir: + tmp_dir_path = Path(tmp_dir) + + server_path = tmp_dir_path / "server.zip" + circuit.server.save(server_path, via_mlir=True) + + server = Server.load(server_path, p_error=0.05) + + assert server.complexity < circuit.complexity + + def test_circuit_run_with_unused_arg(helpers): """ Test `encrypt_run_decrypt` method of `Circuit` class with unused arguments. diff --git a/frontends/concrete-python/tests/compilation/test_modules.py b/frontends/concrete-python/tests/compilation/test_modules.py index da09ed2eb..3af033968 100644 --- a/frontends/concrete-python/tests/compilation/test_modules.py +++ b/frontends/concrete-python/tests/compilation/test_modules.py @@ -2,6 +2,8 @@ Tests of everything related to modules. """ +import inspect +import re import tempfile import numpy as np @@ -112,6 +114,26 @@ def test_wrong_inputset(helpers): assert str(excinfo.value) == ("Compiling function 'add' without an inputset is not supported") +def test_non_composable_message(): + """ + Test the non composable Dag message. + """ + + @fhe.module() + class Module: + @fhe.function({"x": "encrypted", "y": "encrypted"}) + def add(x, y): + return x + y + + line_of_add = inspect.currentframe().f_lineno - 2 + expected_message = f"""\ +Program can not be composed: At test_modules.py:{line_of_add}:0: please add `fhe.refresh(...)` to guarantee the function composability. +The noise of the node 0 is contaminated by noise coming straight from the input (partition: 0, coeff: 2.00).\ +""" + with pytest.raises(RuntimeError, match=re.escape(expected_message)): + Module.compile({"add": [(0, 0), (3, 3)]}) + + def test_call_clear_circuits(): """ Test that calling clear functions works. @@ -546,7 +568,6 @@ def test_composition_wired_compilation(): "b": [np.random.randint(1, 50, size=()) for _ in range(100)], "c": [np.random.randint(1, 100, size=()) for _ in range(100)], }, - p_error=0.01, ) inp_enc = module.a.encrypt(5) @@ -602,3 +623,28 @@ def test_simulate_encrypt_run_decrypt(helpers): # Make sure computation happened in simulation. assert isinstance(module.dec.runtime, SimulationRt) assert isinstance(encrypted_result, int) + + +def test_non_composable_due_to_increasing_noise(): + """ + Test that non composable module can be fixed with `fhe.refresh`. + """ + + inputsets = {"a": [(x, y) for x in range(16) for y in range(16)]} + + @fhe.module() + class Broken: + @fhe.function({"x": "encrypted", "y": "encrypted"}) + def a(x, y): + return fhe.identity(x + y) # identity is optimized out in that case + + with pytest.raises(RuntimeError, match="Program can not be composed"): + Broken.compile(inputsets) + + @fhe.module() + class Fixed: + @fhe.function({"x": "encrypted", "y": "encrypted"}) + def a(x, y): + return fhe.refresh(x + y) + + assert Fixed.compile(inputsets) diff --git a/frontends/concrete-python/tests/execution/test_identity.py b/frontends/concrete-python/tests/execution/test_identity.py index b58b65012..4f5ff3b68 100644 --- a/frontends/concrete-python/tests/execution/test_identity.py +++ b/frontends/concrete-python/tests/execution/test_identity.py @@ -33,6 +33,8 @@ def test_plain_identity(sample, expected_output): operations = [ lambda x: fhe.identity(x), lambda x: fhe.identity(x) + 100, + lambda x: fhe.refresh(x), + lambda x: fhe.refresh(x) + 100, ] cases = [] diff --git a/frontends/concrete-python/tests/execution/test_matmul.py b/frontends/concrete-python/tests/execution/test_matmul.py index a5836b2bd..50c167a96 100644 --- a/frontends/concrete-python/tests/execution/test_matmul.py +++ b/frontends/concrete-python/tests/execution/test_matmul.py @@ -159,8 +159,8 @@ def test_constant_matmul(lhs_shape, rhs_shape, bounds, helpers): lhs_function_circuit = lhs_function.compile(lhs_inputset, configuration) rhs_function_circuit = rhs_function.compile(rhs_inputset, configuration) - lhs_sample = np.random.randint(minimum, maximum, size=lhs_shape) - rhs_sample = np.random.randint(minimum, maximum, size=rhs_shape) + lhs_sample = lhs_inputset[-1] + rhs_sample = rhs_inputset[-1] helpers.check_execution(lhs_operator_circuit, lhs_operator, lhs_sample) helpers.check_execution(rhs_operator_circuit, rhs_operator, rhs_sample) @@ -168,127 +168,134 @@ def test_constant_matmul(lhs_shape, rhs_shape, bounds, helpers): helpers.check_execution(rhs_function_circuit, rhs_function, rhs_sample) +test_matmul_shape_and_bounds = [ + ( + (3, 2), + (2, 3), + (0, 3), + ), + ( + (3, 2), + (2, 3), + (0, 127), + ), + ( + (1, 2), + (2, 1), + (0, 3), + ), + ( + (3, 3), + (3, 3), + (0, 3), + ), + ( + (2, 1), + (1, 2), + (0, 7), + ), + ( + (2,), + (2,), + (0, 7), + ), + ( + (5, 5), + (5,), + (0, 3), + ), + ( + (5,), + (5, 5), + (0, 3), + ), + ( + (5,), + (5, 5), + (-63, 63), + ), + ( + (2,), + (2, 7), + (-63, 0), + ), + ( + (5,), + (5, 3), + (0, 3), + ), + ( + (5, 3), + (3,), + (0, 3), + ), + ( + (5,), + (4, 5, 3), + (-5, 5), + ), + ( + (4, 5, 3), + (3,), + (0, 5), + ), + ( + (5,), + (2, 4, 5, 3), + (0, 5), + ), + ( + (2, 4, 5, 3), + (3,), + (-1, 5), + ), + ( + (5, 4, 3), + (3, 2), + (0, 5), + ), + ( + (4, 3), + (5, 3, 2), + (0, 5), + ), + ( + (2, 5, 4, 3), + (3, 2), + (0, 5), + ), + ( + (5, 4, 3), + (1, 3, 2), + (0, 5), + ), + ( + (1, 4, 3), + (5, 3, 2), + (0, 5), + ), + ( + (5, 4, 3), + (2, 1, 3, 2), + (0, 5), + ), + ( + (2, 1, 4, 3), + (5, 3, 2), + (0, 5), + ), +] + + @pytest.mark.parametrize( - "lhs_shape,rhs_shape,bounds", + "lhs_shape,rhs_shape,bounds,clear_rhs", [ - pytest.param( - (3, 2), - (2, 3), - (0, 3), - ), - pytest.param( - (3, 2), - (2, 3), - (0, 127), - ), - pytest.param( - (1, 2), - (2, 1), - (0, 3), - ), - pytest.param( - (3, 3), - (3, 3), - (0, 3), - ), - pytest.param( - (2, 1), - (1, 2), - (0, 7), - ), - pytest.param( - (2,), - (2,), - (0, 7), - ), - pytest.param( - (5, 5), - (5,), - (0, 3), - ), - pytest.param( - (5,), - (5, 5), - (0, 3), - ), - pytest.param( - (5,), - (5, 5), - (-63, 63), - ), - pytest.param( - (2,), - (2, 7), - (-63, 0), - ), - pytest.param( - (5,), - (5, 3), - (0, 3), - ), - pytest.param( - (5, 3), - (3,), - (0, 3), - ), - pytest.param( - (5,), - (4, 5, 3), - (-5, 5), - ), - pytest.param( - (4, 5, 3), - (3,), - (0, 5), - ), - pytest.param( - (5,), - (2, 4, 5, 3), - (0, 5), - ), - pytest.param( - (2, 4, 5, 3), - (3,), - (-1, 5), - ), - pytest.param( - (5, 4, 3), - (3, 2), - (0, 5), - ), - pytest.param( - (4, 3), - (5, 3, 2), - (0, 5), - ), - pytest.param( - (2, 5, 4, 3), - (3, 2), - (0, 5), - ), - pytest.param( - (5, 4, 3), - (1, 3, 2), - (0, 5), - ), - pytest.param( - (1, 4, 3), - (5, 3, 2), - (0, 5), - ), - pytest.param( - (5, 4, 3), - (2, 1, 3, 2), - (0, 5), - ), - pytest.param( - (2, 1, 4, 3), - (5, 3, 2), - (0, 5), - ), + (lhs_shape, rhs_shape, bounds, clear) + for lhs_shape, rhs_shape, bounds in test_matmul_shape_and_bounds + for clear in [False, True] ], ) -def test_matmul(lhs_shape, rhs_shape, bounds, helpers): +def test_matmul(lhs_shape, rhs_shape, bounds, clear_rhs, helpers): """ Test matmul. """ @@ -305,22 +312,20 @@ def test_matmul(lhs_shape, rhs_shape, bounds, helpers): def encrypted(x, y): return np.matmul(x, y) - for implementation in [clear, encrypted]: - inputset = [ - ( - np.random.randint(minimum, maximum, size=lhs_shape), - np.random.randint(minimum, maximum, size=rhs_shape), - ) - for i in range(100) - ] - circuit = implementation.compile(inputset, configuration) + implementation = clear if clear_rhs else encrypted - sample = [ + inputset = [ + ( np.random.randint(minimum, maximum, size=lhs_shape), np.random.randint(minimum, maximum, size=rhs_shape), - ] + ) + for _ in range(100) + ] + circuit = implementation.compile(inputset, configuration) - helpers.check_execution(circuit, implementation, sample, retries=3) + sample = list(inputset[-1]) + + helpers.check_execution(circuit, implementation, sample, retries=3) @pytest.mark.parametrize("bit_width", [4, 10]) diff --git a/frontends/concrete-python/tests/execution/test_min_max.py b/frontends/concrete-python/tests/execution/test_min_max.py index c25d8fc9e..291e26ff6 100644 --- a/frontends/concrete-python/tests/execution/test_min_max.py +++ b/frontends/concrete-python/tests/execution/test_min_max.py @@ -233,3 +233,25 @@ def test_minimum_maximum( ] for sample in samples: helpers.check_execution(circuit, function, sample, retries=5) + + +def test_internal_signed_tlu_padding(helpers): + """Test that the signed input LUT is correctly padded in the case of substraction trick.""" + + inputset = [(i, j) for i in [0, 1] for j in [0, 1]] + + @fhe.compiler({"a": "encrypted", "b": "encrypted"}) + def min2(a, b): + min_12 = np.minimum(a, b) + return (min_12, a + 3, b + 3) + + c = min2.compile(inputset, helpers.configuration()) + min_0_1, _, _ = c.encrypt_run_decrypt(0, 1) + + assert min_0_1 == 0 + + # Some extra checks to verify that the test is relevant (substraction trick). + assert c.mlir.count("to_signed") == 2 # check substraction trick is used + assert c.mlir.count("sub_eint") == 1 # check substraction trick is used + assert c.mlir.count("<[0, 0, -2, -1, 0, 0, 0, 0]>") == 0 # lut wrongly padded at the end + assert c.mlir.count("<[0, 0, 0, 0, 0, 0, -2, -1]>") == 1 # lut correctly padded in the middle diff --git a/third_party/llvm-project b/third_party/llvm-project index f5aec278e..cdd17b354 160000 --- a/third_party/llvm-project +++ b/third_party/llvm-project @@ -1 +1 @@ -Subproject commit f5aec278e8dfd68bfb1a15c3abb6f0852cea7046 +Subproject commit cdd17b3545cc219366da23795e9d891a006057aa