diff --git a/.algokit.toml b/.algokit.toml
index f592ea60..9d765eb1 100644
--- a/.algokit.toml
+++ b/.algokit.toml
@@ -30,7 +30,7 @@ build = { commands = [
'poetry run python -m smart_contracts build',
], description = 'Build all smart contracts in the project' }
test = { commands = [
- 'poetry run pytest',
+ 'poetry run pytest -m "not showcase"',
], description = 'Run smart contract tests' }
audit = { commands = [
'poetry run pip-audit',
@@ -48,5 +48,6 @@ audit-teal = { commands = [
# Commands intented for CI only, prefixed with `ci-` by convention
ci-teal-diff = { commands = [
'git add -N ./smart_contracts/artifacts',
- 'git diff --exit-code --minimal ./smart_contracts/artifacts',
-], description = 'Check TEAL files for differences' }
+ 'git add -N ./src/d_asa/artifacts',
+ 'git diff --exit-code --minimal ./smart_contracts/artifacts ./src/d_asa/artifacts',
+], description = 'Check generated artifacts for differences' }
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..3706c5e7
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,13 @@
+.git
+.github
+.idea
+.mypy_cache
+.pytest_cache
+.ruff_cache
+.vscode
+__pycache__
+book
+docs
+tests
+.env.localnet
+.env.testnet
diff --git a/.github/actions/docs-ci/action.yaml b/.github/actions/docs-ci/action.yaml
index 40d48544..6711ee0c 100644
--- a/.github/actions/docs-ci/action.yaml
+++ b/.github/actions/docs-ci/action.yaml
@@ -8,6 +8,12 @@ runs:
with:
mdbook-version: '0.5.2'
+ - name: Install mdbook-mermaid
+ shell: bash
+ run: |
+ cargo install mdbook-mermaid --version 0.17.0 --locked
+ mdbook-mermaid install .
+
- name: Test docs
shell: bash
run: mdbook test
diff --git a/.github/workflows/d-asa-ci.yaml b/.github/workflows/d-asa-ci.yaml
index 3e150150..aeb3e34b 100644
--- a/.github/workflows/d-asa-ci.yaml
+++ b/.github/workflows/d-asa-ci.yaml
@@ -39,20 +39,10 @@ jobs:
- name: Run deployer against LocalNet
run: algokit project deploy localnet
- test:
- name: Test ${{ matrix.module }}
+ test-mock-module-rbac:
+ name: Test RBAC Module
if: '! github.event.pull_request.draft'
runs-on: "ubuntu-latest"
- strategy:
- matrix:
- module:
- # Mocked modules
- - mock_module_rbac
- - mock_module_accounting
- # Contracts
- - zero_coupon_bond
- - fixed_coupon_bond
- - perpetual_bond
steps:
- name: Checkout source code
uses: actions/checkout@v6
@@ -65,22 +55,28 @@ jobs:
id: filter
with:
filters: |
- module:
- - 'smart_contracts/artifacts/${{ matrix.module }}/**'
+ mock_module_rbac:
+ - 'smart_contracts/artifacts/mock_module_rbac/**'
- 'tests/conftest.py'
- - 'tests/${{ matrix.module }}/**'
+ - 'tests/mock_module_rbac/**'
- name: Run tests
- if: steps.filter.outputs.module == 'true'
+ if: steps.filter.outputs.mock_module_rbac == 'true'
shell: bash
run: |
set -o pipefail
- algokit project run test tests/${{ matrix.module }}
+ algokit project run test tests/mock_module_rbac
- test-shared:
- name: Test shared contracts
+ test-pam:
+ name: Test PAM ${{ matrix.subfolder }}
if: '! github.event.pull_request.draft'
runs-on: "ubuntu-latest"
+ strategy:
+ fail-fast: false
+ matrix:
+ subfolder:
+ - fcb
+ - zcb
steps:
- name: Checkout source code
uses: actions/checkout@v6
@@ -93,30 +89,23 @@ jobs:
id: filter
with:
filters: |
- shared:
- - 'modules/**'
- - 'smart_contracts/artifacts/zero_coupon_bond/**'
- - 'smart_contracts/artifacts/fixed_coupon_bond/**'
- - 'smart_contracts/artifacts/perpetual_bond/**'
+ pam:
+ - 'smart_contracts/artifacts/d_asa/**'
+ - 'src/artifacts/**'
- 'tests/conftest.py'
- 'tests/conftest_helpers.py'
- - 'tests/shared/**'
-
- - name: Run shared tests
- if: steps.filter.outputs.shared == 'true'
- shell: bash
- run: |
- set -o pipefail
- algokit project run test tests/shared
+ - 'tests/pam/pam_test_support.py'
+ - 'tests/pam/${{ matrix.subfolder }}/**'
- - name: Run helper tests
+ - name: Run tests
+ if: steps.filter.outputs.pam == 'true'
shell: bash
run: |
set -o pipefail
- algokit project run test tests/test_utils.py tests/test_mixin_composition_guards.py
+ algokit project run test tests/pam/${{ matrix.subfolder }}
- test-events:
- name: Test ACTUS events
+ test-sdk:
+ name: Test SDK and helpers
if: '! github.event.pull_request.draft'
runs-on: "ubuntu-latest"
steps:
@@ -126,8 +115,20 @@ jobs:
- name: Set up AlgoKit
uses: ./.github/actions/algokit-setup
- - name: Run Fixed Coupon Bond ACTUS events test
+ - name: Detect changes
+ uses: dorny/paths-filter@v3
+ id: filter
+ with:
+ filters: |
+ sdk:
+ - 'src/**'
+ - 'smart_contracts/**'
+ - 'tests/sdk/**'
+ - 'tests/test_utils.py'
+
+ - name: Run tests
+ if: steps.filter.outputs.sdk == 'true'
shell: bash
run: |
set -o pipefail
- poetry run pytest -s -v tests/fixed_coupon_bond/test_actus_events.py
+ algokit project run test tests/sdk tests/test_utils.py
diff --git a/.gitignore b/.gitignore
index 5734bcbd..553fb6d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -95,3 +95,8 @@ debug_traces/
# mdBook
book
+mermaid-init.js
+mermaid.min.js
+
+# Jupyter
+.ipynb_checkpoints/
diff --git a/.markdownlintignore b/.markdownlintignore
index 632a713c..f53e32a4 100644
--- a/.markdownlintignore
+++ b/.markdownlintignore
@@ -1,2 +1,3 @@
+CONTRIBUTIONS.md
SUMMARY.md
styles.md
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 10a97b0a..41d1f97a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -79,7 +79,7 @@ repos:
minimum_pre_commit_version: 0.15.0
types: [ markdown ]
additional_dependencies: [ ]
- files: '^(docs)/'
+ files: '^(docs/|[^/]+\.md$)'
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
@@ -92,4 +92,4 @@ repos:
minimum_pre_commit_version: 3.2.0
types: [ markdown ]
additional_dependencies: [ ]
- files: '^(docs)/'
+ files: '^(docs/|[^/]+\.md$)'
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..669f5d77
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,266 @@
+# Contributing to D-ASA
+
+Thank you for contributing to D-ASA.
+
+## Prerequisites
+
+The standard contributor workflow assumes:
+
+- [AlgoKit](https://dev.algorand.co/algokit/) for project bootstrap, LocalNet,
+ build, and deployment workflows
+- [Poetry](https://python-poetry.org/) for the Python environment
+- [Docker](https://www.docker.com/) for Algorand LocalNet
+- [pre-commit](https://pre-commit.com/) for local checks
+
+Docs contributors also need:
+
+- [Rust and Cargo](https://www.rust-lang.org/tools/install)
+- [`mdbook`](https://rust-lang.github.io/mdBook/)
+- `mdbook-mermaid`
+
+## Getting Started
+
+### Clone the Repository
+
+```shell
+git clone git@github.com:cusma/d-asa.git
+cd d-asa
+```
+
+### Bootstrap the Development Environment
+
+The standard setup path is:
+
+```shell
+algokit project bootstrap all
+make pre-commit
+make doctor
+```
+
+If you are only setting up Python dependencies:
+
+```shell
+make install
+```
+
+If you are contributing to docs, install the mdBook toolchain as well:
+
+```shell
+cargo install mdbook --version 0.5.2 --locked
+cargo install mdbook-mermaid --version 0.17.0 --locked
+mdbook-mermaid install .
+```
+
+### Verify the Environment
+
+Run:
+
+```shell
+make doctor
+```
+
+`make doctor` runs `algokit doctor`, checks core contributor dependencies, checks
+Docker daemon reachability for LocalNet workflows, and warns if docs-only tools
+are missing.
+
+## Development Workflow
+
+### Core Commands
+
+The main contributor commands are:
+
+```shell
+make help
+make build
+make test
+make test-cov
+make lint
+make format
+make typecheck
+make all
+```
+
+`make all` runs the standard code quality loop for contributors:
+
+- build smart contracts
+- run lint and type checks
+- run the default non-showcase test suite
+
+It intentionally does not require mdBook tooling.
+
+### LocalNet Workflow
+
+Start LocalNet when you need end-to-end execution tests or LocalNet deployment:
+
+```shell
+make localnet
+make deploy-localnet
+make showcase
+make localnet-stop
+```
+
+These targets map to the existing AlgoKit workflow already used by CI and the
+project scripts.
+
+### Docs Workflow
+
+For docs editing with live reload:
+
+```shell
+make docs-serve
+```
+
+For docs validation:
+
+```shell
+make docs
+```
+
+`make docs` runs both:
+
+- the docs pre-commit hooks:
+ - `mdbook-build`
+ - `mdbook-test`
+ - `markdownlint`
+ - `trailing-whitespace`
+- the mdBook build artifacts remain available in `book/` until `make clean`
+
+## Pull Requests
+
+When preparing a pull request:
+
+1. Keep changes focused and atomic.
+1. Add or update tests when behavior changes.
+1. Update docs when user-facing behavior, workflows, or interfaces change.
+1. Run the relevant local checks before opening the PR.
+
+Suggested pre-PR checklist:
+
+```shell
+make doctor
+make all
+```
+
+If you changed docs:
+
+```shell
+make docs
+```
+
+If you changed LocalNet behavior or showcase flows:
+
+```shell
+make localnet
+make showcase
+make localnet-stop
+```
+
+## Repository Layout
+
+The main top-level layout is:
+
+```text
+.algokit/ -> AlgoKit configuration and generators
+.github/ -> CI/CD workflows and shared GitHub actions
+docs/ -> mdBook source files
+modules/ -> D-ASA module implementations
+smart_contracts/ -> AVM smart contracts and generated contract artifacts
+src/ -> D-ASA SDK, Python-side normalization, helpers, and shared runtime code
+tests/ -> SDK, contract, LocalNet, and showcase tests
+```
+
+## Style and Quality
+
+### Python
+
+The project uses:
+
+- `black` for formatting
+- `ruff` for linting and import organization
+- `mypy` for type checking
+- `pytest` for tests
+
+Run the standard checks with:
+
+```shell
+make format
+make lint
+make typecheck
+make test
+```
+
+### Markdown and mdBook
+
+The docs are written in [CommonMark](https://commonmark.org/) and validated in
+CI with `markdownlint`, trailing whitespace checks, and `mdbook test`.
+
+#### Numbered Lists
+
+Numbered lists **MUST** use `1.`-only style.
+
+> ```text
+> 1. First item
+> 1. Second item
+> 1. Third item
+> ```
+
+#### Tables
+
+Table rows **MUST** keep aligned column widths.
+
+> ✅ Correct table format
+> ```text
+> | Month | Savings |
+> |----------|---------|
+> | January | EUR 250 |
+> | February | EUR 80 |
+> | March | EUR 420 |
+> ```
+>
+> ❌ Wrong table format
+> ```text
+> | Month | Savings |
+> |----------|---------|
+> | January | EUR 250 |
+> | February | EUR 80 |
+> | March | EUR 420 |
+> ```
+
+Column alignment may be controlled with `:` markers in the separator row.
+
+#### Admonitions
+
+An admonition is a special type of callout or notice block used to highlight important
+information. It is written as a blockquote with a special tag on the first line.
+
+```text
+> [!NOTE]
+> General information or additional context.
+
+> [!TIP]
+> A helpful suggestion or best practice.
+
+> [!IMPORTANT]
+> Key information that shouldn't be missed.
+
+> [!WARNING]
+> Critical information that highlights a potential risk.
+
+> [!CAUTION]
+> Information about potential issues that require caution.
+```
+
+#### MathJax
+
+Mathematical formulas are rendered with [MathJax](https://www.mathjax.org/).
+
+Reference:
+
+- [mdBook MathJax documentation](https://rust-lang.github.io/mdBook/format/mathjax.html)
+
+## Additional Notes
+
+- Do not remove or hand-edit generated artifacts under `smart_contracts/artifacts`
+ or `src/artifacts` unless the change explicitly requires regenerated output.
+- Prefer the checked-in `algokit` commands and `make` targets over ad-hoc local
+ command variations so contributor workflows stay aligned with CI.
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..e76ee405
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,24 @@
+FROM python:3.13-slim
+
+ENV PYTHONDONTWRITEBYTECODE=1
+ENV PYTHONUNBUFFERED=1
+ENV PIP_NO_CACHE_DIR=1
+ENV POETRY_NO_INTERACTION=1
+ENV POETRY_VIRTUALENVS_CREATE=false
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN python -m pip install --upgrade pip \
+ && python -m pip install \
+ poetry==2.1.4
+
+WORKDIR /workspace
+
+COPY pyproject.toml poetry.lock ./
+
+RUN poetry install --without dev --with notebooks --no-root --no-ansi
+
+EXPOSE 8888
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..036f4e99
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,135 @@
+SHELL := /bin/sh
+
+.PHONY: help install install-dev doctor build test test-cov lint format typecheck docs docs-serve pre-commit clean all localnet localnet-stop deploy-localnet showcase jupyter-docker
+
+help:
+ @echo "Available targets:"
+ @echo " install - Install Python dependencies via AlgoKit bootstrap"
+ @echo " install-dev - Bootstrap the full development environment and install pre-commit hooks"
+ @echo " doctor - Check contributor dependencies and environment health"
+ @echo " build - Build smart contracts"
+ @echo " test - Run the default non-showcase test suite"
+ @echo " test-cov - Run tests with coverage"
+ @echo " lint - Run the standard lint and type checks"
+ @echo " format - Format Python code and auto-fix Ruff issues"
+ @echo " typecheck - Run mypy"
+ @echo " docs - Run docs pre-commit checks and mdBook validation"
+ @echo " docs-serve - Serve mdBook docs locally with live reload"
+ @echo " pre-commit - Install pre-commit hooks"
+ @echo " clean - Remove local caches, notebook checkpoints, and ignored build outputs"
+ @echo " all - Run build, lint, and test"
+ @echo " localnet - Start AlgoKit LocalNet"
+ @echo " localnet-stop - Stop AlgoKit LocalNet"
+ @echo " deploy-localnet - Deploy contracts to LocalNet"
+ @echo " showcase - Run the LocalNet showcase walkthrough"
+ @echo " jupyter-docker - Start Jupyter Lab in Docker with LocalNet (no local dependencies needed)"
+
+install:
+ algokit project bootstrap poetry
+
+install-dev:
+ algokit project bootstrap all
+ pre-commit install
+
+doctor:
+ @set -u; \
+ status=0; \
+ echo "== AlgoKit doctor =="; \
+ algokit doctor || true; \
+ echo ""; \
+ echo "== D-ASA environment checks =="; \
+ check_required() { \
+ name="$$1"; \
+ cmd="$$2"; \
+ if command -v "$$cmd" >/dev/null 2>&1; then \
+ echo "[required] $$name: OK ($$(command -v "$$cmd"))"; \
+ else \
+ echo "[required] $$name: MISSING"; \
+ status=1; \
+ fi; \
+ }; \
+ check_optional() { \
+ group="$$1"; \
+ name="$$2"; \
+ cmd="$$3"; \
+ hint="$$4"; \
+ if command -v "$$cmd" >/dev/null 2>&1; then \
+ echo "[$$group] $$name: OK ($$(command -v "$$cmd"))"; \
+ else \
+ echo "[$$group] $$name: WARN - $$hint"; \
+ fi; \
+ }; \
+ check_required "AlgoKit" algokit; \
+ check_required "Poetry" poetry; \
+ check_required "pre-commit" pre-commit; \
+ if command -v docker >/dev/null 2>&1; then \
+ echo "[localnet] Docker CLI: OK ($$(command -v docker))"; \
+ if docker info >/dev/null 2>&1; then \
+ echo "[localnet] Docker daemon: OK"; \
+ else \
+ echo "[localnet] Docker daemon: ERROR - Docker is installed but not reachable"; \
+ status=1; \
+ fi; \
+ else \
+ echo "[localnet] Docker CLI: ERROR - Docker is required for LocalNet workflows"; \
+ status=1; \
+ fi; \
+ check_optional "docs" "Cargo" cargo "install Rust/Cargo to work on docs"; \
+ check_optional "docs" "mdBook" mdbook "install with: cargo install mdbook --version 0.5.2 --locked"; \
+ check_optional "docs" "mdBook Mermaid" mdbook-mermaid "install with: cargo install mdbook-mermaid --version 0.17.0 --locked"; \
+ exit $$status
+
+build:
+ algokit project run build
+
+test:
+ algokit project run test
+
+test-cov:
+ poetry run pytest --cov=d_asa --cov=smart_contracts --cov=modules --cov-report=term-missing -m "not showcase"
+
+lint:
+ algokit project run lint
+
+format:
+ poetry run black .
+ poetry run ruff check --fix .
+
+typecheck:
+ poetry run mypy
+
+docs:
+ mdbook-mermaid install .
+ pre-commit run --all-files mdbook-build
+ pre-commit run --all-files mdbook-test
+ pre-commit run --all-files markdownlint
+ pre-commit run --all-files trailing-whitespace
+
+docs-serve:
+ mdbook-mermaid install .
+ mdbook serve --open
+
+pre-commit:
+ pre-commit install
+
+clean:
+ rm -rf .mypy_cache .pytest_cache .ruff_cache .coverage htmlcov book mermaid-init.js mermaid.min.js
+ find . -type d \( -name __pycache__ -o -name '.ipynb_checkpoints' \) -prune -exec rm -rf {} +
+ find . -type f -name '*.pyc' -delete
+
+all: build lint test
+
+localnet:
+ algokit localnet start
+
+localnet-stop:
+ algokit localnet stop
+
+deploy-localnet:
+ algokit project deploy localnet
+
+showcase:
+ poetry run pytest -s -v -m showcase tests/pam/test_pam_lifecycle_showcase.py
+
+jupyter-docker:
+ ./d-asa jupyter
diff --git a/README.md b/README.md
index 147b049e..0a414177 100644
--- a/README.md
+++ b/README.md
@@ -1,53 +1,165 @@
+# Debt Algorand Standard Application (D-ASA)
+
+D-ASA is a full tokenization framework for [ACTUS](https://www.actusfrf.org/)-compliant
+debt instruments, issued and executed on the Algorand Virtual Machine.
+
+```mermaid
+flowchart LR
+ ACTUS["ACTUS Contract"] --> NORMALIZE["AVM Normalization"]
+ NORMALIZE --> ABI["ABI Upload"]
+ ABI --> EXEC["AVM Execution"]
+```
+
+The canonical generated artifacts are:
+
+- `src/d_asa/artifacts/DASA.arc56.json`: D-ASA AppSpec, generates clients and can
+be used on [Lora App Lab](https://lora.algokit.io/localnet/app-lab/create);
+
+- `src/d_asa/artifacts/dasa_client.py`: D-ASA client, expanded by the SDK;
+
+- `src/d_asa/artifacts/dasa_avm_client.py`: D-ASA AVM client, for on-chain App-2-App
+calls.
+
+Documentation:
+
+High-level client docs: `docs/sdk/overview.md`
+
+Interactive notebook examples: [`examples/README.md`](./examples/README.md)
+
[](https://deepwiki.com/cusma/d-asa)
-# Debt Algorand Standard Application (D-ASA)
+## Demo in One Command
+
+The fastest way to showcase D-ASA is with host AlgoKit for Algorand LocalNet and
+Docker for the showcase runtime.
+
+- Install [AlgoKit](https://dev.algorand.co/algokit/algokit-intro/#cross-platform-installation)
+- Install [Docker](https://docs.docker.com/get-docker/)
+
+```shell
+git clone git@github.com:cusma/d-asa.git
+cd d-asa
+./d-asa run
+```
+
+What `./d-asa run` does:
+
+- builds the local demo image
+- starts host AlgoKit LocalNet if it is not already running
+- waits for the LocalNet services required by the showcase
+- runs the PAM fixed coupon and zero coupon showcase walkthroughs
+- leaves LocalNet running so the Lora transaction links remain explorable
+
+When you are finished inspecting the links:
+
+```shell
+algokit localnet stop
+```
+
+Open the published docs with:
+
+```shell
+./d-asa docs
+```
+
+Notes:
+
+- targets macOS and Linux
+- requires both Docker and AlgoKit on the host
+- the demo joins the LocalNet Docker network when available, which keeps the showcase
+on direct container-to-container networking
+
+## Development
-Documentation: https://cusma.github.io/d-asa/
+The D-ASA project is developed with [AlgoKit](https://algorand.co/algokit) and [Poetry](https://python-poetry.org/).
-## Deployments
+Bootstrap the development environment:
-D-ASA examples deployed on TestNet:
+```shell
+make install-dev
+```
+
+Verify your environment:
+
+```shell
+make doctor
+```
+
+See the available contributor commands:
+
+```shell
+make help
+```
-| Type | App ID | App Spec |
-|-------------------|--------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
-| Zero Coupon Bond | [756574705](https://lora.algokit.io/testnet/application/756574705) | [ARC-56](https://github.com/cusma/d-asa/blob/main/smart_contracts/artifacts/zero_coupon_bond/ZeroCouponBond.arc56.json) |
-| Fixed Coupon Bond | [756574716](https://lora.algokit.io/testnet/application/756574716) | [ARC-56](https://github.com/cusma/d-asa/blob/main/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.arc56.json) |
-| Perpetual Bond | [756574702](https://lora.algokit.io/testnet/application/756574702) | [ARC-56](https://github.com/cusma/d-asa/blob/main/smart_contracts/artifacts/perpetual_bond/PerpetualBond.arc56.json) |
+Start your Algorand LocalNet:
-1. Download the App Spec JSON file;
-1. Navigate to the [Lora App Lab](https://lora.algokit.io/testnet/app-lab);
-1. Create the App Interface using the existing App ID and App Spec JSON;
-1. Explore the D-ASA interface.
+```shell
+make localnet
+```
-## Local Setup and Tests
+Run the default test suite:
-The D-ASA project is developed with [AlgoKit](https://algorand.co/algokit).
+```shell
+make test
+```
-- Install AlgoKit
-- Set up your virtual environment (managed with [Poetry](https://python-poetry.org/))
+Build smart contracts:
```shell
-algokit bootstrap all
+make build
```
-- Start your Algorand LocalNet (requires [Docker](https://www.docker.com/get-started/))
+Run the showcase tests directly:
```shell
-algokit localnet start
+make showcase
```
-- Run tests (managed with PyTest)
+Serve docs locally with live reload:
+
+```shell
+make docs-serve
+```
+
+## Interactive Notebooks
+
+The easiest way to explore the notebooks is using Docker (no local Python dependencies
+needed):
+
+```shell
+./d-asa jupyter
+```
+
+Or via make:
+
+```shell
+make jupyter-docker
+```
+
+This will:
+- Build the Docker image with Jupyter Lab included
+- Start AlgoKit LocalNet if needed
+- Launch Jupyter Lab at
+- Automatically configure LocalNet connectivity
+
+The notebooks will have full access to the D-ASA framework and LocalNet.
+
+Press `Ctrl+C` to stop.
+
+### Alternative: Local Jupyter (requires local dependencies)
+
+If you prefer running Jupyter locally, first install the optional notebook dependencies:
```shell
-algokit project run test
+poetry install --with notebooks
```
-or, for verbose results:
+Then start Jupyter Lab:
```shell
-poetry run pytest -s -v tests//.py
+poetry run jupyter lab examples/
```
-## How to contribute
+## Contributing
-Refer to D-ASA documentation!
+Contributor setup and workflow guidance live in [CONTRIBUTING.md](./CONTRIBUTING.md).
diff --git a/book.toml b/book.toml
index 4757e8e5..ab4cd1d0 100644
--- a/book.toml
+++ b/book.toml
@@ -13,7 +13,13 @@ mathjax-support = true
git-repository-url = "https://github.com/cusma/d-asa"
edit-url-template = "https://github.com/cusma/d-asa/edit/main/{path}"
site-url = "https://cusma.github.io/d-asa/"
+additional-js = ["mermaid.min.js", "mermaid-init.js"]
[output.html.fold]
enable = true
level = 3
+
+[preprocessor]
+
+[preprocessor.mermaid]
+command = "mdbook-mermaid"
diff --git a/d-asa b/d-asa
new file mode 100755
index 00000000..7bb88bd2
--- /dev/null
+++ b/d-asa
@@ -0,0 +1,279 @@
+#!/bin/sh
+
+set -eu
+
+IMAGE_TAG="d-asa-demo:local"
+DOCS_URL="https://cusma.github.io/d-asa/"
+DEFAULT_LOCALNET_HOST="${D_ASA_LOCALNET_HOST:-host.docker.internal}"
+DEFAULT_LOCALNET_TOKEN="${D_ASA_LOCALNET_TOKEN:-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}"
+DEFAULT_ALGOD_PORT="${D_ASA_ALGOD_PORT:-4001}"
+DEFAULT_KMD_PORT="${D_ASA_KMD_PORT:-4002}"
+DEFAULT_INDEXER_PORT="${D_ASA_INDEXER_PORT:-8980}"
+LOCALNET_NETWORK="algokit_sandbox_default"
+NETWORK_LOCALNET_HOST="algod"
+NETWORK_INDEXER_HOST="indexer"
+NETWORK_ALGOD_PORT="8080"
+NETWORK_KMD_PORT="7833"
+NETWORK_INDEXER_PORT="8980"
+STARTED_LOCALNET=0
+REPO_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
+STALE_LOCALNET_CONFIG_IMAGE="/home/dasa/.config/algokit/sandbox/docker-compose.yml"
+STALE_LOCALNET_CONFIG_REPO="$REPO_ROOT/.d-asa/algokit-home/.config/algokit/sandbox/docker-compose.yml"
+
+print_help() {
+ cat <
+
+Commands:
+ run Build the demo image, start LocalNet if needed, print the showcase, and leave LocalNet running.
+ jupyter Start Jupyter Lab in Docker with LocalNet integration (opens browser automatically).
+ docs Open the published D-ASA docs, or print the URL when browser opening is disabled.
+ help Show this help text.
+
+Prerequisites:
+ - Docker Desktop or Docker Engine
+ - AlgoKit
+ - macOS or Linux
+
+Examples:
+ ./d-asa run
+ ./d-asa jupyter
+ ./d-asa docs
+ D_ASA_NO_OPEN=1 ./d-asa docs
+EOF
+}
+
+die() {
+ printf '%s\n' "$*" >&2
+ exit 1
+}
+
+ensure_docker() {
+ command -v docker >/dev/null 2>&1 || die "Docker is required but was not found in PATH."
+ docker info >/dev/null 2>&1 || die "Docker is installed but the daemon is not reachable."
+}
+
+ensure_algokit() {
+ command -v algokit >/dev/null 2>&1 || die "AlgoKit is required but was not found in PATH."
+}
+
+cleanup_stale_localnet() {
+ stale_ids=$(
+ {
+ docker ps -aq \
+ --filter "label=com.docker.compose.project=algokit_sandbox" \
+ --filter "label=com.docker.compose.project.config_files=$STALE_LOCALNET_CONFIG_IMAGE"
+ docker ps -aq \
+ --filter "label=com.docker.compose.project=algokit_sandbox" \
+ --filter "label=com.docker.compose.project.config_files=$STALE_LOCALNET_CONFIG_REPO"
+ } | sort -u
+ )
+ if [ -z "$stale_ids" ]; then
+ return
+ fi
+
+ printf '%s\n' "Removing stale LocalNet containers from an older d-asa launcher..."
+ # shellcheck disable=SC2086
+ docker rm -f $stale_ids >/dev/null
+ docker network rm algokit_sandbox_default >/dev/null 2>&1 || true
+}
+
+build_image() {
+ printf '%s\n' "Building ${IMAGE_TAG}..."
+ docker build --tag "$IMAGE_TAG" "$REPO_ROOT"
+}
+
+localnet_network_exists() {
+ docker network inspect "$LOCALNET_NETWORK" >/dev/null 2>&1
+}
+
+run_in_image() {
+ if localnet_network_exists; then
+ docker run --rm \
+ --network "$LOCALNET_NETWORK" \
+ -e D_ASA_LOCALNET_HOST="$NETWORK_LOCALNET_HOST" \
+ -e D_ASA_ALGOD_HOST="$NETWORK_LOCALNET_HOST" \
+ -e D_ASA_KMD_HOST="$NETWORK_LOCALNET_HOST" \
+ -e D_ASA_INDEXER_HOST="$NETWORK_INDEXER_HOST" \
+ -e D_ASA_LOCALNET_TOKEN="$DEFAULT_LOCALNET_TOKEN" \
+ -e D_ASA_ALGOD_PORT="$NETWORK_ALGOD_PORT" \
+ -e D_ASA_KMD_PORT="$NETWORK_KMD_PORT" \
+ -e D_ASA_INDEXER_PORT="$NETWORK_INDEXER_PORT" \
+ -v "$REPO_ROOT:$REPO_ROOT" \
+ -w "$REPO_ROOT" \
+ "$IMAGE_TAG" "$@"
+ return
+ fi
+
+ case "$(uname -s)" in
+ Linux*)
+ docker run --rm \
+ --add-host=host.docker.internal:host-gateway \
+ -e D_ASA_LOCALNET_HOST="$DEFAULT_LOCALNET_HOST" \
+ -e D_ASA_LOCALNET_TOKEN="$DEFAULT_LOCALNET_TOKEN" \
+ -e D_ASA_ALGOD_PORT="$DEFAULT_ALGOD_PORT" \
+ -e D_ASA_KMD_PORT="$DEFAULT_KMD_PORT" \
+ -e D_ASA_INDEXER_PORT="$DEFAULT_INDEXER_PORT" \
+ -v "$REPO_ROOT:$REPO_ROOT" \
+ -w "$REPO_ROOT" \
+ "$IMAGE_TAG" "$@"
+ ;;
+ *)
+ docker run --rm \
+ -e D_ASA_LOCALNET_HOST="$DEFAULT_LOCALNET_HOST" \
+ -e D_ASA_LOCALNET_TOKEN="$DEFAULT_LOCALNET_TOKEN" \
+ -e D_ASA_ALGOD_PORT="$DEFAULT_ALGOD_PORT" \
+ -e D_ASA_KMD_PORT="$DEFAULT_KMD_PORT" \
+ -e D_ASA_INDEXER_PORT="$DEFAULT_INDEXER_PORT" \
+ -v "$REPO_ROOT:$REPO_ROOT" \
+ -w "$REPO_ROOT" \
+ "$IMAGE_TAG" "$@"
+ ;;
+ esac
+}
+
+cleanup() {
+ status=$?
+ trap - EXIT INT TERM
+ if [ "$STARTED_LOCALNET" -eq 1 ] && [ "$status" -ne 0 ]; then
+ printf '%s\n' "Stopping AlgoKit LocalNet after failed run..."
+ algokit localnet stop >/dev/null 2>&1 || true
+ elif [ "$STARTED_LOCALNET" -eq 1 ]; then
+ printf '%s\n' "LocalNet is still running so the Lora links stay available."
+ printf '%s\n' "Stop it when finished with: algokit localnet stop"
+ fi
+ exit "$status"
+}
+
+localnet_ready() {
+ run_in_image python -m src.d_asa.localnet wait --timeout 2 --poll-interval 1 >/dev/null 2>&1
+}
+
+cmd_run() {
+ ensure_docker
+ ensure_algokit
+ cleanup_stale_localnet
+ build_image
+ trap cleanup EXIT INT TERM
+
+ if localnet_ready; then
+ printf '%s\n' "Reusing existing LocalNet."
+ else
+ printf '%s\n' "Starting AlgoKit LocalNet..."
+ algokit localnet start --force
+ STARTED_LOCALNET=1
+ printf '%s\n' "Waiting for algod..."
+ run_in_image python -m src.d_asa.localnet wait --timeout 90 --poll-interval 2
+ fi
+
+ printf '%s\n' "Running D-ASA showcase..."
+ run_in_image python -m src.d_asa.showcase
+}
+
+cmd_jupyter() {
+ ensure_docker
+ ensure_algokit
+ cleanup_stale_localnet
+ build_image
+ trap cleanup EXIT INT TERM
+
+ if localnet_ready; then
+ printf '%s\n' "Reusing existing LocalNet."
+ else
+ printf '%s\n' "Starting AlgoKit LocalNet..."
+ algokit localnet start --force
+ STARTED_LOCALNET=1
+ printf '%s\n' "Waiting for algod..."
+ run_in_image python -m src.d_asa.localnet wait --timeout 90 --poll-interval 2
+ fi
+
+ printf '%s\n' "Starting Jupyter Lab on http://localhost:8888..."
+ printf '%s\n' "Press Ctrl+C to stop Jupyter Lab."
+ printf '%s\n' ""
+
+ if localnet_network_exists; then
+ docker run --rm -it \
+ --network "$LOCALNET_NETWORK" \
+ -p 127.0.0.1:8888:8888 \
+ -e D_ASA_LOCALNET_HOST="$NETWORK_LOCALNET_HOST" \
+ -e D_ASA_ALGOD_HOST="$NETWORK_LOCALNET_HOST" \
+ -e D_ASA_KMD_HOST="$NETWORK_LOCALNET_HOST" \
+ -e D_ASA_INDEXER_HOST="$NETWORK_INDEXER_HOST" \
+ -e D_ASA_LOCALNET_TOKEN="$DEFAULT_LOCALNET_TOKEN" \
+ -e D_ASA_ALGOD_PORT="$NETWORK_ALGOD_PORT" \
+ -e D_ASA_KMD_PORT="$NETWORK_KMD_PORT" \
+ -e D_ASA_INDEXER_PORT="$NETWORK_INDEXER_PORT" \
+ -v "$REPO_ROOT:$REPO_ROOT" \
+ -w "$REPO_ROOT" \
+ "$IMAGE_TAG" \
+ jupyter lab examples/ --ip=0.0.0.0 --port=8888 --no-browser --allow-root
+ else
+ case "$(uname -s)" in
+ Linux*)
+ docker run --rm -it \
+ --add-host=host.docker.internal:host-gateway \
+ -p 127.0.0.1:8888:8888 \
+ -e D_ASA_LOCALNET_HOST="$DEFAULT_LOCALNET_HOST" \
+ -e D_ASA_LOCALNET_TOKEN="$DEFAULT_LOCALNET_TOKEN" \
+ -e D_ASA_ALGOD_PORT="$DEFAULT_ALGOD_PORT" \
+ -e D_ASA_KMD_PORT="$DEFAULT_KMD_PORT" \
+ -e D_ASA_INDEXER_PORT="$DEFAULT_INDEXER_PORT" \
+ -v "$REPO_ROOT:$REPO_ROOT" \
+ -w "$REPO_ROOT" \
+ "$IMAGE_TAG" \
+ jupyter lab examples/ --ip=0.0.0.0 --port=8888 --no-browser --allow-root
+ ;;
+ *)
+ docker run --rm -it \
+ -p 8888:8888 \
+ -e D_ASA_LOCALNET_HOST="$DEFAULT_LOCALNET_HOST" \
+ -e D_ASA_LOCALNET_TOKEN="$DEFAULT_LOCALNET_TOKEN" \
+ -e D_ASA_ALGOD_PORT="$DEFAULT_ALGOD_PORT" \
+ -e D_ASA_KMD_PORT="$DEFAULT_KMD_PORT" \
+ -e D_ASA_INDEXER_PORT="$DEFAULT_INDEXER_PORT" \
+ -v "$REPO_ROOT:$REPO_ROOT" \
+ -w "$REPO_ROOT" \
+ "$IMAGE_TAG" \
+ jupyter lab examples/ --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='' --NotebookApp.password=''
+ ;;
+ esac
+ fi
+}
+
+cmd_docs() {
+ if [ "${D_ASA_NO_OPEN:-0}" = "1" ]; then
+ printf '%s\n' "$DOCS_URL"
+ return
+ fi
+
+ if command -v open >/dev/null 2>&1; then
+ open "$DOCS_URL" >/dev/null 2>&1 || printf '%s\n' "$DOCS_URL"
+ return
+ fi
+
+ if command -v xdg-open >/dev/null 2>&1; then
+ xdg-open "$DOCS_URL" >/dev/null 2>&1 || printf '%s\n' "$DOCS_URL"
+ return
+ fi
+
+ printf '%s\n' "$DOCS_URL"
+}
+
+case "${1:-help}" in
+ run)
+ cmd_run
+ ;;
+ jupyter)
+ cmd_jupyter
+ ;;
+ docs)
+ cmd_docs
+ ;;
+ help|-h|--help)
+ print_help
+ ;;
+ *)
+ print_help
+ exit 1
+ ;;
+esac
diff --git a/docs/CONTRIBUTIONS.md b/docs/CONTRIBUTIONS.md
index 3c5b6ea4..81ddb505 100644
--- a/docs/CONTRIBUTIONS.md
+++ b/docs/CONTRIBUTIONS.md
@@ -1,176 +1 @@
-# Contribution {#contribution}
-
-The D-ASA is free and open source.
-
-The source code is released on the official
-GitHub repository.
-
-External contributions are welcome, the project relies on the community to improve
-and expand. Issues and features requests can be submitted on the GitHub
-issues page.
-
-If you would like to contribute, please read the [guidelines](CONTRIBUTIONS.md#guidelines-guidelines)
-and consider submitting a pull request.
-
-## Contributors {#contributors}
-
-- Cosimo Bassi ([@cusma](https://github.com/cusma/))
-- Altynbek Orumbayev ([@aorumbayev](https://github.com/aorumbayev))
-
-## Guidelines {#guidelines}
-
-By clicking on the _“Suggest an edit”_ icon in the top-right corner, while reading
-this book, you will be redirected to the relevant source code file to be referenced
-in an issue or edited in a pull request.
-
-### Source Code
-
-The D-ASA Specifications book is built with [mdBook](https://rust-lang.github.io/mdBook/index.html).
-
-The source code is structured as follows:
-
-```text
-.algokit/ -> AlgoKit configurations
-.github/ -> GitHub actions and CI/CD workflows
-docs/ -> mdBook source code
-└── _include/ -> Templates, etc.
-└── images/ -> Image files
-└── images/ -> D-ASA implementation documents
-└── interfaces/ -> D-ASA interfaces
-| └── rbac/ -> Role-Based Access Control (RBAC) interfaces
-| └── account/ -> Accounting interfaces
-| └── contract/ -> Contract interfaces
-| └── payment-agent/ -> Payment Agent interfaces
-| └── transfer-agent/ -> Transfer Agent interfaces
-└── specs/ -> D-ASA specifications
-| └── rbac/ -> Role-Based Access Control (RBAC) specifications
-| └── account/ -> Accounting specifications
-| └── contract/ -> Contract (ACTUS) specifications
-| └── execution/ -> Contract execution specifications
-└── SUMMARY.md, ... -> mdBook SUMMARY.md, COVER.md, etc.
-modules/ -> D-ASA Modules
-smart_contracts/ -> D-ASA Smart Contracts
-└── artifacts/ -> AlgoKit auto-generated artifacts
-└── mock_module_.../ -> Mocked modules for tests
-└── contract_a/ -> Contract Type A
-└── contract_b/ -> Contract Type B
-└── contract_.../ -> Contract Type ...
- └── config.py -> Contract configuration
- └── contract.py -> Contract implementation
- └── deploy_config.py -> Contract deployment configuration
-tests/ -> Tests of D-ASA Smart Contracts
-└── shared/ -> Shared test fixtures and mixins tests
-└── mock_module_.../ -> Mocked module tests
-└── contract_a/ -> Tests of Contract Type A
-| └── conftest.py -> Contract Type A test fixtures
-| └── test_method_1.py -> Tests of Contract Type A Method 1
-| └── test_method_2.py -> Tests of Contract Type A Method 2
-| └── test_method_... -> Tests of Contract Type A Method ...
-└── contract_b/ -> Tests of Contract Type B
-└── contract_.../ -> Tests of Contract Type ...
-└── conftest.py -> Common test fixtures
-└── utils.py -> Testing utilities
-└── ...
-```
-
-### Tests
-
-D-ASA uses the PyTest framework for unit tests and end-to-end tests.
-
-PyTest fixtures are organized hierarchically in the `tests` folder: fixtures defined
-in the `conftest.py` file at higher levels are available to all the nested-level
-tests.
-
-### Docs
-
-The book is written in [CommonMark](https://commonmark.org/).
-
-The CI pipeline enforces Markdown linting, formatting, and style checking with
-[`markdownlint`](https://github.com/DavidAnson/markdownlint).
-
-#### Numbered Lists
-
-Numbered lists **MUST** be defined with `1`-only style.
-
-{{#include ./_include/styles.md:example}}
-> ```text
-> 1. First item
-> 1. Second item
-> 1. Third item
-> ```
->
-> Result:
-> 1. First item
-> 1. Second item
-> 1. Third item
-
-#### Tables
-
-Table rows **MUST** use the same column widths.
-
-{{#include ./_include/styles.md:example}}
-> ✅ Correct table format
-> ```text
-> | Month | Savings |
-> |----------|---------|
-> | January | €250 |
-> | February | €80 |
-> | March | €420 |
-> ```
->
-> ❌ Wrong table format
-> ```text
-> | Month | Savings |
-> |----------|---------|
-> | January | €250 |
-> | February | €80 |
-> | March | €420 |
-> ```
->
-> Result:
-> | Month | Savings |
-> |----------|---------|
-> | January | €250 |
-> | February | €80 |
-> | March | €420 |
-
-Consider aligning text in the columns to the left, right, or center by adding a
-colon `:` to the left, right, or on both sides of the dashes `---` within the header
-row.
-
-{{#include ./_include/styles.md:example}}
-> ```text
-> | Name | Quantity | Size |
-> |:-------|:--------:|-----:|
-> | Item A | 1 | S |
-> | Item B | 5 | M |
-> | Item C | 10 | XL |
-> ```
->
-> Result:
-> | Name | Quantity | Size |
-> |:-------|:--------:|-----:|
-> | Item A | 1 | S |
-> | Item B | 5 | M |
-> | Item C | 10 | XL |
-
-#### MathJax
-
-Mathematical formulas are defined with [MathJax](https://www.mathjax.org/).
-
-> mdBook MathJax [documentation](https://rust-lang.github.io/mdBook/format/mathjax.html).
-
-#### Block Styles
-
-Block styles are defined in the `./docs/_include/styles.md` file using the mdBook
-[include feature](https://rust-lang.github.io/mdBook/format/mdbook.html#including-files).
-
-Block styles (e.g., examples, implementation notes, etc.) are “styled quote” blocks
-included in the book.
-
-{{#include ./_include/styles.md:example}}
-> This example block has been included with the following syntax:
-> ```text
-> \{{#include ./_include/styles.md:example}}
-> > This example block has been included with the following syntax:
-> ```
+{{#include ../CONTRIBUTING.md}}
diff --git a/docs/COVER.md b/docs/COVER.md
index e78f25da..8c548e53 100644
--- a/docs/COVER.md
+++ b/docs/COVER.md
@@ -7,30 +7,35 @@
The *Debt Algorand Standard Application* (D-ASA) is a standard for tokenizing *debt
instruments* on the Algorand Virtual Machine.
-It provides the interfaces for arranging the asset, configuring its role-based access
+It provides a framework for arranging the asset, configuring its role-based access
control, issuing and distributing it on the primary market, executing cash flows,
exchanging it on the secondary market, and querying information about the debt instrument.
-The specification provides recommendations to conform, to the best effort[^1], to
-the *Algorithmic Contract Types Unified Standards* (ACTUS).
+The specification complies with the *Algorithmic Contract Types Unified Standards*
+(ACTUS) for the definition of the contracts.
+
+**D-ASA is, in essence, a full tokenization framework for ACTUS-compliant debt instruments,
+issued and executed on the Algorand Virtual Machine.**
The specification allows the tokenization of various debt instruments, such as bonds,
-loans, commercial papers, mortgages, etc. A [reference implementation](./implementation/reference-implementation.md)
-of some fixed income contract examples are provided.
+loans, commercial papers, mortgages, etc.
+
+The [reference implementation](./implementation/reference-implementation.md) of
+some fixed income contracts is provided.
-This document is a *technical specification*, it is not intended to be as a legal
-or a financial document.
+This document is a *technical specification*, it is not intended to be a legal or
+a financial document.
## Contents
-Contents are organized in four hierarchical levels (see the navigation sidebar on
-the left):
+Contents are organized in three hierarchical levels (see the navigation sidebar
+on the left):
```text
Part
└── 1. Chapter
└── 1.1. Section
- └── 1.1.1. Sub Section
+ └── 1.1.1. Sub-section
```
The navigation sidebar can be folded up to the *Chapter* level by clicking the folding
@@ -40,20 +45,16 @@ icon (**>**), next to the level name.
The D-ASA is free and open source.
-The source code is released on the official
-GitHub repository.
+The source code is released on the official [GitHub repository](https://github.com/cusma/d-asa).
External contributions are welcome, the project relies on the community to improve
-and expand. Issues and features requests can be submitted on the GitHub
-issues page.
+and expand.
-If you would like to contribute, please read the [guidelines](CONTRIBUTIONS.md#guidelines-guidelines)
-and consider submitting a pull request.
+Issues and feature requests can be submitted on the [GitHub issues page](https://github.com/cusma/d-asa/issues).
-## License {#license}
+If you would like to contribute, please read the [guidelines](./CONTRIBUTIONS.md#guidelines-guidelines)
+and consider submitting a [pull request](https://github.com/cusma/d-asa/pulls).
-The D-ASA source and documentation are released under the [AGPL-3.0 license](LICENSE.md).
-
----
+## License {#license}
-[^1]: ACTUS compliance is recommended but not mandatory.
+The D-ASA source and documentation are released under the [AGPL-3.0 license](./LICENSE.md).
diff --git a/docs/motivation.md b/docs/INTRO.md
similarity index 92%
rename from docs/motivation.md
rename to docs/INTRO.md
index e2fb453a..5ea72974 100644
--- a/docs/motivation.md
+++ b/docs/INTRO.md
@@ -11,7 +11,9 @@ benefits several players of the traditional value chain, such as issuers, arrang
asset managers, risk managers, lenders, payment agents, transfer agents, etc.
The *Debt Algorand Standard Application* turns a traditional debt instrument into
-a deterministic financial contract, executed on the Algorand Virtual Machine (AVM).
+a deterministic ACTUS financial contract, executed on the Algorand Virtual Machine
+(AVM).
+
The machine-readable and executable contract removes existing frictions over the
debt instruments lifecycle and reconciliation, enabling use cases such as truly
atomic delivery-vs-payment (with instant finality and no counterparty risk), deterministic
diff --git a/docs/READING-GUIDELINES.md b/docs/READING-GUIDELINES.md
index be7c295e..920414a1 100644
--- a/docs/READING-GUIDELINES.md
+++ b/docs/READING-GUIDELINES.md
@@ -2,21 +2,20 @@
The keywords "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL
NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**"
-in this document are to be interpreted as described in RFC
-2119.
+in this document are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
The data types (like `uint64`, `byte[]`, etc.) in this document are to be interpreted
as specified in ARC-4.
-Acronyms in square brackets like \\([THIS]\\) are to be interpreted as defined in
-the ACTUS dictionary.
+Acronyms in square brackets like \\( [THIS] \\) are to be interpreted as defined
+in the [ACTUS dictionary](https://github.com/actusfrf/actus-dictionary).
> Notes like this are non-normative
Non-normative sections mainly contextualize the specification for technical readers
unfamiliar with the financial concepts described.
-{{#include ./_include/styles.md:example}}
+> [!TIP]
> Sections like this are examples aiming to clarify the specifications.
```text
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index a6255bba..c50e3f2c 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -6,114 +6,67 @@
# Introduction
-- [Motivation](./motivation.md)
+- [Motivation](./INTRO.md)
- [Reading Guidelines](./READING-GUIDELINES.md)
# Specification
- [Overview](./specs/overview.md)
-- [Trust Model]()
+- [RBAC Model](./specs/rbac/overview.md)
- [Roles](./specs/rbac/roles.md)
- - [Role-Based Access Control (RBAC)](./specs/rbac/rbac.md)
-- [Contract](specs/contract/intro.md)
- - [Type](./specs/contract/type.md)
+ - [Role-Based Access Control](./specs/rbac/rbac.md)
+- [Contract](./specs/contract/overview.md)
+ - [Introduction](./specs/contract/intro.md)
+ - [ACTUS Compliance Profile](./specs/contract/actus-compliance-profile.md)
- [Denomination](./specs/contract/denomination.md)
- - [Principal](./specs/contract/principal.md)
- - [Interests](./specs/contract/interests.md)
- - [Variable Interests](./specs/contract/variable-interests.md)
- - [Time Schedule](./specs/contract/time-schedule.md)
- - [Time Events](./specs/contract/time-events.md)
- - [Time Periods](./specs/contract/time-periods.md)
- - [Variable Time Schedule](./specs/contract/variable-time-schedule.md)
- [Day-Count Convention](./specs/contract/day-count-convention.md)
- - [Early Repayment Options](./specs/contract/early-repayment-options.md)
- - [Performance](./specs/contract/performance.md)
+ - [Main Attributes](./specs/contract/attributes.md)
+ - [Kernel State and Schedule](./specs/contract/kernel-state-and-schedule.md)
+ - [Normalization and Configuration](./specs/contract/normalization-and-configuration.md)
+ - [Numeric Precision and Conversions](./specs/contract/numeric-precision.md)
- [Metadata](./specs/contract/metadata.md)
-- [Accounting]()
- - [D-ASA Units](./specs/accounting/units.md)
-- [Execution]()
- - [Primary Market](./specs/execution/primary-market.md)
+- [Accounting](./specs/accounting/overview.md)
+ - [Account](./specs/accounting/account.md)
+ - [Units and Positions](./specs/accounting/units.md)
+- [Execution](./specs/execution/overview.md)
+ - [Time](./specs/execution/time.md)
- [Payment Agent](./specs/execution/payment-agent/payment-agent.md)
- [Settlement](./specs/execution/payment-agent/settlement.md)
- - [Principal Repayment](./specs/execution/payment-agent/principal-repayment.md)
- - [Early Repayment](./specs/execution/payment-agent/early-repayment.md)
- - [Coupons Payment](./specs/execution/payment-agent/coupons-payment.md)
- - [Transfer Agent](./specs/execution/transfer-agent.md)
- - [Secondary Market](./specs/execution/secondary-market.md)
+ - [Transfer Agent](./specs/execution/transfer-agent/transfer-agent.md)
+ - [Primary Distribution](./specs/execution/transfer-agent/primary-market.md)
+ - [Secondary Market](./specs/execution/transfer-agent/secondary-market.md)
+ - [Delivery-vs-Payment](./specs/execution/transfer-agent/dvp.md)
# Events
- [Events](./events/events.md)
+# SDK
+
+- [Overview](./sdk/overview.md)
+- [Deploy and Attach](./sdk/deploy-and-attach.md)
+- [Role Wrappers](./sdk/roles.md)
+- [Actualized Positions and Valuation](./sdk/valuation.md)
+- [OTC DvP Builder](./sdk/dvp.md)
+
# Interfaces
-- [RBAC]()
- - [Rotate Arranger](./interfaces/rbac/rotate-arranger.md)
- - [Assign Role](./interfaces/rbac/assign-role.md)
- - [Revoke Role](./interfaces/rbac/revoke-role.md)
- - [Governance Asset Suspension](interfaces/rbac/gov-asset-suspension.md)
- - [Get Arranger](./interfaces/rbac/get-arranger.md)
- - [Get Roles](./interfaces/rbac/get-roles.md)
- - [Get Role Config](./interfaces/rbac/get-role-config.md)
-
-- [Account]()
- - [Open](interfaces/account/open.md)
- - [Close](interfaces/account/close.md)
- - [Update Payment Address](./interfaces/account/update-payment-address.md)
- - [Governance Suspension](interfaces/account/gov-suspension.md)
- - [Get Info](interfaces/account/get-info.md)
-
-- [Contract]()
- - [Asset Config](./interfaces/contract/config.md)
- - [Set Metadata](./interfaces/contract/set-metadata.md)
- - [Set Amortizing Rates](./interfaces/contract/set-amortizing-rates.md)
- - [Set Secondary Time Events](./interfaces/contract/set-secondary-time-events.md)
- - [Set Early Repayment Option](./interfaces/contract/set-early-repayment-option.md)
- - [Set Variable Interest Rate](./interfaces/contract/set-variable-interest-rate.md)
- - [Set Default Status](./interfaces/contract/set-default-status.md)
- - [Primary Distribution](./interfaces/contract/primary-distribution.md)
- - [Update Total Units](./interfaces/contract/update-total-units.md)
- - [Update Global Unit Value](./interfaces/contract/update-global-unit-value.md)
- - [Update Interest Rate](./interfaces/contract/update-interest-rate.md)
- - [Update Coupon Rates](./interfaces/contract/update-coupon-rates.md)
- - [Update Time Events](./interfaces/contract/update-time-events.md)
- - [Update Time Periods](./interfaces/contract/update-time-periods.md)
- - [Get Asset Info](./interfaces/contract/get-asset-info.md)
- - [Get Asset Metadata](./interfaces/contract/get-asset-metadata.md)
- - [Get Account Units Value](./interfaces/contract/get-account-units-value.md)
- - [Get Account Units Current Value](./interfaces/contract/get-account-units-current-value.md)
- - [Get Time Events](./interfaces/contract/get-time-events.md)
- - [Get Time Periods](./interfaces/contract/get-time-periods.md)
- - [Get Payment Amount](./interfaces/contract/get-payment-amount.md)
- - [Get Coupon Rates](./interfaces/contract/get-coupon-rates.md)
- - [Get Coupon Status](./interfaces/contract/get-coupon-status.md)
- - [Get Amortizing Rates](./interfaces/contract/get-amortizing-rates.md)
- - [Get Secondary Market Schedule](./interfaces/contract/get-secondary-market-schedule.md)
- - [Get Early Repayment Schedule](./interfaces/contract/get-early-repayment-schedule.md)
-
-- [Payment Agent]()
- - [Pay Coupon](./interfaces/payment-agent/pay-coupon.md)
- - [Pay Principal](./interfaces/payment-agent/pay-principal.md)
- - [Early Repayment](interfaces/payment-agent/early-repayment.md)
-
-- [Transfer Agent]()
- - [Asset Transfer](./interfaces/transfer-agent/asset-transfer.md)
-
-# Rationale
-
-- [Rationale](./rationale.md)
+- [Interfaces](./interfaces/overview.md)
+ - [ABI Types](./interfaces/types.md)
+ - [RBAC Interface](./interfaces/rbac/overview.md)
+ - [Accounting Interface](./interfaces/account/overview.md)
+ - [ACTUS Kernel Interface](./interfaces/contract/overview.md)
+ - [Payment Agent Interface](./interfaces/payment-agent/overview.md)
+ - [Transfer Agent Interface](./interfaces/transfer-agent/overview.md)
# Reference Implementation
- [Reference Implementation](./implementation/reference-implementation.md)
- [Architecture](./implementation/architecture.md)
- - [Zero Coupon Bond](./implementation/ref-zero-coupon-bond.md)
- - [Fixed Coupon Bond](./implementation/ref-fixed-coupon-bond.md)
- - [Perpetual Bond](./implementation/ref-perpetual-bond.md)
-- [Tests](./implementation/reference-implementation-tests.md)
+- [Tests](./implementation/tests.md)
- [DeepWiki (Experimental)](./implementation/deepwiki.md)
---
[Contribution Guidelines](./CONTRIBUTIONS.md)
-[License](LICENSE.md)
+[License](./LICENSE.md)
diff --git a/docs/_include/styles.md b/docs/_include/styles.md
deleted file mode 100644
index 3ee93eb3..00000000
--- a/docs/_include/styles.md
+++ /dev/null
@@ -1,4 +0,0 @@
-// ANCHOR: example
-> [!TIP]
->
-// ANCHOR_END: example
diff --git a/docs/events/events.md b/docs/events/events.md
index e02b0a27..2d3b40af 100644
--- a/docs/events/events.md
+++ b/docs/events/events.md
@@ -1,69 +1,89 @@
# Events
-The D-ASA implements ACTUS events as [ARC-28 events](https://dev.algorand.co/arc-standards/arc-0028/).
+The D-ASA uses two distinct event concepts:
-The following is the ACTUS event schema:
+1. *ACTUS schedule events*: contractual events stored in the normalized execution
+schedule.
+
+1. *ARC-28 execution events*: proofs that a scheduled event was actually applied
+on chain.
+
+Those concepts are related, but they are not interchangeable.
+
+## ACTUS schedule events
+
+ACTUS schedule events live inside `ExecutionScheduleEntry` records in the boxed
+schedule. They describe what the contract is expected to execute next.
+
+An ACTUS schedule event contains:
+
+- `event_id`
+- `event_type`
+- `scheduled_time`
+- accrual factors
+- next-state values
+- flags
+
+Schedule events exist before execution and remain part of contract state even if
+no ARC-28 proof has been emitted yet.
+
+See [Kernel State and Schedule](../specs/contract/kernel-state-and-schedule.md)
+for the normative schedule definition.
+
+## ARC-28 execution events
+
+When the kernel applies a schedule entry, it emits an ARC-28 `ExecutionEvent` as
+an execution proof.
+
+This proof is non-normative receipt data. It does not replace the kernel state,
+and it does not define future schedule entries. Its purpose is to attest that a
+given event was applied at a specific block time with a specific payoff and settlement
+outcome.
+
+The current execution-proof schema is:
```json
{
- "name": "Event",
- "desc": "ACTUS Event",
+ "name": "ExecutionEvent",
+ "desc": "Non-normative receipt for on-chain execution of a scheduled ACTUS event",
"args": [
- {
- "type": "uint64",
- "name": "contract_id",
- "desc": "The Contract ID emitting the event"
- },
- {
- "type": "uint8",
- "name": "type",
- "desc": "The ACTUS Event type"
- },
- {
- "type": "string",
- "name": "type_name",
- "desc": "The ACTUS Event acronym"
- },
- {
- "type": "uint64",
- "name": "time",
- "desc": "The timestamp of the event (UNIX time)"
- },
- {
- "type": "uint64",
- "name": "payoff",
- "desc": "The payoff associated with the event (if any)"
- },
- {
- "type": "uint64",
- "name": "currency_id",
- "desc": "The currency ID (Asset ID on chain or ISO 4217 numeric code)"
- },
- {
- "type": "byte[]",
- "name": "currency_unit",
- "desc": "The unit name of the currency ID"
- },
- {
- "type": "uint64",
- "name": "nominal_value",
- "desc": "The nominal value at the time of the event"
- },
- {
- "type": "uint16",
- "name": "nominal_rate_bps"
- },
- {
- "type": "uint64",
- "name": "nominal_accrued"
- }
+ { "name": "contract_id", "type": "uint64", "desc": "Application ID emitting the proof" },
+ { "name": "event_id", "type": "uint64", "desc": "Executed schedule event identifier" },
+ { "name": "event_type", "type": "uint8", "desc": "Executed ACTUS event type" },
+ { "name": "scheduled_time", "type": "uint64", "desc": "Contractual due timestamp from the schedule" },
+ { "name": "applied_at", "type": "uint64", "desc": "Block timestamp at which execution occurred" },
+ { "name": "payoff", "type": "uint64", "desc": "Contractual payoff computed for the event" },
+ { "name": "payoff_sign", "type": "uint8", "desc": "Payoff sign identifier" },
+ { "name": "settled_amount", "type": "uint64", "desc": "Amount actually reserved or transferred on chain" },
+ { "name": "currency_id", "type": "uint64", "desc": "Settlement asset identifier" },
+ { "name": "sequence", "type": "uint64", "desc": "Monotonic proof sequence, currently event_id + 1" }
]
}
```
-The D-ASA supports the following ACTUS event types:
+## Proof semantics
+
+The following field distinctions are normative for interpreting the receipt:
+
+- `scheduled_time` is the contractual timestamp from the normalized ACTUS schedule.
+- `applied_at` is the actual block timestamp at which the kernel applied the event.
+- `payoff` is the contractual amount implied by the event.
+- `settled_amount` is the amount actually reserved or transferred on chain.
+- non-cash executions emit a proof with `settled_amount = 0`.
+
+## Supported ACTUS event identifiers
+
+The current kernel can emit proofs for the following ACTUS event types, subject
+to contract-family compatibility:
-| Type | Acronym | Description |
-|------|------------|----------------------|
-| `3` | \\( PR \\) | Principal Redemption |
-| `8` | \\( IP \\) | Interest Payment |
+| Type | Acronym | Description |
+|:-----|:--------|:--------------------------------|
+| `1` | `IED` | Initial Exchange Date |
+| `3` | `PR` | Principal Redemption |
+| `4` | `PI` | Principal Increase |
+| `5` | `PRF` | Principal Redemption Fixing |
+| `8` | `IP` | Interest Payment |
+| `11` | `RRF` | Rate Reset Fixing |
+| `12` | `RR` | Rate Reset |
+| `18` | `IPCB` | Interest Calculation Base Reset |
+| `19` | `MD` | Maturity |
diff --git a/docs/implementation/architecture.md b/docs/implementation/architecture.md
index 982d1fc1..571627c4 100644
--- a/docs/implementation/architecture.md
+++ b/docs/implementation/architecture.md
@@ -1,198 +1,101 @@
# Architecture
-The D-ASA architecture is designed to support a wide range of financial products
-and instrument types, fostering modularization and code reuse.
+The current D-ASA architecture is layered, not product-specific. The on-chain contract
+is a single `DASA` application assembled from five modules:
-The financial contract specialization is executed compile-time composition. Each
-concrete financial contract is built from _mixins_ that implement only the required
-behavior.
-
-As a result, unused flows (e.g., coupon payment for zero coupon bonds, principal
-repayment for perpetual bonds) are not part of the deployed program.
-
-## Architectural Axes
-
-The architecture is organized along four orthogonal axes:
+```mermaid
+flowchart LR
+ RBAC["RBAC"] --> KERNEL["ACTUS Kernel"]
+ KERNEL --> ACCOUNTING["Accounting"]
+ ACCOUNTING --> PAYMENT["Payment Agent"]
+ ACCOUNTING --> TRANSFER["Transfer Agent"]
+```
-- Axis A: `RbacModule` and `AccountingModule`
-- Axis B: Maturity-based core (`PAM`) vs Non-maturity-based core (`PBN`)
-- Axis C: Coupon vs No-coupon cashflow
-- Axis D: `CoreFinancial` (compute), `PaymentAgent` (execute payments),
- `TransferAgent` (transfer ownership)
+## Processing chain
-## High-level architecture
+The canonical processing chain is:
```mermaid
-flowchart TD
- RBAC["RbacModule"] --> ACC["AccountingModule"]
- ACC --> CFC["CoreFinancialCommonMixin"]
- CFC --> PAM["PAMCoreMixin (Maturity)"]
- CFC --> PBN["PBNCoreMixin (Non-Maturity)"]
-
- PAM --> NC["NoCouponCashflowMixin"]
- PAM --> FC["FixedCouponCashflowMixin"]
- PBN --> PC["PerpetualCouponCashflowMixin"]
-
- CFC --> PAC["PaymentAgentCommonMixin"]
- CFC --> TAC["TransferAgentCommonMixin"]
-
- PAC --> CPP["CouponPaymentAgentMixin"]
- PAC --> PRP["PrincipalPaymentAgentMixin"]
- PAC --> NPP["NoPrincipalPaymentMixin"]
-
- TAC --> CTA["CouponTransferAgentMixin"]
- TAC --> NTA["NoCouponTransferAgentMixin"]
-
- NC --> ZCB["ZeroCouponBond"]
- FC --> FCB["FixedCouponBond"]
- PC --> PB["PerpetualBond"]
- PRP --> ZCB
- NTA --> ZCB
- CPP --> FCB
- PRP --> FCB
- CTA --> FCB
- CPP --> PB
- NPP --> PB
- CTA --> PB
+flowchart LR
+ ACTUS["ACTUS Contract"] --> NORMALIZE["AVM Normalization"]
+ NORMALIZE --> ABI["ABI Upload"]
+ ABI --> EXEC["AVM Execution"]
```
-## Module responsibilities
-
-- `CoreFinancialCommonMixin`: shared asset configuration, schedule validation, and
- state/getter primitives.
- Must not do: payment settlement execution.
-
-- `PAMCoreMixin`: maturity-driven lifecycle and principal redemption authorization.
- Must not do: perpetual-only logic.
+This separation is intentional:
-- `PBNCoreMixin`: non-maturity lifecycle and perpetual-oriented schedule base.
- Must not do: maturity principal flow.
+- ACTUS contract definition and schedule generation happen off chain.
+- Normalization converts that contract into fixed-size AVM-compatible structs.
+- The AVM kernel validates and executes the normalized lifecycle.
-- `CouponCashflowMixin`: coupon due counting, coupon ordering constraints, and coupon-related
- cashflow preconditions.
- Must not do: settlement transfer execution.
+## Module responsibilities
-- `NoCouponCashflowMixin`: discount/accrual logic for no-coupon instruments.
- Must not do: coupon sequencing logic.
+- `RbacModule`: role assignment, suspension, contract default control, and
+application-control methods.
-- `PaymentAgentCommonMixin`: payment executability checks, liquidity checks, and
- settlement transaction execution.
- Must not do: interest/day-count formulas.
+- `ActusKernelModule`: normalized-term validation, schedule storage, event cursor,
+state transitions, and generic ACTUS getters.
-- `CouponPaymentAgentMixin`: executes `pay_coupon` using core-computed amount and
- core state transition hooks.
- Must not do: coupon formula computation.
+- `AccountingModule`: holder positions, unit activation, checkpoints, and claim
+ledgers.
-- `PrincipalPaymentAgentMixin`: executes `pay_principal` using core-computed amount
- and core state transition hooks.
- Must not do: maturity or coupon-ordering math.
+- `PaymentAgent`: funding of due cash events and holder withdrawals.
-- `NoPrincipalPaymentMixin`: explicit no-principal specialization (no `pay_principal`).
- Must not do: expose principal payment flow.
+- `TransferAgent`: primary distribution, transfer schedule, and settled unit transfers.
-- `TransferAgentCommonMixin`: shared transfer-agent composition point.
- Must not do: cashflow formulas.
+## Public API by layer
-- `CouponTransferAgentMixin`: ownership transfer with coupon-payment ordering guards
- delegated to core hooks.
- Must not do: coupon rate/day-count calculations.
+| Layer | Public methods |
+|:---------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| RBAC | `contract_update`, `rbac_rotate_arranger`, `rbac_set_op_daemon`, `rbac_assign_role`, `rbac_revoke_role`, `rbac_contract_suspension`, `rbac_contract_default`, `rbac_get_arranger`, `rbac_get_address_roles`, `rbac_get_role_validity` |
+| Accounting | `account_suspension`, `account_open`, `account_update_payment_address`, `account_get_position` |
+| ACTUS Kernel | `contract_create`, `contract_config`, `contract_schedule`, `contract_execute_ied`, `apply_non_cash_event`, `append_observed_cash_event`, `contract_get_state`, `contract_get_next_due_event` |
+| Payment Agent | `fund_due_cashflows`, `claim_due_cashflows` |
+| Transfer Agent | `transfer_set_schedule`, `primary_distribution`, `transfer` |
-- `NoCouponTransferAgentMixin`: ownership transfer for no-coupon instruments with
- accrual delegated to core hooks.
- Must not do: coupon sequencing checks.
+## Execution flows
-## Composition Matrix
+### Configuration
```mermaid
-flowchart TD
- PAM["PAM (Maturity Core)"] --> Z["ZeroCouponBond"]
- PAM --> F["FixedCouponBond"]
- PBN["PBN (Non-Maturity Core)"] --> P["PerpetualBond"]
-
- NOC["No-Coupon Cashflow"] --> Z
- CUP["Coupon Cashflow"] --> F
- CUP --> P
-
- PRIN["Principal Payment Agent"] --> Z
- PRIN --> F
- NOPR["No Principal Payment Agent"] --> P
-
- TRN["No-Coupon Transfer Agent"] --> Z
- TRC["Coupon Transfer Agent"] --> F
- TRC --> P
+sequenceDiagram
+ participant SDK as "Normalization SDK"
+ participant ABI as "ABI Caller"
+ participant K as "ACTUS Kernel"
+
+ SDK->>ABI: "NormalizedActusTerms + InitialKernelState + Schedule Pages"
+ ABI->>K: "contract_config(...)"
+ ABI->>K: "contract_schedule(page 0)"
+ ABI->>K: "contract_schedule(page n, is_last_page=true)"
+ ABI->>K: "primary_distribution(...)"
+ ABI->>K: "contract_execute_ied()"
```
-Current supported combinations:
-
-- `PAM + no-coupon` -> `ZeroCouponBond`
-- `PAM + coupon` -> `FixedCouponBond`
-- `PBN + coupon` -> `PerpetualBond`
-
-## Execution flow by agent
+### Cash events
```mermaid
sequenceDiagram
- participant API as "External Caller / ABI"
- participant PA as "PaymentAgent"
- participant TA as "TransferAgent"
- participant CF as "CoreFinancial"
- participant SET as "Settlement (ASA Transfer)"
- participant ACC as "Accounting State"
-
- API->>PA: "pay_coupon(holding_address, payment_info)"
- PA->>CF: "core_prepare_coupon_payment(...)"
- CF-->>PA: "computed amount + preconditions satisfied"
- PA->>SET: "execute settlement transfer"
- PA->>CF: "core_apply_coupon_payment(...)"
- CF->>ACC: "update paid coupons / coupon units"
-
- API->>TA: "asset_transfer(sender, receiver, units)"
- TA->>CF: "core_prepare_transfer_* (...)"
- CF-->>TA: "accrued amount + transfer guards"
- TA->>ACC: "transfer ownership units"
-
- Note over PA,TA: "Agents orchestrate execution, formulas in CoreFinancial"
+ participant ABI as "ABI Caller"
+ participant PA as "Payment Agent"
+ participant ACC as "Accounting"
+
+ ABI->>PA: "fund_due_cashflows(max_event_count)"
+ PA->>ACC: "advance global indices and reserve funds"
+ ABI->>PA: "claim_due_cashflows(holding_address, payment_info)"
+ PA->>ACC: "settle holder checkpoints"
+ PA-->>ABI: "CashClaimResult"
```
-## Contract API surface
+### Transfers
-| Method / Surface | Zero | Fixed | Perpetual |
-|--------------------------------------------------------------------------------|------|-------|-----------|
-| `asset_config` | Yes | Yes | Yes |
-| `asset_transfer` | Yes | Yes | Yes |
-| `pay_coupon` | No | Yes | Yes |
-| `pay_principal` | Yes | Yes | No |
-| `update_interest_rate` | No | No | Yes |
-| Core getters (`get_asset_info`, `get_time_events`, `get_asset_metadata`, etc.) | Yes | Yes | Yes |
-| Coupon getters (`get_coupon_rates`, `get_coupons_status`) | No | Yes | Yes |
-| `get_time_periods` | No | No | Yes |
-
-## Composition Safety
-
-Contract composition is validated at build time before contract compilation.
-
-- Agent mixins (`CouponTransferAgentMixin`, `NoCouponTransferAgentMixin`,
- `CouponPaymentAgentMixin`, `PrincipalPaymentAgentMixin`) must resolve their core
- hook methods to safe implementations.
-- If a hook resolves to an unsafe default in agent-common mixins, build validation
- fails before compilation.
-- Core financial hook defaults also fail-closed with `INVALID_MIXIN_COMPOSITION`
- and must be resolved by the expected cashflow/core mixins in the effective MRO.
-- Unsafe default hooks are fail-closed and abort with `INVALID_MIXIN_COMPOSITION`
- if reached.
-- Build and deploy flows verify generated `.teal` and `.arc56.json` artifacts do
- not contain `INVALID_MIXIN_COMPOSITION` markers.
-
-This prevents missing mixins or incorrect MRO ordering from silently producing
-fail-open settlement behavior.
-
-## On-chain optimization outcome
-
-Contracts are assembled from only the mixins required for each product. This removes
-unreachable logic from deployment artifacts and keeps method selectors, state usage,
-and control flow minimal for each contract.
-
-Examples:
-
-- `ZeroCouponBond` excludes `pay_coupon`.
-- `PerpetualBond` excludes `pay_principal`.
+```mermaid
+sequenceDiagram
+ participant ABI as "Holder"
+ participant TA as "Transfer Agent"
+ participant ACC as "Accounting"
+
+ ABI->>TA: "transfer(sender, receiver, units)"
+ TA->>ACC: "settle sender"
+ TA->>ACC: "settle receiver"
+ TA->>ACC: "move active units"
+```
diff --git a/docs/implementation/ref-fixed-coupon-bond.md b/docs/implementation/ref-fixed-coupon-bond.md
deleted file mode 100644
index 027f3433..00000000
--- a/docs/implementation/ref-fixed-coupon-bond.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Fixed Coupon Bond
-
-## Contract Data Model
-
-| Property | ACTUS | Option |
-|-------------------------|---------------|--------------------------|
-| Type | \\([CT]\\) | \\([PAM]\\) |
-| ID | \\([CID]\\) | D-ASA App ID |
-| Denomination | \\([CUR]\\) | ASA |
-| Settlement | \\([CURS]\\) | ASA |
-| Interest | \\([IPNR]\\) | Fixed |
-| Principal Discount | \\([PDIED]\\) | - |
-| Time Schedule | \\([EVT]\\) | Events (Fixed) |
-| Early Repayment Options | \\([PPEF]\\) | \\([N]\\) |
-| Early Repayment Penalty | \\([PYTP]\\) | - |
-| Day-Count Convention | \\([IPCD]\\) | \\([AA]\\) or Continuous |
-| Calendar | \\([CLDR]\\) | \\([NC]\\) |
-| Business Day Convention | \\([BDC]\\) | - |
-| End of Month Convention | \\([EOMC]\\) | - |
-| Performance | \\([PRF]\\) | Manual Default (Trustee) |
-| Grace Period | \\([GRP]\\) | No |
-| Delinquency Period | \\([DQP]\\) | No |
-
-## Contract Events
-
-| Event | ACTUS | Option |
-|----------------------|-------------|-------------|
-| Coupon Payments | \\([IP]\\) | Yes (Fixed) |
-| Known Rate Updates | \\([RR]\\) | - |
-| Unknown Rate Updates | \\([RRF]\\) | - |
-| Maturity Date | \\([MD]\\) | Yes (Fixed) |
-| Principal Repayment | \\([PR]\\) | At Maturity |
-| Early Repayment | \\([PP]\\) | - |
-
-## Contract Execution
-
-| Execution | Option |
-|----------------------|-------------------------|
-| Primary Distribution | Direct placement |
-| Primary Market | Placed at nominal value |
-| Transfer Agent | Trustless |
-| Payment Agent | Trustless, On-chain |
-| Secondary Market | Yes |
-
-## Payment Agent
-
-Payments are trustless (i.e., can be triggered by anyone), as long as payments'
-conditions are met (e.g., the payment is due).
-
-AVM fees (ALGO) for the execution of the cash flows are paid by who triggers the
-cash flow.
-
-A coupon payment **cannot** be executed until all the previous due coupons (if
-any) have been paid to all the investors.
-
-## Transfer Agent
-
-D-ASA units **cannot** be transferred until all the pending due coupon payments
-for the sender and receiver (if any) have been executed.
-
-## Performance
-
-No grace period. No delinquency period. Default called manually by the trustee.
diff --git a/docs/implementation/ref-perpetual-bond.md b/docs/implementation/ref-perpetual-bond.md
deleted file mode 100644
index ef979f30..00000000
--- a/docs/implementation/ref-perpetual-bond.md
+++ /dev/null
@@ -1,70 +0,0 @@
-# Perpetual Bond
-
-## Contract Data Model
-
-| Property | ACTUS | Option |
-|-------------------------|---------------|----------------------------|
-| Type | \\([CT]\\) | \\([PBN]\\) |
-| ID | \\([CID]\\) | D-ASA App ID |
-| Denomination | \\([CUR]\\) | ASA |
-| Settlement | \\([CURS]\\) | ASA |
-| Interest | \\([IPNR]\\) | Variable (Interest Oracle) |
-| Principal Discount | \\([PDIED]\\) | - |
-| Time Schedule | \\([EVT]\\) | Events, Periods (Fixed) |
-| Early Repayment Options | \\([PPEF]\\) | \\([N]\\) |
-| Early Repayment Penalty | \\([PYTP]\\) | - |
-| Day-Count Convention | \\([IPCD]\\) | \\([AA]\\) or Continuous |
-| Calendar | \\([CLDR]\\) | \\([NC]\\) |
-| Business Day Convention | \\([BDC]\\) | - |
-| End of Month Convention | \\([EOMC]\\) | - |
-| Performance | \\([PRF]\\) | Manual Default (Trustee) |
-| Grace Period | \\([GRP]\\) | No |
-| Delinquency Period | \\([DQP]\\) | No |
-
-## Contract Events
-
-| Event | ACTUS | Option |
-|----------------------|-------------|-----------------|
-| Coupon Payments | \\([IP]\\) | Yes (Perpetual) |
-| Known Rate Updates | \\([RR]\\) | - |
-| Unknown Rate Updates | \\([RRF]\\) | - |
-| Maturity Date | \\([MD]\\) | No |
-| Principal Repayment | \\([PR]\\) | No |
-| Early Repayment | \\([PP]\\) | - |
-
-## Contract Execution
-
-| Execution | Option |
-|----------------------|-------------------------|
-| Primary Distribution | Direct placement |
-| Primary Market | Placed at nominal value |
-| Transfer Agent | Trustless |
-| Payment Agent | Trustless, On-chain |
-| Secondary Market | Yes |
-
-## Payment Agent
-
-Payments are trustless (i.e., can be triggered by anyone), as long as payments'
-conditions are met (e.g., the payment is due).
-
-AVM fees (ALGO) for the execution of the cash flows are paid by who triggers the
-cash flow.
-
-A coupon payment **cannot** be executed until all the previous due coupons (if
-any) have been paid to all the investors.
-
-## Transfer Agent
-
-D-ASA units **cannot** be transferred until all the pending due coupon payments
-for the sender and receiver (if any) have been executed.
-
-## Interest Rate
-
-Updated by the interest oracle.
-
-Interest rate **cannot** be updated until all the previous due coupons (if any)
-have been paid to all the investors.
-
-## Performance
-
-No grace period. No delinquency period. Default called manually by the trustee.
diff --git a/docs/implementation/ref-zero-coupon-bond.md b/docs/implementation/ref-zero-coupon-bond.md
deleted file mode 100644
index eba8801a..00000000
--- a/docs/implementation/ref-zero-coupon-bond.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Zero Coupon Bond
-
-## Contract Data Model
-
-| Property | ACTUS | Option |
-|-------------------------|---------------|--------------------------|
-| Type | \\([CT]\\) | \\([PAM]\\) |
-| ID | \\([CID]\\) | D-ASA App ID |
-| Denomination | \\([CUR]\\) | ASA |
-| Settlement | \\([CURS]\\) | ASA |
-| Interest | \\([IPNR]\\) | - |
-| Principal Discount | \\([PDIED]\\) | Yes |
-| Time Schedule | \\([EVT]\\) | Events (Fixed) |
-| Early Repayment Options | \\([PPEF]\\) | \\([N]\\) |
-| Early Repayment Penalty | \\([PYTP]\\) | - |
-| Day-Count Convention | \\([IPCD]\\) | \\([AA]\\) or Continuous |
-| Calendar | \\([CLDR]\\) | \\([NC]\\) |
-| Business Day Convention | \\([BDC]\\) | - |
-| End of Month Convention | \\([EOMC]\\) | - |
-| Performance | \\([PRF]\\) | Manual Default (Trustee) |
-| Grace Period | \\([GRP]\\) | No |
-| Delinquency Period | \\([DQP]\\) | No |
-
-## Contract Events
-
-| Event | ACTUS | Option |
-|----------------------|-------------|-------------|
-| Coupon Payments | \\([IP]\\) | No |
-| Known Rate Updates | \\([RR]\\) | - |
-| Unknown Rate Updates | \\([RRF]\\) | - |
-| Maturity Date | \\([MD]\\) | Yes (Fixed) |
-| Principal Repayment | \\([PR]\\) | At Maturity |
-| Early Repayment | \\([PP]\\) | - |
-
-## Contract Execution
-
-| Execution | Option |
-|----------------------|---------------------|
-| Primary Distribution | Direct placement |
-| Primary Market | Placed at discount |
-| Transfer Agent | Trustless |
-| Payment Agent | Trustless, On-chain |
-| Secondary Market | Yes |
-
-## Payment Agent
-
-Payments are trustless (i.e., can be triggered by anyone), as long as payments'
-conditions are met (e.g., the payment is due).
-
-AVM fees (ALGO) for the execution of the cash flows are paid by who triggers the
-cash flow.
-
-## Performance
-
-No grace period. No delinquency period. Default called manually by the trustee.
diff --git a/docs/implementation/reference-implementation-tests.md b/docs/implementation/reference-implementation-tests.md
deleted file mode 100644
index 5ee73b67..00000000
--- a/docs/implementation/reference-implementation-tests.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Tests {#tests}
-
-The D-ASA project is developed with AlgoKit.
-
-- Install AlgoKit
-- Setup your virtual environment (managed with Poetry)
-
-```shell
-algokit bootstrap all
-```
-
-- Start your Algorand LocalNet (requires Docker)
-
-```shell
-algokit localnet start
-```
-
-- Run tests (managed with PyTest)
-
-```shell
-algokit project run test
-```
-
-or, for verbose results:
-
-```shell
-poetry run pytest -s -v tests//.py
-```
-
-## Coverage Principles
-
-- Module-level RBAC and Accounting behavior in `tests/module_*` (both with stand-alone
-mocked modules and concrete contracts).
-
-- Shared CoreFinancial behavior is validated through `tests/shared/*` and runs on:
- - `zero_coupon_bond`
- - `fixed_coupon_bond`
- - `perpetual_bond`
-
-- Product-specific financial behavior is validated in contract-specific suites.
diff --git a/docs/implementation/reference-implementation.md b/docs/implementation/reference-implementation.md
index 220113c7..f4dfeddd 100644
--- a/docs/implementation/reference-implementation.md
+++ b/docs/implementation/reference-implementation.md
@@ -1,76 +1,33 @@
# Reference Implementation {#reference-implementation}
-> ⚠️The reference implementations have not been audited. Do not use this code for
+> ⚠️The reference implementation has not been audited. Do not use this code for
> real products. The author declines all responsibility.
-> ⚠️The reference implementation does not guarantee compliance with ACTUS reference
-> implementation.
+The reference implementation exposes one canonical on-chain contract, `DASA`, and
+composes it from five modules:
-The reference implementation provides the following features:
+- `RbacModule`
+- `ActusKernelModule`
+- `AccountingModule`
+- `PaymentAgent`
+- `TransferAgent`
-- RBAC and Accounting:
- - Arranger: creates, configures and updates the D-ASA
- - Account Manager: opens and closes accounts (proxy a KYC process)
- - Primary Dealer: performs the primary distribution on the primary market
- - Trustee: can call a default
- - Authority: can suspend accounts or the whole asset
- - Interest Oracle: can update the interest rate in case of variable rates
+The implementation executes normalized ACTUS schedules on the AVM and currently
+supports the kernel contract families `PAM`, `ANN`, `NAM`, `LAM`, `LAX`, and `CLM`.
-- Types:
- - Zero Coupon Bond
- - Fixed Coupon Bond
- - Perpetual Bond
+## Delivered artifacts
-- Denomination:
- - On-chain (ASA)
- - Off-chain
+The canonical artifacts are:
-- Payment Agent (Settlement):
- - On-chain (ASA)
+- `src/d_asa/artifacts/DASA.arc56.json`
+- `src/d_asa/artifacts/dasa_client.py`
+- `src/d_asa/artifacts/dasa_avm_client.py`
-- Day-count conventions:
- - Actual/Actual (time periods must be in days, i.e., multiples of `86400` seconds)
- - Continuous
+The deployment helpers in `smart_contracts/d_asa/deploy_config.py` provide code-accurate
+demo normalization flows for:
-- Transfer Agent:
- - On-chain
- - Direct (i.e., from investor to investor)
+- a PAM fixed coupon bond profile;
+- a PAM zero coupon bond profile.
-- Secondary market
-
-- Notarize metadata (e.g., prospectus, etc.)
-
-- Updatable program (restricted to the Arranger)
-
-## Architecture
-
-The reference implementation architecture is structured in composable modules with
-a clear separation of concerns:
-
-- RBAC Module
-- Accounting Module
-- Core Financial Module
- - Common Cashflow Utilities
- - Coupon Cashflow
- - No-coupon Cashflow
-- Payment Agent
-- Transfer Agent
-
-The concrete financial contract inherits mixins to achieve compile-time specialization
-across the ACTUS Contract Types (e.g., `PAM`, `PBN`), so each deployed contract
-includes only the logic it actually needs.
-
-## Deployments {#deployments}
-
-D-ASA examples deployed on TestNet:
-
-| Type | App ID | App Spec |
-|-------------------------------------------------|-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|
-| [Zero Coupon Bond](./ref-zero-coupon-bond.md) | 756574705 | ARC-56 |
-| [Fixed Coupon Bond](./ref-fixed-coupon-bond.md) | 756574716 | ARC-56 |
-| [Perpetual Bond](./ref-perpetual-bond.md) | 756574702 | ARC-56 |
-
-1. Download the App Spec JSON file;
-1. Navigate to the Lora App Lab;
-1. Create the App Interface using the existing App ID and App Spec JSON;
-1. Explore the D-ASA interface.
+Those demos are examples of normalized inputs to the shared kernel, not separate
+contract classes with different public ABIs.
diff --git a/docs/implementation/tests.md b/docs/implementation/tests.md
new file mode 100644
index 00000000..484d866c
--- /dev/null
+++ b/docs/implementation/tests.md
@@ -0,0 +1,58 @@
+# Tests {#tests}
+
+The D-ASA project is developed with AlgoKit.
+
+- Install AlgoKit
+- Setup your virtual environment (managed with Poetry)
+
+```shell
+algokit bootstrap all
+```
+
+- Start your Algorand LocalNet (requires Docker)
+
+```shell
+algokit localnet start
+```
+
+- Run tests (managed with PyTest)
+
+```shell
+algokit project run test
+```
+
+or, for verbose results:
+
+```shell
+poetry run pytest -s -v tests//.py
+```
+
+The repository also includes a D-ASA showcase walkthrough that prints the
+normalized ACTUS schedule beside the real ARC-28 execution proofs and realized
+cashflows for PAM fixed coupon and zero coupon bonds:
+
+```shell
+poetry run pytest -s -v -m showcase tests/pam/test_pam_lifecycle_showcase.py
+```
+
+## Coverage Areas
+
+- `tests/sdk/*` covers the Python-side SDK and normalization layer: contract
+ builders, schedules, day-count conventions, registry mappings, models, and
+ deploy configuration helpers.
+
+- `tests/mock_module_rbac/*` exercises RBAC behavior in isolation through the
+ dedicated mock module artifact.
+
+- `tests/pam/fcb/*` and `tests/pam/zcb/*` run end-to-end PAM lifecycle tests on
+ LocalNet for fixed coupon and zero coupon bonds, including schedule upload,
+ `IED`, cashflow funding, holder claims, and final contract state.
+
+- `tests/pam/test_pam_lifecycle_showcase.py` is the narrative walkthrough suite
+ for new users. It prints the normalized ACTUS schedule beside the emitted
+ ARC-28 execution receipts and realized cashflows. It is marked `showcase` and
+ excluded from the default `algokit project run test` command.
+
+- Shared fixtures live in `tests/conftest.py`, `tests/pam/conftest.py`, and
+ `tests/conftest_helpers.py`; helper decoding and time-warp utilities live in
+ `tests/utils.py`.
diff --git a/docs/interfaces/account/close.md b/docs/interfaces/account/close.md
deleted file mode 100644
index 92febec6..00000000
--- a/docs/interfaces/account/close.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Account Close
-
-```json
-{
- "name": "account_close",
- "desc": "Close D-ASA account",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "desc": "Closed units, Timestamp of the account closing"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- }
- ]
-}
-
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller or if the operation is not authorized.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-does not exist.
diff --git a/docs/interfaces/account/get-info.md b/docs/interfaces/account/get-info.md
deleted file mode 100644
index 5c18bfd8..00000000
--- a/docs/interfaces/account/get-info.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Account Get Info
-
-```json
-{
- "name": "account_get_info",
- "desc": "Get account account info",
- "readonly": true,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(address,uint64,uint64,uint64,bool)",
- "desc": "Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended"
- },
- "errors": [
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid Holding Address"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Sender
-or Receiver Holding Address is invalid.
diff --git a/docs/interfaces/account/gov-suspension.md b/docs/interfaces/account/gov-suspension.md
deleted file mode 100644
index 1e500712..00000000
--- a/docs/interfaces/account/gov-suspension.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Account Governance Suspension
-
-```json
-{
- "name": "account_gov_suspension",
- "desc": "Set account suspension status",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "bool",
- "name": "suspended",
- "desc": "Suspension status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set account suspension status"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-does not exist.
diff --git a/docs/interfaces/account/open.md b/docs/interfaces/account/open.md
deleted file mode 100644
index 5f5f3a7d..00000000
--- a/docs/interfaces/account/open.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Account Open
-
-```json
-{
- "name": "account_open",
- "desc": "Open D-ASA account",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "address",
- "name": "payment_address",
- "desc": "Account Payment Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the account opening"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller or if the operation is not authorized.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-already exists.
diff --git a/docs/interfaces/account/overview.md b/docs/interfaces/account/overview.md
new file mode 100644
index 00000000..7f4629cc
--- /dev/null
+++ b/docs/interfaces/account/overview.md
@@ -0,0 +1,70 @@
+# Accounting Interface
+
+The Accounting interface manages holder positions and account-level suspension.
+
+## `account_suspension`
+
+```json
+{
+ "name": "account_suspension",
+ "readonly": false,
+ "args": [
+ { "name": "holding_address", "type": "address" },
+ { "name": "suspended", "type": "bool" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the suspension update" },
+ "errors": ["UNAUTHORIZED", "INVALID_HOLDING_ADDRESS"]
+}
+```
+
+Only an active Authority may call this method.
+
+## `account_open`
+
+```json
+{
+ "name": "account_open",
+ "readonly": false,
+ "args": [
+ { "name": "holding_address", "type": "address" },
+ { "name": "payment_address", "type": "address" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the account opening" },
+ "errors": ["UNAUTHORIZED", "DEFAULTED", "SUSPENDED", "INVALID_HOLDING_ADDRESS"]
+}
+```
+
+Only an active Account Manager may call this method.
+
+The current implementation treats an already existing holding address as `INVALID_HOLDING_ADDRESS`.
+
+## `account_update_payment_address`
+
+```json
+{
+ "name": "account_update_payment_address",
+ "readonly": false,
+ "args": [
+ { "name": "holding_address", "type": "address" },
+ { "name": "payment_address", "type": "address" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the account update" },
+ "errors": ["UNAUTHORIZED", "DEFAULTED", "SUSPENDED", "INVALID_HOLDING_ADDRESS"]
+}
+```
+
+Only the Account Holding Address itself may call this method.
+
+## `account_get_position`
+
+```json
+{
+ "name": "account_get_position",
+ "readonly": true,
+ "args": [
+ { "name": "holding_address", "type": "address" }
+ ],
+ "returns": { "type": "AccountPosition", "desc": "Full holder accounting position" },
+ "errors": ["INVALID_HOLDING_ADDRESS"]
+}
+```
diff --git a/docs/interfaces/account/update-payment-address.md b/docs/interfaces/account/update-payment-address.md
deleted file mode 100644
index 4176b224..00000000
--- a/docs/interfaces/account/update-payment-address.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Update Payment Address
-
-```json
-{
- "name": "account_update_payment_address",
- "desc": "Update Payment Address of an account",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "address",
- "name": "payment_address",
- "desc": "Account Payment Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the account update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by the Holding
-Address.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-does not exist.
diff --git a/docs/interfaces/contract/config.md b/docs/interfaces/contract/config.md
deleted file mode 100644
index 373ceb81..00000000
--- a/docs/interfaces/contract/config.md
+++ /dev/null
@@ -1,168 +0,0 @@
-# Asset Config
-
-```json
-{
- "name": "asset_config",
- "desc": "Configure the Debt Algorand Standard Application",
- "readonly": false,
- "args": [
- {
- "type": "uint64",
- "name": "denomination_asset_id",
- "desc": "Denomination asset identifier"
- },
- {
- "type": "uint64",
- "name": "settlement_asset_id",
- "desc": "Settlement asset identifier"
- },
- {
- "type": "uint64",
- "name": "principal",
- "desc": "Principal, expressed in denomination asset"
- },
- {
- "type": "uint16",
- "name": "principal_discount",
- "desc": "Discount on principal in bps"
- },
- {
- "type": "uint64",
- "name": "minimum_denomination",
- "desc": "Minimum denomination, expressed in denomination asset"
- },
- {
- "type": "uint8",
- "name": "day_count_convention_id",
- "desc": "Day-count convention for interests calculation"
- },
- {
- "type": "uint16",
- "name": "interest_rate",
- "desc": "Interest rates in bps"
- },
- {
- "type": "uint16[]",
- "name": "coupon_rates",
- "desc": "Coupon interest rates in bps"
- },
- {
- "type": "uint64[]",
- "name": "time_events",
- "desc": "Time events (strictly ascending order)"
- },
- {
- "type": "(uint64,uint64)[]",
- "name": "time_periods",
- "desc": "Time periods of recurring time events"
- }
- ],
- "returns": {
- "type": "void"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "ALREADY_CONFIGURED",
- "message": "D-ASA already configured"
- },
- {
- "code": "INVALID_DENOMINATION",
- "message": "Denomination asset is not properly set"
- },
- {
- "code": "INVALID_MINIMUM_DENOMINATION",
- "message": "Minimum denomination is not a divisor of principal"
- },
- {
- "code": "INVALID_DAY_COUNT_CONVENTION",
- "message": "Invalid day-count convention ID"
- },
- {
- "code": "INVALID_INTEREST_RATE",
- "message": "Interest rate is not properly defined"
- },
- {
- "code": "INVALID_TIME_EVENTS_LENGTH",
- "message": "Time events length is invalid"
- },
- {
- "code": "INVALID_TIME",
- "message": "Time events must be set in the future"
- },
- {
- "code": "INVALID_SORTING",
- "message": "Time events are not sorted correctly"
- },
- {
- "code": "INVALID_TIME_PERIOD_DURATION",
- "message": "Time period durations must be greater than zero"
- },
- {
- "code": "INVALID_SETTLEMENT_ASSET",
- "message": "Different settlement asset not supported, must be equal to denomination asset"
- },
- {
- "code": "INVALID_TIME_PERIODS",
- "message": "Time periods not properly set"
- },
- {
- "code": "INVALID_TIME_PERIOD_REPETITIONS",
- "message": "Time period repetitions not properly set"
- },
- {
- "code": "INVALID_COUPON_RATES",
- "message": "Coupon rates not properly set"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `ALREADY_CONFIGURED` error code if the D-ASA has
-been already configured.
-
-The call **MUST** fail with the `INVALID_DENOMINATION` error code if the *denomination
-asset* is not properly set for the specific implementation.
-
-The call **MUST** fail with the `INVALID_MINIMUM_DENOMINATION` error code if the
-*minimum denomination* is not a divisor of the *principal*.
-
-The call **MUST** fail with the `INVALID_DAY_COUNT_CONVENTION` error code if the
-*day-count convention* ID is invalid.
-
-The call **MUST** fail with the `INVALID_INTEREST_RATE` error code if the *interest
-rate* is not properly set for the specific implementation.
-
-The call **MUST** fail with the `INVALID_TIME_EVENTS_LENGTH` error code if the length
-of the *time events* is not greater than or equal to:
-
-- *total coupons* + `3`, if the D-ASA **has not** a defined *maturity date*;
-- *total coupons* + `4`, if the D-ASA **has** a defined *maturity date*.
-
-The call **MUST** fail with the `INVALID_TIME` error code if the first *time event*
-is earlier than the latest timestamp (or block height).
-
-The call **MUST** fail with the `INVALID_SORTING` error code if the *time events*
-are not sorted in strictly ascending order.
-
-The call **MUST** fail with the `INVALID_TIME_PERIOD_DURATION` error code if the
-*time period durations* are not strictly greater than zero.
-
-The call **MAY** fail with the `INVALID_SETTLEMENT_ASSET` error code if a *settlement
-asset* different from the *denomination asset* is not supported by the specific
-implementation.
-
-The call **MAY** fail with the `INVALID_TIME_PERIODS` error code if the *time periods*
-are not properly set for the specific implementation.
-
-The call **MAY** fail with the `INVALID_TIME_PERIOD_REPETITIONS` error code if the
-*time period repetitions* are not properly set for the specific implementation.
-
-The call **MAY** fail with the `INVALID_COUPON_RATES` error code if the *coupon
-rates* are not properly set for the specific implementation.
diff --git a/docs/interfaces/contract/get-account-units-current-value.md b/docs/interfaces/contract/get-account-units-current-value.md
deleted file mode 100644
index 382104e1..00000000
--- a/docs/interfaces/contract/get-account-units-current-value.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Get Account Units Current Value
-
-```json
-{
- "name": "get_account_units_current_value",
- "desc": "Get account's current units value and accrued interest",
- "readonly": true,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Account's units for the current value calculation"
- }
- ],
- "returns": {
- "type": "(uint64,uint64,(uint64,uint64))",
- "desc": "Units current value in denomination asset, Accrued interest in denomination asset, (Day count factor numerator, Day count factor denominator)"
- },
- "errors": [
- {
- "code": "NO_PRIMARY_DISTRIBUTION",
- "message": "Primary distribution not yet executed"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid Holding Address"
- },
- {
- "code": "INVALID_UNITS",
- "message": "Invalid amount of units for the account"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment for the account"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `NO_PRIMARY_DISTRIBUTION` error code if the method
-is called before the *primary distribution opening date*.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Sender
-or Receiver Holding Address is invalid.
-
-The call **MUST** fail with the `INVALID_UNITS` error code if the *unit* value is
-greater than Account D-ASA units.
-
-If the D-ASA has coupons, the call **MUST** fail with the `PENDING_COUPON_PAYMENT`
-error code if there is an old due coupon still to be paid to any account.
-
-The *accrued interest* **MUST** `0` if the method is called before the *issuance
-date*.
-
-If the D-ASA has fixed coupons, the *accrued interest* **MUST** be `0` after all
-coupons are due.
-
-If the D-ASA has zero coupons, the *accrued interest* **MUST** be `0` after the
-*maturity date*.
diff --git a/docs/interfaces/contract/get-account-units-value.md b/docs/interfaces/contract/get-account-units-value.md
deleted file mode 100644
index d0764bdc..00000000
--- a/docs/interfaces/contract/get-account-units-value.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Get Account Units Value
-
-```json
-{
- "name": "get_account_units_value",
- "desc": "Get account's units nominal value",
- "readonly": true,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Account's units for the nominal value calculation"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Units nominal value in denomination asset"
- },
- "errors": [
- {
- "code": "NO_PRIMARY_DISTRIBUTION",
- "message": "Primary distribution not yet executed"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid Holding Address"
- },
- {
- "code": "INVALID_UNITS",
- "message": "Invalid amount of units for the account"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `NO_PRIMARY_DISTRIBUTION` error code if the method
-is called before the *primary distribution opening date*.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Sender
-or Receiver Holding Address is invalid.
-
-The call **MUST** fail with the `INVALID_UNITS` error code if the *unit* value is
-greater than Account D-ASA units.
diff --git a/docs/interfaces/contract/get-amortizing-rates.md b/docs/interfaces/contract/get-amortizing-rates.md
deleted file mode 100644
index fd3cf539..00000000
--- a/docs/interfaces/contract/get-amortizing-rates.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Amortizing Rates
-
-```json
-{
- "name": "get_amortizing_rates",
- "desc": "Get D-ASA principal amortizing rates",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "uint64[]",
- "desc": "Principal amortizing rates"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-asset-info.md b/docs/interfaces/contract/get-asset-info.md
deleted file mode 100644
index 9ec3b977..00000000
--- a/docs/interfaces/contract/get-asset-info.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Asset Info
-
-```json
-{
- "name": "get_asset_info",
- "desc": "Get D-ASA info",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64, uint64,uint64,uint64,bool,uint8)",
- "desc": "Denomination asset ID, Settlement asset ID, Outstanding principal, Unit nominal value, Day-count convention, Principal discount, Interest rate, Total supply, Circulating supply, Primary distribution opening date, Primary distribution closure date, Issuance date, Maturity date, Suspended, Performance"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-asset-metadata.md b/docs/interfaces/contract/get-asset-metadata.md
deleted file mode 100644
index 6c19a144..00000000
--- a/docs/interfaces/contract/get-asset-metadata.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Asset Metadata
-
-```json
-{
- "name": "get_asset_metadata",
- "desc": "Get D-ASA metadata",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- "desc": "Contract type, Calendar, Business day convention, End of month convention, Early repayment effect, Early repayment penalty type, Prospectus hash, Prospectus URL"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-coupon-rates.md b/docs/interfaces/contract/get-coupon-rates.md
deleted file mode 100644
index 4a11ccbb..00000000
--- a/docs/interfaces/contract/get-coupon-rates.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Coupon Rates
-
-```json
-{
- "name": "get_coupons_rates",
- "desc": "Get D-ASA coupon rates",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "uint16[]",
- "desc": "Coupon rates"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-coupon-status.md b/docs/interfaces/contract/get-coupon-status.md
deleted file mode 100644
index 674b31bc..00000000
--- a/docs/interfaces/contract/get-coupon-status.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Get Coupons Status
-
-```json
-{
- "name": "get_coupons_status",
- "desc": "Get D-ASA coupons status",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "(uint64,uint64,uint64,(uint64,uint64),bool)",
- "desc": "Total coupons, Due coupons, Next coupon due date, (Day count factor numerator, Day count factor denominator) , All coupons due paid"
- }
-}
-```
-
-The *next coupon due date* value **MUST** be `0` if all coupons are due.
-
-The *day count factor* values **MUST** `0` if the method is called before the *issuance
-date* or if all coupons are due.
diff --git a/docs/interfaces/contract/get-early-repayment-schedule.md b/docs/interfaces/contract/get-early-repayment-schedule.md
deleted file mode 100644
index c3be4aa1..00000000
--- a/docs/interfaces/contract/get-early-repayment-schedule.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Early Repayment Schedule
-
-```json
-{
- "name": "get_early_repayment_schedule",
- "desc": "Get early repayment schedule",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "uint64[]",
- "desc": "Early repayment schedule"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-payment-amount.md b/docs/interfaces/contract/get-payment-amount.md
deleted file mode 100644
index ee697263..00000000
--- a/docs/interfaces/contract/get-payment-amount.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Get Payment Amount
-
-```json
-{
- "name": "get_payment_amount",
- "desc": "Get the next payment amount",
- "readonly": true,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "desc": "Interest amount in denomination asset, Principal amount in denomination asset"
- },
- "errors": [
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid Holding Address"
- }
- ]
-}
-```
-
-The getter **MUST** return the next payment amount for the account or `0` if there
-is no payment to execute for the account.
-
-The getter **MUST** return the interest and the principal components separately.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with `4` coupons. The account already received `2` coupon payments.
-> The getter returns the interest amount of the 3rd coupon.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with `4` coupons and a principal amortizing schedule. The account
-> already received `2` coupon payments. The getter returns the interest amount of
-> the 3rd coupon and the amortized principal.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with `4` coupons and principal at maturity. The account already
-> received `4` coupon payments. The getter returns the amount of the principal repayment.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with zero coupons and principal at maturity. The principal
-> is not yet mature. The getter returns the amount of the principal repayment.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with perpetual coupons and no callable principal. The account
-> already received `N` coupon payments. The getter returns the interest amount of
-> the `N+1` coupon.
diff --git a/docs/interfaces/contract/get-secondary-market-schedule.md b/docs/interfaces/contract/get-secondary-market-schedule.md
deleted file mode 100644
index d65901d3..00000000
--- a/docs/interfaces/contract/get-secondary-market-schedule.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Secondary Market Schedule
-
-```json
-{
- "name": "get_secondary_market_schedule",
- "desc": "Get secondary market schedule",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "uint64[]",
- "desc": "Secondary market schedule"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-time-events.md b/docs/interfaces/contract/get-time-events.md
deleted file mode 100644
index 3bd0c204..00000000
--- a/docs/interfaces/contract/get-time-events.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Time Events
-
-```json
-{
- "name": "get_time_events",
- "desc": "Get D-ASA time events",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "uint64[]",
- "desc": "Time events"
- }
-}
-```
diff --git a/docs/interfaces/contract/get-time-periods.md b/docs/interfaces/contract/get-time-periods.md
deleted file mode 100644
index fc327414..00000000
--- a/docs/interfaces/contract/get-time-periods.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Get Time Periods
-
-```json
-{
- "name": "get_time_periods",
- "desc": "Get D-ASA time periods",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "(uint64,uint64)[]",
- "desc": "Time periods"
- }
-}
-```
diff --git a/docs/interfaces/contract/overview.md b/docs/interfaces/contract/overview.md
new file mode 100644
index 00000000..0793e404
--- /dev/null
+++ b/docs/interfaces/contract/overview.md
@@ -0,0 +1,182 @@
+# ACTUS Kernel Interface
+
+The ACTUS Kernel interface configures the normalized contract, stores the execution
+schedule, and advances non-cash lifecycle events.
+
+## `contract_create`
+
+```json
+{
+ "name": "contract_create",
+ "create": "require",
+ "readonly": false,
+ "args": [
+ { "name": "arranger", "type": "address" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of contract creation" },
+ "errors": []
+}
+```
+
+## `contract_config`
+
+```json
+{
+ "name": "contract_config",
+ "readonly": false,
+ "args": [
+ { "name": "terms", "type": "NormalizedActusTerms" },
+ { "name": "initial_state", "type": "InitialKernelState" },
+ { "name": "prospectus", "type": "Prospectus" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of contract configuration" },
+ "errors": [
+ "UNAUTHORIZED",
+ "ALREADY_CONFIGURED",
+ "INVALID_ACTUS_CONFIG",
+ "INVALID_DAY_COUNT_CONVENTION",
+ "INVALID_DENOMINATION",
+ "INVALID_SETTLEMENT_ASSET",
+ "INVALID_IED"
+ ]
+}
+```
+
+Only the Arranger may call this method.
+
+## `contract_schedule`
+
+```json
+{
+ "name": "contract_schedule",
+ "readonly": false,
+ "args": [
+ { "name": "schedule_page_index", "type": "uint64" },
+ { "name": "is_last_page", "type": "bool" },
+ { "name": "schedule_page", "type": "ExecutionSchedulePage" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the schedule upload" },
+ "errors": [
+ "UNAUTHORIZED",
+ "ALREADY_CONFIGURED",
+ "TERMS_NOT_CONFIGURED",
+ "INVALID_SCHEDULE_PAGE",
+ "INVALID_EVENT_ID",
+ "INVALID_ACTUS_CONFIG",
+ "INVALID_SORTING"
+ ]
+}
+```
+
+Only the Arranger may call this method.
+
+## `contract_execute_ied`
+
+```json
+{
+ "name": "contract_execute_ied",
+ "readonly": false,
+ "args": [],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the IED execution" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "UNAUTHORIZED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "INVALID_EVENT_CURSOR",
+ "INVALID_EVENT_TYPE",
+ "NO_DUE_CASHFLOW",
+ "INVALID_ACTUS_CONFIG",
+ "PRIMARY_DISTRIBUTION_INCOMPLETE"
+ ]
+}
+```
+
+Only the Arranger may call this method.
+
+## `apply_non_cash_event`
+
+```json
+{
+ "name": "apply_non_cash_event",
+ "readonly": false,
+ "args": [
+ { "name": "event_id", "type": "uint64" },
+ { "name": "payload", "type": "ObservedEventRequest" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the event application" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "OBSERVED_EVENT_REQUIRED",
+ "UNAUTHORIZED",
+ "INVALID_EVENT_ID",
+ "INVALID_EVENT_CURSOR",
+ "INVALID_EVENT_TYPE",
+ "INVALID_SCHEDULE_PAGE",
+ "INVALID_ACTUS_CONFIG",
+ "INVALID_SORTING",
+ "NO_DUE_CASHFLOW",
+ "PENDING_IED"
+ ]
+}
+```
+
+`RR` and `RRF` execution is Observer-controlled. Other non-cash events are Arranger-controlled.
+
+## `append_observed_cash_event`
+
+```json
+{
+ "name": "append_observed_cash_event",
+ "readonly": false,
+ "args": [
+ { "name": "payload", "type": "ObservedCashEventRequest" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the append operation" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "UNAUTHORIZED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "PENDING_IED",
+ "OBSERVED_EVENT_REQUIRED",
+ "INVALID_EVENT_ID",
+ "INVALID_EVENT_TYPE",
+ "INVALID_SCHEDULE_PAGE",
+ "INVALID_ACTUS_CONFIG",
+ "INVALID_SORTING"
+ ]
+}
+```
+
+## `contract_get_state`
+
+```json
+{
+ "name": "contract_get_state",
+ "readonly": true,
+ "args": [],
+ "returns": { "type": "KernelState", "desc": "Current kernel state snapshot" },
+ "errors": ["NOT_CONFIGURED"]
+}
+```
+
+`KernelState` does not include the separate RBAC-managed `defaulted` performance
+flag. Clients that need that value must read the dedicated global-state key.
+
+## `contract_get_next_due_event`
+
+```json
+{
+ "name": "contract_get_next_due_event",
+ "readonly": true,
+ "args": [],
+ "returns": {
+ "type": "ExecutionScheduleEntry",
+ "desc": "Next due schedule entry, or a zero sentinel if the contract ended"
+ },
+ "errors": ["NOT_CONFIGURED"]
+}
+```
diff --git a/docs/interfaces/contract/primary-distribution.md b/docs/interfaces/contract/primary-distribution.md
deleted file mode 100644
index c4181a60..00000000
--- a/docs/interfaces/contract/primary-distribution.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# Primary Distribution
-
-```json
-{
- "name": "primary_distribution",
- "desc": "Distribute D-ASA units to accounts according the primary market",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Amount of D-ASA units to distribute"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Remaining D-ASA units to be distributed"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- },
- {
- "code": "ZERO_UNITS",
- "message": "Cannot distribute zero units"
- },
- {
- "code": "OVER_DISTRIBUTION",
- "message": "Insufficient remaining D-ASA units"
- },
- {
- "code": "PRIMARY_DISTRIBUTION_CLOSED",
- "message": "Primary distribution is closed"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by the authorized
-primary market entity.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-associated with the holding address does not exist.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `ZERO_UNITS` error code if the distributing units
-are null.
-
-The call **MUST** fail with the `OVER_DISTRIBUTION` error code if there are no sufficient
-remaining D-ASA units for the primary distribution.
-
-The call **MUST** fail with the `PRIMARY_DISTRIBUTION_CLOSED` error code if the
-*primary distribution* is closed.
diff --git a/docs/interfaces/contract/set-amortizing-rates.md b/docs/interfaces/contract/set-amortizing-rates.md
deleted file mode 100644
index 82b1fda3..00000000
--- a/docs/interfaces/contract/set-amortizing-rates.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Set Amortizing Rates
-
-```json
-{
- "name": "set_amortizing_rates",
- "desc": "Set principal amortizing rates",
- "readonly": false,
- "args": [
- {
- "type": "uint16[]",
- "name": "amortizing_rates",
- "desc": "Principal amortizing rates in bps"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set rates"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_AMORTIZING_RATES_LENGTH",
- "message": "Amortizing rates length is invalid"
- },
- {
- "code": "INVALID_RATES",
- "message": "Sum of amortizing rates must be equal to 10000 bps"
- },
- {
- "code": "INVALID_PAST_RATE",
- "message": "Past amortizing rates can not be modified"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_AMORTIZING_RATES_LENGTH` error code if
-the length of the *amortizing rates* is not equal to *total\_coupons* plus `1`.
-
-The call **MUST** fail with the `INVALID_RATES` error code if the sum of *amortizing
-rates* is not equal to 10,000 bps.
-
-The call **MUST** fail with the `INVALID_PAST_RATE` error code if a past amortizing
-rate is modified.
diff --git a/docs/interfaces/contract/set-default-status.md b/docs/interfaces/contract/set-default-status.md
deleted file mode 100644
index 9ac908f0..00000000
--- a/docs/interfaces/contract/set-default-status.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Set Default Status
-
-```json
-{
- "name": "set_default_status",
- "desc": "Set D-ASA default status",
- "readonly": false,
- "args": [
- {
- "type": "bool",
- "name": "defaulted",
- "desc": "Default status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set status"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
diff --git a/docs/interfaces/contract/set-early-repayment-option.md b/docs/interfaces/contract/set-early-repayment-option.md
deleted file mode 100644
index f7b852b2..00000000
--- a/docs/interfaces/contract/set-early-repayment-option.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Set Early Repayment Option
-
-```json
-{
- "name": "set_early_repayment_option",
- "desc": "Set early repayment schedule and eventual penalty rate",
- "readonly": false,
- "args": [
- {
- "type": "uint64[]",
- "name": "time_events",
- "desc": "Early repayment time events (strictly ascending order)"
- },
- {
- "type": "uint64",
- "name": "penalty_rate",
- "desc": "Early repayment penalty rate (absolute or relative), if any"
- }
- ],
- "returns": {
- "type": "(uint64, uint64)",
- "desc": "Early repayments start date, Early repayments end date"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_TIME_EVENTS_LENGTH",
- "message": "Time events length is invalid"
- },
- {
- "code": "INVALID_SORTING",
- "message": "Time events are not sorted correctly"
- },
- {
- "code": "INVALID_EARLY_REPAYMENT_START_DATE",
- "message": "Invalid early repayment start date"
- },
- {
- "code": "INVALID_EARLY_REPAYMENT_END_DATE",
- "message": "Invalid early repayment end date"
- },
- {
- "code": "INVALID_PAST_EVENT",
- "message": "Past time events can not be modified"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_TIME_EVENTS_LENGTH` error code if the length
-of the *time events* is not greater than or equal to `2`.
-
-The call **MUST** fail with the `INVALID_SORTING` error code if the *time events*
-are not sorted in strictly ascending order.
-
-The call **MUST** fail with the `INVALID_EARLY_REPAYMENT_START_DATE` error code
-if the *early repayment start date* is earlier than the *issuance date*.
-
-The call **MUST** fail with the `INVALID_EARLY_REPAYMENT_END_DATE` error code if
-the *early repayment end date* is later than the *maturity date*.
-
-The call **MUST** fail with the `INVALID_PAST_EVENT` error code if a past event
-is modified.
diff --git a/docs/interfaces/contract/set-metadata.md b/docs/interfaces/contract/set-metadata.md
deleted file mode 100644
index 0bc74f8e..00000000
--- a/docs/interfaces/contract/set-metadata.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Set Asset Metadata
-
-```json
-{
- "name": "set_metadata",
- "desc": "Set D-ASA metadata",
- "readonly": false,
- "args": [
- {
- "type": "uint8",
- "name": "contract_type",
- "desc": "Contract type"
- },
- {
- "type": "uint8",
- "name": "calendar",
- "desc": "Calendar [default 0]"
- },
- {
- "type": "uint8",
- "name": "business_day_convention",
- "desc": "Business day convention [default 0]"
- },
- {
- "type": "uint8",
- "name": "end_of_month_convention",
- "desc": "End of month convention [default 0]"
- },
- {
- "type": "uint8",
- "name": "prepayment_effect",
- "desc": "Early repayment effect [default 0]"
- },
- {
- "type": "uint8",
- "name": "penalty_type",
- "desc": "Early repayment penalty type [default 0]"
- },
- {
- "type": "byte[32]",
- "name": "prospectus_hash",
- "desc": "Prospectus hash"
- },
- {
- "type": "string",
- "name": "prospectus_url",
- "desc": "Prospectus URL"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set metadata"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Asset operations are suspended"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
diff --git a/docs/interfaces/contract/set-secondary-time-events.md b/docs/interfaces/contract/set-secondary-time-events.md
deleted file mode 100644
index 9a702827..00000000
--- a/docs/interfaces/contract/set-secondary-time-events.md
+++ /dev/null
@@ -1,78 +0,0 @@
-# Set Secondary Time Events
-
-```json
-{
- "name": "set_secondary_time_events",
- "desc": "Set secondary market time schedule",
- "readonly": false,
- "args": [
- {
- "type": "uint64[]",
- "name": "secondary_market_time_events",
- "desc": "Secondary market time events (strictly ascending order)"
- }
- ],
- "returns": {
- "type": "(uint64, uint64)",
- "desc": "Secondary market opening date, Secondary market closure date"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_TIME_EVENTS_LENGTH",
- "message": "Time events length is invalid"
- },
- {
- "code": "INVALID_SORTING",
- "message": "Time events are not sorted correctly"
- },
- {
- "code": "INVALID_SECONDARY_OPENING_DATE",
- "message": "Invalid secondary market opening date"
- },
- {
- "code": "INVALID_SECONDARY_CLOSURE_DATE",
- "message": "Invalid secondary market closure date"
- },
- {
- "code": "INVALID_PAST_EVENT",
- "message": "Past time events can not be modified"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_TIME_EVENTS_LENGTH` error code if the length
-of the *time events* is not greater than or equal to `1`.
-
-The call **MUST** fail with the `INVALID_SORTING` error code if the *time events*
-are not sorted in strictly ascending order.
-
-The call **MUST** fail with the `INVALID_SECONDARY_OPENING_DATE` error code if the
-*secondary market opening date* is earlier than the *issuance date*.
-
-The call **MUST** fail with the `INVALID_SECONDARY_CLOSURE_DATE` error code if the
-*secondary market closure date* is earlier than the *secondary market opening date*
-or later than the *maturity date*.
-
-The call **MUST** fail with the `INVALID_PAST_EVENT` error code if a past event
-is modified.
diff --git a/docs/interfaces/contract/set-variable-interest-rate.md b/docs/interfaces/contract/set-variable-interest-rate.md
deleted file mode 100644
index 6fea582d..00000000
--- a/docs/interfaces/contract/set-variable-interest-rate.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Set Variable Rate
-
-```json
-{
- "name": "set_variable_interest_rate",
- "desc": "Set D-ASA variable interest rate",
- "readonly": false,
- "args": [
- {
- "type": "uint16",
- "name": "spread",
- "desc": "Spread in bps"
- },
- {
- "type": "uint16",
- "name": "life_cap",
- "desc": "Rate life cap in bps"
- },
- {
- "type": "uint16",
- "name": "life_floor",
- "desc": "Rate life floor in bps"
- },
- {
- "type": "uint16",
- "name": "period_cap",
- "desc": "Rate period cap in bps"
- },
- {
- "type": "uint16",
- "name": "period_floor",
- "desc": "Rate period floor in bps"
- },
- {
- "type": "uint64",
- "name": "fixing_period",
- "desc": "Rate fixing period (UNIX time)"
- }
- ],
- "returns": {
- "type": "void"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Asset operations are suspended"
- }
- ]
-}
-```
-
-TODO: Add specs
diff --git a/docs/interfaces/contract/update-coupon-rates.md b/docs/interfaces/contract/update-coupon-rates.md
deleted file mode 100644
index 539b526c..00000000
--- a/docs/interfaces/contract/update-coupon-rates.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Update Coupon Rates
-
-```json
-{
- "name": "update_coupon_rates",
- "desc": "Update variable coupon interest rates in bps",
- "readonly": false,
- "args": [
- {
- "type": "uint16[]",
- "name": "coupon_rates",
- "desc": "Coupon interest rates in bps"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Asset operations are suspended"
- },
- {
- "code": "INVALID_COUPON_RATES_LENGTH",
- "message": "Coupon rates length is not equal to total coupons"
- },
- {
- "code": "INVALID_PAST_RATE",
- "message": "Due coupon rates can not be modified"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
-
-The call **MUST** fail with the `INVALID_COUPON_RATES_LENGTH` error code if the
-length of the *coupon rates* is not equal to *total_coupons*.
-
-The call **MUST** fail with the `INVALID_PAST_RATE` error code if a due coupon rate
-is modified.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
diff --git a/docs/interfaces/contract/update-global-unit-value.md b/docs/interfaces/contract/update-global-unit-value.md
deleted file mode 100644
index b2dbab08..00000000
--- a/docs/interfaces/contract/update-global-unit-value.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Update Global Unit Value
-
-```json
-{
- "name": "update_global_unit_value",
- "desc": "Update D-ASA nominal unit value globally",
- "readonly": false,
- "args": [
- {
- "type": "uint64",
- "name": "unit_value",
- "desc": "D-ASA nominal unit value, expressed in denomination asset"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Asset operations are suspended"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
diff --git a/docs/interfaces/contract/update-interest-rate.md b/docs/interfaces/contract/update-interest-rate.md
deleted file mode 100644
index 95bdf90b..00000000
--- a/docs/interfaces/contract/update-interest-rate.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Update Interest Rate
-
-```json
-{
- "name": "update_interest_rate",
- "desc": "Update variable interest rates in bps",
- "readonly": false,
- "args": [
- {
- "type": "uint16",
- "name": "interest_rate",
- "desc": "Interest rate in bps"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Asset operations are suspended"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
diff --git a/docs/interfaces/contract/update-time-events.md b/docs/interfaces/contract/update-time-events.md
deleted file mode 100644
index 940fc1c6..00000000
--- a/docs/interfaces/contract/update-time-events.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Update Time Events
-
-```json
-{
- "name": "update_time_events",
- "desc": "Update D-ASA variable time schedule",
- "readonly": false,
- "args": [
- {
- "type": "uint64[]",
- "name": "time_events",
- "desc": "D-ASA time events (strictly ascending order)"
- }
- ],
- "returns": {
- "type": "(uint64, uint64, uint64, uint64, uint64)",
- "desc": "Primary distribution opening date, Primary distribution closure date, Issuance date, Maturity date, Timestamp of the update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_TIME_EVENTS_LENGTH",
- "message": "Time events length is invalid"
- },
- {
- "code": "INVALID_TIME",
- "message": "Time events must be set in the future"
- },
- {
- "code": "INVALID_SORTING",
- "message": "Time events are not sorted correctly"
- },
- {
- "code": "INVALID_PAST_EVENT",
- "message": "Past time events can not be modified"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
-
-The call **MUST** fail with the `INVALID_TIME_EVENTS_LENGTH` error code if the length
-of the *time events* is not equal to *total\_coupons* plus `4`.
-
-The call **MUST** fail with the `INVALID_TIME` error code if the first *time event*
-is earlier than the latest timestamp (or block height).
-
-The call **MUST** fail with the `INVALID_SORTING` error code if the *time events*
-are not sorted in strictly ascending order.
-
-The call **MUST** fail with the `INVALID_PAST_EVENT` error code if a past event
-is modified.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
diff --git a/docs/interfaces/contract/update-time-periods.md b/docs/interfaces/contract/update-time-periods.md
deleted file mode 100644
index b0cb2160..00000000
--- a/docs/interfaces/contract/update-time-periods.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Update Time Periods
-
-```json
-{
- "name": "update_time_periods",
- "desc": "Update D-ASA variable time periods",
- "readonly": false,
- "args": [
- {
- "type": "(uint64,uint64)[]",
- "name": "time_periods",
- "desc": "D-ASA time periods"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_TIME_PERIOD",
- "message": "Time period durations must be greater than zero"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
-
-The call **MUST** fail with the `INVALID_TIME_PERIOD` error code if the *time period
-durations* are not strictly greater than zero.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
diff --git a/docs/interfaces/contract/update-total-units.md b/docs/interfaces/contract/update-total-units.md
deleted file mode 100644
index 693b0e7a..00000000
--- a/docs/interfaces/contract/update-total-units.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Update Total Units
-
-```json
-{
- "name": "update_total_units",
- "desc": "Update D-ASA total_units",
- "readonly": false,
- "args": [
- {
- "type": "uint64",
- "name": "total_units",
- "desc": "D-ASA total units"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the update"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Asset operations are suspended"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MAY** fail with the `SUSPENDED` error code if the asset is suspended.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
diff --git a/docs/interfaces/overview.md b/docs/interfaces/overview.md
new file mode 100644
index 00000000..d93dc810
--- /dev/null
+++ b/docs/interfaces/overview.md
@@ -0,0 +1,4 @@
+# Interfaces
+
+The interface section documents the public ARC-4 ABI grouped by architecture layer,
+plus the ABI structs used by those methods.
diff --git a/docs/interfaces/payment-agent/early-repayment.md b/docs/interfaces/payment-agent/early-repayment.md
deleted file mode 100644
index 2ac8e350..00000000
--- a/docs/interfaces/payment-agent/early-repayment.md
+++ /dev/null
@@ -1,100 +0,0 @@
-# Early Repayment
-
-```json
-{
- "name": "early_repayment",
- "desc": "Pay the principal to an account before maturity",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Amount of D-ASA units to repay"
- },
- {
- "type": "byte[]",
- "name": "payment_info",
- "desc": "Additional payment information (Optional)"
- }
- ],
- "returns": {
- "type": "(uint64, uint64, byte[])",
- "desc": "Paid principal amount in denomination asset, Payment timestamp, Payment information"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- },
- {
- "code": "NO_UNITS",
- "message": "No D-ASA units"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment for the account"
- },
- {
- "code": "ZERO_UNITS",
- "message": "Can not repay zero units"
- },
- {
- "code": "OVER_REPAYMENT",
- "message": "Insufficient units to repay for the account"
- },
- {
- "code": "ALREADY_MATURE",
- "message": "Already mature"
- }
- ]
-}
-```
-
-The call **MUST** remove D-ASA early rapid units from the Account Holding Address
-and from circulation.
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `SUSPENDED` error code if the asset operations or
-any account involved in the transfers are suspended.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Sender
-or Receiver Holding Address is invalid.
-
-The call **MUST** fail with the `NO_UNITS` error code if the Account has no D-ASA
-units.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-a due coupon still to be paid for the Account.
-
-The call **MUST** fail with the `ZERO_UNITS` error code if the distributing units
-are null.
-
-The call **MUST** fail with the `OVER_REPAYMENT` error code if there are no sufficient
-remaining D-ASA units to repay.
-
-The call **MUST** fail with the `ALREADY_MATURE` error code if the principal is
-mature.
-
-If the D-ASA has on-chain payment agent, the call **MUST** fail with the `NOT_ENOUGH_FUNDS`
-error code if funds are not enough for the payment.
diff --git a/docs/interfaces/payment-agent/overview.md b/docs/interfaces/payment-agent/overview.md
new file mode 100644
index 00000000..fb910485
--- /dev/null
+++ b/docs/interfaces/payment-agent/overview.md
@@ -0,0 +1,54 @@
+# Payment Agent Interface
+
+The Payment Agent interface funds due ACTUS cash events and allows holder claims.
+
+## `fund_due_cashflows`
+
+```json
+{
+ "name": "fund_due_cashflows",
+ "readonly": false,
+ "args": [
+ { "name": "max_event_count", "type": "uint64" }
+ ],
+ "returns": { "type": "CashFundingResult", "desc": "Funding result for the processed events" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "UNAUTHORIZED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "PENDING_IED",
+ "NO_DUE_CASHFLOW",
+ "NOT_ENOUGH_FUNDS"
+ ]
+}
+```
+
+Only the Arranger may call this method.
+
+## `claim_due_cashflows`
+
+```json
+{
+ "name": "claim_due_cashflows",
+ "readonly": false,
+ "args": [
+ { "name": "holding_address", "type": "address" },
+ { "name": "payment_info", "type": "byte[]" }
+ ],
+ "returns": { "type": "CashClaimResult", "desc": "Holder claim result" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "INVALID_HOLDING_ADDRESS",
+ "UNAUTHORIZED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "PENDING_IED",
+ "NO_DUE_CASHFLOW",
+ "NOT_ENOUGH_FUNDS"
+ ]
+}
+```
+
+If the holder's payment path is not executable, the method reports the claimable
+amounts without clearing them.
diff --git a/docs/interfaces/payment-agent/pay-coupon.md b/docs/interfaces/payment-agent/pay-coupon.md
deleted file mode 100644
index 3ddcb893..00000000
--- a/docs/interfaces/payment-agent/pay-coupon.md
+++ /dev/null
@@ -1,92 +0,0 @@
-# Pay Coupon
-
-```json
-{
- "name": "pay_coupon",
- "desc": "Pay due coupon to an account",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "byte[]",
- "name": "payment_info",
- "desc": "Additional payment information (Optional)"
- }
- ],
- "events": [
- {
- "type_name": "IP"
- }
- ],
- "returns": {
- "type": "(uint64, uint64, byte[])",
- "desc": "Paid coupon amount in denomination asset, Payment timestamp, Payment context"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- },
- {
- "code": "NO_UNITS",
- "message": "No D-ASA units"
- },
- {
- "code": "NO_DUE_COUPON",
- "message": "No due coupon to pay"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- },
- {
- "code": "NOT_ENOUGH_FUNDS",
- "message": "Not enough funds for the payment"
- }
- ]
-}
-```
-
-> A reference implementation **SHOULD NOT** require an authorized caller.
-
-If the D-ASA has an amortizing principal payment schedule, the call **MUST** update
-the Account's *unit value*.
-
-If the call requires authorization, it **MUST** fail with the `UNAUTHORIZED` error
-code if not called by an authorized caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-does not exist.
-
-The call **MUST** fail with the `NO_UNITS` error code if the Account has no D-ASA
-units.
-
-The call **MUST** fail with the `NO_DUE_COUPON` error code if there is no due
-coupon left to pay for the Account.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-an old due coupon still to be paid to any account.
-
-If the D-ASA has on-chain payment agent, the call **MUST** fail with the `NOT_ENOUGH_FUNDS`
-error code if funds are not enough for the payment.
diff --git a/docs/interfaces/payment-agent/pay-principal.md b/docs/interfaces/payment-agent/pay-principal.md
deleted file mode 100644
index d9c04e52..00000000
--- a/docs/interfaces/payment-agent/pay-principal.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# Pay Principal
-
-```json
-{
- "name": "pay_principal",
- "desc": "Pay the outstanding principal to an account",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "byte[]",
- "name": "payment_info",
- "desc": "Additional payment information (Optional)"
- }
- ],
- "events": [
- {
- "type_name": "PR"
- }
- ],
- "returns": {
- "type": "(uint64, uint64, byte[])",
- "desc": "Paid principal amount in denomination asset, Payment timestamp, Payment context"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- },
- {
- "code": "NO_UNITS",
- "message": "No D-ASA units"
- },
- {
- "code": "NOT_MATURE",
- "message": "Not mature"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-> A reference implementation **SHOULD NOT** require an authorized caller.
-
-The call **MUST** remove D-ASA units from the Account Holding Address and from
-circulation.
-
-If the call requires authorization, it **MUST** fail with the `UNAUTHORIZED` error
-code if not called by an authorized caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `SUSPENDED` error code if the asset operations are
-suspended.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Account
-does not exist.
-
-The call **MUST** fail with the `NO_UNITS` error code if the Account has no D-ASA
-units.
-
-The call **MUST** fail with the `NOT_MATURE` error code if the principal is not
-mature.
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-any due coupon still to be paid.
-
-If the D-ASA has on-chain payment agent, the call **MUST** fail with the `NOT_ENOUGH_FUNDS`
-error code if funds are not enough for the payment.
diff --git a/docs/interfaces/rbac/assign-role.md b/docs/interfaces/rbac/assign-role.md
deleted file mode 100644
index 646d508e..00000000
--- a/docs/interfaces/rbac/assign-role.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# RBAC Assign Role
-
-```json
-{
- "name": "rbac_assign_role",
- "desc": "Assign a role to an address",
- "readonly": false,
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- },
- {
- "type": "byte[]",
- "name": "config",
- "desc": "Role configuration (Optional)"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "INVALID_ROLE",
- "message": "Invalid role identifier"
- },
- {
- "code": "INVALID_ROLE_ADDRESS",
- "message": "Invalid account role address"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an
-authorized.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `INVALID_ROLE` error code if the *role identifier*
-is invalid.
-
-The call **MUST** fail with the `INVALID_ROLE_ADDRESS` error code if the *role
-address* has been already assigned to the *role*.
diff --git a/docs/interfaces/rbac/get-arranger.md b/docs/interfaces/rbac/get-arranger.md
deleted file mode 100644
index 8d49bff0..00000000
--- a/docs/interfaces/rbac/get-arranger.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# RBAC Get Arranger
-
-```json
-{
- "name": "rbac_get_arranger",
- "desc": "Get Arranger address",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "address",
- "desc": "Arranger address"
- },
- "errors": []
-}
-```
diff --git a/docs/interfaces/rbac/get-role-config.md b/docs/interfaces/rbac/get-role-config.md
deleted file mode 100644
index 0ceeef6d..00000000
--- a/docs/interfaces/rbac/get-role-config.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# RBAC Get Role Config
-
-```json
-{
- "name": "rbac_get_role_config",
- "desc": "Get role configuration",
- "readonly": true,
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- }
- ],
- "returns": {
- "type": "byte[]",
- "desc": "Role configuration"
- },
- "errors": [
- {
- "code": "INVALID_ROLE",
- "message": "Invalid role identifier"
- },
- {
- "code": "INVALID_ROLE_ADDRESS",
- "message": "Invalid account role address"
- }
- ]
-}
-```
diff --git a/docs/interfaces/rbac/get-roles.md b/docs/interfaces/rbac/get-roles.md
deleted file mode 100644
index f4f55273..00000000
--- a/docs/interfaces/rbac/get-roles.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# RBAC Get Roles
-
-```json
-{
- "name": "rbac_get_roles",
- "desc": "Get role identifiers",
- "readonly": true,
- "args": [],
- "returns": {
- "type": "uint8[]",
- "desc": "Role identifiers"
- }
-}
-```
diff --git a/docs/interfaces/rbac/gov-asset-suspension.md b/docs/interfaces/rbac/gov-asset-suspension.md
deleted file mode 100644
index 4abbaa57..00000000
--- a/docs/interfaces/rbac/gov-asset-suspension.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# RBAC Governance Asset Suspension
-
-```json
-{
- "name": "rbac_gov_asset_suspension",
- "desc": "Set asset suspension status",
- "readonly": false,
- "args": [
- {
- "type": "bool",
- "name": "suspended",
- "desc": "Suspension status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set asset suspension status"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
diff --git a/docs/interfaces/rbac/overview.md b/docs/interfaces/rbac/overview.md
new file mode 100644
index 00000000..b983a543
--- /dev/null
+++ b/docs/interfaces/rbac/overview.md
@@ -0,0 +1,158 @@
+# RBAC Interface
+
+The RBAC interface manages privileged roles, suspension state, contract default
+state, and application control.
+
+Only the Arranger may call RBAC methods, unless otherwise specified.
+
+## `contract_update`
+
+```json
+{
+ "name": "contract_update",
+ "readonly": false,
+ "args": [],
+ "returns": { "type": "void" },
+ "errors": ["UNAUTHORIZED"]
+}
+```
+
+## `rbac_rotate_arranger`
+
+```json
+{
+ "name": "rbac_rotate_arranger",
+ "readonly": false,
+ "args": [
+ { "name": "new_arranger", "type": "address" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the rotation" },
+ "errors": ["UNAUTHORIZED"]
+}
+```
+
+## `rbac_set_op_daemon`
+
+```json
+{
+ "name": "rbac_set_op_daemon",
+ "readonly": false,
+ "args": [
+ { "name": "address", "type": "address" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the assignment" },
+ "errors": ["UNAUTHORIZED"]
+}
+```
+
+This is a non-normative helper for payment automation.
+
+## `rbac_assign_role`
+
+```json
+{
+ "name": "rbac_assign_role",
+ "readonly": false,
+ "args": [
+ { "name": "role_id", "type": "uint8" },
+ { "name": "role_address", "type": "address" },
+ { "name": "validity", "type": "RoleValidity" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the assignment" },
+ "errors": ["UNAUTHORIZED", "DEFAULTED", "INVALID_ROLE", "INVALID_ROLE_ADDRESS"]
+}
+```
+
+## `rbac_revoke_role`
+
+```json
+{
+ "name": "rbac_revoke_role",
+ "readonly": false,
+ "args": [
+ { "name": "role_id", "type": "uint8" },
+ { "name": "role_address", "type": "address" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the revocation" },
+ "errors": ["UNAUTHORIZED", "DEFAULTED", "INVALID_ROLE", "INVALID_ROLE_ADDRESS"]
+}
+```
+
+## `rbac_contract_suspension`
+
+```json
+{
+ "name": "rbac_contract_suspension",
+ "readonly": false,
+ "args": [
+ { "name": "suspended", "type": "bool" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the suspension update" },
+ "errors": ["UNAUTHORIZED"]
+}
+```
+
+Only an active Authority may call this method.
+
+## `rbac_contract_default`
+
+```json
+{
+ "name": "rbac_contract_default",
+ "readonly": false,
+ "args": [
+ { "name": "defaulted", "type": "bool" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the default update" },
+ "errors": ["UNAUTHORIZED"]
+}
+```
+
+Only an active Trustee may call this method.
+
+It sets or clears the contract-level `defaulted` performance flag. This flag is
+distinct from the kernel lifecycle `status`.
+
+## `rbac_get_arranger`
+
+```json
+{
+ "name": "rbac_get_arranger",
+ "readonly": true,
+ "args": [],
+ "returns": { "type": "address", "desc": "Current arranger address" },
+ "errors": []
+}
+```
+
+## `rbac_get_address_roles`
+
+```json
+{
+ "name": "rbac_get_address_roles",
+ "readonly": true,
+ "args": [
+ { "name": "address", "type": "address" }
+ ],
+ "returns": {
+ "type": "(bool,bool,bool,bool,bool)",
+ "desc": "Account manager, primary dealer, trustee, authority, observer"
+ },
+ "errors": []
+}
+```
+
+## `rbac_get_role_validity`
+
+```json
+{
+ "name": "rbac_get_role_validity",
+ "readonly": true,
+ "args": [
+ { "name": "role_id", "type": "uint8" },
+ { "name": "role_address", "type": "address" }
+ ],
+ "returns": { "type": "RoleValidity", "desc": "Stored validity interval" },
+ "errors": ["INVALID_ROLE", "INVALID_ROLE_ADDRESS"]
+}
+```
diff --git a/docs/interfaces/rbac/revoke-role.md b/docs/interfaces/rbac/revoke-role.md
deleted file mode 100644
index db5cd107..00000000
--- a/docs/interfaces/rbac/revoke-role.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# RBAC Revoke Role
-
-```json
-{
- "name": "rbac_revoke_role",
- "desc": "Revoke a role from an address",
- "readonly": false,
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role revocation"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "INVALID_ROLE",
- "message": "Invalid role identifier"
- },
- {
- "code": "INVALID_ROLE_ADDRESS",
- "message": "Invalid account role address"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller or if the operation is not authorized.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `INVALID_ROLE` error code if the *role identifier*
-is invalid.
-
-The call **MUST** fail with the `INVALID_ROLE_ADDRESS` error code if the Account
-Role Address is invalid.
diff --git a/docs/interfaces/rbac/rotate-arranger.md b/docs/interfaces/rbac/rotate-arranger.md
deleted file mode 100644
index 82d5e44a..00000000
--- a/docs/interfaces/rbac/rotate-arranger.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# RBAC Rotate Arranger
-
-```json
-{
- "name": "rbac_rotate_arranger",
- "desc": "Rotate Arranger role to a new address",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "new_arranger",
- "desc": "New Arranger address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- }
- ]
-}
-```
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by the Arranger.
diff --git a/docs/interfaces/transfer-agent/asset-transfer.md b/docs/interfaces/transfer-agent/asset-transfer.md
deleted file mode 100644
index 878c0ed1..00000000
--- a/docs/interfaces/transfer-agent/asset-transfer.md
+++ /dev/null
@@ -1,105 +0,0 @@
-# Asset Transfer
-
-```json
-{
- "name": "asset_transfer",
- "desc": "Transfer D-ASA units between accounts",
- "readonly": false,
- "args": [
- {
- "type": "address",
- "name": "sender_holding_address",
- "desc": "Sender Account Holding Address"
- },
- {
- "type": "address",
- "name": "receiver_holding_address",
- "desc": "Receiver Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Amount of D-ASA units to transfer"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Transferred actualized value in denomination asset"
- },
- "errors": [
- {
- "code": "UNAUTHORIZED",
- "message": "Not authorized"
- },
- {
- "code": "DEFAULTED",
- "message": "Defaulted"
- },
- {
- "code": "SUSPENDED",
- "message": "Suspended operations"
- },
- {
- "code": "INVALID_HOLDING_ADDRESS",
- "message": "Invalid account holding address"
- },
- {
- "code": "SECONDARY_MARKET_CLOSED",
- "message": "Secondary market is closed"
- },
- {
- "code": "SELF_TRANSFER",
- "message": "Sender and receiver must be different"
- },
- {
- "code": "NULL_TRANSFER",
- "message": "Transfer units must be greater than zero"
- },
- {
- "code": "OVER_TRANSFER",
- "message": "Insufficient sender units to transfer"
- },
- {
- "code": "NON_FUNGIBLE_UNITS",
- "message": "Sender and receiver units are not fungible"
- },
- {
- "code": "PENDING_COUPON_PAYMENT",
- "message": "Pending due coupon payment"
- }
- ]
-}
-```
-
-The call **MUST** transfer D-ASA units from the Sender Account Holding Address (removing
-D-ASA units) to the Receiver Account Holding Address (adding D-ASA units).
-
-The call **MUST** fail with the `UNAUTHORIZED` error code if not called by an authorized
-caller.
-
-The call **MUST** fail with the `DEFAULTED` error code if the asset is defaulted.
-
-The call **MUST** fail with the `SUSPENDED` error code if the asset operations or
-any account involved in the transfers are suspended.
-
-The call **MUST** fail with the `INVALID_HOLDING_ADDRESS` error code if the Sender
-or Receiver Holding Address is invalid.
-
-The call **MUST** fail with the `SECONDARY_MARKET_CLOSED` error code if the secondary
-market is closed.
-
-The call **MUST** fail with the `SELF_TRANSFER` error code if the Sender and Receiver
-Holding Addresses are the same.
-
-The call **MUST** fail with the `NULL_TRANSFER` error code if the transfer units
-are zero.
-
-The call **MUST** fail with the `OVER_TRANSFER` error code if the Sender Account
-Holding Address has insufficient D-ASA units to transfer.
-
-The call **MUST** fail with the `NON_FUNGIBLE_UNITS` error code if the Sender and
-Receiver units are not fungible (e.g. different paid coupons, see D-ASA units fungibility
-section).
-
-The call **MUST** fail with the `PENDING_COUPON_PAYMENT` error code if there is
-a due coupon still to be paid to the Sender Holding Address.
diff --git a/docs/interfaces/transfer-agent/overview.md b/docs/interfaces/transfer-agent/overview.md
new file mode 100644
index 00000000..65eeaa06
--- /dev/null
+++ b/docs/interfaces/transfer-agent/overview.md
@@ -0,0 +1,75 @@
+# Transfer Agent Interface
+
+The Transfer Agent interface manages transfer windows, primary allocations, and
+secondary transfers.
+
+## `transfer_set_schedule`
+
+```json
+{
+ "name": "transfer_set_schedule",
+ "readonly": false,
+ "args": [
+ { "name": "open_date", "type": "uint64" },
+ { "name": "closure_date", "type": "uint64" }
+ ],
+ "returns": { "type": "uint64", "desc": "UNIX timestamp of the schedule update" },
+ "errors": ["UNAUTHORIZED", "INVALID_SORTING"]
+}
+```
+
+Only the Arranger may call this method.
+
+## `primary_distribution`
+
+```json
+{
+ "name": "primary_distribution",
+ "readonly": false,
+ "args": [
+ { "name": "holding_address", "type": "address" },
+ { "name": "units", "type": "uint64" }
+ ],
+ "returns": { "type": "uint64", "desc": "Remaining undistributed unit balance" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "UNAUTHORIZED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "PRIMARY_DISTRIBUTION_CLOSED",
+ "INVALID_HOLDING_ADDRESS",
+ "ZERO_UNITS",
+ "OVER_DISTRIBUTION"
+ ]
+}
+```
+
+## `transfer`
+
+```json
+{
+ "name": "transfer",
+ "readonly": false,
+ "args": [
+ { "name": "sender_holding_address", "type": "address" },
+ { "name": "receiver_holding_address", "type": "address" },
+ { "name": "units", "type": "uint64" }
+ ],
+ "returns": { "type": "uint64", "desc": "Number of units transferred" },
+ "errors": [
+ "NOT_CONFIGURED",
+ "DEFAULTED",
+ "SUSPENDED",
+ "PENDING_IED",
+ "CLOSED_TRANSFER",
+ "UNAUTHORIZED",
+ "INVALID_HOLDING_ADDRESS",
+ "SELF_TRANSFER",
+ "NULL_TRANSFER",
+ "OVER_TRANSFER",
+ "PENDING_ACTUS_EVENT"
+ ]
+}
+```
+
+The current implementation requires the sender holding address to submit the transaction.
diff --git a/docs/interfaces/types.md b/docs/interfaces/types.md
new file mode 100644
index 00000000..2b37a5bb
--- /dev/null
+++ b/docs/interfaces/types.md
@@ -0,0 +1,192 @@
+# ABI Types
+
+This section documents the canonical ARC-4 structs exposed by the D-ASA ABI.
+
+The types below refer to the on-chain ABI structs in `smart_contracts/abi_types.py`,
+not to the richer SDK-side normalization models in `src/models.py`.
+
+## `RoleValidity`
+
+Time-bounded role assignment.
+
+| Field | Type | Meaning |
+|:----------------------|:---------|:-------------------------------|
+| `role_validity_start` | `uint64` | Inclusive activation timestamp |
+| `role_validity_end` | `uint64` | Inclusive expiration timestamp |
+
+## `Prospectus`
+
+Informational contract metadata uploaded with `contract_config`.
+
+| Field | Type | Meaning |
+|:-------|:-----------|:-----------------------------|
+| `hash` | `byte[32]` | Prospectus digest |
+| `url` | `string` | Prospectus location or label |
+
+## `NormalizedActusTerms`
+
+Normalized ACTUS terms required by the AVM kernel.
+
+| Field | Type | Meaning |
+|:-------------------------------|:---------|:---------------------------------------------|
+| `contract_type` | `uint8` | ACTUS contract family id |
+| `denomination_asset_id` | `uint64` | Denomination asset id |
+| `settlement_asset_id` | `uint64` | Settlement asset id |
+| `total_units` | `uint64` | Total unit supply |
+| `notional_principal` | `uint64` | Notional principal in base units |
+| `initial_exchange_amount` | `uint64` | Initial exchange amount in base units |
+| `initial_exchange_date` | `uint64` | `IED` timestamp |
+| `maturity_date` | `uint64` | `MD` timestamp, or `0` if absent |
+| `day_count_convention` | `uint8` | Supported day-count identifier |
+| `rate_reset_spread` | `uint64` | Fixed-point spread |
+| `rate_reset_multiplier` | `uint64` | Fixed-point rate multiplier |
+| `rate_reset_floor` | `uint64` | Fixed-point floor |
+| `rate_reset_cap` | `uint64` | Fixed-point cap |
+| `rate_reset_next` | `uint64` | Prefixed next rate value |
+| `has_rate_reset_floor` | `bool` | Floor flag |
+| `has_rate_reset_cap` | `bool` | Cap flag |
+| `dynamic_principal_redemption` | `bool` | Dynamic annuity redemption flag |
+| `fixed_point_scale` | `uint64` | Fixed-point scale, currently `1_000_000_000` |
+
+SDK-only metadata such as `notional_unit_value` and secondary-market dates is not
+part of this ABI struct.
+
+## `InitialKernelState`
+
+Pre-`IED` state snapshot uploaded with `contract_config`.
+
+| Field | Type | Meaning |
+|:-----------------------------|:---------|:-------------------------------------------|
+| `status_date` | `uint64` | Reference timestamp for the uploaded state |
+| `event_cursor` | `uint64` | Starting global event cursor |
+| `outstanding_principal` | `uint64` | Outstanding principal in base units |
+| `interest_calculation_base` | `uint64` | Interest base in base units |
+| `nominal_interest_rate` | `uint64` | Current fixed-point nominal rate |
+| `accrued_interest` | `uint64` | Accrued interest in base units |
+| `next_principal_redemption` | `uint64` | Next redemption target |
+| `cumulative_interest_index` | `uint64` | Per-unit fixed-point interest index |
+| `cumulative_principal_index` | `uint64` | Per-unit fixed-point principal index |
+
+## `ExecutionScheduleEntry`
+
+One normalized ACTUS schedule entry.
+
+| Field | Type | Meaning |
+|:-----------------------------|:---------|:-----------------------------------|
+| `event_id` | `uint64` | Global contiguous event identifier |
+| `event_type` | `uint8` | ACTUS event id |
+| `scheduled_time` | `uint64` | Due timestamp |
+| `accrual_factor` | `uint64` | Fixed-point accrual factor |
+| `redemption_accrual_factor` | `uint64` | Fixed-point redemption factor |
+| `next_nominal_interest_rate` | `uint64` | Fixed-point next rate |
+| `next_principal_redemption` | `uint64` | Next redemption state value |
+| `next_outstanding_principal` | `uint64` | Next outstanding principal |
+| `flags` | `uint64` | Entry flags |
+
+## `ExecutionSchedulePage`
+
+Alias for:
+
+```text
+ExecutionScheduleEntry[]
+```
+
+The current kernel accepts at most `16` entries per page.
+
+## `ObservedEventRequest`
+
+Observed non-cash event payload used by `apply_non_cash_event`.
+
+| Field | Type | Meaning |
+|:-----------------------------|:---------|:---------------------------------|
+| `event_id` | `uint64` | Expected event id when appending |
+| `event_type` | `uint8` | ACTUS event id |
+| `scheduled_time` | `uint64` | Event timestamp |
+| `accrual_factor` | `uint64` | Fixed-point accrual factor |
+| `redemption_accrual_factor` | `uint64` | Fixed-point redemption factor |
+| `observed_rate` | `uint64` | Observed fixed-point rate input |
+| `next_nominal_interest_rate` | `uint64` | Fixed-point next rate |
+| `next_principal_redemption` | `uint64` | Next redemption state value |
+| `next_outstanding_principal` | `uint64` | Next outstanding principal |
+| `flags` | `uint64` | Observed-event flags |
+
+## `ObservedCashEventRequest`
+
+Observed cash event payload used by `append_observed_cash_event`.
+
+| Field | Type | Meaning |
+|:-----------------------------|:---------|:---------------------------------|
+| `event_id` | `uint64` | Expected event id when appending |
+| `event_type` | `uint8` | ACTUS cash event id |
+| `scheduled_time` | `uint64` | Event timestamp |
+| `accrual_factor` | `uint64` | Fixed-point accrual factor |
+| `redemption_accrual_factor` | `uint64` | Fixed-point redemption factor |
+| `next_nominal_interest_rate` | `uint64` | Fixed-point next rate |
+| `next_principal_redemption` | `uint64` | Next redemption state value |
+| `next_outstanding_principal` | `uint64` | Next outstanding principal |
+| `flags` | `uint64` | Observed cash-event flags |
+
+## `KernelState`
+
+Readonly snapshot returned by `contract_get_state`.
+
+| Field | Type | Meaning |
+|:-----------------------------|:---------|:---------------------------------|
+| `contract_type` | `uint8` | ACTUS contract family id |
+| `status` | `uint64` | Kernel lifecycle status |
+| `total_units` | `uint64` | Total unit supply |
+| `reserved_units_total` | `uint64` | Units reserved pre-`IED` |
+| `initial_exchange_amount` | `uint64` | Initial exchange amount |
+| `event_cursor` | `uint64` | Current global event cursor |
+| `schedule_entry_count` | `uint64` | Total uploaded schedule entries |
+| `outstanding_principal` | `uint64` | Outstanding principal |
+| `interest_calculation_base` | `uint64` | Current interest base |
+| `nominal_interest_rate` | `uint64` | Current fixed-point nominal rate |
+| `accrued_interest` | `uint64` | Current accrued interest |
+| `cumulative_interest_index` | `uint64` | Global per-unit interest index |
+| `cumulative_principal_index` | `uint64` | Global per-unit principal index |
+| `reserved_interest` | `uint64` | Reserved interest balance |
+| `reserved_principal` | `uint64` | Reserved principal balance |
+
+The contract-level `defaulted` performance flag is stored separately in RBAC-managed
+global state and is not part of `KernelState`.
+
+## `AccountPosition`
+
+Accounting position returned by `account_get_position`.
+
+| Field | Type | Meaning |
+|:-----------------------|:----------|:-----------------------------------|
+| `payment_address` | `address` | Cashflow destination |
+| `units` | `uint64` | Active units |
+| `reserved_units` | `uint64` | Pre-`IED` reserved units |
+| `suspended` | `bool` | Account suspension flag |
+| `settled_cursor` | `uint64` | Last settled global cursor |
+| `interest_checkpoint` | `uint64` | Applied interest index checkpoint |
+| `principal_checkpoint` | `uint64` | Applied principal index checkpoint |
+| `claimable_interest` | `uint64` | Claimable interest amount |
+| `claimable_principal` | `uint64` | Claimable principal amount |
+
+## `CashFundingResult`
+
+Result returned by `fund_due_cashflows`.
+
+| Field | Type | Meaning |
+|:-------------------|:---------|:--------------------------------|
+| `funded_interest` | `uint64` | Interest reserved in the call |
+| `funded_principal` | `uint64` | Principal reserved in the call |
+| `total_funded` | `uint64` | Total reserved amount |
+| `processed_events` | `uint64` | Number of processed cash events |
+| `timestamp` | `uint64` | Execution timestamp |
+
+## `CashClaimResult`
+
+Result returned by `claim_due_cashflows`.
+
+| Field | Type | Meaning |
+|:-------------------|:---------|:----------------------------------|
+| `interest_amount` | `uint64` | Interest realized or reported |
+| `principal_amount` | `uint64` | Principal realized or reported |
+| `total_amount` | `uint64` | Total realized or reported amount |
+| `timestamp` | `uint64` | Execution timestamp |
+| `context` | `byte[]` | Opaque caller-supplied context |
diff --git a/docs/rationale.md b/docs/rationale.md
deleted file mode 100644
index d304e344..00000000
--- a/docs/rationale.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Rationale {#rationale}
-
-This standard has been designed to support different types of debt instruments and
-their payoffs, with cash-flows executed both on-chain and off-chain.
-
-The standard fosters modularity, with high degree of flexibility with respect to
-the integration of external components (Applications), such as KYC, auctions, order-books,
-off-chain transfer agents, etc.
-
-The specification makes sure that the trust model and RBAC of D-ASA implementations
-can range from trustless versions (e.g., payments triggered automatically if the
-conditions are met, default called automatically on payment failure) to trusted
-ones (e.g., payments triggered only by authorized entities, default called manually
-by a trustee).
-
-The implementation of the specified interfaces is left to the use-cases, which may
-cherry-pick a subset of methods and getters based on their requirements.
diff --git a/docs/sdk/deploy-and-attach.md b/docs/sdk/deploy-and-attach.md
new file mode 100644
index 00000000..fae79db4
--- /dev/null
+++ b/docs/sdk/deploy-and-attach.md
@@ -0,0 +1,60 @@
+# Deploy and Attach
+
+## Deploy
+
+```python
+from d_asa import DAsa
+
+app = DAsa.deploy(
+ algorand=algorand,
+ arranger=arranger,
+ app_name="my-dasa",
+)
+```
+
+## Deploy and Configure
+
+`deploy_configured(...)` accepts either a precomputed `NormalizationResult` or raw
+`ContractAttributes` plus the normalization inputs.
+
+```python
+app = DAsa.deploy_configured(
+ algorand=algorand,
+ arranger=arranger,
+ normalized=normalized,
+ prospectus_url="Issuer term sheet",
+)
+```
+
+When configuration happens through the high-level API, `DAsa` also stores a `PricingContext`
+derived from `normalized.terms.notional_unit_value`.
+
+## Attach to an Existing App
+
+```python
+app = DAsa.from_app_id(
+ algorand=algorand,
+ app_id=12345,
+)
+```
+
+If you already have the generated client:
+
+```python
+from d_asa.artifacts.dasa_client import DasaClient
+
+raw_client = DasaClient(algorand=algorand, app_id=12345)
+app = DAsa.from_client(raw_client)
+```
+
+## Contract View
+
+`app.contract` exposes readonly helpers built from on-chain state:
+
+- `get_state()`
+- `get_next_due_event()`
+- `get_schedule_entry(event_id)`
+- `get_arranger()`
+- `get_address_roles(address)`
+- `get_role_validity(role, address)`
+- `raw_client`
diff --git a/docs/sdk/dvp.md b/docs/sdk/dvp.md
new file mode 100644
index 00000000..308aaa63
--- /dev/null
+++ b/docs/sdk/dvp.md
@@ -0,0 +1,46 @@
+# Over-the-Counter (OTC) DvP Builder
+
+`HoldingAccount.build_otc_dvp(...)` builds an atomic delivery-vs-payment group for
+OTC secondary trades.
+
+The builder is intentionally non-custodial:
+
+- it creates the payment leg
+- it creates the D-ASA transfer leg
+- it returns the composed group for inspection, signing, simulation, or sending
+
+## Algo Settlement
+
+```python
+draft = app.account(seller).build_otc_dvp(
+ buyer=buyer,
+ units=10,
+ payment_amount=150_000,
+)
+
+result = draft.send()
+```
+
+## ASA Settlement
+
+```python
+draft = app.account(seller).build_otc_dvp(
+ buyer=buyer,
+ units=10,
+ payment_amount=15_000,
+ payment_asset_id=settlement_asa_id,
+)
+```
+
+## Guardrails
+
+The builder validates:
+
+- `units > 0`
+- `payment_amount > 0`
+- seller and buyer are different
+- the seller signer matches the transfer sender holding address
+- optional quote tolerance, when provided
+
+You can combine it with `quote_trade(...)` inputs to fail fast when the negotiated
+payment amount drifts too far from the SDK's accrual-aware reference.
diff --git a/docs/sdk/overview.md b/docs/sdk/overview.md
new file mode 100644
index 00000000..5c8222b1
--- /dev/null
+++ b/docs/sdk/overview.md
@@ -0,0 +1,35 @@
+# SDK Overview
+
+The high-level Python API lives in the `d_asa` package and is centered on `DAsa`.
+
+It wraps the generated ARC-56 client in [`d_asa.artifacts.dasa_client`](../../src/d_asa/artifacts/dasa_client.py)
+and keeps the generated ABI structs out of the normal user flow.
+
+```python
+from d_asa import (
+ DAsa,
+ ContractAttributes,
+ PricingContext,
+ make_pam_zero_coupon_bond,
+ normalize_contract_attributes,
+)
+```
+
+The root package also continues to expose the domain models and the ACTUS normalizer
+directly:
+
+- `ContractAttributes`
+- `make_pam_zero_coupon_bond(...)`
+- `make_pam_fixed_coupon_bond_profile(...)`
+- `normalize_contract_attributes(...)`
+- `NormalizationResult`
+- `NormalizedActusTerms`
+- `InitialKernelState`
+- `ExecutionScheduleEntry`
+- `AccountPosition`
+- `ObservedEventRequest`
+- `ObservedCashEventRequest`
+- `Cycle`
+
+Use `DAsa` for contract interaction, and keep `d_asa.artifacts.dasa_client` as the
+explicit low-level escape hatch when needed.
diff --git a/docs/sdk/roles.md b/docs/sdk/roles.md
new file mode 100644
index 00000000..5c808fec
--- /dev/null
+++ b/docs/sdk/roles.md
@@ -0,0 +1,56 @@
+# Role Wrappers
+
+`DAsa` binds signer accounts into role-oriented wrappers.
+
+```python
+arranger = app.arranger(arranger_account)
+account_manager = app.account_manager(manager_account)
+primary_dealer = app.primary_dealer(dealer_account)
+trustee = app.trustee(trustee_account)
+authority = app.authority(authority_account)
+observer = app.observer(observer_account)
+op_daemon = app.op_daemon(op_daemon_account)
+holder = app.account(holder_account)
+```
+
+## Arranger
+
+`ArrangerRole` covers the contract lifecycle and arranger-controlled actions:
+
+- `configure(...)`
+- `configure_from_attributes(...)`
+- `configure_contract(...)`
+- `upload_schedule(...)`
+- `execute_ied()`
+- `set_transfer_window(...)`
+- `fund_due_cashflows(...)`
+- `append_observed_cash_event(...)`
+- `append_observed_cash_events(...)`
+- `apply_non_cash_event(...)`
+- `rotate_arranger(...)`
+- `set_op_daemon(...)`
+- `assign_role(...)`
+- `revoke_role(...)`
+
+## Other Roles
+
+- `AccountManagerRole.open_account(...)`
+- `PrimaryDealerRole.primary_distribution(...)`
+- `TrusteeRole.set_default(...)`
+- `AuthorityRole.suspend_account(...)`
+- `AuthorityRole.set_contract_suspension(...)`
+- `ObserverRole.apply_non_cash_event(...)`
+- `OpDaemonRole.claim(...)`
+
+## Holding Accounts
+
+`HoldingAccount` is the investor-facing wrapper:
+
+- `get_raw_position()`
+- `get_actualized_position(...)`
+- `get_valuation(...)`
+- `quote_trade(...)`
+- `build_otc_dvp(...)`
+- `transfer(...)`
+- `claim(...)`
+- `update_payment_address(...)`
diff --git a/docs/sdk/valuation.md b/docs/sdk/valuation.md
new file mode 100644
index 00000000..f8e8fad2
--- /dev/null
+++ b/docs/sdk/valuation.md
@@ -0,0 +1,61 @@
+# Actualized Positions and Valuation
+
+`HoldingAccount.get_actualized_position()` mirrors the contract's lazy settlement
+rules off chain:
+
+- reserved units become active after `IED`
+- cumulative interest and principal indices are applied to the holder checkpoints
+- the returned position is a preview only; it does not mutate chain state
+
+```python
+holder = app.account(investor)
+position = holder.get_actualized_position()
+```
+
+`get_valuation()` builds on top of that position and adds economic fields:
+
+- `principal_share`
+- `claimable_interest`
+- `claimable_principal`
+- `accrued_interest_not_due`
+- `economic_value_total`
+
+```python
+valuation = holder.get_valuation()
+```
+
+## Trade Quotes
+
+`quote_trade(units=...)` is intended to support secondary-market pricing in the
+middle of an accrual period.
+
+The quote always returns:
+
+- the current principal share of the traded units
+- accrued interest that is not yet due
+- a par-reference clean value
+- a par-reference dirty value
+
+If a clean quote is supplied, the SDK derives a market dirty value by adding accrued-not-due
+carry.
+
+```python
+from decimal import Decimal
+from d_asa import TradeQuoteInput
+
+quote = holder.quote_trade(
+ 25,
+ clean_quote=TradeQuoteInput(clean_price_per_100=Decimal("99.25")),
+)
+```
+
+Important behavior:
+
+- Quotes are rejected when a due ACTUS event is already pending at the requested
+timestamp.
+
+- Existing `claimable_interest` and `claimable_principal` remain attached to the
+seller account and are reported as retained balances, not transferred unit value.
+
+- `clean_price_per_100` requires a `PricingContext`, because `notional_unit_value`
+is SDK metadata and is not stored on chain.
diff --git a/docs/specs/accounting/account.md b/docs/specs/accounting/account.md
new file mode 100644
index 00000000..a0051f1e
--- /dev/null
+++ b/docs/specs/accounting/account.md
@@ -0,0 +1,30 @@
+# Account (Investor)
+
+> Investors are lenders providing capital to borrowers with the expectation of a
+> financial return, defined by debt instruments.
+
+Investors \\( [CPID] \\) own D-ASA accounts, characterized by a pair of Algorand
+Addresses:
+
+- *Holding Address*: address that owns D-ASA units with the right to future payments;
+- *Payment Address*: address that receives D-ASA payments.
+
+The Payment Address **MAY** be different from the Holding Address.
+
+The Account is uniquely identified by the account key of the form:
+
+`[A#||]`
+
+Where || denotes concatenation.
+
+> D-ASA units can be in custody with a third party or temporarily deposited on an
+> order book (Holding Address). At the same time, payments are always executed
+> towards the investor (on the Payment Address).
+
+## Seniority
+
+> Debt instruments may have an order of repayment in the event of a sale or default
+> of the issuer, based on investors’ seniority. Investors with the same seniority
+> are treated equally.
+
+D-ASA does not enforce investor *seniority* \\( [SEN] \\).
diff --git a/docs/specs/accounting/overview.md b/docs/specs/accounting/overview.md
new file mode 100644
index 00000000..ae720f2c
--- /dev/null
+++ b/docs/specs/accounting/overview.md
@@ -0,0 +1,4 @@
+# Accounting
+
+The accounting section defines how the kernel's contract-wide cashflow state is
+projected into holder positions, checkpoints, and claimable balances.
diff --git a/docs/specs/accounting/units.md b/docs/specs/accounting/units.md
index e1701efb..d3cc30e6 100644
--- a/docs/specs/accounting/units.md
+++ b/docs/specs/accounting/units.md
@@ -1,69 +1,61 @@
# D-ASA units {#d-asa-units}
-> D-ASA units represent the ownership of the tokenized debt instrument.
+D-ASA units represent pro-rata ownership of the normalized ACTUS contract.
-## Supply {#supply}
+## Total supply
-The D-ASA **MUST** define its *total units* (`uint64`).
+The kernel **MUST** store `total_units` as a `uint64`.
-If the D-ASA has a *principal*, its initials *total units* **MUST** be equal to
-the *principal* divided by the *minimum denomination.*
+The off-chain normalization process **MUST** derive `total_units` exactly as:
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with a principal of 1M EUR and a minimum
-> denomination of 1,000 EUR. The D-ASA has 1,000 initial total units.
+```text
+notional_principal / notional_unit_value
+```
-The D-ASA *total units* **MAY** be updated with the **OPTIONAL** `update_total_units`
-method.
+The division **MUST** be exact. If the principal is not divisible by the chosen
+unit value, normalization **MUST** fail.
-## Value {#value}
+`notional_unit_value` is an SDK-side normalization input. It is used to derive
+`total_units`, but it is not persisted on chain.
-> The D-ASA unit’s value is always intended as **nominal value** (at redemption).
+## Unit states
-The D-ASA *unit value* (`uint64`) **MUST** be expressed in the *denomination asset*.
+A holder account stores two unit balances:
-If the D-ASA has a *principal*, its initial *unit value* **MUST** be equal to the
-*minimum denomination.*
+- `reserved_units`: units allocated before `IED`;
+- `units`: active units participating in funded ACTUS cashflows.
-The D-ASA *unit* *value* **MAY** change over time.
+When `IED` executes, reserved units become activatable and are moved into `units`
+the first time the holder position is touched.
-> The D-ASA unit’s value may change according to different conditions, such as an
-> amortizing principal repayment schedule (see [Amortizing Schedule](../execution/payment-agent/principal-repayment.md#amortizing-schedule)
-> section).
+## Position accounting
-The D-ASA *unit value* **MAY** change globally or locally (per account).
+Each holder position **MUST** track:
-> The D-ASA unit’s value can be global or local (per-account). Global unit value
-> should be used when the value of all the units can be updated at the same time.
-> Local unit value should be used when the units' value is updated at different
-> times per each account.
+- The payment address;
+- Active and reserved unit balances;
+- Suspension state;
+- The last settled event cursor;
+- The last applied cumulative interest index;
+- The last applied cumulative principal index;
+- Claimable interest and principal amounts.
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with an initial unit value of 1,000 EUR.
-> The D-ASA accrues interest on a daily basis, paid at redemption. The unit value
-> is updated globally (for all the units).
+The accounting layer does not maintain a mutable on-chain nominal unit value. Transfers
+and claims are therefore unit-based and index-based, not value-array-based.
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with an initial unit value of 1,000 EUR.
-> The D-ASA has an amortizing principal repayment schedule. Repayments are executed
-> per-account. The unit value is updated per-account (for the account’s units).
+## Lazy settlement
-The D-ASA *unit value* **MAY** be globally updated with the **OPTIONAL** `update_global_unit_value`
-method.
+The accounting layer **MUST** settle holder positions lazily against the global
+cumulative indices maintained by the kernel.
-## Fungibility {#fungibility}
+On settlement:
-> D-ASA units' fungibility depends on:
->
-> - Units value (nominal);
-> - Executed payments.
->
+1. The delta between global and account checkpoints is computed;
+1. The delta is multiplied by the holder's active units;
+1. The result is moved into `claimable_interest` and `claimable_principal`;
+1. The checkpoints and settled cursor are advanced.
-The D-ASA *fungible units* **MUST** have the same *value* and *executed payments.*
+This model allows:
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA with 4 coupons. Investors A and B are holding 10 D-ASA units
-> each. The 1st coupon is due. Coupon payments might not be executed synchronously
-> for all the Investors. The coupon payment is executed for Investor A, while Investor
-> B is still waiting for the payment settlement. Investor A units are temporarily
-> non-fungible with Investor B units until the 1st coupon is paid for both.
+- Contract-wide funding of due ACTUS cash events once;
+- Account-by-Account realization of the funded cashflows later.
diff --git a/docs/specs/contract/actus-compliance-profile.md b/docs/specs/contract/actus-compliance-profile.md
new file mode 100644
index 00000000..2ea2e41b
--- /dev/null
+++ b/docs/specs/contract/actus-compliance-profile.md
@@ -0,0 +1,82 @@
+# ACTUS Compliance Profile
+
+> Debt instruments such as bullet bonds, amortizing loans, mortgages, etc. differ
+> based on their cash flow exchange patterns (e.g., principal and interest payment
+> time schedules, fixed or variable interest rates, etc.).
+
+> The ACTUS taxonomy reduces the majority of all financial contracts to a defined
+> set of 32 generalized cash flow exchange patterns, called contract types.
+
+The D-ASA **MUST** be classified with an ACTUS *contract type* \\( [CT] \\) (see
+the [ACTUS taxonomy](https://github.com/actusfrf/actus-dictionary/blob/master/actus-dictionary-taxonomy.json)).
+
+The *contract type* **MUST** have the following properties:
+
+- `family`: Basic
+- `class`: Fixed Income
+- `sub-class`: Maturities
+
+## Contract Identifier
+
+The D-ASA *contract identifier* \\( [CID] \\) is the Algorand Application ID (`uint64`).
+
+The D-ASA contract layer **MUST** follow a constrained ACTUS fixed-income profile
+that can be normalized and executed on the AVM.
+
+## Supported contract families
+
+The current kernel supports the following ACTUS contract family identifiers:
+
+| ID | Contract Type | Description | Rate | Use case |
+|:---:|:-------------:|:---------------------------------------------------------------------------------------------------------------------------------------|:----------------------|:----------------------------------------------------------------|
+| `0` | `PAM` | Principal payment fully at \\( [IED] \\) and repaid at \\( [MD] \\). | Fix or variable rates | All kind of bonds, term deposits, bullet loans, mortgages, etc. |
+| `1` | `ANN` | Principal payment fully at \\( [IED] \\) and repaid periodically in constants amounts till \\( [MD] \\). | Fix or variable rates | Classical level payment mortgages, leasing contracts, etc. |
+| `2` | `NAM` | As `ANN`, when resetting rate total amount (principal + interest) stays constant. \\( [MD] \\) shifts. | Variable only | Adjustable rate mortgages |
+| `3` | `LAM` | Principal payment fully at \\( [IED] \\) and repaid periodically in constants amounts till \\( [MD] \\), interest reduced accordingly. | Fix or variable | Amortizing loans |
+| `4` | `LAX` | Flexible version of `LAM`. | Fix or variable | Teaser rate loans |
+| `5` | `CLM` | Loans rolled over as long as they are not called. Once called, it has to be paid back after noticed period. | Fix or variable | Loans with call options |
+
+> Non-normative subtypes such as `PAM:ZCB` and `PAM:FCB` are resolved before normalization.
+> The AVM kernel stores only the normalized family identifier.
+
+## Supported event types
+
+The normalized execution schedule **MUST** contain only event types permitted for
+the configured contract family.
+
+| Family | Allowed events |
+|:-------|:----------------------------------------------------------|
+| `PAM` | `IED`, `IP`, `MD`, `RR`, `RRF` |
+| `ANN` | `IED`, `IP`, `PR`, `MD`, `RR`, `RRF`, `IPCB`, `PRF` |
+| `NAM` | `IED`, `IP`, `PR`, `MD`, `RR`, `RRF`, `IPCB` |
+| `LAM` | `IED`, `IP`, `PR`, `MD`, `RR`, `RRF`, `IPCB` |
+| `LAX` | `IED`, `IP`, `PR`, `PI`, `MD`, `RR`, `RRF`, `IPCB`, `PRF` |
+| `CLM` | `IED`, `IP`, `PR`, `MD`, `RR`, `RRF` |
+
+- **Cash events** are limited to `IP`, `PR`, and `MD`.
+
+- **Non-cash events** are limited to `IED`, `PI`, `RR`, `RRF`, `IPCB`, and `PRF`.
+
+## Normalization constraints
+
+The D-ASA profile further requires:
+
+- `business_day_convention = NOS`;
+- `calendar = NC`;
+- One of the supported day-count conventions listed in [Day-Count Convention](./day-count-convention.md);
+- AVM-compatible `uint64` values for amounts, times, and fixed-point factors.
+
+Normalization **MUST** reject any contract that cannot satisfy those constraints.
+
+## Observed events
+
+Observed schedule extension is intentionally narrow:
+
+- Only `CLM` contracts may append observed events at runtime;
+
+- `append_observed_cash_event` only accepts observed `PR` cash events;
+
+- `apply_non_cash_event` applies due `RR` and `RRF` events under Observer control;
+
+- Arranger-controlled observed appends **MUST** preserve event ordering and contiguous
+event IDs.
diff --git a/docs/specs/contract/attributes.md b/docs/specs/contract/attributes.md
new file mode 100644
index 00000000..f22f7c04
--- /dev/null
+++ b/docs/specs/contract/attributes.md
@@ -0,0 +1,227 @@
+# Main Contract Attributes
+
+The following are the main ACTUS Contract Attributes.
+
+This section is intended to clarify ACTUS-specific terminology and map it to the
+corresponding terms used in the D-ASA implementation. ACTUS remains the normative
+specification throughout.
+
+> [!IMPORTANT]
+> In the event of any inconsistency, the ACTUS specification shall prevail.
+
+> For further details, refer to the ACTUS specification.
+
+## Principal
+
+> Debt instruments principal is the amount of capital borrowed and used as a base
+> for calculating interest.
+
+The D-ASA **MUST** define the *principal* \\( [NT] \\), expressed in the *denomination
+asset*.
+
+The D-ASA **MUST** define a *minimum denomination*, expressed in the *denomination
+asset*.
+
+The *minimum denomination* **MUST** be a divisor of the *principal*.
+
+### Discount
+
+> Debt instruments principal may be placed at premium or discount on issuance.
+
+The D-ASA **MAY** define a *premium* or *discount* \\( [PDIED] \\) to apply to the
+principal on the issuance.
+
+> [!TIP]
+> Let’s have a D-ASA denominated in EUR, with a principal of 1M EUR paid at maturity
+> and a minimum denomination of 1,000 EUR. The D-ASA has a principal discount of
+> 200 bps (2%) at the issuance. Each D-ASA unit is sold on the primary market at
+> 980 EUR and will be redeemed for 1,000 EUR of principal at maturity.
+
+## Interests
+
+> Debt instruments interest is calculated on a fixed or variable rate on the outstanding
+> principal.
+
+> The interest rate is the nominal yield paid by the debt instrument on the principal,
+> usually defined *per-annum* (APY).
+
+### Interest Rate
+
+> Debt instruments may have variable interest rates, based on external data oracles.
+
+The D-ASA **MAY** define a nominal *interest rate* \\( [IPNR] \\).
+
+If the interest rate is variable, the D-ASA **MUST** define *interest update dates*
+known \\( [RRF] \\) or unknown \\( [RR] \\).
+
+#### Cap and Floor
+
+> Debt instruments may define limitations to the interest rate variability, either
+> over the whole contract lifespan or over specific periods.
+
+#### Life Caps
+
+The D-ASA **MAY** define a *life cap* \\( [RRLC] \\) to apply to the variable *interest
+rate*.
+
+The D-ASA **MAY** define a *life floor* \\( [RRLF] \\) to apply to the variable
+*interest rate*.
+
+#### Period Caps
+
+The D-ASA **MAY** define a *period cap* \\( [RRPC] \\) to the variable *interest
+rate*.
+
+The D-ASA **MAY** define a *period floor* \\( [RRPF] \\) to apply to the variable
+*interest rate*.
+
+#### Fixing Period
+
+> Debt instruments usually schedule interest rate updates before the new rate applies
+> (defined by the rate reset schedule).
+
+The D-ASA **MUST** define a *fixing period* \\( [RRFIX] \\) that specifies a period
+of time before the *interest payment* \\( [IP] \\) in which the interest can be
+updated.
+
+## Issuance
+
+> Debt instruments start accruing interest on the issuance date.
+
+The D-ASA **MUST** have an *initial exchange date* \\( [IED] \\) (issuance).
+
+## Maturity
+
+> Debt instruments may have a maturity date, on which the principal is repaid and
+> the contract obligations expire.
+
+> Debt instruments may have a fixed or variable maturity date.
+
+The D-ASA **MAY** have a *maturity date* \\( [MD] \\).
+
+The *maturity date* **MAY** be updated in case of pre-payment options.
+
+## Prepayment Options
+
+> Debt instruments could have early repayment options to repay the principal to
+> investors (partially or totally) before maturity or to reduce the maturity date.
+
+> Debt instrument with defined maturity date may terminate earlier if the full principal
+> redemption happens earlier than maturity.
+
+If the debt instrument has early repayment options, the D-ASA **MUST** implement
+the **OPTIONAL** `set_early_repayment_option` method.
+
+### Prepayment Effects
+
+> Debt instruments could have early repayment options to repay the principal to
+> investors (partially or totally) before maturity or to reduce the maturity date.
+
+> Debt instrument with a defined maturity date may terminate earlier if the full
+> principal redemption happens earlier than maturity.
+
+An early repayment option could have different *prepayment effects* \\( [PPEF] \\):
+
+- It **MAY** repay the *principal* partially or totally before the *maturity date*;
+
+- It **MAY** reduce the *maturity date*.
+
+The *prepayment effect* **MUST** be identified with one of the following enumerated
+IDs:
+
+| ID | Name | ACTUS Acronym | Description |
+|:------|:------------------------------------:|---------------|:------------------------------------------------------------------------------------------------|
+| `0` | No Prepayment | \\([N]\\) | Prepayment is not allowed under the agreement |
+| `1` | Prepayment Reduces Redemption Amount | \\([A]\\) | Prepayment is allowed and reduces the redemption amount for the remaining period up to maturity |
+| `2` | Prepayment Reduces Maturity | \\([M]\\) | Prepayment is allowed and reduces the maturity |
+
+### Penalties
+
+> Debt instruments may have a penalty as a consequence of an early repayment option.
+
+The D-ASA **MAY** define a *penalty type* \\( [PYTP] \\) for the early repayment
+options.
+
+The *penalty type* **MUST** be identified with one of the following enumerated IDs:
+
+| ID | Name | ACTUS Acronym | Description |
+|:------|:--------------------------:|---------------|:-------------------------------------------------------------------------------------------------------|
+| `0` | No Penalty | \\([N]\\) | No penalty applies |
+| `1` | Fixed Penalty | \\([A]\\) | A fixed amount applies as penalty |
+| `2` | Relative Penalty | \\([R]\\) | A penalty relative to the notional outstanding applies |
+| `3` | Interest Rate Differential | \\([I]\\) | A penalty based on the current interest rate differential relative to the notional outstanding applies |
+
+## Performance
+
+> Debt instruments performances are exposed to credit risks.
+
+The D-ASA *performance* \\( [PRF] \\) **MUST** be identified with one of the following
+enumerated IDs:
+
+| ID | Name | ACTUS Acronym | Description |
+|:----|:----------:|---------------|:-------------------------------------------------------------------------------------|
+| `0` | Performant | \\( [PF] \\) | Contract is performing according to terms and conditions |
+| `1` | Delayed | \\( [DL] \\) | Contractual payment obligations are delayed according to the *grace period* |
+| `2` | Delinquent | \\( [DQ] \\) | Contractual payment obligations are delinquent according to the *delinquency period* |
+| `3` | Default | \\( [DF] \\) | Contract defaulted on payment obligations according to *delinquency period* |
+| `4` | Matured | \\( [MA] \\) | Contract matured |
+| `5` | Terminated | \\( [TE] \\) | Contract has been terminated |
+
+> [!NOTE]
+> The current reference implementation supports manual default-performance tracking
+> through an RBAC-managed boolean `defaulted` flag. It does not yet model the full
+> `PRF` lifecycle enum or automatic grace-period and delinquency transitions on
+> chain.
+
+### Grace Period
+
+> Debt instruments may define a grace period as a time window after the payment
+> due date during which payment may be retried without a penalty.
+
+The D-ASA **MAY** define a *grace period* \\( [GRP] \\).
+
+### Delinquency Period
+
+> Debt instruments may define a delinquency period as a time window after the grace
+> period. If payment happens after the delinquency period, then the counterparty
+> is in technical default.
+
+The D-ASA **MAY** define a *delinquency period* \\( [DQP] \\).
+
+### Default
+
+> Default is the ultimate failure to pay the lenders according to the payment obligations.
+> When this happens, the creditors have the right to declare default to the debtors.
+
+> Default processes require the intervention of regulatory bodies and courts, therefore
+> the D-ASA default status bridges the default process off-chain.
+
+The D-ASA **SHOULD** enter *default* status if it cannot perform payments on due
+dates.
+
+The D-ASA **MAY** disable all non-administrative methods on *default* status.
+
+> The D-ASA default can be called either automatically (based on program conditions)
+> or manually (based on the decision of a trustee).
+
+The *Trustee* **MAY** set the default status with the `rbac_contract_default`
+method.
+
+In the current reference implementation, `rbac_contract_default(defaulted: bool)`
+stores a boolean `defaulted` flag in RBAC global state. This performance flag is
+distinct from the kernel lifecycle `status`.
+
+> [!TIP]
+> The D-ASA has no *grace period* and no *delinquency period*. A D-ASA coupon payment
+> is triggered on due date, but there is not enough liquidity to pay all the investors.
+> The D-ASA contract automatically enters in *default* immediately.
+
+> [!TIP]
+> The D-ASA has a *grace period* and a *delinquency period*. A D-ASA coupon payment
+> is triggered on due date, but there is not enough liquidity to pay all the investors.
+> The D-ASA program starts counting the *grace period* and *delinquency period*.
+> If the *delinquency period* expires, then the contract enters in *default*.
+
+> [!TIP]
+> A D-ASA coupon payment is triggered on due date, but there is not enough liquidity
+> to pay all the investors. The D-ASA contract relies on a Trustee to call the *default*.
diff --git a/docs/specs/contract/day-count-convention.md b/docs/specs/contract/day-count-convention.md
index d33a71e8..2aad6ab0 100644
--- a/docs/specs/contract/day-count-convention.md
+++ b/docs/specs/contract/day-count-convention.md
@@ -1,10 +1,10 @@
# Day-Count Convention {#day-count-convention}
-> Debt instruments use a day-count
-> convention to calculate the amount of accrued interest when the next coupon
-> payment is less than a full coupon period away.
+> Debt instruments use a [day-count convention](https://en.wikipedia.org/wiki/Day_count_convention)
+> to calculate the amount of accrued interest when the next coupon payment is less
+> than a full coupon period away.
-The D-ASA **MUST** specify one *day-count convention* \\([IPCD]\\) (`uint8`).
+The D-ASA **MUST** specify one *day-count convention* \\( [IPCD] \\).
The *day-count convention* **MUST** be identified with one of the following enumerated
IDs (`uint8`):
@@ -18,40 +18,6 @@ IDs (`uint8`):
| `4` | 30/360 | \\([30E360]\\) | Year fractions accrue on the basis of 30 days per month and 360 days per year in the respective period |
| `5` | 28/366 | \\([28E366]\\) | Year fractions accrue on the basis of 28 days per month and 366 days per year in the respective period |
| `6` | 30/365 | - | Year fractions accrue on the basis of 30 days per month and 365 days per year in the respective period |
-| `255` | Continuous | - | Time fractions accrue on the basis of the number of UNIX time units (non-leap seconds) in the respective time period |
-
-The *day-count convention* defines the *day-count factor* as a fraction of:
-
-- Numerator: elapsed time of the accrual period to date;
-- Denominator: time of the full accrual period defined by the *time schedule*.
-
-The *day-count convention* **MUST** be set using the `asset_config` method.
-
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA with the following coupon dates:
->
-> - `date1`: starting date for the current coupon’s interest accrual, defined by
-> the *time schedule*;
-> - `date2`: date through which the interest is being accrued (“to” date), equals
-> to the current block timestamp;
-> - `date3`: next coupon due date, defined by the *time schedule*.
->
-> The day-count factor is calculated as:
->
-> **Continuous** (`255`) convention:
->
-> ```text
-> (date2 - date1) / (date3 - date1)
-> ```
->
-> **Actual/Actual** (`0`) convention:
->
-> ```text
-> days_in(date2 - date1) / days_in(date3 - date1)
-> ```
->
-> Where `days_in` returns the actual number of days (equal to `86400` seconds) in
-> the time interval.
## Calendar
@@ -60,22 +26,16 @@ The *day-count convention* **MUST** be set using the `asset_config` method.
> The AVM (so the D-ASA) time has no notion of calendars. Conversion of serial UNIX
> timestamps into a year/month/day triple[^1] (and vice versa) can be performed
-> by external Algorand Applications[^2] or client side.
+> by external Algorand Applications[^2] or client side (normalization).
-The D-ASA **MAY** specify a *calendar* \\([CLDR]\\).
+The D-ASA **MAY** specify a *calendar* \\( [CLDR] \\).
-The *calendar* **MUST** be identified with one of the following enumerated IDs (`uint8`):
+The *calendar* **MUST** be identified with one of the following enumerated IDs:
| ID | Name | ACTUS | Description |
|:------|:----------------:|------------|:-----------------------------------------------|
| `0` | No Calendar | \\([NC]\\) | No holidays defined (default if not specified) |
| `1` | Monday to Friday | \\([MF]\\) | Saturdays and Sundays are holidays |
-| `255` | Custom | - | Custom holidays definition |
-
-The *calendar* **MAY** be set using the **OPTIONAL** `set_asset_metadata` method
-(see [Metadata](metadata.md) section).
-
-> A reference implementation **SHOULD** use the default *calendar* (`0`).
## Business Day Convention
@@ -85,15 +45,7 @@ The *calendar* **MAY** be set using the **OPTIONAL** `set_asset_metadata` method
> The business day convention defines how D-ASA execution can be shifted to the
> next business day (following) or the previous on (preceding).
-The D-ASA **MAY** specify a *business day convention* \\([BDC]\\).
-
-It is **RECOMMENDED** to use an ACTUS *business day convention*.
-
-The *business day convention* **MAY** be set using the **OPTIONAL** `set_asset_metadata`
-method (see [Metadata](metadata.md) section).
-
-> A reference implementation **SHOULD NOT** adopt a *business day convention* (as
-> it has no defined calendar).
+The D-ASA **MAY** specify a *business day convention* \\( [BDC] \\).
## End of Month Convention
@@ -102,15 +54,44 @@ method (see [Metadata](metadata.md) section).
> The end-of-month convention defines how D-ASA execution can be shifted according
> to the different number of days in months (31, 30, and 28) according to the calendar.
-The D-ASA **MAY** specify a *end-of-month convention* \\([EOMC]\\).
+The D-ASA **MAY** specify a *end-of-month convention* \\( [EOMC] \\).
+
+## Normalization profile restrictions
+
+The D-ASA kernel **MUST** store one normalized day-count convention identifier.
+
+The current kernel accepts the following identifiers:
+
+| ID | Name | ACTUS |
+|:----|:--------------|:-------------|
+| `0` | Actual/Actual | `AA` |
+| `1` | Actual/360 | `A360` |
+| `2` | Actual/365 | `A365` |
+| `3` | 30E/360 ISDA | `30E360ISDA` |
+| `4` | 30E/360 | `30E360` |
+
+A contract configuration **MUST** fail if the normalized terms use any other day-count
+identifier.
+
+The current D-ASA ACTUS profile imposes the following additional constraints on
+date handling:
+
+- `business_day_convention` **MUST** be `NOS`;
+- `calendar` **MUST** be `NC`;
+- Timestamps **MUST** be expressed as UTC UNIX seconds.
+
+Those constraints are enforced during normalization so that the AVM only receives
+values that can be executed deterministically without external calendar logic.
+
+## Accrual factors
-It is **RECOMMENDED** to use an ACTUS *end-of-month convention*.
+The AVM kernel does not recompute year fractions from raw dates. Instead, normalization
+**MUST** precompute the relevant accrual factors and place them in each `ExecutionScheduleEntry`.
-The *end-of-month convention* **MAY** be set using the **OPTIONAL** `set_asset_metadata`
-method (see [Metadata](metadata.md) section).
+This split is intentional:
-> A reference implementation **SHOULD NOT** adopt an *end-of-month day convention*
-> (as it has no defined calendar).
+- Date arithmetic and ACTUS schedule generation happen off chain;
+- Execution, validation, and state transitions happen on chain.
---
diff --git a/docs/specs/contract/denomination.md b/docs/specs/contract/denomination.md
index 54571b71..e27308f8 100644
--- a/docs/specs/contract/denomination.md
+++ b/docs/specs/contract/denomination.md
@@ -6,12 +6,11 @@
The D-ASA **MUST** be denominated either in an on-chain or off-chain *denomination
asset* \\([CUR]\\)[^1].
-The *denomination asset identifier* (`uint64`) **MUST** be set using the `asset_config`
-method.
-
All values (`uint64`) are integer minor units of the relevant on-chain or off-chain
*denomination asset*.
+> The reference implementation supports only on-chain ASA denominations (e.g., "stablecoins").
+
## On-chain denomination {#on-chain-denomination}
The *denomination asset* **MUST** be an Algorand Standard Asset (ASA), an Application
@@ -24,7 +23,7 @@ If asset is ALGO (`0`): amount is in microALGOs (\\( 10^{-6} \\) ALGO).
If asset is ASA or App: amount is in base units as per that asset’s `decimals`.
-{{#include ../../_include/styles.md:example}}
+> [!TIP]
> The value (`uint64`) `10000` of an ASA denomination with 2 `decimals` is interpreted
> as `100.00` units of the ASA.
@@ -39,7 +38,7 @@ The *denomination asset* **MUST** use the decimal digits specified by the [!TIP]
> The value (`uint64`) `10000` an EUR (ISO 4217, 2 decimals) denomination is interpreted
> as `100.00` Euro.
diff --git a/docs/specs/contract/early-repayment-options.md b/docs/specs/contract/early-repayment-options.md
deleted file mode 100644
index 9c590ef5..00000000
--- a/docs/specs/contract/early-repayment-options.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# Early Repayment Options {#early-repayment-options}
-
-> Debt instruments could have early repayment options to repay the principal to
-> investors (partially or totally) before maturity or to reduce the maturity date.
-
-> Debt instrument with defined maturity date may terminate earlier if the full principal
-> redemption happens earlier than maturity.
-
-If the debt instrument has early repayment options, the D-ASA **MUST** implement
-the **OPTIONAL** `set_early_repayment_option` method.
-
-## Early Repayment Schedule
-
-If the D-ASA has early repayment options, it **MUST** define *early repayment time
-events* as `uint64[]` array, where:
-
-- The length of the array **MUST** be `N>=1`;
-
-- The first element **MUST** be the *early repayment start date* \\([OPANX]\\) (`uint64`):
-the time after which early repayment options could be executed;
-
-- If the D-ASA has a *maturity date*, the last element **MUST** be the *early repayment
-end date* \\([OPXED]\\) (`uint64`): the time after which early repayment options
-cannot be executed.
-
-The *early repayment time events* **MUST** be sorted in strictly ascending order.
-
-The *early repayment start date* **MUST NOT** be earlier than the *issuance date*.
-
-The *early repayment end date* **MUST NOT** be later than the *maturity date*.
-
-The unscheduled *prepayment events* \\([PP]\\) **MUST** occur within the defined
-*early repayment schedule*.
-
-In the case of non-continuous *day-count conventions* (`ID<255`, see [Day-Count
-Conventions](day-count-convention.md) section), the *time periods* between subsequent
-events **MUST** be multiples of a day, in seconds (`86400`).
-
-The *early repayment time events* **MUST** be set with the `set_early_repayment_option`
-method.
-
-The *early repayment time events* **MAY** be updated with the `set_early_repayment_option`
-method.
-
-The updated *early repayment time events* **MUST NOT** modify past events.
-
-## Prepayment Effects
-
-An early repayment option could have different *prepayment effects* \\([PPEF]\\):
-
-- It **MAY** repay the *principal* partially or totally, to all or some Investors
-before the *maturity date* (see [Early Repayment](../execution/payment-agent/early-repayment.md)
-section);
-
-- It **MAY** reduce the *maturity date* (see [Variable Time Schedule](variable-time-schedule.md)
-section).
-
-The *prepayment effect* **MUST** be identified with one of the following enumerated
-IDs (`uint8`):
-
-| ID | Name | ACTUS Acronym | Description |
-|:------|:------------------------------------:|---------------|:------------------------------------------------------------------------------------------------|
-| `0` | No Prepayment | \\([N]\\) | Prepayment is not allowed under the agreement |
-| `1` | Prepayment Reduces Redemption Amount | \\([A]\\) | Prepayment is allowed and reduces the redemption amount for the remaining period up to maturity |
-| `2` | Prepayment Reduces Maturity | \\([M]\\) | Prepayment is allowed and reduces the maturity |
-| `255` | Custom | - | Prepayment is allowed and the effect is custom |
-
-The *prepayment effect* **MAY** be set using the **OPTIONAL** `set_asset_metadata`
-method (see [Metadata](metadata.md) section).
-
-> The implementation **SHOULD** manage the accrued interest on early repayments.
-
-## Penalties
-
-> Debt instruments may have a penalty as a consequence of an early repayment option.
-
-The D-ASA **MAY** define a *penalty type* \\([PYTP]\\) (`uint8`) for the early repayment
-options.
-
-The *penalty type* **MUST** be identified with one of the following enumerated IDs:
-
-| ID | Name | ACTUS Acronym | Description |
-|:------|:--------------------------:|---------------|:-------------------------------------------------------------------------------------------------------|
-| `0` | No Penalty | \\([N]\\) | No penalty applies |
-| `1` | Fixed Penalty | \\([A]\\) | A fixed amount applies as penalty |
-| `2` | Relative Penalty | \\([R]\\) | A penalty relative to the notional outstanding applies |
-| `3` | Interest Rate Differential | \\([I]\\) | A penalty based on the current interest rate differential relative to the notional outstanding applies |
-| `255` | Custom | - | Custom penalty |
-
-The *penalty type* **MAY** be set using the **OPTIONAL** `set_asset_metadata` method
-(see [Metadata](metadata.md) section).
-
-If the debt instrument has a *penalty type* with `ID>0`, the D-ASA **MUST** define
-a *penalty rate* \\([PYRT]\\) (`uint64`) for the amount of the penalty.
-
-> The *penalty rate* is either the absolute amount or the rate of the penalty.
-
-The *penalty rate* **MAY** be set using the **OPTIONAL** `set_early_repayment_option`
-method (see [Metadata](metadata.md) section).
diff --git a/docs/specs/contract/interests.md b/docs/specs/contract/interests.md
deleted file mode 100644
index e908f6f3..00000000
--- a/docs/specs/contract/interests.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Interests
-
-> Debt instruments interest is calculated on a fixed or variable rate on the outstanding
-> principal.
-
-> The interest rate is the nominal yield paid by the debt instrument on the principal,
-> usually expressed as *Annual Percentage Yield* (APY).
-
-The D-ASA *interest rates* **MUST** be defined in *basis
-points* (*bps*).
-
-## Interest Rate
-
-The D-ASA **MAY** define a nominal *interest rate* \\([IPNR]\\) (`uint16`).
-
-The *interest rate* **MUST** be set using the `asset_config` method.
-
-## Coupons
-
-> Debt instruments can pay interest in periodic installments, called coupons.
-
-> Coupons mature in a coupon period, according to a defined coupon schedule.
-
-The D-ASA **MUST** define the number of *total coupons* `K` (`uint64`):
-
-- `K>0` if the D-ASA has a **defined** number of coupons;
-- `K=0` if the D-ASA has **zero** or **undefined** (perpetual) coupons.
-
-## Coupon Rates
-
-> Debt instruments can pay coupons with fixed or variable interest rates.
-
-The D-ASA **MAY** define the *coupon rates* \\([ARRATE]\\) as `uint16[]` array,
-where:
-
-- The length of the array **MUST** be `K`, equal to the *total coupons*;
-- The `K`\-elements of the array are the *coupon rates*, expressed in *bps*.
-
-If the D-ASA has zero or undefined coupons (`K=0`), the *coupon rates* array **MUST**
-be empty and the *interest rate* **MUST** be used instead.
-
-> Coupon rates could be derived from the interest rate.
-
-{{#include ../../_include/styles.md:example}}
-> D-ASA with 4 coupons with the following rates: 2,00%, 2,50%, 3,00%, and 3,50%
-> would have the following coupon rates array (bps):
->
-> ```text
-> uint16[] = [200, 250, 300, 350]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> D-ASA with zero coupons would have the following coupon rates array (bps):
->
-> ```text
-> uint16[] = []
-> ```
-
-The *coupon rates* **MUST** be set using the `asset_config` method.
-
-## Accruing Interest
-
-> Debt instruments may accrue interest over time.
-
-The D-ASA *units* **MAY** accrue interest \\([IPAC]\\), according to the *day-count
-convention* (see [Day-Count Convention](day-count-convention.md) section).
-
-If the D-ASA has coupons, the *units* accrued interest **MUST** be calculated with
-respect to the latest coupon due date.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with `4` coupons. The 2nd coupon is due. The D-ASA units are
-> accruing the interest of the 3rd coupon. The accrued interest is calculated according
-> to the day-count convention, applied to the elapsed time with respect to the 2nd
-> coupon due date.
-
-If the D-ASA has coupons, the account *units* accrued interest calculation **SHOULD**
-fail if it has pending coupon payments.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with `4` coupons. The 2nd coupon is due. The D-ASA units are
-> accruing the interest of the 3rd coupon. Coupon payments are not executed synchronously
-> for all the Investors. The 2nd coupon payment is executed for Investor A, while
-> Investor B is still waiting for the payment settlement. The accrued interest calculation
-> succeeds for Investor A and fails for Investor B until the 2nd coupon payment
-> is settled.
diff --git a/docs/specs/contract/intro.md b/docs/specs/contract/intro.md
index 44bd159a..0c0162ab 100644
--- a/docs/specs/contract/intro.md
+++ b/docs/specs/contract/intro.md
@@ -4,5 +4,36 @@
> on the exchange of future cash flows. Debt instruments are a subset of financial
> contracts.
-This section specifies the D-ASA *data model*, with properties and attributes, which
-enables the tokenization of a variety of fixed income contracts.
+This section specifies the D-ASA ACTUS contract layer.
+
+A conforming D-ASA **MUST** express the debt instrument as:
+
+1. ACTUS contract attributes;
+
+1. Normalized ACTUS terms, initial kernel state, and execution schedule for the
+AVM;
+
+1. Explicit AVM execution of due ACTUS events.
+
+The canonical execution chain is, therefore:
+
+```mermaid
+flowchart LR
+ ACTUS["ACTUS Contract"]
+ NORMALIZE["AVM Normalization"]
+ EXEC["AVM Execution"]
+
+ ACTUS --> NORMALIZE
+ NORMALIZE --> EXEC
+
+ style ACTUS fill:#fff9c4,stroke:#f57f17,stroke-width:2px,color:#000
+ style NORMALIZE fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,color:#000
+ style EXEC fill:#ffccbc,stroke:#d84315,stroke-width:2px,color:#000
+```
+
+The following pages define:
+
+- The supported ACTUS compliance profile;
+- The normalized on-chain state and schedule model;
+- The contract normalization and configuration flow;
+- The numeric representation rules required to move ACTUS values onto the AVM.
diff --git a/docs/specs/contract/kernel-state-and-schedule.md b/docs/specs/contract/kernel-state-and-schedule.md
new file mode 100644
index 00000000..63f7fa53
--- /dev/null
+++ b/docs/specs/contract/kernel-state-and-schedule.md
@@ -0,0 +1,148 @@
+# Kernel State and Schedule
+
+The ACTUS kernel stores the executable contract as three normalized payload classes:
+
+1. `NormalizedActusTerms`
+1. `InitialKernelState`
+1. `ExecutionScheduleEntry[]`
+
+## Normalized Terms
+
+`NormalizedActusTerms` **MUST** contain the immutable or quasi-immutable contract
+configuration required by the kernel, including:
+
+- Contract Type ID;
+- Denomination asset ID and Settlement asset ID;
+- Total units;
+- Notional Principal;
+- Initial Exchange Amount and Date;
+- Maturity Date;
+- Day-Count Convention ID;
+- Rate Reset parameters;
+- Dynamic-principal-redemption flags;
+- Fixed-point scale.
+
+## Initial kernel state
+
+`InitialKernelState` **MUST** capture the pre-`IED` kernel state snapshot uploaded
+with `contract_config`. It defines:
+
+- Status Date \\( [SD] \\);
+- Starting event cursor;
+- Outstanding principal;
+- Interest calculation base;
+- Current nominal rate;
+- Accrued interest;
+- Next principal redemption;
+- Cumulative interest and principal indices.
+
+## Execution schedule
+
+Each `ExecutionScheduleEntry` **MUST** contain:
+
+- A contiguous `event_id`;
+- An ACTUS `event_type`;
+- `scheduled_time`;
+- Precomputed accrual factors;
+- The next normalized rate and principal state;
+- Entry flags.
+
+The schedule **MUST** satisfy the following invariants:
+
+- `event_id = 0` **MUST** be `IED`;
+- Event IDs **MUST** be contiguous across all pages;
+- Schedule entries **MUST** be ordered by nondecreasing `scheduled_time`;
+- Page size **MUST NOT** exceed `16` entries in the current kernel;
+- The last uploaded page **MUST** finalize `schedule_entry_count` and move the
+contract to `STATUS_PENDING_IED`.
+
+## ACTUS cycles
+
+ACTUS cycles are an off-chain schedule-generation concept. They define recurring
+periods before normalization resolves them into concrete timestamps.
+
+The D-ASA SDK models ACTUS cycles with the syntax:
+
+```text
+[+|-]
+```
+
+where:
+
+- `count` is a positive integer;
+- `unit` is one of `D`, `W`, `M`, `Q`, `H`, `Y`;
+- `+` and `-` are optional ACTUS stub markers.
+
+Examples:
+
+- `90D`
+- `3M`
+- `1Q`
+- `1H`
+- `2Y`
+- `3M+`
+- `1Q-`
+
+Cycles are used together with ACTUS anchors in `ContractAttributes`, such as:
+
+- `interest_payment_anchor` + `interest_payment_cycle`
+- `principal_redemption_anchor` + `principal_redemption_cycle`
+- `rate_reset_anchor` + `rate_reset_cycle`
+
+The normalization process **MUST** resolve those cycles into explicit schedule entries
+before the contract is uploaded to the AVM.
+
+As a result, the on-chain kernel does not store raw ACTUS cycles. It stores only
+the normalized timestamps and state transitions that were derived from those cycles.
+
+## Contract status machine
+
+The kernel uses the following status identifiers:
+
+| Status | ID | Meaning |
+|:--------------|:------|:----------------------------------------------|
+| `INACTIVE` | `0` | Terms and schedule not fully configured |
+| `PENDING_IED` | `50` | Schedule uploaded; issuance not yet activated |
+| `ACTIVE` | `100` | `IED` executed; contract lifecycle is live |
+| `ENDED` | `200` | Terminal state reached |
+
+```mermaid
+stateDiagram-v2
+ [*] --> INACTIVE
+ INACTIVE --> PENDING_IED: Upload schedule
+ PENDING_IED --> ACTIVE: Execute IED
+ ACTIVE --> ACTIVE: Execute events
+ ACTIVE --> ENDED: Terminal state
+ ENDED --> [*]
+
+ state "INACTIVE (0)
Terms and schedule
not fully configured" as INACTIVE
+ state "PENDING_IED (50)
Schedule uploaded
Issuance not activated" as PENDING_IED
+ state "ACTIVE (100)
IED executed
Contract lifecycle live" as ACTIVE
+ state "ENDED (200)
Terminal state reached" as ENDED
+```
+
+## Performance default flag
+
+Kernel lifecycle `status` and contract performance are distinct concepts.
+
+Outside the kernel normalized state, the reference implementation stores a boolean
+RBAC-managed global-state flag, `defaulted`, to record manual contract default
+performance.
+
+An active Trustee **MAY** update this flag by calling `rbac_contract_default`
+with a boolean `defaulted` argument.
+
+`defaulted` is not part of `InitialKernelState` and is not returned by `contract_get_state`.
+Clients that need it **MUST** read the dedicated global-state key.
+
+## Due-event execution
+
+The kernel advances the schedule through explicit ABI calls:
+
+- `contract_execute_ied` applies the first due `IED`;
+- `apply_non_cash_event` applies the next due non-cash event after `IED`;
+- `fund_due_cashflows` processes due cash events and advances the cursor;
+- `contract_get_next_due_event` returns the next due entry, or a zero sentinel after
+end.
+
+This split is the normative execution model for D-ASA.
diff --git a/docs/specs/contract/metadata.md b/docs/specs/contract/metadata.md
index 9d2635a2..b2552896 100644
--- a/docs/specs/contract/metadata.md
+++ b/docs/specs/contract/metadata.md
@@ -1,12 +1,10 @@
# Metadata {#metadata}
-> Metadata can be used to inform optional properties that define the specific D-ASA
-> implementation.
+> Metadata can be used to inform optional properties that define the specific D-ASA.
-The D-ASA metadata **MAY** be set using the **OPTIONAL** `set_asset_metadata` method.
-
-The D-ASA metadata **MAY** be updated using the **OPTIONAL** `set_asset_metadata`
-method.
+> [!IMPORTANT]
+> D-ASA metadata is *informational only*, they have no influence on the contract
+> execution and are non-normative with respect to ACTUS specifications.
## Prospectus
@@ -15,7 +13,7 @@ method.
> The D-ASA can notarize the debt instrument prospectus in the metadata.
The D-ASA *prospectus hash* (`byte[32]`) and *prospectus URL* (`string`) **MAY**
-be set using the **OPTIONAL** `set_asset_metadata` method.
+be set on contract configuration.
The *prospectus hash* **MUST** be computed with SHA-512/256, as defined in
NIST FIPS 180-4.
diff --git a/docs/specs/contract/normalization-and-configuration.md b/docs/specs/contract/normalization-and-configuration.md
new file mode 100644
index 00000000..dce76130
--- /dev/null
+++ b/docs/specs/contract/normalization-and-configuration.md
@@ -0,0 +1,96 @@
+# Normalization and Configuration
+
+The contract configuration flow **MUST** follow the same sequence as the reference
+implementation:
+
+```text
+ContractAttributes -> normalize_contract_attributes() -> contract_config() -> contract_schedule() -> primary_distribution() -> contract_execute_ied()
+```
+
+## Required steps
+
+1. Define the debt instrument with `ContractAttributes`.
+
+1. Normalize the contract off chain with `normalize_contract_attributes()`.
+
+1. Upload `NormalizedActusTerms`, `InitialKernelState`, and the prospectus with
+`contract_config`.
+
+1. Upload the normalized schedule in contiguous pages with `contract_schedule`.
+
+1. Reserve all units with `primary_distribution`.
+
+1. Activate issuance by executing `contract_execute_ied`.
+
+`contract_schedule` **MUST** be called after `contract_config`, and `contract_execute_ied`
+**MUST** be called only after the full schedule is uploaded and the full unit supply
+is reserved.
+
+## Example
+
+The deployment helpers and tests provide a code-accurate PAM fixed coupon bond example:
+
+```python
+attrs = make_pam_fixed_coupon_bond_profile(
+ contract_id=1,
+ status_date=1_700_000_000,
+ initial_exchange_date=1_702_592_000,
+ maturity_date=1_858_112_000,
+ notional_principal=10_000,
+ nominal_interest_rate=0.02,
+ interest_payment_cycle=Cycle.parse_cycle("90D"),
+ interest_payment_anchor=1_710_368_000,
+)
+
+normalized = normalize_contract_attributes(
+ attrs,
+ denomination_asset_id=12345,
+ denomination_asset_decimals=2,
+ notional_unit_value=100,
+ secondary_market_opening_date=1_702_592_000,
+ secondary_market_closure_date=1_858_198_400,
+)
+
+pages = normalized.schedule_pages(page_size=16)
+```
+
+The normalized result has the following properties:
+
+- `notional_principal = 1_000_000` base units;
+- `total_units = 100`;
+- `fixed_point_scale = 1_000_000_000`;
+- `schedule = [IED] + 20 * [IP] + [MD]`;
+- `len(schedule) = 22`;
+- `len(pages) = 2`.
+
+The upload sequence is:
+
+```python
+client.send.contract_config(...)
+client.send.contract_schedule(schedule_page_index=0, is_last_page=False, ...)
+client.send.contract_schedule(schedule_page_index=1, is_last_page=True, ...)
+client.send.primary_distribution(...)
+client.send.contract_execute_ied()
+```
+
+## Schedule paging
+
+Schedule paging is part of configuration, not a transport detail. The caller **MUST**
+preserve:
+
+- contiguous `schedule_page_index` values;
+- contiguous `event_id` values across pages;
+- chronological ordering across page boundaries;
+- one final page flagged with `is_last_page = true`.
+
+## Secondary-market configuration
+
+`transfer_set_schedule` is separate from kernel configuration. Secondary-market
+dates are not part of the on-chain `NormalizedActusTerms` struct in the current
+ABI and, if enforced, **MUST** be configured separately at the execution layer.
+
+## Performance state
+
+The contract-level `defaulted` performance flag is not part of normalization or
+`InitialKernelState`. If used, it is updated separately at execution time through
+the RBAC method `rbac_contract_default`.
diff --git a/docs/specs/contract/numeric-precision.md b/docs/specs/contract/numeric-precision.md
new file mode 100644
index 00000000..9a14408d
--- /dev/null
+++ b/docs/specs/contract/numeric-precision.md
@@ -0,0 +1,85 @@
+# Numeric Precision and Conversions
+
+All values uploaded to the kernel **MUST** fit into AVM `uint64` values.
+
+## Amounts
+
+Display amounts are normalized into ASA base units:
+
+```text
+base_units = int(display_amount * 10^decimals)
+```
+
+The conversion truncates toward zero because normalization converts the scaled decimal
+value to an integer directly.
+
+## Rates
+
+Rates are normalized into fixed-point integers with:
+
+```text
+fixed_point_rate = int(rate * 1_000_000_000)
+```
+
+The D-ASA fixed-point scale is:
+
+```text
+FIXED_POINT_SCALE = 1_000_000_000
+```
+
+The kernel then uses wide multiplication and division to apply those rates safely
+on chain.
+
+## Units
+
+The normalization process **MUST** derive the total unit supply from:
+
+```text
+total_units = notional_principal / notional_unit_value
+```
+
+This division **MUST** be exact.
+
+## Initial exchange amount
+
+The initial exchange amount is normalized as:
+
+```text
+initial_exchange_amount = notional - discount
+initial_exchange_amount = notional + premium
+```
+
+where:
+
+- a positive `premium_discount_at_ied` is treated as a discount;
+- a negative `premium_discount_at_ied` is treated as a premium.
+
+Normalization **MUST** fail if the result becomes negative or exceeds `uint64`.
+
+## Overflow constraints
+
+Every normalization step **MUST** reject:
+
+- negative amounts that would require signed integers on chain;
+- values larger than `2^64 - 1`;
+- scaled amounts or rates that overflow after multiplication by their scale.
+
+## Example
+
+For a denomination asset with `2` decimals:
+
+- `10_000` display units normalize to `1_000_000` base units;
+- `100` display units normalize to `10_000` base units;
+- `0.02` normalizes to `20_000_000` fixed-point units;
+- `1_000_000 / 10_000 = 100` total units.
+
+## Cumulative indices
+
+The accounting layer uses fixed-point cumulative indices for contract-wide cashflow
+funding:
+
+- Contract-wide amount -> Per-unit index delta;
+- Per-unit index delta -> Claim at settlement time.
+
+This design preserves precision at contract level while keeping holder settlement
+lazy and deterministic.
diff --git a/docs/specs/contract/overview.md b/docs/specs/contract/overview.md
new file mode 100644
index 00000000..a72ad57e
--- /dev/null
+++ b/docs/specs/contract/overview.md
@@ -0,0 +1,10 @@
+# Contract
+
+The contract section defines the ACTUS compliance profile, the normalized kernel
+state, the schedule model, and the AVM configuration flow.
+
+The canonical execution chain is:
+
+```text
+ACTUS contract -> AVM normalization -> AVM execution
+```
diff --git a/docs/specs/contract/performance.md b/docs/specs/contract/performance.md
deleted file mode 100644
index db3cc289..00000000
--- a/docs/specs/contract/performance.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Performance {#performance}
-
-> Debt instruments performances are exposed to credit risks.
-
-The D-ASA *performance* \\([PRF]\\) **MUST** be identified with one of the following
-enumerated IDs (`uint8`):
-
-| ID | Name | ACTUS Acronym | Description |
-|:----|:----------:|---------------|:-------------------------------------------------------------------------------------|
-| `0` | Performant | \\([PF]\\) | Contract is performing according to terms and conditions |
-| `1` | Delayed | \\([DL]\\) | Contractual payment obligations are delayed according to the *grace period* |
-| `2` | Delinquent | \\([DQ]\\) | Contractual payment obligations are delinquent according to the *delinquency period* |
-| `3` | Default | \\([DF]\\) | Contract defaulted on payment obligations according to *delinquency period* |
-| `4` | Matured | \\([MA]\\) | Contract matured |
-| `5` | Terminated | \\([TE]\\) | Contract has been terminated |
-
-## Grace Period {#grace-period}
-
-> Debt instruments may define a grace period as a time window after the payment
-> due date during which payment may be retried without a penalty.
-
-The D-ASA **MAY** define a *grace period* \\([GRP]\\) (`uint64`).
-
-The *grace period* **MUST** be defined as UNIX time, in seconds.
-
-In case of non-continuous *day-count conventions* (`ID<255`, see [Day-Count Conventions](day-count-convention.md)
-section), the *grace period* **MUST** be multiples of a day, in seconds (`86400`).
-
-The *grace period* **MAY** be set using the `asset_config` method as *time period*
-with:
-
-- The *time period duration* (`uint64`) equal to the *grace period* duration;
-
-- The *time period repetitions* (`uint64`) equal to `1`.
-
-- The *grace period* **MUST** be anchored \\([ANX]\\) to the *time event* of the
-first failed payment.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with a *grace period*. A D-ASA coupon payment is triggered
-> on due date, but there is not enough liquidity to pay all the investors. The D-ASA
-> program starts counting the *grace period*, increments a failed payments counter,
-> and waits 3 hours to retry. If the D-ASA payment retrial succeeds within the *grace
-> period*, no penalty or fee is applied.
-
-## Delinquency Period {#delinquency-period}
-
-> Debt instruments may define a delinquency period as a time window after the grace
-> period. If payment happens after the delinquency period, then the counterparty
-> is in technical default.
-
-The D-ASA **MAY** define a *delinquency period* \\([DQP]\\) (`uint64`).
-
-The *delinquency period* **MUST** be defined as UNIX time, in seconds.
-
-In case of non-continuous *day-count conventions* (`ID<255`, see [Day-Count Conventions](day-count-convention.md)
-section), the *delinquency period* **MUST** be multiples of a day, in seconds (`86400`).
-
-The *delinquency period* **MAY** be set using the `asset_config` method as *time
-period* with:
-
-- The *time period duration* (`uint64`) equal to the *delinquency period* duration;
-
-- The *time period repetitions* (`uint64`) equal to `1`.
-
-- The *delinquency period* **MUST** be anchored \\([ANX]\\) to the *time event*
-of the first failed payment or at the end of the *grace period* (if any).
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with a *delinquency period*. A D-ASA coupon payment is triggered
-> on due date, but there is not enough liquidity to pay all the investors. The D-ASA
-> program starts counting the *delinquency period*, increments a failed payments
-> counter, and waits 3 hours to retry. If the D-ASA payment retrial succeeds within
-> the *delinquency period*, a penalty or fee is applied.
-
-## Default
-
-> Default is the ultimate failure to pay the lenders according to the payment obligations.
-> When this happens, the creditors have the right to declare default to the debtors.
-
-> Default processes require the intervention of regulatory bodies and courts, therefore
-> the D-ASA default status bridges the default process off-chain.
-
-The D-ASA **SHOULD** enter *default* status if it cannot perform payments on due
-dates.
-
-The D-ASA **MAY** disable all non-administrative methods on *default* status.
-
-> The D-ASA default can be called either automatically (based on program conditions)
-> or manually (based on the decision of a trustee).
-
-The *default* status **MAY** be set with the **OPTIONAL** `set_default_status` method.
-
-{{#include ../../_include/styles.md:example}}
-> The D-ASA has no *grace period* and no *delinquency period*. A D-ASA coupon payment
-> is triggered on due date, but there is not enough liquidity to pay all the investors.
-> The D-ASA contract automatically enters in *default* immediately.
-
-{{#include ../../_include/styles.md:example}}
-> The D-ASA has a *grace period* and a *delinquency period*. A D-ASA coupon payment
-> is triggered on due date, but there is not enough liquidity to pay all the investors.
-> The D-ASA program starts counting the *grace period* and *delinquency period*.
-> If the *delinquency period* expires, then the contract enters in *default*.
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA coupon payment is triggered on due date, but there is not enough liquidity
-> to pay all the investors. The D-ASA contract relies on a trustee to call the *default*.
diff --git a/docs/specs/contract/principal.md b/docs/specs/contract/principal.md
deleted file mode 100644
index 9451baa8..00000000
--- a/docs/specs/contract/principal.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Principal {#principal}
-
-> Debt instruments principal is the amount of capital borrowed and used as a base
-> for calculating interest.
-
-The D-ASA **MAY** define the *principal* \\([NT]\\) (`uint64`), expressed in the
-*denomination asset*.
-
-If the D-ASA has a *principal*, it **MUST** define a *minimum denomination* (`uint64`),
-expressed in the *denomination asset*.
-
-The *minimum denomination* **MUST** be a divisor of the *principal*.
-
-The *principal* and the *minimum denomination* **MUST** be set using the `asset_config`
-method.
-
-If the D-ASA has no defined *principal*, the *principal* and the *minimum denomination*
-**MUST** be set to `0`.
-
-## Discount
-
-> Debt instruments principal may be placed at discount on issuance.
-
-The D-ASA **MAY** define a *discount* rate \\([PDIED]\\) (`uint16`) in *bps* to
-apply to the principal on the issuance.
-
-The *discount* **MUST** be set using the `asset_config` method.
-
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with a principal of 1M EUR paid at maturity
-> and a minimum denomination of 1,000 EUR. The D-ASA has a principal discount of
-> 200 bps (2%) at the issuance. Each D-ASA unit is sold on the primary market at
-> 980 EUR and will be redeemed for 1,000 EUR of principal at maturity.
-
-## Amortization
-
-> ⚠️This section is still subject to major changes and reviews.
-
-> Debt instruments principal may be amortized until maturity, according to an amortization
-> schedule.
-
-If the debt instrument has *principal amortization*, the D-ASA **MUST** define the
-*amortization rates* as `uint16[]` array, where:
-
-- The length of the array is `N=K+1`, with `K` equal to the **fixed** *total coupons*
-(see [Coupons](interests.md#coupons) section);
-
-- The first `K`elements of the array are the *amortizing rates* associated with
-*coupon* payments;
-
-- The last element of the array is the *amortization rate* associated with *outstanding
-principal* payment at *maturity date*;
-
-- The elements of the array are expressed in *basis
-points* (*bps*);
-
-- The sum of all the *amortization rates* is equal to `10,000` *bps*.
-
-The *amortization rates* define the amount of principal \\([PRNXT]\\) paid at the
-next payment date.
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA with 5 coupons and even principal amortizing rates has the following amortizing
-> rates (bps):
->
-> ```uint16[] = [2000, 2000, 2000, 2000, 2000, 0]```
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA with 5 coupons and a single principal early repayment of 50% has the following
-> amortizing rates (bps):
->
-> ```uint16[] = [0, 0, 5000, 0, 0, 5000]```
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA with 4 coupons and different principal amortizing rates (bps):
->
-> ```uint16[] = [1000, 2000, 3000, 4000, 0]```
-
-{{#include ../../_include/styles.md:example}}
-> The following are invalid amortizing rates, since their sum is not equal to `10,000`
-> bps:
->
-> ```uint16[] = [1000, 2000, 3000, 4000, 5000]```
-
-The *amortizing rates* **MUST** be set using the **OPTIONAL** `set_amortizing_rates`
-method.
-
-The *amortizing rates* **MAY** be updated with the **OPTIONAL** `set_amortizing_rates`
-method.
-
-The updated *amortizing rates* **MUST NOT** modify past amortizing rates.
diff --git a/docs/specs/contract/time-events.md b/docs/specs/contract/time-events.md
deleted file mode 100644
index f4d7712e..00000000
--- a/docs/specs/contract/time-events.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# Time Events
-
-> D-ASA *time events* are time on which contractual events are due or on which cyclic
-> events begin or end.
-
-## Primary Distribution
-
-> Debt instruments can be distributed on the primary market during the primary distribution.
-
-> The opening and closure dates define the primary distribution duration.
-
-The D-ASA **MUST** have a *primary opening* (`uint64`) and *closure date* (`uint64`).
-
-## Issuance
-
-> Debt instruments start accruing interest on the issuance date.
-
-The D-ASA **MUST** have an *issuance date* \\([IED]\\) (`uint64`).
-
-## Maturity
-
-> Debt instruments may have a maturity date, on which the principal is repaid and
-> the contract obligations expire.
-
-> Debt instruments may have a fixed or variable maturity date.
-
-The D-ASA **MAY** have a *maturity date* \\([MD]\\) (`uint64`).
-
-The *maturity date* **MAY** be updated in case of early repayment options (see
-[Early Repayment Options](early-repayment-options.md) section).
-
-## Time Events Array
-
-The D-ASA **MUST** define *time events* \\([TEV]\\) as `uint64[]` array, where:
-
-- The length of the array **MUST** be:
-
- - `N=K+4`, if the D-ASA **has** a *maturity date;*
- - `N=K+3`, if the D-ASA **has not** a *maturity date;*
-
- with `K` equal to the *total coupons*.
-
-- The first element **MUST** be the *primary distribution opening date* (`uint64`):
-the time at which the D-ASA primary distribution opens;
-
-- The second element **MUST** be the *primary distribution closure date* (`uint64`):
-the time at which the D-ASA primary distribution closes;
-
-- The third element **MUST** be the *issuance date* (`uint64`): the time at which
-D-ASA starts to accrue interest on the principal;
-
-- If the D-ASA has a **fixed** number of *coupons*, then the next `K`-elements
-**MUST** be the *coupon due dates* \\([IP]\\) (`uint64[K]`): times at which the
-coupons mature and the interest payment \\([IPPNT]\\) can be executed[^1]. The first
-coupon due date corresponds to \\([IPANX]\\).
-
-- If the D-ASA has **unlimited** number of *coupons*, then `K` **MUST** be `0` and
-*coupons due dates* \\([IP]\\) are managed with *time periods* (see [Time Periods](time-periods.md#unlimited-time-schedule)
-section).
-
-- If the D-ASA **has** a *maturity date*, the last element **MUST** be the *maturity
-date* (`uint64`).
-
-The *time events* **MUST** be sorted in strictly ascending order.
-
-The *time events* **MUST** be defined as UNIX time, in seconds.
-
-In the case of non-continuous *day-count conventions* (`ID<255`, see [Day-Count
-Conventions](day-count-convention.md) section), the *time periods* between subsequent
-events **MUST** be multiples of a day, in seconds (`86400`)[^2].
-
-The *time events* **MUST** be set using the `asset_config` method.
-
-{{#include ../../_include/styles.md:example}}
-> The following are valid *time events* (UNIX times):
->
-> ```text
-> uint64[] = [1704067200, 1735603200, 1767139200, 1798675200, 1830211200]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> The following are invalid (respectively unsorted and not-strictly sorted) *time
-> events* (UNIX times):
->
-> ```text
-> uint64[] = [1830211200, 1704067200, 1735603200, 1767139200, 1798675200]
-> ```
->
-> ```text
-> uint64[] = [1704067200, 1735603200, 1767139200, 1798675200, 1830211200, 1830211200]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA with `K` *total coupons* and a **defined** *maturity date*, has the following
-> *time events*:
->
-> ```text
-> uint64[] = [primary_distribution_opening_date, primary_distribution_closure_date, issuance_date, coupon_due_date_1, ..., coupon_due_date_K, maturity_date]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA whose primary distribution lasts from December 1st, 2023 00:00:00 GMT+0
-> to December 15th, 2023 00:00:00 GMT+0, is issued on January 1st, 2024 00:00:00
-> GMT+0 and matures on January 1st, 2028 00:00:00 GMT+0, with 4 annual coupons,
-> each paid on December 31st 00:00:00 GMT+0, has the following *time events* array
-> (UNIX times):
->
-> ```text
-> uint64[] = [1701388800, 1702598400, 1704067200, 1735603200, 1767139200, 1798675200, 1830211200, 1830297600]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA whose primary distribution lasts from December 1st, 2023 00:00:00 GMT+0
-> to December 15th, 2023 00:00:00 GMT+0, is issued on January 1st, 2024 00:00:00
-> GMT+0 and matures on January 1st, 2028 00:00:00 GMT+0, with zero coupons, has
-> the following *time events* array (UNIX times):
->
-> ```text
-> uint64[] = [1701388800, 1702598400, 1704067200, 1830297600]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA whose primary distribution lasts from December 1st, 2023 00:00:00 GMT+0
-> to December 15th, 2023 00:00:00 GMT+0, is issued on January 1st, 2024 00:00:00
-> GMT+0 and no maturity, with perpetual coupons, has the following *time events*
-> array (UNIX times):
->
-> ```text
-> uint64[] = [1701388800, 1702598400, 1704067200]
-> ```
-
----
-
-[^1]: The D-ASA supports just interest payments at the end of each coupon period.
-
-[^2]: This applies to any kind of time event (e.g., principal and interest payments,
-primary and secondary market dates, early repayments options, interest updates,
-etc.)
diff --git a/docs/specs/contract/time-periods.md b/docs/specs/contract/time-periods.md
deleted file mode 100644
index 5ddb5303..00000000
--- a/docs/specs/contract/time-periods.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# Time Periods
-
-> D-ASA time periods can be used to define recurring (or "cyclic") events.
-
-> D-ASA time periods start on (are "anchored" to) *time events*.
-
-The D-ASA **MAY** define *time periods* \\([CL]\\) as `(uint64,uint64)[]` array,
-where:
-
-- The first element of the tuple defines the *time period duration* (`uint64`).
-It **MUST** be strictly greater than `0`;
-
-- The second element of the tuple defines the *time period repetitions* (`uint64`).
-It **MUST** be `0` if *repetitions* are **unlimited**;
-
-The *time periods* **MUST** be anchored \\([ANX]\\) to a *time event* (see [Time
-Events](time-events.md) section).
-
-The *time periods* **MUST** be defined as UNIX time, in seconds.
-
-In case of non-continuous *day-count conventions* (`ID<255`, see [Day-Count Conventions](day-count-convention.md)
-section), the *time periods* **MUST** be multiples of a day, in seconds (`86400`).
-
-The *time periods* **MAY** be set using the `asset_config` method.
-
-If the D-ASA does not implement *time periods,* it **MUST** be set to `[]` in the
-`asset_config` method.
-
-{{#include ../../_include/styles.md:example}}
-> The following are valid *time periods* (UNIX times) indicating:
->
-> - a daily time event with unlimited repetitions
-> - a monthly (30 days) time event with 12 repetitions
->
-> ```text
-> (uint64,uint64)[] = [(86400, 0), (2592000, 12)]
-> ```
-
-{{#include ../../_include/styles.md:example}}
-> The following are invalid *time periods* (UNIX times):
->
-> ```text
-> (uint64,uint64)[] = [(0, 0), (0, 12)]
-> ```
-
-The *time periods* **MUST** be chronologically consistent with respect to the *time
-events*.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with an *issuance date* and a *maturity date*, defined as *time
-> events*, and 4 coupons whose periods are defined by *time periods*.
->
-> The sum of the 4 coupon *time period durations* must be smaller than the time
-> period between the *issuance date* and the *maturity date*.
-
-## Unlimited Time Schedule
-
-If the D-ASA has an **undefined** number of *coupons*, then the *coupon due dates*
-\\([IP]\\) **MUST** be defined with a *time period* `(uint64,uint64)`.
-
-The first coupon due date \\([IPANX]\\) occurs on *issuance date* plus the *time
-period duration* \\([IPCL]\\) and the interest payment \\([IPPNT]\\) can be executed[^1].
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA whose primary distribution lasts from December 1st, 2023 00:00:00 GMT+0
-> to December 15th, 2023 00:00:00 GMT+0, is issued on January 1st, 2024 00:00:00
-> GMT+0 and no maturity, with perpetual coupons maturing every 365 days, has the
-> following *time events* array (UNIX times):
->
-> ```text
-> uint64[] = [1701388800, 1702598400, 1704067200]
-> ```
->
-> and the following *time period*:
->
-> ```text
-> (uint64, uint64) = [31536000, 0]
-> ```
->
-> The first coupon due date \\([IPANX]\\) is `1704067200 + 31536000` (UNIX time).
-
----
-
-[^1]: The D-ASA supports just interest payments at the end of each coupon period.
diff --git a/docs/specs/contract/time-schedule.md b/docs/specs/contract/time-schedule.md
deleted file mode 100644
index eb1c13f5..00000000
--- a/docs/specs/contract/time-schedule.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Time Schedule
-
-> Debt instruments may have fixed or variable time schedule (e.g., variable coupon
-> due date, etc.).
-
-> Debt instruments may have a limited or unlimited time schedule (e.g., a fixed
-> coupon bond or a perpetual bond).
-
-## Time Measurement
-
-The time on the Algorand Virtual Machine is defined by the block UNIX
-timestamp[^1].
-
-> The Algorand protocol has dynamic block latency with instant finality. At the
-> time of writing (Jan 2025), block finality is about 2.8 seconds[^2].
-
-> The AVM time may present a drift with respect to external standard time references.
-
-## Events
-
-The D-ASA events \\([EVT]\\) are defined by:
-
-- *time events* \\([TEV]\\) (or "anchors");
-- *time periods* (or "cycles").
-
----
-
-[^1]: ACTUS is based on ISO 8601
-timestamps. The UNIX to ISO 8601 conversions are left to clients (see [Calendar](day-count-convention.md#calendar)
-section).
-
-[^2]: ACTUS timestamps have millisecond precision, which is not compatible with
-blockchains' latency.
diff --git a/docs/specs/contract/type.md b/docs/specs/contract/type.md
deleted file mode 100644
index c01e9e66..00000000
--- a/docs/specs/contract/type.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Contract Type
-
-> Debt instruments such as bullet bonds, amortizing loans, mortgages, etc. differ
-> based on their cash flow exchange patterns (e.g., principal and interest payment
-> time schedules, fixed or variable interest rates, etc.).
-
-> The ACTUS taxonomy reduces the majority of all financial contracts to a defined
-> set of 32 generalized cash flow exchange patterns, called contract types.
-
-It is **RECOMMENDED** to classify the D-ASA with an ACTUS *contract type* \\([CT]\\)
-(`uint8`) (see the ACTUS
-taxonomy).
-
-The *contract type* **MUST** have the following properties:
-
-- `family`: Basic
-- `class`: Fixed Income
-
-The *contract type* **MAY** be set using the **OPTIONAL** `set_asset_metadata` method
-(see [Metadata](metadata.md) section).
-
-It is **RECOMMENDED** to use the unique D-ASA ID as *contract identifier* \\([CID]\\).
diff --git a/docs/specs/contract/variable-interests.md b/docs/specs/contract/variable-interests.md
deleted file mode 100644
index 7a054b26..00000000
--- a/docs/specs/contract/variable-interests.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Variable Rates
-
-> ⚠️This section is still subject to major changes and reviews.
-
-> Debt instruments may have variable interest rates, based on external data oracles.
-
-If the debt instrument has *variable interest rates*, the D-ASA **MAY** implement
-the **OPTIONAL** `set_variable_interest_rate` method.
-
-## Interest Update Dates
-
-The D-ASA **MUST** define *interest update dates* of known \\([RRF]\\) or unknown
-\\([RR]\\) with respect to:
-
-- *time events* if the D-ASA has **fixed** number of *coupons* (see [Time
-Events](time-events.md#time-events-array) section);
-
-- *time periods* if the D-ASA has **undefined** number of *coupons* (see [Time
-Periods](time-periods.md#unlimited-time-schedule) section).
-
-The first *interest update date* corresponds to \\([RRANX]\\).
-
-## Spread
-
-> Debt instruments typically define a spread (bps) with respect to an external index
-> to update the interest rate.
-
-The D-ASA **MAY** define a *rate spread* \\([RRSP]\\) (`uint16`) in *bps* to apply
-to the external interest data feed.
-
-The *rate spread* **MUST** be set using the **OPTIONAL** `set_variable_interest_rate`
-method.
-
-If the debt instrument has no *rate spread*, then the D-ASA **MUST** set the *rate
-spread* to `0`.
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA has variable interest rates pegged to an off-chain index. Interest update
-> is equal to the off-chain index plus the *rate spread* (bps).
-
-## Cap and Floor
-
-> Debt instruments may define limitations to the interest rate variability, either
-> over the whole contract lifespan or over specific periods.
-
-### Life Caps
-
-The D-ASA **MAY** define a *life cap* \\([RRLC]\\) (`uint16`) in *bps* to apply
-to the variable *interest rate*.
-
-The D-ASA **MAY** define a *life floor* \\([RRLF]\\) (`uint16`) in *bps* to apply
-to the variable *interest rate*.
-
-The *life cap* and the *life floor* **MUST** be set using the **OPTIONAL** `set_variable_interest_rate`
-method.
-
-If the debt instrument has no *life cap*, then the D-ASA **MUST** set the *life
-cap* to `0`.
-
-If the debt instrument has no *life floor*, then the D-ASA **MUST** set the *life
-floor* to `0`.
-
-### Period Caps
-
-The D-ASA **MAY** define a *period cap* \\([RRPC]\\) (`uint16`) in *bps* to apply
-to the variable *interest rate*.
-
-The D-ASA **MAY** define a *period floor* \\([RRPF]\\) (`uint16`) in *bps* to
-apply to the variable *interest rate*.
-
-The *period cap* and the *period floor* **MUST** be set using the **OPTIONAL** `set_variable_interest_rate`
-method.
-
-If the debt instrument has no *period cap*, then the D-ASA **MUST** set the *period
-cap* to `0`.
-
-If the debt instrument has no *period floor*, then the D-ASA **MUST** set the *period
-floor* to `0`.
-
-## Fixing Period
-
-> Debt instruments usually schedule interest rate updates before the new rate applies
-> (defined by the rate reset schedule).
-
-The D-ASA **MUST** define a *fixing period* \\([RRFIX]\\) (`uint64`) that specifies
-a period of time before the *coupon due date* in which the interest can be updated.
-
-The *fixing period* **MUST** be set using the **OPTIONAL** `set_variable_interest_rate`
-method.
-
-## Rates Update
-
-> Debt instruments may have a fixed or undefined rate update schedule.
-
-If the debt instrument has a **fixed** rate update schedule, then the D-ASA **MUST**
-use the *coupon due dates* (either *time events* or *time periods*) as anchors for
-the rate update events (see [Time Schedule](time-schedule.md) section).
-
-The *interest rate* **MAY** be updated using the **OPTIONAL** `update_interest_rate`
-method.
-
-If the D-ASA has coupons, the *interest rate* **MUST NOT** be updated if there is
-any due coupon still to be paid.
-
-The *coupon rates* **MAY** be updated using the **OPTIONAL** `update_coupon_rates`
-method.
-
-The *coupon rates* **MUST NOT** be updated if there is any due coupon still to be
-paid.
-
-The updated *coupon rates* **MUST NOT** modify past coupon rates.
-
-The *interest rate* and *coupon rates* updatability **MUST** be restricted to the
-*interest oracle* role (see [Oracles](../rbac/roles.md#oracles) section).
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA has variable interest rates pegged to an off-chain index. Interest update
-> permissions are granted to an external interest oracle.
-
-{{#include ../../_include/styles.md:example}}
-> A D-ASA has variable interest rates based on covenant breaches. Interest update
-> permissions are granted to a trustee in charge of verifying breaches.
diff --git a/docs/specs/contract/variable-time-schedule.md b/docs/specs/contract/variable-time-schedule.md
deleted file mode 100644
index 5e749664..00000000
--- a/docs/specs/contract/variable-time-schedule.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Variable Time Schedule {#variable-time-schedule}
-
-> Debt instruments can have variable time schedule, based on different contract
-> terms, such as covenants, etc.
-
-## Variable Time Events {#variable-time-events}
-
-The *time events* **MAY** be updated with the **OPTIONAL** `update_time_events`
-method.
-
-The updated *time events* **MUST NOT** modify past events.
-
-> A reference implementation **SHOULD** restrict the time events updatability according
-> to the optionalities of the agreement.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with a *maturity date* and 4 coupons, defined by *time events*.
-> The 2nd coupon is due.
->
-> The updated time events **can no longer** modify:
->
-> - the *primary distribution opening date*;
-> - the *primary distribution closure date*;
-> - the *issuance date*;
-> - the 1st and 2nd coupon due dates.
->
-> The updated time events **can still** modify:
->
-> - the 3rd and 4th coupon due dates;
-> - the *maturity date*.
-
-## Variable Time Periods {#variable-time-periods}
-
-The *time periods* **MAY** be updated with the **OPTIONAL** `update_time_periods`
-method.
-
-The updated *time periods* **MUST** preserve chronological consistency with respect
-to the *time events*.
-
-> A reference implementation **SHOULD** restrict the time periods updatability.
-
-{{#include ../../_include/styles.md:example}}
-> Let's have a D-ASA with an *issuance date* and a *maturity date*, defined as *time
-> events*, and 4 coupons whose periods are defined by *time periods*.
->
-> The sum of the 4 updated coupon *time period durations* must be smaller than the
-> time period between the *issuance date* and the *maturity date*.
diff --git a/docs/specs/execution/overview.md b/docs/specs/execution/overview.md
new file mode 100644
index 00000000..0cb22d0a
--- /dev/null
+++ b/docs/specs/execution/overview.md
@@ -0,0 +1,4 @@
+# Execution
+
+The execution layer applies the configured contract in production through primary
+distribution, cashflow funding and claims, and unit transfers.
diff --git a/docs/specs/execution/payment-agent/coupons-payment.md b/docs/specs/execution/payment-agent/coupons-payment.md
deleted file mode 100644
index fa3daad1..00000000
--- a/docs/specs/execution/payment-agent/coupons-payment.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Coupons Payment {#coupons-payment}
-
-If the D-ASA has coupons, it **MUST** pay due coupons, according to the *time schedule*,
-with the **OPTIONAL** `pay_coupon` method.
-
-The D-ASA **MUST** pay due coupons, once, to the Investors.
-
-The D-ASA **MUST NOT** pay coupons before *coupon due dates*.
-
-In the case of an on-chain payment agent, the D-ASA **MUST** pay the *coupons* to
-the Investor Payment Addresses.
diff --git a/docs/specs/execution/payment-agent/early-repayment.md b/docs/specs/execution/payment-agent/early-repayment.md
deleted file mode 100644
index 0999c4db..00000000
--- a/docs/specs/execution/payment-agent/early-repayment.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Early Repayment {#early-repayment}
-
-If the *early repayment options* repays the principal amount before *maturity* (*prepayment
-effect* `1`, see [Prepayment Effects](../../contract/early-repayment-options.md#prepayment-effects)
-section), the D-ASA **MUST** implement the **OPTIONAL** `early_repayment` method.
-
-In the case of an on-chain payment agent, the D-ASA **MUST** repay the *principal*
-to the Investor Payment Addresses.
-
-The D-ASA units associated with the early repaid principal **MUST** be removed from
-Investors’ Accounts and from circulation.
-
-{{#include ../../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with a *principal* of 1M EUR and a *minimum
-> denomination* of 1,000 EUR. The D-ASA originally had 1,000 *total units* in circulation.
-> An early repayment of 500k EUR (equal to 500 units) is executed for some Investors.
-> The D-ASA now has 500 circulating units (worth 1,000 EUR each), while 500 early
-> repaid units are removed from circulation.
diff --git a/docs/specs/execution/payment-agent/payment-agent.md b/docs/specs/execution/payment-agent/payment-agent.md
index a12903eb..8f04fc4d 100644
--- a/docs/specs/execution/payment-agent/payment-agent.md
+++ b/docs/specs/execution/payment-agent/payment-agent.md
@@ -1,40 +1,66 @@
# Payment Agent {#payment-agent}
> Debt instruments' cash flows usually involve:
->
> - *Principal repayment*
> - *Early repayments*
> - *Coupon payments*
-> D-ASA cash flows might not be executed synchronously for all the Investors. The
-> execution of a given cash flow could last a few blocks[^1], depending on the number
-> of payees.
+The Payment Agent executes ACTUS cashflows in two phases:
-> Although a single block proposer could order transactions in a block, in a healthy
-> network block proposers are selected randomly by the Algorand consensus. Therefore,
-> order of payments in a block is random and unbiased, with no systematic advantage
-> or precedence of a payee with respect to others.
+1. `fund_due_cashflows`
+1. `claim_due_cashflows`
-> D-ASA supports both on-chain and off-chain payment agents, depending on the settlement
-> asset (see [Settlement](settlement.md) section).
+This split is normative for the current reference implementation. There are no
+separate `pay_coupon`, `pay_principal`, or legacy early-repayment payment methods.
-> For reference implementations using on-chain payment agents, the AVM fees (ALGO)
-> for the cash flows execution **SHOULD** be paid by who triggers the cash flows.
+## Funding phase
-> A reference implementation of an on-chain payment agent **SHOULD NOT** require
-> extra fees for the cash flows execution.
+`fund_due_cashflows` **MUST**:
-The D-ASA payment methods **MAY** provide additional information about the payment.
+- Inspect the schedule at the current global cursor;
+- Process only due cash events (`IP`, `PR`, `MD`);
+- Compute contract-wide interest and principal due from the normalized schedule;
+- Reserve settlement funds in the contract;
+- Convert those amounts into cumulative per-unit indices;
+- Advance the global event cursor.
+
+Only the Arranger **MUST** be able to call `fund_due_cashflows`.
+
+## Claim phase
+
+`claim_due_cashflows` **MUST**:
+
+- Settle the holder position to the latest cumulative indices;
+- Expose the holder's claimable interest and principal amounts;
+- Execute an on-chain transfer if the payment address is executable;
+- Otherwise leave the claimable amounts reserved for a later attempt.
+
+The method **MUST** return an opaque `payment_info` context unchanged so callers
+can bind off-chain metadata to the claim.
> The payment information could be used, for example, for:
->
> - Adding unique identifiers or external context to the payments;
> - Enabling external payment system integration in the case of off-chain settlement;
> - Providing information about the settled amount and conversion rate used with
> respect to the denomination asset.
----
+## Authorization model
+
+If an Op Daemon address is configured, `claim_due_cashflows` **MUST** only accept
+calls from:
+
+- The Op Daemon;
+- The Account *holding address*;
+- The Account *payment address*.
+
+If no Op Daemon is configured, the current implementation applies no extra caller
+restriction beyond the contract and account checks.
+
+## Payment ordering
-[^1]: The Algorand protocol has dynamic block latency with instant finality. At
-the time of writing (Jan 2025), block finality is about 2.8 seconds, the block size
-is 5 MB, resulting in theoretical throughput of 10,000 transactions per second.
+> [!IMPORTANT]
+> Algorand block proposers could order transactions in a block. In a *healthy network*,
+> block proposers are selected randomly by the Algorand consensus based on a Verifiable
+> Random Function (VRF). Therefore, the order of payments in a block is random and
+> unbiased, with no systematic advantage or precedence of a payee with respect to
+> others.
diff --git a/docs/specs/execution/payment-agent/principal-repayment.md b/docs/specs/execution/payment-agent/principal-repayment.md
deleted file mode 100644
index 127b756c..00000000
--- a/docs/specs/execution/payment-agent/principal-repayment.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Principal Repayment {#principal-repayment}
-
-> Debt instruments repay the principal according to the repayment schedule.
-
-The *principal* **MUST** be repaid according to a *principal repayment schedule*.
-
-In the case of an on-chain payment agent, the D-ASA **MUST** repay the *principal*
-to the Investor’s Payment Addresses.
-
-## Bullet Schedule
-
-If the debt instrument has a *bullet principal repayment schedule*, the principal
-**MUST** be paid entirely at the *maturity date* using the `pay_principal` method.
-
-If the D-ASA has coupons, the *principal* **MUST NOT** be paid if there is any due
-coupon still to be paid.
-
-## Amortizing Schedule
-
-If the debt instrument has an *amortizing principal repayment schedule*, the *principal*
-**MUST** be repaid along with the **fixed** number of *coupons*, according to the
-*principal amortization* (see [Amortization](../../contract/principal.md#amortization)
-section), using the `pay_coupon` method.
-
-The first coupon due date corresponds to \\([PRANX]\\).
-
-The D-ASA *unit value* **MUST** be updated according to the *outstanding principal.*
-
-It is **RECOMMENDED** to use an ACTUS *interest calculation base* \\([IPCB]\\).
-
-> A reference implementation **SHOULD** calculate interest on the outstanding principal.
-
-> A reference implementation **SHOULD** restrict the amortizing rates updatability.
-
-{{#include ../../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with a *principal* of 1M EUR and a *minimum
-> denomination* of 1,000 EUR, 5 coupons, and an even amortizing schedule (20% amortizing
-> rate). The D-ASA has 1,000 *total units*. The D-ASA initial *unit value* is 1,000
-> EUR. The 1st coupon pays both the interest (according to the *coupon rates*) and
-> 20% of the principal (according to *amortizing rates*). The D-ASA outstanding
-> principal is 800k EUR. The D-ASA *unit value* is 800 EUR.
-
-{{#include ../../../_include/styles.md:example}}
-> Let’s have a D-ASA denominated in EUR, with a *principal* of 1M EUR and a *minimum
-> denomination* of 1,000 EUR. The D-ASA originally had 1,000 *total units* (worth
-> 1,000 EUR each) in circulation. A partial repayment of 500k EUR (50% of the original
-> principal) must be executed pro-rata to all investors. A single amortizing rate
-> of 5,000 bps is used. After the partial repayment, the D-ASA still has 1000 circulating
-> units (worth 500 EUR each).
diff --git a/docs/specs/execution/payment-agent/settlement.md b/docs/specs/execution/payment-agent/settlement.md
index 9d9fdc67..d4a89a4c 100644
--- a/docs/specs/execution/payment-agent/settlement.md
+++ b/docs/specs/execution/payment-agent/settlement.md
@@ -2,11 +2,8 @@
> Debt instruments cash flows may be settled in a currency different from the denomination.
-The D-ASA **MUST** define either an on-chain or off-chain *settlement asset* \\([CURS]\\)[^1]
-to regulate the cash flows.
-
-The *settlement asset identifier* (`uint64`) **MUST** be set using the `asset_config`
-method.
+The D-ASA **MUST** define either an on-chain or off-chain *settlement asset*
+\\( [CURS] \\)[^1] to regulate the cash flows.
All values (`uint64`) are integer minor units of the relevant on-chain or off-chain
*settlement asset*.
@@ -22,6 +19,13 @@ If the D-ASA **does not define** a different *settlement asset*, then the cash f
**MUST** be settled in the denomination asset and the *settlement asset identifier*
**MUST** be equal to the *denomination asset identifier*.
+> [!NOTE]
+> The D-ASA reference implementation supports only on-chain ASA settlement assets.
+
+> [!NOTE]
+> The D-ASA reference implementation requires settlement assets to be the denomination
+> asset.
+
## On-chain settlement {#on-chain-settlement}
The *settlement asset* **MUST** be an Algorand Standard Asset (ASA), an Application
@@ -34,7 +38,7 @@ If asset is ALGO (`0`): amount is in microALGOs (\\( 10^{-6} \\) ALGO).
If asset is ASA or App: amount is in base units as per that asset’s `decimals`.
-{{#include ../../../_include/styles.md:example}}
+> [!TIP]
> The value (`uint64`) `10000` of settlement in ASA settlement 2 decimals is interpreted
> as `100.00` units of the ASA.
@@ -52,7 +56,7 @@ The *settlement asset* **MUST** use the decimal digits specified by the [!TIP]
> The value (`uint64`) `10000` of a settlement in EUR (ISO 4217, 2 decimals) is
> interpreted as `100.00` Euro.
diff --git a/docs/specs/execution/primary-market.md b/docs/specs/execution/primary-market.md
deleted file mode 100644
index a9411de6..00000000
--- a/docs/specs/execution/primary-market.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Primary Market {#primary-market}
-
-> Debt instruments can be distributed on the primary market in different ways, such
-> as book building, auctions, etc.
-
-The D-ASA units **MUST** be distributed to D-ASA accounts, at most up to *total
-units*, using the `primary_distribution` method.
-
-The primary distribution of D-ASA *units* **SHALL** be completed between the *primary
-distribution opening* and *closing dates*, according to the primary market.
-
-The `primary_distribution` method **MUST** be called by an authorized primary distribution
-entity.
-
-{{#include ../../_include/styles.md:example}}
-> The primary market is performed as an auction on a dedicated Algorand Application.
-> The implementation requires the `primary_distribution` method to be called exclusively
-> by the primary market Application, which defines the auction’s outcome.
-
-{{#include ../../_include/styles.md:example}}
-> The primary market is performed as a book building by an authorized Book-builder
-> Address. The implementation requires the `primary_distribution` method to be called
-> exclusively by the authorized Book-builder.
diff --git a/docs/specs/execution/secondary-market.md b/docs/specs/execution/secondary-market.md
deleted file mode 100644
index db4b77fb..00000000
--- a/docs/specs/execution/secondary-market.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Secondary Market {#secondary-market}
-
-> Debt instruments can be traded on secondary markets.
-
-If the debt instrument can be traded on secondary markets, the D-ASA **MUST** be
-transferable and implement the **OPTIONAL** `set_secondary_time_events`.
-
-The D-ASA **MUST** define *secondary market time events* as `uint64[]` array, where:
-
-- The length of the array **MUST** be `N>=1`;
-
-- The first element **MUST** be the *secondary market opening date* (`uint64`):
-the time at which the secondary market opens;
-
-- If the secondary market has a closure date, the last element **MUST** be the
-*secondary market closure date* (`uint64`): the time at which the secondary market
-closes.
-
-The *secondary market time events* **MUST** be sorted in strictly ascending order.
-
-The *secondary market opening date* **MUST NOT** be earlier than the *issuance date*.
-
-The *secondary market closure date* **MUST NOT** be later than the *maturity date*.
-
-In case of non-continuous *day-count conventions* (`ID<255`, see [Day-Count Conventions](../contract/day-count-convention.md)
-section), the *time periods* between subsequent events **MUST** be multiples of
-a day, in seconds (`86400`).
-
-The *secondary market time events* **MUST** be set using the `set_secondary_time_events`
-method.
-
-The *secondary market time events* **MAY** be updated with the `set_secondary_time_events`
-method.
-
-The updated *secondary market time events* **MUST NOT** modify past events.
-
-The `asset_transfer` method **MUST** fail if the secondary market is closed.
diff --git a/docs/specs/execution/time.md b/docs/specs/execution/time.md
new file mode 100644
index 00000000..e989f0c6
--- /dev/null
+++ b/docs/specs/execution/time.md
@@ -0,0 +1,8 @@
+# Time
+
+The time on the Algorand Virtual Machine is defined by the block UNIX timestamp.
+
+> The Algorand protocol has dynamic block latency with instant finality. At the
+> time of writing (March 2026), block finality is about 2.8 seconds.
+
+> The AVM time may present a drift with respect to external standard time references.
diff --git a/docs/specs/execution/transfer-agent.md b/docs/specs/execution/transfer-agent.md
deleted file mode 100644
index af2a4dfd..00000000
--- a/docs/specs/execution/transfer-agent.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Transfer Agent {#transfer-agent}
-
-> Debt instruments can be transferable among investors.
-
-> D-ASA supports both on-chain and off-chain transfer agents.
-
-The Transfer Agent **SHALL** authorize the D-ASA transfers according to the transferability
-policy and the secondary market.
-
-The sender and receiver of the D-ASA transfer:
-
-- **MUST** have a valid Holding Addresse, and
-- **MUST** be different from each other, and
-- **MUST NOT** be suspended from operations.
-
-The sender of the D-ASA transfer **MUST** have sufficient D-ASA *units* to transfer.
-
-The transferred D-ASA *units*:
-
-- **MUST** be non-zero, and
-- **MUST** be *fungible* (see [D-ASA Units fungibility](../accounting/units.md#fungibility-fungibility)
-section), and
-- **MUST** record D-ASA *unit value* and *paid coupons*.
-
-D-ASA *units* **SHALL NOT** be transferred if the sender has pending due coupon
-payments.
-
-> The D-ASA transferability policy may involve and integrate KYC/AML processes,
-> secondary market restrictions, etc.
-
-If the debt instrument is transferable, the D-ASA **MUST** implement the **OPTIONAL**
-`asset_transfer` methods.
-
-The `asset_transfer` method **MAY** be restricted to an authorized Transfer Agent.
diff --git a/docs/specs/execution/transfer-agent/dvp.md b/docs/specs/execution/transfer-agent/dvp.md
new file mode 100644
index 00000000..f6681bf5
--- /dev/null
+++ b/docs/specs/execution/transfer-agent/dvp.md
@@ -0,0 +1,27 @@
+# Delivery-vs-Payment (DvP)
+
+> Delivery-vs-Payment (DvP) can be used to exchange D-ASA units both on the primary
+> market (placement) and secondary market (e.g., OTC trades).
+
+The D-ASA framework supports the execution of composable DvP transactions.
+
+The D-ASA DvP transactions are native Algorand Group transactions.
+
+The Algorand Group transactions ensure **atomicity**, they are executed on an "all-or-nothing"
+basis, meaning that either all transactions in the group are executed or none of
+them are.
+
+Therefore, D-ASA DvP ensures **no counterparty risk**, as the transfer of D-ASA
+units and the corresponding payment occur simultaneously. If either the transfer
+or the payment fails, the entire transaction group is rejected, preventing any party
+from being left in a vulnerable position.
+
+The simplest DvP consists of:
+
+- A *delivery-leg*, executed by the D-ASA Transfer Agent;
+- A *payment-leg*, executed as a general Algorand transaction (usually an ASA transfer).
+
+The **payment** is not restricted to specific assets (e.g., not restricted to the
+denomination or settlement assets).
+
+The amounts of the DvP are negotiated between the two parties.
diff --git a/docs/specs/execution/transfer-agent/primary-market.md b/docs/specs/execution/transfer-agent/primary-market.md
new file mode 100644
index 00000000..781f4ba1
--- /dev/null
+++ b/docs/specs/execution/transfer-agent/primary-market.md
@@ -0,0 +1,52 @@
+# Primary Market {#primary-market}
+
+> Debt instruments can be distributed on the primary market in different ways, such
+> as book building, auctions, etc.
+
+The primary market allocates units before the contract becomes active.
+
+## Allocation phase
+
+`primary_distribution` **MUST** reserve units for an existing holder account while
+the contract is in `STATUS_PENDING_IED`.
+
+The method **MUST** reject allocations that:
+
+- Occur before configuration is complete;
+- Occur after `IED`;
+- Exceed the remaining unallocated supply;
+- Target a suspended or missing holder account;
+- Request zero units.
+
+Only an active Primary Dealer **MUST** be able to call `primary_distribution`.
+
+## Completion requirement
+
+`contract_execute_ied` **MUST** fail unless:
+
+```text
+reserved_units_total == total_units
+```
+
+This rule makes full issuance an explicit precondition of activation in the current
+reference implementation.
+
+## Activation
+
+Primary distribution reserves units only. Reserved units do not accrue funded ACTUS
+cashflows until `IED` executes and the holder position is activated.
+
+## Proxies
+
+The Primary Dealer role **MAY** be delegated to a proxy Application implementing
+a primary market.
+
+> [!TIP]
+> The primary market is performed as an auction on a dedicated Algorand Application.
+> The implementation requires the `primary_distribution` method to be called exclusively
+> by the primary market Application, which defines the auction’s outcome.
+
+> [!TIP]
+> The primary market is performed as a book building by an authorized Book-builder
+> Address. The implementation requires the `primary_distribution` method to be called
+> exclusively by the authorized Book-builder.
diff --git a/docs/specs/execution/transfer-agent/secondary-market.md b/docs/specs/execution/transfer-agent/secondary-market.md
new file mode 100644
index 00000000..324f99c3
--- /dev/null
+++ b/docs/specs/execution/transfer-agent/secondary-market.md
@@ -0,0 +1,30 @@
+# Secondary Market {#secondary-market}
+
+> Debt instruments can be traded on secondary markets.
+
+Secondary-market control is an execution-layer policy.
+
+## Transfer window
+
+If transfer window enforcement is required, the Arranger **MUST** configure it with
+`transfer_set_schedule(open_date, closure_date)`.
+
+The transfer window is interpreted as:
+
+```text
+open_date <= now < closure_date
+```
+
+The method **MUST** reject a schedule in which `open_date >= closure_date`.
+
+## Default behavior
+
+If no transfer window is configured, the current reference implementation applies
+no additional secondary-market date restriction beyond the generic transfer checks.
+
+## Relation to normalization
+
+The SDK normalization helpers may carry secondary-market dates as deployment metadata.
+Those dates are not part of the on-chain `NormalizedActusTerms` ABI struct in the
+current kernel. On-chain enforcement therefore happens through `transfer_set_schedule`,
+not through `contract_config`.
diff --git a/docs/specs/execution/transfer-agent/transfer-agent.md b/docs/specs/execution/transfer-agent/transfer-agent.md
new file mode 100644
index 00000000..16037810
--- /dev/null
+++ b/docs/specs/execution/transfer-agent/transfer-agent.md
@@ -0,0 +1,34 @@
+# Transfer Agent {#transfer-agent}
+
+> Debt instruments can be transferable among investors.
+
+> D-ASA supports both on-chain and off-chain transfer agents.
+
+The Transfer Agent executes primary and secondary movement of D-ASA units.
+
+## Secondary transfers
+
+`transfer` **MUST** move active units only after:
+
+- The contract is active;
+- The transfer window is open, if a window was configured;
+- Both counterparties are valid, distinct, and unsuspended accounts;
+- Both counterparties are settled to the current global indices;
+- There is no due ACTUS event pending at the global cursor.
+
+The sender of the D-ASA transfer **MUST** have enough D-ASA *units* to transfer.
+
+The method **MUST** return the number of units transferred.
+
+Transfers are unit-based. The current kernel does not persist a mutable per-unit
+nominal value or per-unit coupon status.
+
+## Caller model
+
+> The D-ASA transferability policy may involve and integrate KYC/AML processes,
+> pre-authorizations, secondary market restrictions, etc.
+
+The current reference implementation requires the holder to call `transfer` directly.
+
+The method **MUST** reject calls from any other address. Transfers are therefore
+direct holder actions, not transfer-agent proxy calls.
diff --git a/docs/specs/overview.md b/docs/specs/overview.md
index 42b84328..39722c6c 100644
--- a/docs/specs/overview.md
+++ b/docs/specs/overview.md
@@ -1,38 +1,84 @@
# Overview {#overview}
-A *Debt Algorand Standard Application* (D-ASA) is a debt instrument issued as an
-Algorand Application, that conforms to this specification, and whose operations
-and cash flows are executed on the AVM.
-
-This specification defines the actors of a D-ASA and the interfaces of the Algorand
-Application to:
-
-- Arrange and configure the D-ASA (e.g. principal, interest, time events, etc.);
-- Manage D-ASA accounts (e.g. opening and closing accounts, etc.);
-- Distribute the D-ASA on the primary market (e.g. book building, auctions, etc.);
-- Execute D-ASA cash flows (e.g coupon payments, principal repayment, etc.);
-- Exchange the D-ASA on secondary markets (if any);
-- Query D-ASA information (e.g. due coupons, next coupon due date, etc.).
-
-This specification also provides the interfaces to comply with regulatory requirements,
-such as defining a role-based access control, suspending D-ASA operations completely
-or for specific accounts, managing default processes, etc.
-
-The contents are structured on four functional layers:
-
-1. *Trust Model*: this layer defines the application role-based access
-control model to manage the fixed income contract and comply with regulatory frameworks;
-1. *Contract*: this layer provides the algorithmic definitions of the debt instrument
-(data model, attributes, and cash flows);
-1. *Accounting*: this layer defines the tokenization of the contract;
-1. *Execution*: this layer defines the execution of the contract, both the distribution,
-cash flows and transfers.
+A *Debt Algorand Standard Application* (D-ASA) is an Algorand application that
+executes a fixed-income ACTUS contract on the AVM.
+
+A conforming D-ASA **MUST** process a debt instrument through the following stages:
+
+1. Define the debt instrument as an ACTUS contract.
+
+1. Normalize the ACTUS contract into AVM-compatible integers, state, and schedule
+pages.
+
+1. Execute the normalized contract on the AVM through explicit ABI methods.
+
+The D-ASA therefore uses the AVM as the execution layer of ACTUS. The canonical
+contract interface is the normalized ACTUS interface defined in this specification.
+
+This specification is structured in four layers:
+
+1. **RBAC**: identifies operational actors and their authorities.
+
+1. **ACTUS Kernel**: defines the normalized contract terms, schedule, and lifecycle
+state machine.
+
+1. **Accounting**: defines holder positions, unit balances, checkpoints, and claims.
+
+1. **Execution**: executes the ACTUS cashflows and tokenized contract transfers.
+
+ - *Payment Agent*: defines funding and withdrawal of due ACTUS cashflows.
+
+ - *Transfer Agent*: defines primary distribution and secondary transfer execution.
+
+---
+
+```mermaid
+flowchart TD
+ RBAC["Layer 1: RBAC
Operational actors & authorities"]
+ KERNEL["Layer 2: ACTUS Kernel
Contract terms, schedule & state machine"]
+ ACCOUNTING["Layer 3: Accounting
Positions, balances, checkpoints & claims"]
+ PAYMENT["Layer 4a: Payment Agent
Funding & withdrawal of cashflows"]
+ TRANSFER["Layer 4b: Transfer Agent
Primary distribution & secondary transfers"]
+
+ RBAC --> KERNEL
+ KERNEL --> ACCOUNTING
+ ACCOUNTING --> PAYMENT
+ ACCOUNTING --> TRANSFER
+
+ style RBAC fill:#bbdefb,stroke:#1976d2,stroke-width:2px,color:#000
+ style KERNEL fill:#fff9c4,stroke:#f57f17,stroke-width:2px,color:#000
+ style ACCOUNTING fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,color:#000
+ style PAYMENT fill:#ffccbc,stroke:#d84315,stroke-width:2px,color:#000
+ style TRANSFER fill:#ffccbc,stroke:#d84315,stroke-width:2px,color:#000
+```
+
+---
+
+## Conformance
+
+A conforming implementation:
+
+- **MUST** implement the public ABI described in the [Interfaces](../interfaces/types.md)
+section;
+
+- **MUST** accept normalized ACTUS terms, an initial kernel state, and a paged execution
+schedule;
+
+- **MUST** execute ACTUS non-cash and cash events through the kernel and agent interfaces;
+
+- **MUST** follow the ACTUS compliance profile defined in the [Contract](./contract/intro.md)
+section.
## ACTUS compliance
-ACTUS still presents some limitations with
-respect to blockchain-based implementations.
+D-ASA is designed to be ACTUS-compliant, with three minor deviations required by
+AVM constraints:
-Therefore, ACTUS compliance is **RECOMMENDED** but not mandatory.
+| | ACTUS | D-ASA |
+|:---------------|:---------------------------------------------------|:------------------------------------------------|
+| Time format | [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) | [UNIX](https://en.wikipedia.org/wiki/Unix_time) |
+| Time precision | Millisecond \\( 10^{-3} [s] \\) | Second \\( [s] \\) |
+| Arithmetic | Floating-point | Fixed-point |
-ACTUS limitations are usually marked with footnotes.
+> The ACTUS compliance has not yet been certified by an *official* ACTUS standardization
+> body.
diff --git a/docs/specs/rbac/overview.md b/docs/specs/rbac/overview.md
new file mode 100644
index 00000000..d58278e6
--- /dev/null
+++ b/docs/specs/rbac/overview.md
@@ -0,0 +1,7 @@
+# Trust Model
+
+The trust model defines who is allowed to configure, operate, suspend, and observe
+the D-ASA lifecycle.
+
+The canonical role set and the RBAC enforcement rules are specified in the following
+pages.
diff --git a/docs/specs/rbac/rbac.md b/docs/specs/rbac/rbac.md
index 69540bbe..fa39ba50 100644
--- a/docs/specs/rbac/rbac.md
+++ b/docs/specs/rbac/rbac.md
@@ -1,45 +1,79 @@
# Role-Based Access Control {#role-based-access-control}
-> D-ASA can define a custom role-based access control to comply with administrative
-> and regulatory requirements.
+The D-ASA role model **MUST** gate every privileged ABI method.
-A D-ASA *role* **MAY** be assigned using the **OPTIONAL** `rbac_assign_role` method.
+## Role administration
-A D-ASA *role* **MAY** be revoked using the **OPTIONAL** `rbac_revoke_role` method.
+The Arranger **MUST** control role administration through:
+
+- `rbac_assign_role`
+- `rbac_revoke_role`
+- `rbac_get_role_validity`
+- `rbac_get_address_roles`
+
+Role assignments **MUST** be validated against their stored time window at execution
+time. A role that exists but is outside its validity interval **MUST** be treated
+as inactive.
+
+## Arrangement
+
+The Arranger **MUST** retain the authority to:
+
+- rotate the arranger address with `rbac_rotate_arranger`;
+- set the optional operation daemon with `rbac_set_op_daemon`;
+- update the application with `contract_update`.
## Suspension
> Debt instruments are regulated under different legal frameworks and their jurisdictions.
-> The D-ASA ensures efficient execution of the debt instrument in the "best case
-> scenarios", where it offers the highest improvements in cost and time efficiency
+> The D-ASA ensures efficient execution of the debt instrument in the “best case
+> scenarios”, where it offers the highest improvements in cost and time efficiency
> if compared to the traditional, manual, and labor-intensive contracts.
> The D-ASA provides methods to comply with regulatory obligations, allowing the
-> management of the "worst case scenarios", in which the intervention of the authority
+> management of the “worst case scenarios”, in which the intervention of the authority
> or the regulator is necessary.
> Debt instruments can be temporarily suspended due to regulations or operational
> reasons.
-The D-ASA suspension authority **MUST** be restricted to specific *contract roles*.
+The D-ASA suspension authority **MUST** be restricted to specific contract roles.
+
+### Asset suspension
+
+`rbac_contract_suspension` **MUST** suspend or resume asset-wide operations.
+
+When the asset is suspended, the implementation **MUST** reject:
+
+- primary distribution;
+- funding and claiming of due cashflows;
+- holder payment-address updates;
+- transfers;
+- any other method explicitly guarded by the suspension flag.
+
+### Account suspension
+
+`account_suspension` **MUST** suspend or resume a specific holder account.
-### Asset Suspension
+When an account is suspended, the implementation **MUST** reject:
-The D-ASA **MAY** suspend all:
+- unit allocations to that account during primary distribution;
+- transfers from or to that account;
+- on-chain cashflow execution to that account while the suspension remains in force.
-- Payments;
-- D-ASA units transfers.
+## Trustee-controlled default
-The asset *suspension* status **MUST** be set with the `rbac_gov_asset_suspension`
-method.
+`rbac_contract_default` **MUST** be restricted to the Trustee role.
-### Account Suspension
+In the current reference implementation, this method sets or clears the contract-level
+`defaulted` performance flag in RBAC global state. It does not change the kernel
+lifecycle `status`.
-The D-ASA **MAY** suspend an account:
+## Observer-controlled events
-- Payments (skipped on due dates);
-- D-ASA units transfers (from and to).
+The Observer role **MUST** authorize due `RR` and `RRF` event application through
+`apply_non_cash_event`.
-The account *suspension* status **MUST** be set with the `account_gov_suspension`
-method.
+All other non-cash events remain arranger-controlled unless a future profile explicitly
+states otherwise.
diff --git a/docs/specs/rbac/roles.md b/docs/specs/rbac/roles.md
index 7d3fed86..eeb8cd6e 100644
--- a/docs/specs/rbac/roles.md
+++ b/docs/specs/rbac/roles.md
@@ -3,99 +3,115 @@
> D-ASA defines custom roles and permissions for the entities involved in the debt
> instrument.
-The D-ASA **MUST** define *contract roles* \\([CNTRL]\\).
+The D-ASA **MUST** define contract roles \\( [CNTRL] \\).
-The *contract roles* **MUST** be identified with a *role ID* (`uint8`).
+The D-ASA **MUST** identify operational authorities with reserved role identifiers.
-The *contract roles* **MUST** be associated with Algorand Addresses through a *role
-key* of the form:
+The contract roles **MUST** be associated with Algorand Addresses through a role
+key of the form:
-`[R||||#||]`
+`[R:||||#||]`
-Where `||` denotes concatenation.
+Where || denotes concatenation.
-{{#include ../../_include/styles.md:example}}
-> Let’s have a D-ASA role ID `42` associated with the Algorand Address `XYZ`. The
-> corresponding role key is `42#XYZ`.
+The current reference implementation uses the following role set:
-## Issuer (Borrower)
+| Key | ID | Role | Scope |
+|:-----:|:----:|:----------------|:------------------------------------------------------------------------------|
+| `ARR` | `20` | Arranger | Owns contract creation, configuration, schedule upload, and upgrade authority |
+| `OPD` | `25` | Op Daemon | Optional automation address for payment execution workflows |
+| `MNG` | `40` | Account Manager | Opens holder accounts |
+| `PYD` | `50` | Primary Dealer | Allocates units during primary distribution |
+| `TRS` | `60` | Trustee | Sets or clears the contract default-performance flag |
+| `AUT` | `70` | Authority | Suspends the contract or individual accounts |
+| `MOC` | `80` | Observer | Applies rate-reset events that depend on observed data |
-> Issuers are individuals, companies, institutions, governments, or other entities
-> who borrow capital by issuing a debt.
+> [!TIP]
+> The Arranger with Algorand Address `XYZ` is identified as `R:ARR#XYZ`.
-An Issuer \\([CRID]\\) is an entity that owes a debt issued as D-ASA.
+## Role model
-The Issuer role **MUST** be identified with the reserved ID `1` \\([RPL]\\).
+The Arranger and Op Daemon are single-address global roles.
-## Arranger
+The Account Manager, Primary Dealer, Trustee, Authority, and Observer roles are
+time-bounded assignments. A role assignment is active only if:
-> Arrangers are legal entities authorized to arrange debt instruments on behalf
-> of the issuers.
+```text
+role_validity_start <= current_block_timestamp <= role_validity_end
+```
-The Arranger owns an Algorand Address.
+The D-ASA **MUST** reject actions that require an inactive role assignment.
-The Arranger role **MUST** be identified with the reserved ID `20`.
+## Responsibilities
-The Arranger **SHALL** configure the D-ASA using the `asset_config` method.
+### Issuer (Borrower)
-The Arranger **MAY** rotate its Algorand Address using the `rbac_rotate_arranger`
-method.
+> Issuers are individuals, companies, institutions, governments, or other entities
+> who borrow capital by issuing a debt.
-The Arranger **MAY** configure the D-ASA *role-based access control* with the **OPTIONAL**
-`rbac_assign_role` and `rbac_revoke_role` methods.
+The Issuer \\( [RPL] \\) is a meta-role in the D-ASA role model, they have no specific
+permissions.
-## Investor (Lender)
+### Arranger
-> Investors are lenders providing capital to borrowers with the expectation of a
-> financial return, defined by debt instruments.
+> Arrangers are legal entities authorized to arrange debt instruments on behalf
+> of the issuers.
+
+The Arranger owns an Algorand Address.
+
+The Arranger **MUST** be able to:
-Investors \\([CPID]\\) own D-ASA accounts, characterized by a pair of Algorand Addresses:
+- create the contract;
+- upload normalized ACTUS terms and schedule pages;
+- execute `IED`;
+- append or apply arranger-controlled observed events;
+- rotate the arranger address;
+- assign and revoke time-bounded roles;
+- update the application.
-- *Holding Address*: address that owns D-ASA units with the right to future payments;
-- *Payment Address*: address that receives D-ASA payments.
+### Op Daemon
-The Payment Address **MAY** be different from the Holding Address.
+The Op Daemon is an optional execution helper. If configured, the Op Daemon **MAY**
+trigger holder cashflow claims in addition to the holder or payment address.
-> D-ASA units can be in custody with a third party or temporarily deposited on an
-> order book (Holding Address). At the same time, payments are always executed towards
-> the investor (on the Payment Address).
+### Account Manager
-> The right to open and close investor accounts can be granted to different entities,
-> such as KYC providers or banks.
+The Account Manager owns an Algorand Address.
-The Investor role **MUST** be identified with the reserved ID `30`.
+The Account Manager **MUST** be able to open holder accounts. The role does not
+control payments or transfers.
-> Debt instruments may have an order of repayment in the event of a sale or default
-> of the issuer, based on investors' seniority.
+> The right to open investor accounts can be granted to different entities, such
+> as KYC providers or banks.
-> Investors with the same seniority are treated equally.
+### Primary Dealer
-The Investors **MAY** have different **seniority** \\([SEN]\\).
+The Primary Dealer **MUST** be able to reserve units during primary distribution
+before `IED`.
-### Open Account
+### Trustee
-The D-ASA accounts **SHALL** be opened using the `account_open` method.
+The Trustee role **MUST** control the contract performance \\( [PRF] \\) (see
+[Performance](../contract/attributes.md#performance) section for further details).
-The D-ASA accounts **MUST NOT** be opened if the D-ASA is suspended (see [Suspension](rbac.md#suspension)
-section).
+In the current reference implementation, an active Trustee can set or clear the
+contract-level `defaulted` performance flag with `rbac_contract_default`.
-The D-ASA accounts **MUST NOT** be opened if the D-ASA is in default (see [Default](../contract/performance.md#default)
-section).
+This performance flag is distinct from the kernel lifecycle `status`.
-### Close Account
+### Authority
-The D-ASA accounts **MAY** be closed using the `account_close` method.
+The Authority owns an Algorand Address.
-The D-ASA accounts **MUST NOT** be closed if the D-ASA is in default (see [Default](../contract/performance.md#default)
-section).
+The Authority **MUST** be able to suspend the contract and individual holder
+accounts.
-## Oracles
+### Observer
> Debt instruments may rely on external data, such as interest rates, covenant breaches,
> etc., provided by trusted oracles.
-An Oracle \\([MOC]\\) is an external entity that provides trusted data to the D-ASA.
-
-A D-ASA **MAY** have multiple oracles.
+The Observer \\( [MOC] \\) owns an Algorand Address.
-The Oracle roles **MUST** be identified with the reserved IDs between `80 - 100`.
+The Observer **MUST** be able to apply due rate-reset events (`RR`, `RRF`) whose
+execution depends on observed external values.
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 00000000..7590863f
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,83 @@
+# Notebook Examples
+
+This folder contains two live LocalNet walkthroughs:
+
+- `pam_fixed_coupon_bond.ipynb`
+- `pam_zero_coupon_bond.ipynb`
+
+They are intended to be run from the repository root and rerun from top to bottom
+against a fresh AlgoKit LocalNet.
+
+## Quick Start (Docker - No Local Dependencies)
+
+The easiest way to run the notebooks is using Docker:
+
+```shell
+./d-asa jupyter
+```
+
+Or via make:
+
+```shell
+make jupyter-docker
+```
+
+This will:
+- Build the Docker image with all dependencies
+- Start AlgoKit LocalNet if needed
+- Launch Jupyter Lab at http://localhost:8888
+- Automatically configure LocalNet connectivity
+
+Then open one of the notebooks in the `examples/` folder.
+
+Press Ctrl+C to stop Jupyter Lab when finished.
+
+## Alternative: Local Setup (Requires Local Dependencies)
+
+If you prefer running Jupyter locally, follow these steps:
+
+Bootstrap the full development environment:
+
+```shell
+make install-dev
+```
+
+If you prefer the raw AlgoKit command, the equivalent bootstrap is:
+
+```shell
+algokit bootstrap all
+```
+
+Install the optional notebook dependencies:
+
+```shell
+poetry install --with notebooks
+```
+
+Start LocalNet:
+
+```shell
+make localnet
+```
+
+or:
+
+```shell
+algokit localnet start
+```
+
+Launch Jupyter from the repository root:
+
+```shell
+poetry run jupyter lab examples/
+```
+
+Then open one of the notebooks in `examples/`.
+
+## Notes
+
+- The notebooks perform real deployment and execution against LocalNet.
+- Both notebooks assume the kernel is started from this repository checkout.
+- If a prior run leaves LocalNet in an unexpected state, restart it and rerun the
+ notebook from the first cell.
+- The notebooks are committed without outputs so each run shows fresh LocalNet data.
diff --git a/examples/_support.py b/examples/_support.py
new file mode 100644
index 00000000..ba869b89
--- /dev/null
+++ b/examples/_support.py
@@ -0,0 +1,211 @@
+from __future__ import annotations
+
+from collections.abc import Mapping, Sequence
+from datetime import UTC, datetime
+from decimal import Decimal
+from typing import Any
+
+from algokit_utils import (
+ AlgoAmount,
+ AlgorandClient,
+ AssetCreateParams,
+ AssetOptInParams,
+ SigningAccount,
+)
+
+from d_asa import NormalizationResult
+from d_asa.localnet import (
+ Currency,
+ algorand_client_from_localnet,
+ load_localnet_config,
+ wait_for_localnet,
+)
+
+DEFAULT_CURRENCY_NAME = "Euro"
+DEFAULT_CURRENCY_UNIT = "EUR"
+DEFAULT_CURRENCY_DECIMALS = 2
+DEFAULT_CURRENCY_TOTAL_UNITS = 10_000_000
+
+
+def connect_localnet(*, timeout_seconds: float = 30.0) -> AlgorandClient:
+ localnet_config = load_localnet_config(default_host="localhost")
+ wait_for_localnet(
+ localnet_config=localnet_config,
+ timeout_seconds=timeout_seconds,
+ poll_interval_seconds=1.0,
+ )
+ return algorand_client_from_localnet(localnet_config)
+
+
+def create_funded_account(
+ algorand: AlgorandClient,
+ *,
+ min_algo: int = 20,
+) -> SigningAccount:
+ account = algorand.account.random()
+ algorand.account.ensure_funded_from_environment(
+ account_to_fund=account.address,
+ min_spending_balance=AlgoAmount.from_algo(min_algo),
+ )
+ return account
+
+
+def create_currency(
+ algorand: AlgorandClient,
+ *,
+ issuer: SigningAccount,
+ asset_name: str = DEFAULT_CURRENCY_NAME,
+ unit_name: str = DEFAULT_CURRENCY_UNIT,
+ decimals: int = DEFAULT_CURRENCY_DECIMALS,
+ total_units: int = DEFAULT_CURRENCY_TOTAL_UNITS,
+) -> Currency:
+ total = total_units * (10**decimals)
+ currency_id = algorand.send.asset_create(
+ AssetCreateParams(
+ sender=issuer.address,
+ signer=issuer.signer,
+ total=total,
+ decimals=decimals,
+ asset_name=asset_name,
+ unit_name=unit_name,
+ )
+ ).asset_id
+ return Currency(
+ id=currency_id,
+ total=total,
+ decimals=decimals,
+ name=asset_name,
+ unit_name=unit_name,
+ asa_to_unit=1 / (10**decimals),
+ )
+
+
+def opt_in_asset(
+ algorand: AlgorandClient,
+ *,
+ account: SigningAccount,
+ asset_id: int,
+) -> None:
+ algorand.send.asset_opt_in(
+ AssetOptInParams(
+ asset_id=asset_id,
+ sender=account.address,
+ signer=account.signer,
+ )
+ )
+
+
+def format_asset_amount(
+ amount: int,
+ *,
+ decimals: int,
+ unit_name: str | None = None,
+) -> str:
+ quantizer = Decimal(1).scaleb(-decimals)
+ scaled = (Decimal(amount) / (Decimal(10) ** decimals)).quantize(quantizer)
+ if unit_name is None:
+ return f"{scaled:,.{decimals}f}"
+ return f"{scaled:,.{decimals}f} {unit_name}"
+
+
+def format_timestamp(timestamp: int) -> str:
+ return datetime.fromtimestamp(timestamp, tz=UTC).strftime("%Y-%m-%d %H:%M:%SZ")
+
+
+def format_rate(value: int, *, fixed_point_scale: int) -> str:
+ rate_percent = Decimal(value) * Decimal(100) / Decimal(fixed_point_scale)
+ return f"{rate_percent:.4f}%"
+
+
+def schedule_rows(
+ normalized: NormalizationResult,
+ *,
+ currency_decimals: int,
+) -> list[dict[str, str | int]]:
+ rows: list[dict[str, str | int]] = []
+ for entry in normalized.schedule:
+ rows.append(
+ {
+ "event_id": entry.event_id,
+ "event_type": entry.event_type,
+ "scheduled_time": format_timestamp(entry.scheduled_time),
+ "accrual_factor": f"{Decimal(entry.accrual_factor) / Decimal(normalized.terms.fixed_point_scale):.6f}",
+ "next_outstanding_principal": format_asset_amount(
+ entry.next_outstanding_principal,
+ decimals=currency_decimals,
+ ),
+ "next_nominal_interest_rate": (
+ format_rate(
+ entry.next_nominal_interest_rate,
+ fixed_point_scale=normalized.terms.fixed_point_scale,
+ )
+ if entry.next_nominal_interest_rate is not None
+ else "-"
+ ),
+ }
+ )
+ return rows
+
+
+def cashflow_rows(
+ cashflows: Sequence[Mapping[str, Any]],
+ *,
+ currency: Currency,
+) -> list[dict[str, str | int]]:
+ rows: list[dict[str, str | int]] = []
+ for cashflow in cashflows:
+ rows.append(
+ {
+ "event_id": int(cashflow["event_id"]),
+ "event_type": str(cashflow["event_type"]),
+ "scheduled_time": format_timestamp(int(cashflow["scheduled_time"])),
+ "funded": format_asset_amount(
+ int(cashflow["funded"]),
+ decimals=currency.decimals,
+ unit_name=currency.unit_name,
+ ),
+ "interest_claimed": format_asset_amount(
+ int(cashflow["interest_claimed"]),
+ decimals=currency.decimals,
+ unit_name=currency.unit_name,
+ ),
+ "principal_claimed": format_asset_amount(
+ int(cashflow["principal_claimed"]),
+ decimals=currency.decimals,
+ unit_name=currency.unit_name,
+ ),
+ "total_claimed": format_asset_amount(
+ int(cashflow["total_claimed"]),
+ decimals=currency.decimals,
+ unit_name=currency.unit_name,
+ ),
+ "claim_timestamp": format_timestamp(int(cashflow["claim_timestamp"])),
+ }
+ )
+ return rows
+
+
+def render_table(rows: Sequence[Mapping[str, object]]) -> str:
+ if not rows:
+ return "(no rows)"
+
+ headers = list(rows[0].keys())
+ widths = [len(header) for header in headers]
+ rendered_rows: list[list[str]] = []
+ for row in rows:
+ rendered = [str(row[header]) for header in headers]
+ rendered_rows.append(rendered)
+ widths = [
+ max(current_width, len(value))
+ for current_width, value in zip(widths, rendered, strict=True)
+ ]
+
+ header_line = " | ".join(
+ header.ljust(width) for header, width in zip(headers, widths, strict=True)
+ )
+ divider_line = "-+-".join("-" * width for width in widths)
+ row_lines = [
+ " | ".join(value.ljust(width) for value, width in zip(row, widths, strict=True))
+ for row in rendered_rows
+ ]
+ return "\n".join([header_line, divider_line, *row_lines])
diff --git a/examples/pam_fixed_coupon_bond.ipynb b/examples/pam_fixed_coupon_bond.ipynb
new file mode 100644
index 00000000..e526fdbc
--- /dev/null
+++ b/examples/pam_fixed_coupon_bond.ipynb
@@ -0,0 +1,424 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "7fb27b941602401d91542211134fc71a",
+ "metadata": {},
+ "source": [
+ "# PAM Fixed Coupon Bond on LocalNet\n",
+ "\n",
+ "This notebook runs a live PAM fixed coupon bond lifecycle on AlgoKit LocalNet.\n",
+ "\n",
+ "It covers both:\n",
+ "- the high-level SDK flow to build ACTUS terms, normalize them, and deploy `DAsa`\n",
+ "- the live execution flow through `IED`, coupon funding, holder claims, and maturity\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "acae54e37e7d407bbb7b55eff062a284",
+ "metadata": {},
+ "source": [
+ "## Prerequisites\n",
+ "\n",
+ "- run `make install-dev` once\n",
+ "- start LocalNet with `make localnet` or `algokit localnet start`\n",
+ "- rerun the notebook from the first cell on a fresh LocalNet when repeating the demo\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9a63283cbaf04dbcab1f6479b197f3a8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import sys\n",
+ "from pathlib import Path\n",
+ "\n",
+ "REPO_ROOT = next(\n",
+ " path for path in [Path.cwd(), *Path.cwd().parents] if (path / \"pyproject.toml\").exists()\n",
+ ")\n",
+ "os.chdir(REPO_ROOT)\n",
+ "if str(REPO_ROOT / \"src\") not in sys.path:\n",
+ " sys.path.insert(0, str(REPO_ROOT / \"src\"))\n",
+ "\n",
+ "print(f\"Repository root: {REPO_ROOT}\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6a72551a49d687ac",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from algokit_utils import AssetTransferParams, CommonAppCallParams\n",
+ "\n",
+ "from d_asa import (\n",
+ " DAsa,\n",
+ " DAsaRole,\n",
+ " NormalizationResult,\n",
+ " enums,\n",
+ " make_pam_fixed_coupon_bond_profile,\n",
+ " normalize_contract_attributes,\n",
+ ")\n",
+ "from d_asa import constants as cst\n",
+ "from d_asa.artifacts.dasa_client import PrimaryDistributionArgs\n",
+ "from d_asa.localnet import get_latest_timestamp, time_warp\n",
+ "from d_asa.schedule import Cycle\n",
+ "from examples._support import (\n",
+ " cashflow_rows,\n",
+ " connect_localnet,\n",
+ " create_currency,\n",
+ " create_funded_account,\n",
+ " format_asset_amount,\n",
+ " opt_in_asset,\n",
+ " render_table,\n",
+ " schedule_rows,\n",
+ ")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6a1061c4b38b743d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "PRINCIPAL = 10_000\n",
+ "MINIMUM_DENOMINATION = 100\n",
+ "NOMINAL_RATE = 0.02\n",
+ "ISSUANCE_DELAY = Cycle.parse_cycle(\"30D\")\n",
+ "COUPON_CYCLE = Cycle.parse_cycle(\"90D\")\n",
+ "MATURITY_OFFSET = Cycle.parse_cycle(\"1800D\")\n",
+ "\n",
+ "\n",
+ "def day_cycle_seconds(cycle: Cycle) -> int:\n",
+ " if cycle.unit != \"D\":\n",
+ " raise ValueError(f\"Only fixed day cycles are used in this notebook, got {cycle}\")\n",
+ " return cycle.count * cst.DAY_2_SEC\n",
+ "\n",
+ "\n",
+ "def derive_total_interest_amount(normalized: NormalizationResult) -> int:\n",
+ " outstanding_principal = normalized.schedule[0].next_outstanding_principal\n",
+ " nominal_interest_rate = (\n",
+ " normalized.schedule[0].next_nominal_interest_rate or normalized.terms.rate_reset_next\n",
+ " )\n",
+ " accrued_interest = 0\n",
+ " total_interest = 0\n",
+ "\n",
+ " for entry in normalized.schedule[1:]:\n",
+ " interest_segment = (\n",
+ " outstanding_principal\n",
+ " * nominal_interest_rate\n",
+ " // normalized.terms.fixed_point_scale\n",
+ " * entry.accrual_factor\n",
+ " // normalized.terms.fixed_point_scale\n",
+ " )\n",
+ "\n",
+ " if entry.event_type in {\"IP\", \"MD\"}:\n",
+ " total_interest += accrued_interest + interest_segment\n",
+ " accrued_interest = 0\n",
+ " elif entry.event_type == \"PR\":\n",
+ " accrued_interest += interest_segment\n",
+ "\n",
+ " if entry.event_type in {\"PR\", \"MD\"}:\n",
+ " outstanding_principal = entry.next_outstanding_principal\n",
+ "\n",
+ " if entry.next_nominal_interest_rate:\n",
+ " nominal_interest_rate = entry.next_nominal_interest_rate\n",
+ "\n",
+ " return total_interest\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8edb47106e1a46a883d545849b8ab81b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "algorand = connect_localnet()\n",
+ "arranger = create_funded_account(algorand, min_algo=50)\n",
+ "bank = create_funded_account(algorand, min_algo=50)\n",
+ "account_manager = create_funded_account(algorand)\n",
+ "primary_dealer = create_funded_account(algorand)\n",
+ "investor = create_funded_account(algorand)\n",
+ "\n",
+ "currency = create_currency(algorand, issuer=bank)\n",
+ "opt_in_asset(algorand, account=investor, asset_id=currency.id)\n",
+ "\n",
+ "print(f\"Currency ASA id: {currency.id}\")\n",
+ "print(f\"Arranger: {arranger.address}\")\n",
+ "print(f\"Bank: {bank.address}\")\n",
+ "print(f\"Investor: {investor.address}\")\n",
+ "print(f\"Account manager: {account_manager.address}\")\n",
+ "print(f\"Primary dealer: {primary_dealer.address}\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "10185d26023b46108eb7d9f57d49d2b3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "current_ts = get_latest_timestamp(algorand.client.algod)\n",
+ "issuance_date = current_ts + day_cycle_seconds(ISSUANCE_DELAY)\n",
+ "coupon_period = day_cycle_seconds(COUPON_CYCLE)\n",
+ "maturity_offset = day_cycle_seconds(MATURITY_OFFSET)\n",
+ "first_coupon_date = issuance_date + coupon_period\n",
+ "maturity_date = issuance_date + maturity_offset\n",
+ "\n",
+ "attrs = make_pam_fixed_coupon_bond_profile(\n",
+ " contract_id=1,\n",
+ " status_date=current_ts,\n",
+ " initial_exchange_date=issuance_date,\n",
+ " maturity_date=maturity_date,\n",
+ " notional_principal=PRINCIPAL,\n",
+ " nominal_interest_rate=NOMINAL_RATE,\n",
+ " interest_payment_cycle=COUPON_CYCLE,\n",
+ " interest_payment_anchor=first_coupon_date,\n",
+ ")\n",
+ "normalized = normalize_contract_attributes(\n",
+ " attrs,\n",
+ " denomination_asset_id=currency.id,\n",
+ " denomination_asset_decimals=currency.decimals,\n",
+ " notional_unit_value=MINIMUM_DENOMINATION,\n",
+ " secondary_market_opening_date=issuance_date,\n",
+ " secondary_market_closure_date=maturity_date + cst.DAY_2_SEC,\n",
+ ")\n",
+ "total_interest_amount = derive_total_interest_amount(normalized)\n",
+ "num_ip_events = max(0, len(normalized.schedule) - 2)\n",
+ "expected_event_types = [\"IED\"] + [\"IP\"] * num_ip_events + [\"MD\"]\n",
+ "assert [entry.event_type for entry in normalized.schedule] == expected_event_types\n",
+ "\n",
+ "issue_price_label = format_asset_amount(\n",
+ " normalized.terms.initial_exchange_amount,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "interest_reserve_label = format_asset_amount(\n",
+ " total_interest_amount,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "print(f\"Issue price: {issue_price_label}\")\n",
+ "print(f\"Expected interest reserve: {interest_reserve_label}\")\n",
+ "print(render_table(schedule_rows(normalized, currency_decimals=currency.decimals)))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8763a12b2bbd4a93a75aff182afb95dc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "app = DAsa.deploy_configured(\n",
+ " algorand=algorand,\n",
+ " arranger=arranger,\n",
+ " normalized=normalized,\n",
+ " prospectus_url=\"Notebook example: PAM fixed coupon bond\",\n",
+ ")\n",
+ "arranger_role = app.arranger(arranger)\n",
+ "arranger_role.assign_role(DAsaRole.ACCOUNT_MANAGER, account_manager.address)\n",
+ "arranger_role.assign_role(DAsaRole.PRIMARY_DEALER, primary_dealer.address)\n",
+ "\n",
+ "app.account_manager(account_manager).open_account(\n",
+ " holding_address=investor.address,\n",
+ " payment_address=investor.address,\n",
+ ")\n",
+ "\n",
+ "state_after_config = app.contract.get_state()\n",
+ "assert state_after_config.status == enums.STATUS_PENDING_IED\n",
+ "print(state_after_config)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7623eae2785240b9bd12b16a66d81610",
+ "metadata": {},
+ "source": [
+ "## Primary Distribution\n",
+ "\n",
+ "The next cell uses `app.raw_client.new_group()` so the investor payment and the\n",
+ "`primary_distribution` app call stay atomic. That grouped flow is not yet wrapped\n",
+ "by a higher-level SDK helper.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7cdc8c89c7104fffa095e18ddfef8986",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if total_interest_amount > 0:\n",
+ " algorand.send.asset_transfer(\n",
+ " AssetTransferParams(\n",
+ " asset_id=currency.id,\n",
+ " amount=total_interest_amount,\n",
+ " receiver=app.app_address,\n",
+ " sender=bank.address,\n",
+ " signer=bank.signer,\n",
+ " )\n",
+ " )\n",
+ "\n",
+ "algorand.send.asset_transfer(\n",
+ " AssetTransferParams(\n",
+ " asset_id=currency.id,\n",
+ " amount=normalized.terms.initial_exchange_amount,\n",
+ " receiver=investor.address,\n",
+ " sender=bank.address,\n",
+ " signer=bank.signer,\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "investor_purchase_txn = algorand.create_transaction.asset_transfer(\n",
+ " AssetTransferParams(\n",
+ " asset_id=currency.id,\n",
+ " amount=normalized.terms.initial_exchange_amount,\n",
+ " receiver=app.app_address,\n",
+ " sender=investor.address,\n",
+ " signer=investor.signer,\n",
+ " )\n",
+ ")\n",
+ "(\n",
+ " app.raw_client.new_group()\n",
+ " .add_transaction(investor_purchase_txn, investor.signer)\n",
+ " .primary_distribution(\n",
+ " PrimaryDistributionArgs(\n",
+ " holding_address=investor.address,\n",
+ " units=normalized.terms.total_units,\n",
+ " ),\n",
+ " params=CommonAppCallParams(\n",
+ " sender=primary_dealer.address,\n",
+ " signer=primary_dealer.signer,\n",
+ " ),\n",
+ " )\n",
+ " .send()\n",
+ ")\n",
+ "\n",
+ "raw_position = app.account(investor).get_raw_position()\n",
+ "assert raw_position.reserved_units == normalized.terms.total_units\n",
+ "print(raw_position)\n",
+ "print(\n",
+ " \"Contract currency balance:\",\n",
+ " format_asset_amount(\n",
+ " algorand.asset.get_account_information(app.app_address, currency.id).balance,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ " ),\n",
+ ")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b118ea5561624da68c537baed56e602f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pending_state = app.contract.get_state()\n",
+ "assert pending_state.status == enums.STATUS_PENDING_IED\n",
+ "\n",
+ "ied_entry = normalized.schedule[0]\n",
+ "time_warp(ied_entry.scheduled_time + cst.DAY_2_SEC, algorand=algorand)\n",
+ "arranger_role.execute_ied()\n",
+ "\n",
+ "active_state = app.contract.get_state()\n",
+ "actualized_position = app.account(investor).get_actualized_position()\n",
+ "assert active_state.status == enums.STATUS_ACTIVE\n",
+ "assert actualized_position.units == normalized.terms.total_units\n",
+ "\n",
+ "print(active_state)\n",
+ "print(actualized_position)\n",
+ "print(\"Next due event:\", app.contract.get_next_due_event())\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "938c804e27f84196a10c8828c723f798",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "holding = app.account(investor)\n",
+ "cashflows = []\n",
+ "\n",
+ "for entry in normalized.schedule[1:]:\n",
+ " time_warp(entry.scheduled_time, algorand=algorand)\n",
+ " funding = arranger_role.fund_due_cashflows(max_event_count=1)\n",
+ " claim = holding.claim()\n",
+ "\n",
+ " assert funding.processed_events == 1\n",
+ " assert claim.total_amount == funding.total_funded\n",
+ "\n",
+ " cashflows.append(\n",
+ " {\n",
+ " \"event_id\": entry.event_id,\n",
+ " \"event_type\": entry.event_type,\n",
+ " \"scheduled_time\": entry.scheduled_time,\n",
+ " \"funded\": funding.total_funded,\n",
+ " \"interest_claimed\": claim.interest_amount,\n",
+ " \"principal_claimed\": claim.principal_amount,\n",
+ " \"total_claimed\": claim.total_amount,\n",
+ " \"claim_timestamp\": claim.timestamp,\n",
+ " }\n",
+ " )\n",
+ "\n",
+ "print(render_table(cashflow_rows(cashflows, currency=currency)))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "504fb2a444614c0babb325280ed9130a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final_state = app.contract.get_state()\n",
+ "final_position = holding.get_actualized_position()\n",
+ "total_interest_claimed = sum(int(item[\"interest_claimed\"]) for item in cashflows)\n",
+ "total_principal_claimed = sum(int(item[\"principal_claimed\"]) for item in cashflows)\n",
+ "\n",
+ "assert final_state.status == enums.STATUS_ENDED\n",
+ "assert final_state.event_cursor == len(normalized.schedule)\n",
+ "assert total_interest_claimed == total_interest_amount\n",
+ "assert total_principal_claimed == normalized.terms.notional_principal\n",
+ "assert final_position.units == normalized.terms.total_units\n",
+ "\n",
+ "print(final_state)\n",
+ "print(final_position)\n",
+ "paid_label = format_asset_amount(\n",
+ " normalized.terms.initial_exchange_amount,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "received_label = format_asset_amount(\n",
+ " total_interest_claimed + total_principal_claimed,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "print(f\"Investor paid {paid_label}\")\n",
+ "print(f\"Investor received {received_label}\")\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python",
+ "version": "3.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/examples/pam_zero_coupon_bond.ipynb b/examples/pam_zero_coupon_bond.ipynb
new file mode 100644
index 00000000..cdc9592e
--- /dev/null
+++ b/examples/pam_zero_coupon_bond.ipynb
@@ -0,0 +1,390 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "7fb27b941602401d91542211134fc71a",
+ "metadata": {},
+ "source": [
+ "# PAM Zero Coupon Bond on LocalNet\n",
+ "\n",
+ "This notebook runs a live PAM zero coupon bond lifecycle on AlgoKit LocalNet.\n",
+ "\n",
+ "It covers both:\n",
+ "- the high-level SDK flow to build ACTUS terms, normalize them, and deploy `DAsa`\n",
+ "- the live execution flow through discounted issuance, `IED`, funding, holder claims, and maturity\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "acae54e37e7d407bbb7b55eff062a284",
+ "metadata": {},
+ "source": [
+ "## Prerequisites\n",
+ "\n",
+ "- run `make install-dev` once\n",
+ "- start LocalNet with `make localnet` or `algokit localnet start`\n",
+ "- rerun the notebook from the first cell on a fresh LocalNet when repeating the demo\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9a63283cbaf04dbcab1f6479b197f3a8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import sys\n",
+ "from pathlib import Path\n",
+ "\n",
+ "REPO_ROOT = next(\n",
+ " path for path in [Path.cwd(), *Path.cwd().parents] if (path / \"pyproject.toml\").exists()\n",
+ ")\n",
+ "os.chdir(REPO_ROOT)\n",
+ "if str(REPO_ROOT / \"src\") not in sys.path:\n",
+ " sys.path.insert(0, str(REPO_ROOT / \"src\"))\n",
+ "\n",
+ "print(f\"Repository root: {REPO_ROOT}\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8dd0d8092fe74a7c96281538738b07e2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from algokit_utils import AssetTransferParams, CommonAppCallParams\n",
+ "\n",
+ "from d_asa import (\n",
+ " DAsa,\n",
+ " DAsaRole,\n",
+ " enums,\n",
+ " make_pam_zero_coupon_bond,\n",
+ " normalize_contract_attributes,\n",
+ ")\n",
+ "from d_asa import constants as cst\n",
+ "from d_asa.artifacts.dasa_client import PrimaryDistributionArgs\n",
+ "from d_asa.localnet import get_latest_timestamp, time_warp\n",
+ "from d_asa.schedule import Cycle\n",
+ "from examples._support import (\n",
+ " cashflow_rows,\n",
+ " connect_localnet,\n",
+ " create_currency,\n",
+ " create_funded_account,\n",
+ " format_asset_amount,\n",
+ " opt_in_asset,\n",
+ " render_table,\n",
+ " schedule_rows,\n",
+ ")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "72eea5119410473aa328ad9291626812",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "PRINCIPAL = 10_000\n",
+ "MINIMUM_DENOMINATION = 100\n",
+ "ZERO_COUPON_MATURITY = Cycle.parse_cycle(\"360D\")\n",
+ "ZERO_COUPON_DISCOUNT_BPS = 200\n",
+ "ISSUANCE_DELAY = Cycle.parse_cycle(\"30D\")\n",
+ "\n",
+ "\n",
+ "def day_cycle_seconds(cycle: Cycle) -> int:\n",
+ " if cycle.unit != \"D\":\n",
+ " raise ValueError(f\"Only fixed day cycles are used in this notebook, got {cycle}\")\n",
+ " return cycle.count * cst.DAY_2_SEC\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8edb47106e1a46a883d545849b8ab81b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "algorand = connect_localnet()\n",
+ "arranger = create_funded_account(algorand, min_algo=50)\n",
+ "bank = create_funded_account(algorand, min_algo=50)\n",
+ "account_manager = create_funded_account(algorand)\n",
+ "primary_dealer = create_funded_account(algorand)\n",
+ "investor = create_funded_account(algorand)\n",
+ "\n",
+ "currency = create_currency(algorand, issuer=bank)\n",
+ "opt_in_asset(algorand, account=investor, asset_id=currency.id)\n",
+ "\n",
+ "print(f\"Currency ASA id: {currency.id}\")\n",
+ "print(f\"Arranger: {arranger.address}\")\n",
+ "print(f\"Bank: {bank.address}\")\n",
+ "print(f\"Investor: {investor.address}\")\n",
+ "print(f\"Account manager: {account_manager.address}\")\n",
+ "print(f\"Primary dealer: {primary_dealer.address}\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "10185d26023b46108eb7d9f57d49d2b3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "current_ts = get_latest_timestamp(algorand.client.algod)\n",
+ "issuance_date = current_ts + day_cycle_seconds(ISSUANCE_DELAY)\n",
+ "maturity_date = issuance_date + day_cycle_seconds(ZERO_COUPON_MATURITY)\n",
+ "discount_amount = PRINCIPAL * ZERO_COUPON_DISCOUNT_BPS // cst.BPS\n",
+ "\n",
+ "attrs = make_pam_zero_coupon_bond(\n",
+ " contract_id=2,\n",
+ " status_date=current_ts,\n",
+ " initial_exchange_date=issuance_date,\n",
+ " maturity_date=maturity_date,\n",
+ " notional_principal=PRINCIPAL,\n",
+ " premium_discount_at_ied=discount_amount,\n",
+ ")\n",
+ "normalized = normalize_contract_attributes(\n",
+ " attrs,\n",
+ " denomination_asset_id=currency.id,\n",
+ " denomination_asset_decimals=currency.decimals,\n",
+ " notional_unit_value=MINIMUM_DENOMINATION,\n",
+ " secondary_market_opening_date=issuance_date,\n",
+ " secondary_market_closure_date=maturity_date + cst.DAY_2_SEC,\n",
+ ")\n",
+ "bank_funding_amount = normalized.terms.notional_principal - normalized.terms.initial_exchange_amount\n",
+ "assert [entry.event_type for entry in normalized.schedule] == [\"IED\", \"MD\"]\n",
+ "\n",
+ "issue_price_label = format_asset_amount(\n",
+ " normalized.terms.initial_exchange_amount,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "principal_label = format_asset_amount(\n",
+ " normalized.terms.notional_principal,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "discount_label = format_asset_amount(\n",
+ " bank_funding_amount,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "print(f\"Issue price: {issue_price_label}\")\n",
+ "print(f\"Principal at maturity: {principal_label}\")\n",
+ "print(f\"Discount reserve: {discount_label}\")\n",
+ "print(render_table(schedule_rows(normalized, currency_decimals=currency.decimals)))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8763a12b2bbd4a93a75aff182afb95dc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "app = DAsa.deploy_configured(\n",
+ " algorand=algorand,\n",
+ " arranger=arranger,\n",
+ " normalized=normalized,\n",
+ " prospectus_url=\"Notebook example: PAM zero coupon bond\",\n",
+ ")\n",
+ "arranger_role = app.arranger(arranger)\n",
+ "arranger_role.assign_role(DAsaRole.ACCOUNT_MANAGER, account_manager.address)\n",
+ "arranger_role.assign_role(DAsaRole.PRIMARY_DEALER, primary_dealer.address)\n",
+ "\n",
+ "app.account_manager(account_manager).open_account(\n",
+ " holding_address=investor.address,\n",
+ " payment_address=investor.address,\n",
+ ")\n",
+ "\n",
+ "state_after_config = app.contract.get_state()\n",
+ "assert state_after_config.status == enums.STATUS_PENDING_IED\n",
+ "print(state_after_config)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7623eae2785240b9bd12b16a66d81610",
+ "metadata": {},
+ "source": [
+ "## Primary Distribution\n",
+ "\n",
+ "The next cell uses `app.raw_client.new_group()` so the investor payment and the\n",
+ "`primary_distribution` app call stay atomic. That grouped flow is not yet wrapped\n",
+ "by a higher-level SDK helper.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7cdc8c89c7104fffa095e18ddfef8986",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if bank_funding_amount > 0:\n",
+ " algorand.send.asset_transfer(\n",
+ " AssetTransferParams(\n",
+ " asset_id=currency.id,\n",
+ " amount=bank_funding_amount,\n",
+ " receiver=app.app_address,\n",
+ " sender=bank.address,\n",
+ " signer=bank.signer,\n",
+ " )\n",
+ " )\n",
+ "\n",
+ "algorand.send.asset_transfer(\n",
+ " AssetTransferParams(\n",
+ " asset_id=currency.id,\n",
+ " amount=normalized.terms.initial_exchange_amount,\n",
+ " receiver=investor.address,\n",
+ " sender=bank.address,\n",
+ " signer=bank.signer,\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "investor_purchase_txn = algorand.create_transaction.asset_transfer(\n",
+ " AssetTransferParams(\n",
+ " asset_id=currency.id,\n",
+ " amount=normalized.terms.initial_exchange_amount,\n",
+ " receiver=app.app_address,\n",
+ " sender=investor.address,\n",
+ " signer=investor.signer,\n",
+ " )\n",
+ ")\n",
+ "(\n",
+ " app.raw_client.new_group()\n",
+ " .add_transaction(investor_purchase_txn, investor.signer)\n",
+ " .primary_distribution(\n",
+ " PrimaryDistributionArgs(\n",
+ " holding_address=investor.address,\n",
+ " units=normalized.terms.total_units,\n",
+ " ),\n",
+ " params=CommonAppCallParams(\n",
+ " sender=primary_dealer.address,\n",
+ " signer=primary_dealer.signer,\n",
+ " ),\n",
+ " )\n",
+ " .send()\n",
+ ")\n",
+ "\n",
+ "raw_position = app.account(investor).get_raw_position()\n",
+ "assert raw_position.reserved_units == normalized.terms.total_units\n",
+ "print(raw_position)\n",
+ "print(\n",
+ " \"Contract currency balance:\",\n",
+ " format_asset_amount(\n",
+ " algorand.asset.get_account_information(app.app_address, currency.id).balance,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ " ),\n",
+ ")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b118ea5561624da68c537baed56e602f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pending_state = app.contract.get_state()\n",
+ "assert pending_state.status == enums.STATUS_PENDING_IED\n",
+ "\n",
+ "ied_entry = normalized.schedule[0]\n",
+ "time_warp(ied_entry.scheduled_time + cst.DAY_2_SEC, algorand=algorand)\n",
+ "arranger_role.execute_ied()\n",
+ "\n",
+ "active_state = app.contract.get_state()\n",
+ "actualized_position = app.account(investor).get_actualized_position()\n",
+ "assert active_state.status == enums.STATUS_ACTIVE\n",
+ "assert actualized_position.units == normalized.terms.total_units\n",
+ "\n",
+ "print(active_state)\n",
+ "print(actualized_position)\n",
+ "print(\"Next due event:\", app.contract.get_next_due_event())\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "938c804e27f84196a10c8828c723f798",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "holding = app.account(investor)\n",
+ "cashflows = []\n",
+ "\n",
+ "for entry in normalized.schedule[1:]:\n",
+ " time_warp(entry.scheduled_time, algorand=algorand)\n",
+ " funding = arranger_role.fund_due_cashflows(max_event_count=1)\n",
+ " claim = holding.claim()\n",
+ "\n",
+ " assert funding.processed_events == 1\n",
+ " assert claim.total_amount == funding.total_funded\n",
+ "\n",
+ " cashflows.append(\n",
+ " {\n",
+ " \"event_id\": entry.event_id,\n",
+ " \"event_type\": entry.event_type,\n",
+ " \"scheduled_time\": entry.scheduled_time,\n",
+ " \"funded\": funding.total_funded,\n",
+ " \"interest_claimed\": claim.interest_amount,\n",
+ " \"principal_claimed\": claim.principal_amount,\n",
+ " \"total_claimed\": claim.total_amount,\n",
+ " \"claim_timestamp\": claim.timestamp,\n",
+ " }\n",
+ " )\n",
+ "\n",
+ "print(render_table(cashflow_rows(cashflows, currency=currency)))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "504fb2a444614c0babb325280ed9130a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final_state = app.contract.get_state()\n",
+ "final_position = holding.get_actualized_position()\n",
+ "total_interest_claimed = sum(int(item[\"interest_claimed\"]) for item in cashflows)\n",
+ "total_principal_claimed = sum(int(item[\"principal_claimed\"]) for item in cashflows)\n",
+ "\n",
+ "assert final_state.status == enums.STATUS_ENDED\n",
+ "assert final_state.event_cursor == len(normalized.schedule)\n",
+ "assert total_interest_claimed == 0\n",
+ "assert total_principal_claimed == normalized.terms.notional_principal\n",
+ "assert final_position.units == normalized.terms.total_units\n",
+ "\n",
+ "print(final_state)\n",
+ "print(final_position)\n",
+ "paid_label = format_asset_amount(\n",
+ " normalized.terms.initial_exchange_amount,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "received_label = format_asset_amount(\n",
+ " total_interest_claimed + total_principal_claimed,\n",
+ " decimals=currency.decimals,\n",
+ " unit_name=currency.unit_name,\n",
+ ")\n",
+ "print(f\"Investor paid {paid_label}\")\n",
+ "print(f\"Investor received {received_label}\")\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python",
+ "version": "3.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/modules/__init__.py b/modules/__init__.py
index e69de29b..00f07cbd 100644
--- a/modules/__init__.py
+++ b/modules/__init__.py
@@ -0,0 +1,15 @@
+from .accounting import AccountingModule
+from .actus_kernel import ActusKernelModule
+from .payment_agent import PaymentAgent
+from .rbac import RbacModule
+from .transfer_agent import TransferAgent
+
+__all__ = [
+ "AccountingModule",
+ "ActusKernelModule",
+ "PaymentAgent",
+ "RbacModule",
+ "TransferAgent",
+]
+
+__version__ = "0.20.0"
diff --git a/modules/accounting.py b/modules/accounting.py
index 60cde60e..52dec657 100644
--- a/modules/accounting.py
+++ b/modules/accounting.py
@@ -1,116 +1,187 @@
-# pyright: reportMissingModuleSource=false
-
from algopy import Account, BoxMap, Global, Txn, UInt64, arc4
-from modules.rbac import RbacModule
from smart_contracts import abi_types as typ
from smart_contracts import constants as cst
-from smart_contracts import enums as enm
from smart_contracts import errors as err
+from . import ActusKernelModule
+
+
+class AccountingModule(ActusKernelModule):
+ """Contract Account ledger state and per-account settlement helpers."""
-class AccountingModule(RbacModule):
def __init__(self) -> None:
super().__init__()
self.account = BoxMap(
- Account, typ.AccountInfo, key_prefix=cst.PREFIX_ID_ACCOUNT
+ Account,
+ typ.AccountPosition,
+ key_prefix=cst.PREFIX_ID_ACCOUNT,
)
- self.total_units = UInt64()
- self.circulating_units = UInt64()
- self.unit_value = UInt64()
- self.status = UInt64(enm.STATUS_INACTIVE)
-
- def status_is_active(self) -> bool:
- return self.status == enm.STATUS_ACTIVE
- def status_is_ended(self) -> bool:
- return self.status == enm.STATUS_ENDED
-
- def assert_valid_holding_address(self, holding_address: Account) -> None:
+ def _assert_valid_holding_address(self, holding_address: Account) -> None:
+ """Require the holding address to have an opened a contract account."""
assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- def assert_is_not_account_suspended(self, holding_address: Account) -> None:
+ def _assert_is_not_account_suspended(self, holding_address: Account) -> None:
+ """Require the account not to be suspended."""
assert not self.account[holding_address].suspended, err.SUSPENDED
- def account_units_value(self, holding_address: Account, units: UInt64) -> UInt64:
- return units * self.account[holding_address].unit_value
+ def _new_account_position(self, payment_address: Account) -> typ.AccountPosition:
+ """Create an empty contract account position."""
+ return typ.AccountPosition(
+ payment_address=payment_address,
+ units=UInt64(0),
+ reserved_units=UInt64(0),
+ suspended=False,
+ settled_cursor=UInt64(0),
+ interest_checkpoint=UInt64(0),
+ principal_checkpoint=UInt64(0),
+ claimable_interest=UInt64(0),
+ claimable_principal=UInt64(0),
+ )
+
+ def _settle_position(self, holding_address: Account) -> tuple[UInt64, UInt64]:
+ """
+ Settle an account to the latest funded global cashflow indices.
+
+ Computes the per-unit fixed-point interest and principal index growth since the
+ account's last checkpoints, converts those deltas into absolute claimable
+ amounts using the account's active units, accrues them to the position, and
+ advances the account checkpoints to the current global indices and event cursor.
+
+ Args:
+ holding_address: Account to settle.
+
+ Returns:
+ Tuple of newly accrued `(claimable_interest, claimable_principal)` amounts.
+ """
- def account_total_units_value(self, holding_address: Account) -> UInt64:
- return self.account_units_value(
- holding_address, self.account[holding_address].units
+ self._assert_valid_holding_address(holding_address)
+ position = self.account[holding_address].copy()
+
+ # Compute the incremental per-unit fixed-point interest and principal accrued
+ # since this account's last checkpoint.
+ interest_delta = self.cumulative_interest_index - position.interest_checkpoint
+ principal_delta = (
+ self.cumulative_principal_index - position.principal_checkpoint
)
- def outstanding_principal(self) -> UInt64:
- return self.circulating_units * self.unit_value
-
- def end_if_no_circulating_units(self) -> None:
- if self.circulating_units == UInt64(0):
- self.status = UInt64(enm.STATUS_ENDED)
-
- def reset_position_if_empty(self, holding_address: Account) -> None:
- if self.account[holding_address].units == UInt64(0):
- self.account[holding_address].unit_value = UInt64(0)
- self.account[holding_address].paid_coupons = UInt64(0)
-
- def assert_are_units_fungible(self, sender: Account, receiver: Account) -> None:
- assert (
- self.account[sender].unit_value == self.account[receiver].unit_value
- and self.account[sender].paid_coupons == self.account[receiver].paid_coupons
- ), err.NON_FUNGIBLE_UNITS
-
- def assert_fungible_transfer(self, sender: Account, receiver: Account) -> None:
- sender_unit_value = self.account[sender].unit_value
- if self.account[receiver].units > UInt64(0):
- self.assert_are_units_fungible(sender, receiver)
- else:
- self.account[receiver].unit_value = sender_unit_value
- self.account[receiver].paid_coupons = self.account[sender].paid_coupons
-
- def debit_units(self, holding_address: Account, units: UInt64) -> None:
- assert units <= self.account[holding_address].units, err.OVER_TRANSFER
- self.account[holding_address].units -= units
- self.reset_position_if_empty(holding_address)
+ # Convert the per-unit fixed-point deltas into absolute claimable amounts
+ # using the account's active units.
+ claimable_interest = self._scaled_mul_div(
+ interest_delta, position.units, self.fixed_point_scale
+ )
+ claimable_principal = self._scaled_mul_div(
+ principal_delta, position.units, self.fixed_point_scale
+ )
+
+ # Accrue the claimable amounts to the account position and make them available
+ # for withdrawal.
+ position.claimable_interest += claimable_interest
+ position.claimable_principal += claimable_principal
+
+ # Advance the account's per-unit fixed-point checkpoints to the current global
+ # per-unit fixed-point global indices.
+ position.interest_checkpoint = self.cumulative_interest_index
+ position.principal_checkpoint = self.cumulative_principal_index
+
+ # Advance the account's event cursor to the current global event cursor.
+ position.settled_cursor = self.event_cursor
+
+ # Update the account position and return the newly accrued claimable amounts
+ # added to the total position's claimable amounts.
+ self.account[holding_address] = position.copy()
+ return claimable_interest, claimable_principal
+
+ def _ensure_units_activated(self, holding_address: Account) -> None:
+ """Move reserved pre-IED units into active units once IED has executed."""
+ self._assert_valid_holding_address(holding_address)
+ if self._status_is_pending_ied():
+ return
+
+ position = self.account[holding_address].copy()
+ if position.reserved_units == UInt64(0):
+ return
+
+ activated_units = position.reserved_units
+ position.units += activated_units
+ position.reserved_units = UInt64(0)
+ self.account[holding_address] = position.copy()
+ assert self.reserved_units_total >= activated_units, err.OVER_DISTRIBUTION
+ self.reserved_units_total -= activated_units
+
+ def _claimable_total(self, holding_address: Account) -> UInt64:
+ """Return the total currently claimable amount for an account."""
+ return (
+ self.account[holding_address].claimable_interest
+ + self.account[holding_address].claimable_principal
+ )
+
+ def _reset_claimable(self, holding_address: Account) -> tuple[UInt64, UInt64]:
+ """Clear claimable balances after a successful withdrawal."""
+ position = self.account[holding_address].copy()
+
+ # Get the claimable amounts before reset
+ interest_amount = position.claimable_interest
+ principal_amount = position.claimable_principal
- def credit_units(self, holding_address: Account, units: UInt64) -> None:
+ # Reset the position's claimable amounts
+ position.claimable_interest = UInt64(0)
+ position.claimable_principal = UInt64(0)
+ self.account[holding_address] = position.copy()
+
+ assert self.reserved_interest >= interest_amount, err.NOT_ENOUGH_FUNDS
+ assert self.reserved_principal >= principal_amount, err.NOT_ENOUGH_FUNDS
+
+ # Update the global reserved interest and principal amounts
+ self.reserved_interest -= interest_amount
+ self.reserved_principal -= principal_amount
+ return interest_amount, principal_amount
+
+ def _credit_units(self, holding_address: Account, units: UInt64) -> None:
+ """Increase an account's active unit balance."""
self.account[holding_address].units += units
- def transfer_units(
+ def _credit_reserved_units(self, holding_address: Account, units: UInt64) -> None:
+ """Increase an account's reserved pre-IED unit balance."""
+ self.account[holding_address].reserved_units += units
+
+ def _debit_units(self, holding_address: Account, units: UInt64) -> None:
+ """Decrease an account's active unit balance."""
+ assert units <= self.account[holding_address].units, err.OVER_TRANSFER
+ self.account[holding_address].units -= units
+
+ def _apply_transfer(
self,
sender_holding_address: Account,
receiver_holding_address: Account,
units: UInt64,
) -> None:
- self.debit_units(sender_holding_address, units)
- self.credit_units(receiver_holding_address, units)
-
- def apply_principal_redemption(self, holding_address: Account) -> None:
- redeemed_units = self.account[holding_address].units
- self.circulating_units -= redeemed_units
- self.account[holding_address].units = UInt64(0)
- self.reset_position_if_empty(holding_address)
- self.end_if_no_circulating_units()
+ """Move active units between two settled account positions."""
+ self._debit_units(sender_holding_address, units)
+ self._credit_units(receiver_holding_address, units)
@arc4.abimethod
- def account_gov_suspension(
+ def account_suspension(
self, *, holding_address: Account, suspended: bool
) -> UInt64:
"""
- Set account suspension status
+ Set the suspension status of one account.
Args:
- holding_address: Account Holding Address
- suspended: Suspension status
+ holding_address: Account holding address.
+ suspended: Suspension status to apply.
Returns:
- Timestamp of the set account suspension status
+ UNIX timestamp of the suspension update.
Raises:
- UNAUTHORIZED: Not authorized
- INVALID_HOLDING_ADDRESS: Invalid account holding address
+ UNAUTHORIZED: Caller is not an active authority.
+ INVALID_HOLDING_ADDRESS: Holding address does not exist.
"""
- self.assert_caller_is_authority()
- self.assert_valid_holding_address(holding_address)
+ self._assert_caller_is_authority()
+ self._assert_valid_holding_address(holding_address)
self.account[holding_address].suspended = suspended
return Global.latest_timestamp
@@ -119,104 +190,70 @@ def account_open(
self, *, holding_address: Account, payment_address: Account
) -> UInt64:
"""
- Open D-ASA account
+ Open a contract account with a new position and register its payment address.
Args:
- holding_address: Account Holding Address
- payment_address: Account Payment Address
+ holding_address: Account holding address.
+ payment_address: Account payment address.
Returns:
- Timestamp of the account opening
+ UNIX timestamp of the account opening.
Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
+ UNAUTHORIZED: Caller is not an active account manager or contract already ended.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ INVALID_HOLDING_ADDRESS: Holding address already exists.
"""
- self.assert_caller_is_account_manager()
- assert not self.status_is_ended(), err.UNAUTHORIZED
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
+ self._assert_caller_is_account_manager()
+ assert not self._status_is_ended(), err.UNAUTHORIZED
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
assert holding_address not in self.account, err.INVALID_HOLDING_ADDRESS
-
- self.account[holding_address] = typ.AccountInfo(
- payment_address=payment_address,
- units=UInt64(0),
- unit_value=UInt64(0),
- paid_coupons=UInt64(0),
- suspended=False,
- )
+ self.account[holding_address] = self._new_account_position(payment_address)
return Global.latest_timestamp
- @arc4.abimethod
- def account_close(self, *, holding_address: Account) -> tuple[UInt64, UInt64]:
- """
- Close D-ASA account
-
- Args:
- holding_address: Account Holding Address
-
- Returns:
- Closed units, Timestamp of the account closing
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- """
-
- self.assert_caller_is_account_manager()
- self.assert_is_not_asset_defaulted()
- self.assert_valid_holding_address(holding_address)
-
- closed_units = self.account[holding_address].units
- del self.account[holding_address]
- self.circulating_units -= closed_units
- self.end_if_no_circulating_units()
- return closed_units, Global.latest_timestamp
-
@arc4.abimethod
def account_update_payment_address(
self, *, holding_address: Account, payment_address: Account
) -> UInt64:
"""
- Update the Payment Address of an account
+ Update the payment address of an account.
Args:
- holding_address: Account Holding Address
- payment_address: Account Payment Address
+ holding_address: Account holding address.
+ payment_address: New account payment address.
Returns:
- Timestamp of the account update
+ UNIX timestamp of the account update.
Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
+ UNAUTHORIZED: Caller is not the holding address owner.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ INVALID_HOLDING_ADDRESS: Holding address does not exist.
"""
+ self._assert_valid_holding_address(holding_address)
assert Txn.sender == holding_address, err.UNAUTHORIZED
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
- self.assert_valid_holding_address(holding_address)
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
self.account[holding_address].payment_address = payment_address
return Global.latest_timestamp
@arc4.abimethod(readonly=True)
- def account_get_info(self, *, holding_address: Account) -> typ.AccountInfo:
+ def account_get_position(self, *, holding_address: Account) -> typ.AccountPosition:
"""
- Get account info
+ Get the full accounting position for one holder.
Args:
- holding_address: Account Holding Address
+ holding_address: Account holding address.
Returns:
- Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended
+ Account position record.
Raises:
- INVALID_HOLDING_ADDRESS: Invalid account holding address
+ INVALID_HOLDING_ADDRESS: Holding address does not exist.
"""
- self.assert_valid_holding_address(holding_address)
+ self._assert_valid_holding_address(holding_address)
return self.account[holding_address]
diff --git a/modules/actus/__init__.py b/modules/actus/__init__.py
deleted file mode 100644
index 62cec6df..00000000
--- a/modules/actus/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from .pam import PAMCoreMixin
-from .pbn import PBNCoreMixin
-
-__all__ = [
- "PAMCoreMixin",
- "PBNCoreMixin",
-]
diff --git a/modules/actus/pam.py b/modules/actus/pam.py
deleted file mode 100644
index c4db4fac..00000000
--- a/modules/actus/pam.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# pyright: reportMissingModuleSource=false
-from algopy import Account, Asset, Global, UInt64, arc4
-
-from modules.core_financial.common import CoreFinancialCommonMixin
-from smart_contracts import abi_types as typ
-from smart_contracts import errors as err
-
-
-class PAMCoreMixin(CoreFinancialCommonMixin):
- """Principal at Maturity (PAM) core."""
-
- def __init__(self) -> None:
- super().__init__()
-
- def assert_pay_principal_authorization(self, holding_address: Account) -> None:
- # The reference implementation does not restrict caller authorization
- assert self.status_is_active(), err.UNAUTHORIZED
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
- self.assert_valid_holding_address(holding_address)
- units = self.account[holding_address].units
- assert units > 0, err.NO_UNITS
- assert Global.latest_timestamp >= self.maturity_date, err.NOT_MATURE
- # The reference implementation does not assert if there is enough liquidity to repay the principal to all
-
- @arc4.abimethod
- def asset_config(
- self,
- *,
- denomination_asset_id: Asset,
- settlement_asset_id: Asset,
- principal: UInt64,
- principal_discount: UInt64,
- minimum_denomination: UInt64,
- day_count_convention: arc4.UInt8,
- interest_rate: arc4.UInt16,
- coupon_rates: typ.CouponRates,
- time_events: typ.TimeEvents,
- time_periods: typ.TimePeriods,
- ) -> None:
- """
- Configure the Debt Algorand Standard Application
-
- Args:
- denomination_asset_id: Denomination asset identifier
- settlement_asset_id: Settlement asset identifier
- principal: Principal, expressed in denomination asset
- principal_discount: Principal discount in bps
- minimum_denomination: Minimum denomination, expressed in denomination asset
- day_count_convention: Day-count convention for interests calculation
- interest_rate: Interest rate in bps
- coupon_rates: Coupon interest rates in bps
- time_events: Time events (strictly ascending order)
- time_periods: Time periods of recurring time events
-
- Raises:
- UNAUTHORIZED: Not authorized
- ALREADY_CONFIGURED: D-ASA already configured
- INVALID_MINIMUM_DENOMINATION: Minimum denomination is not a divisor of principal
- INVALID_DAY_COUNT_CONVENTION: Invalid day-count convention ID
- INVALID_TIME_EVENTS_LENGTH: Time events length is invalid
- INVALID_TIME: Time events must be set in the future
- INVALID_SORTING: Time events are not sorted correctly
- INVALID_TIME_PERIOD_DURATION: Time period durations must be greater than zero
- INVALID_SETTLEMENT_ASSET: Different settlement asset not supported, must be equal to denomination asset
- INVALID_TIME_PERIODS: Time periods not properly set
- INVALID_TIME_PERIOD_REPETITIONS: Time period repetitions not properly set
- INVALID_COUPON_RATES: Coupon rates not properly set
- """
- self._configure_asset_terms(
- denomination_asset_id=denomination_asset_id,
- settlement_asset_id=settlement_asset_id,
- principal=principal,
- principal_discount=principal_discount,
- minimum_denomination=minimum_denomination,
- day_count_convention=day_count_convention,
- interest_rate=interest_rate,
- coupon_rates=coupon_rates,
- time_events=time_events,
- time_periods=time_periods,
- )
diff --git a/modules/actus/pbn.py b/modules/actus/pbn.py
deleted file mode 100644
index d808e17f..00000000
--- a/modules/actus/pbn.py
+++ /dev/null
@@ -1,114 +0,0 @@
-from algopy import Asset, Global, UInt64, arc4
-
-from modules.core_financial.common import CoreFinancialCommonMixin
-from smart_contracts import abi_types as typ
-from smart_contracts import config as cfg
-from smart_contracts import errors as err
-
-
-class PBNCoreMixin(CoreFinancialCommonMixin):
- """Perpetual Bond (PBN) core."""
-
- def __init__(self) -> None:
- super().__init__()
-
- def assert_time_schedule_limits(self, time_events: typ.TimeEvents) -> None:
- # PBN has no maturity date in the static schedule
- assert (
- time_events.length == self.total_coupons + 3
- ), err.INVALID_TIME_EVENTS_LENGTH
-
- def set_time_events(self, time_events: typ.TimeEvents) -> None:
- self.time_events.value = time_events.copy()
- self.primary_distribution_opening_date = time_events[
- cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX
- ]
- self.primary_distribution_closure_date = time_events[
- cfg.PRIMARY_DISTRIBUTION_CLOSURE_DATE_IDX
- ]
- self.issuance_date = time_events[cfg.ISSUANCE_DATE_IDX]
- self.maturity_date = UInt64(0)
-
- @arc4.abimethod
- def asset_config(
- self,
- *,
- denomination_asset_id: Asset,
- settlement_asset_id: Asset,
- principal: UInt64,
- principal_discount: UInt64,
- minimum_denomination: UInt64,
- day_count_convention: arc4.UInt8,
- interest_rate: arc4.UInt16,
- coupon_rates: typ.CouponRates,
- time_events: typ.TimeEvents,
- time_periods: typ.TimePeriods,
- ) -> None:
- """
- Configure the Debt Algorand Standard Application
-
- Args:
- denomination_asset_id: Denomination asset identifier
- settlement_asset_id: Settlement asset identifier
- principal: Principal, expressed in denomination asset
- principal_discount: Principal discount in bps
- minimum_denomination: Minimum denomination, expressed in denomination asset
- day_count_convention: Day-count convention for interests calculation
- interest_rate: Interest rate in bps
- coupon_rates: Coupon interest rates in bps
- time_events: Time events (strictly ascending order)
- time_periods: Time periods of recurring time events
-
- Raises:
- UNAUTHORIZED: Not authorized
- ALREADY_CONFIGURED: D-ASA already configured
- INVALID_MINIMUM_DENOMINATION: Minimum denomination is not a divisor of principal
- INVALID_DAY_COUNT_CONVENTION: Invalid day-count convention ID
- INVALID_TIME_EVENTS_LENGTH: Time events length is invalid
- INVALID_TIME: Time events must be set in the future
- INVALID_SORTING: Time events are not sorted correctly
- INVALID_TIME_PERIOD_DURATION: Time period durations must be greater than zero
- INVALID_SETTLEMENT_ASSET: Different settlement asset not supported, must be equal to denomination asset
- INVALID_TIME_PERIODS: Time periods not properly set
- INVALID_TIME_PERIOD_REPETITIONS: Time period repetitions not properly set
- INVALID_COUPON_RATES: Coupon rates not properly set
- """
- self._configure_asset_terms(
- denomination_asset_id=denomination_asset_id,
- settlement_asset_id=settlement_asset_id,
- principal=principal,
- principal_discount=principal_discount,
- minimum_denomination=minimum_denomination,
- day_count_convention=day_count_convention,
- interest_rate=interest_rate,
- coupon_rates=coupon_rates,
- time_events=time_events,
- time_periods=time_periods,
- )
-
- @arc4.abimethod
- def update_interest_rate(self, *, interest_rate: arc4.UInt16) -> UInt64:
- """
- Update variable interest rates in bps
-
- Args:
- interest_rate: Interest rate in bps
-
- Returns:
- Timestamp of the update
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- PENDING_COUPON_PAYMENT: Pending due coupon payment
- """
- self.assert_caller_is_interest_oracle()
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
- due_coupons = self.count_due_coupons()
- assert self.all_due_coupons_paid(due_coupons), err.PENDING_COUPON_PAYMENT
-
- # Update interest rate
- self.interest_rate = interest_rate.as_uint64()
- return Global.latest_timestamp
diff --git a/modules/actus_kernel.py b/modules/actus_kernel.py
new file mode 100644
index 00000000..62e8a5d7
--- /dev/null
+++ b/modules/actus_kernel.py
@@ -0,0 +1,1316 @@
+"""
+ACTUS Kernel
+
+This module contains the contract-type-independent part of the execution engine.
+It validates normalized terms, classifies schedule entries, computes cashflow
+magnitudes, advances the contract state machine, and exposes the generic ABI methods
+shared by the D-ASA variants.
+
+Glossary used in this file:
+- `IED`: initial exchange date. The contract moves from configured to active.
+- `IP`: interest payment.
+- `PR`: principal redemption.
+- `PI`: principal increase or capitalization.
+- `MD`: maturity.
+- `RR` / `RRF`: rate reset from an observed rate or a pre-fixed rate.
+- `IPCB`: interest calculation base reset.
+- `PRF`: principal redemption fixing for dynamic annuities.
+
+The schedule is normalized off chain before it reaches the AVM. Each entry
+therefore already carries the next contractual state, and the kernel mostly
+needs to verify that the next entry is due, derive any payable amount, then
+move on-chain state to the entry's `next_*` values.
+"""
+
+from algopy import (
+ Account,
+ Asset,
+ BoxMap,
+ Bytes,
+ Global,
+ String,
+ UInt64,
+ arc4,
+ ensure_budget,
+ itxn,
+ op,
+)
+
+from smart_contracts import abi_types as typ
+from smart_contracts import constants as cst
+from smart_contracts import enums
+from smart_contracts import errors as err
+from smart_contracts.events import ExecutionEvent
+
+from .rbac import RbacModule
+
+
+class ActusKernelModule(RbacModule):
+ """
+ Implement the ACTUS schedule and state transitions.
+ """
+
+ def __init__(self) -> None:
+ super().__init__()
+
+ # Contract
+ self.status = UInt64(enums.STATUS_INACTIVE)
+ self.contract_type = UInt64()
+
+ # Prospectus (Informational)
+ self.prospectus_hash = Bytes()
+ self.prospectus_url = String()
+
+ # Denomination
+ self.denomination_asset_id = Asset()
+ self.settlement_asset_id = Asset()
+
+ # Time
+ self.initial_exchange_date = typ.TimeStamp()
+ self.maturity_date = typ.TimeStamp()
+ self.transfer_opening_date = typ.TimeStamp()
+ self.transfer_closure_date = typ.TimeStamp()
+
+ # Day Count Convention
+ self.day_count_convention = UInt64()
+
+ # Units
+ self.total_units = UInt64()
+ self.reserved_units_total = UInt64()
+
+ # Principal
+ self.initial_exchange_amount = UInt64()
+ self.outstanding_principal = UInt64()
+ self.next_principal_redemption = UInt64()
+ self.dynamic_principal_redemption = False
+
+ # Interest
+ self.interest_calculation_base = UInt64()
+ self.accrued_interest = UInt64()
+
+ # Interest Rates
+ self.nominal_interest_rate = UInt64()
+ self.rate_reset_spread = UInt64()
+ self.rate_reset_multiplier = UInt64()
+ self.rate_reset_floor = UInt64()
+ self.rate_reset_cap = UInt64()
+ self.rate_reset_next = UInt64()
+ self.has_rate_reset_floor = False
+ self.has_rate_reset_cap = False
+
+ # Primary Distribution
+ self.reserved_principal = UInt64()
+ self.reserved_interest = UInt64()
+
+ # Cumulative Per-Unit Fixed-Point Indexes
+ self.cumulative_interest_index = UInt64()
+ self.cumulative_principal_index = UInt64()
+
+ # Schedule
+ self.schedule_page = BoxMap(
+ UInt64,
+ typ.ExecutionSchedulePage,
+ key_prefix=cst.PREFIX_ID_SCHEDULE_PAGE,
+ )
+ self.event_cursor = UInt64()
+ self.schedule_entry_count = UInt64()
+
+ # Scaling
+ self.fixed_point_scale = UInt64()
+
+ ############################################################################
+ # AVM-specific Contract State
+ ############################################################################
+
+ def _status_is_inactive(self) -> bool:
+ """Return whether the contract is inactive."""
+ return self.status == UInt64(enums.STATUS_INACTIVE)
+
+ def _status_is_active(self) -> bool:
+ """Return whether the contract is active after IED."""
+ return self.status == UInt64(enums.STATUS_ACTIVE)
+
+ def _status_is_pending_ied(self) -> bool:
+ """Return whether the contract is configured but still awaiting IED."""
+ return self.status == UInt64(enums.STATUS_PENDING_IED)
+
+ def _status_is_ended(self) -> bool:
+ """Return whether the contract has reached its terminal state."""
+ return self.status == UInt64(enums.STATUS_ENDED)
+
+ def _assert_configured(self) -> None:
+ """Require the contract to have completed configuration."""
+ assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+
+ def _assert_initial_exchange_executed(self) -> None:
+ """Require the initial exchange event to have been executed."""
+ assert not self._status_is_pending_ied(), err.PENDING_IED
+
+ ############################################################################
+ # Math and Conversions
+ ############################################################################
+
+ def _scaled_mul_div(
+ self, multiplicand: UInt64, multiplier: UInt64, divisor: UInt64
+ ) -> UInt64:
+ """Multiply and divide in fixed-point space using wide AVM math."""
+ if multiplicand == UInt64(0) or multiplier == UInt64(0):
+ return UInt64(0)
+ high, low = op.mulw(multiplicand, multiplier)
+ return op.divw(high, low, divisor)
+
+ def _amount_to_index_delta(self, amount: UInt64) -> UInt64:
+ """Convert a contract-wide amount into a per-unit cumulative index delta."""
+ if amount == UInt64(0):
+ return UInt64(0)
+ assert self.total_units > UInt64(0), err.NO_UNITS
+ return self._scaled_mul_div(amount, self.fixed_point_scale, self.total_units)
+
+ def _index_delta_to_amount(self, index_delta: UInt64) -> UInt64:
+ """
+ Convert a per-unit index delta back into a contract-wide amount.
+
+ This mirrors `_amount_to_index_delta()` and keeps funding amounts aligned
+ with what holders can later realize from the cumulative indices.
+ """
+ if index_delta == UInt64(0):
+ return UInt64(0)
+ return self._scaled_mul_div(
+ self.total_units,
+ index_delta,
+ self.fixed_point_scale,
+ )
+
+ ############################################################################
+ # Schedule
+ ############################################################################
+
+ def _schedule_page_index(self, event_id: UInt64) -> UInt64:
+ """Return the schedule page index containing the given event id."""
+ return event_id // UInt64(cst.SCHEDULE_PAGE_SIZE)
+
+ def _schedule_page_offset(self, event_id: UInt64) -> UInt64:
+ """Return the offset of an event within its schedule page."""
+ return event_id % UInt64(cst.SCHEDULE_PAGE_SIZE)
+
+ def _store_schedule_page(
+ self, page_index: UInt64, schedule_page: typ.ExecutionSchedulePage
+ ) -> None:
+ """Persist a normalized schedule page."""
+ self.schedule_page[page_index] = schedule_page.copy()
+
+ def _get_schedule_entry(self, event_id: UInt64) -> typ.ExecutionScheduleEntry:
+ """Load a normalized schedule entry by global event id."""
+ assert event_id < self.schedule_entry_count, err.INVALID_EVENT_ID
+ page_index = self._schedule_page_index(event_id)
+ assert page_index in self.schedule_page, err.INVALID_SCHEDULE_PAGE
+ page = self.schedule_page[page_index].copy()
+ offset = self._schedule_page_offset(event_id)
+ assert offset < page.length, err.INVALID_SCHEDULE_PAGE
+ return page[offset].copy()
+
+ ############################################################################
+ # ACTUS Composition Validation
+ ############################################################################
+
+ def _is_supported_contract_type(self, contract_type: UInt64) -> bool:
+ """Return whether the contract type belongs to the supported ACTUS types."""
+ return contract_type in (
+ UInt64(enums.CT_PAM),
+ UInt64(enums.CT_ANN),
+ UInt64(enums.CT_NAM),
+ UInt64(enums.CT_LAM),
+ UInt64(enums.CT_LAX),
+ UInt64(enums.CT_CLM),
+ )
+
+ def _assert_supported_contract_type(self, contract_type: UInt64) -> None:
+ """Require the configured contract type to be supported by the kernel."""
+ assert self._is_supported_contract_type(contract_type), err.INVALID_ACTUS_CONFIG
+
+ def _supports_observed_events(self) -> bool:
+ """Return whether the configured type may append observed events."""
+ return self.contract_type == UInt64(enums.CT_CLM)
+
+ def _event_allowed_for_contract_type(
+ self, contract_type: UInt64, event_type: UInt64
+ ) -> bool:
+ """
+ Return whether `event_type` may appear in the normalized schedule.
+
+ This is the kernel's compatibility matrix between contract families and
+ schedule events. It does not say whether the event is due now, only
+ whether it is a valid event kind for the chosen ACTUS contract type.
+ """
+ # Common events supported by all contract types
+ common_events = (
+ UInt64(enums.EVT_IED),
+ UInt64(enums.EVT_IP),
+ UInt64(enums.EVT_MD),
+ UInt64(enums.EVT_RR),
+ UInt64(enums.EVT_RRF),
+ )
+
+ # Check common events first
+ if event_type in common_events:
+ return True
+
+ # Contract-specific additional events
+ if contract_type == UInt64(enums.CT_PAM):
+ # PAM only supports common events
+ return False
+
+ if contract_type == UInt64(enums.CT_LAM) or contract_type == UInt64(
+ enums.CT_NAM
+ ):
+ # LAM/NAM add: PR, IPCB
+ return event_type in (
+ UInt64(enums.EVT_PR),
+ UInt64(enums.EVT_IPCB),
+ )
+
+ if contract_type == UInt64(enums.CT_ANN):
+ # ANN adds: PR, IPCB, PRF
+ return event_type in (
+ UInt64(enums.EVT_PR),
+ UInt64(enums.EVT_IPCB),
+ UInt64(enums.EVT_PRF),
+ )
+
+ if contract_type == UInt64(enums.CT_LAX):
+ # LAX adds: PR, PI, IPCB, PRF
+ return event_type in (
+ UInt64(enums.EVT_PR),
+ UInt64(enums.EVT_PI),
+ UInt64(enums.EVT_IPCB),
+ UInt64(enums.EVT_PRF),
+ )
+
+ if contract_type == UInt64(enums.CT_CLM):
+ # CLM adds: PR
+ return event_type == UInt64(enums.EVT_PR)
+
+ return False
+
+ def _is_supported_day_count_convention(self, day_count_convention: UInt64) -> bool:
+ """Return whether the normalized day-count identifier is accepted in v1."""
+ return day_count_convention in (
+ UInt64(enums.DCC_AA),
+ UInt64(enums.DCC_A360),
+ UInt64(enums.DCC_A365),
+ UInt64(enums.DCC_30E360ISDA),
+ UInt64(enums.DCC_30E360),
+ )
+
+ def _assert_supported_day_count_convention(
+ self, day_count_convention: UInt64
+ ) -> None:
+ """Require the normalized day-count identifier to be one the AVM accepts."""
+ assert self._is_supported_day_count_convention(
+ day_count_convention
+ ), err.INVALID_DAY_COUNT_CONVENTION
+
+ def _assert_event_allowed_for_contract_type(
+ self, contract_type: UInt64, event_type: UInt64
+ ) -> None:
+ """Require a schedule event to be compatible with the stored contract type."""
+ assert self._event_allowed_for_contract_type(
+ contract_type, event_type
+ ), err.INVALID_ACTUS_CONFIG
+
+ def _validate_terms_for_contract_type(
+ self, contract_type: UInt64, terms: typ.NormalizedActusTerms
+ ) -> None:
+ """Validate normalized terms that depend on the selected contract type."""
+ assert terms.initial_exchange_amount > UInt64(0), err.INVALID_ACTUS_CONFIG
+ self._assert_supported_day_count_convention(
+ terms.day_count_convention.as_uint64()
+ )
+ if contract_type != UInt64(enums.CT_ANN):
+ assert not terms.dynamic_principal_redemption, err.INVALID_ACTUS_CONFIG
+
+ def _is_dynamic_annuity(self) -> bool:
+ """Return whether the current contract uses ANN dynamic redemption."""
+ return (
+ self.contract_type == UInt64(enums.CT_ANN)
+ and self.dynamic_principal_redemption
+ )
+
+ ############################################################################
+ # Event Classifiers
+ ############################################################################
+
+ def _event_is_cash(self, event_type: UInt64) -> bool:
+ """
+ Return whether the event reserves settlement funds for holders.
+
+ Cash events increase the global per-unit indices and ring-fence funds in
+ `reserved_interest` / `reserved_principal` for later holder claims.
+ """
+ return event_type in (
+ UInt64(enums.EVT_IP),
+ UInt64(enums.EVT_PR),
+ UInt64(enums.EVT_MD),
+ )
+
+ def _event_is_non_cash(self, event_type: UInt64) -> bool:
+ """
+ Return whether the event only mutates contract state.
+
+ Non-cash events still advance the schedule cursor, but they do not
+ reserve settlement assets in the holder claim ledger.
+ """
+ return event_type in (
+ UInt64(enums.EVT_IED),
+ UInt64(enums.EVT_PI),
+ UInt64(enums.EVT_RR),
+ UInt64(enums.EVT_RRF),
+ UInt64(enums.EVT_IPCB),
+ UInt64(enums.EVT_PRF),
+ )
+
+ def _event_is_rate_reset(self, event_type: UInt64) -> bool:
+ """Return whether the event updates the current contractual interest rate."""
+ return event_type in (UInt64(enums.EVT_RR), UInt64(enums.EVT_RRF))
+
+ ############################################################################
+ # Amounts Computation
+ ############################################################################
+
+ def _entry_interest_segment(self, entry: typ.ExecutionScheduleEntry) -> UInt64:
+ """
+ Compute the interest accrued since the previous status date.
+
+ The schedule already provides the accrual factor for the period. The
+ kernel multiplies that factor by the current interest base and nominal
+ rate to get the incremental carry attributable to this entry.
+ """
+ if (
+ entry.accrual_factor == UInt64(0)
+ or self.nominal_interest_rate == UInt64(0)
+ or self.interest_calculation_base == UInt64(0)
+ ):
+ return UInt64(0)
+ accrued = self._scaled_mul_div(
+ self.interest_calculation_base,
+ self.nominal_interest_rate,
+ self.fixed_point_scale,
+ )
+ return self._scaled_mul_div(
+ accrued,
+ entry.accrual_factor,
+ self.fixed_point_scale,
+ )
+
+ def _entry_interest_amount(self, entry: typ.ExecutionScheduleEntry) -> UInt64:
+ """
+ Return the contractual interest due for a cash event.
+
+ `IP` and `MD` settle all currently accrued carry plus the period segment
+ produced by this entry. `PR` does not settle interest separately here.
+ """
+ event_type = entry.event_type.as_uint64()
+ if event_type not in (UInt64(enums.EVT_IP), UInt64(enums.EVT_MD)):
+ return UInt64(0)
+ return self.accrued_interest + self._entry_interest_segment(entry)
+
+ def _entry_principal_amount(self, entry: typ.ExecutionScheduleEntry) -> UInt64:
+ """
+ Return the contractual principal due for a cash event.
+
+ For standard schedules the entry directly tells the kernel the next
+ outstanding principal. Dynamic annuities are different: the scheduled
+ redemption is treated as a total payment target, so principal is the
+ residual left after interest is covered.
+ """
+ event_type = entry.event_type.as_uint64()
+ if event_type not in (UInt64(enums.EVT_PR), UInt64(enums.EVT_MD)):
+ return UInt64(0)
+ if self._is_dynamic_annuity():
+ if event_type == UInt64(enums.EVT_MD):
+ return self.outstanding_principal
+ interest_due = self.accrued_interest + self._entry_interest_segment(entry)
+ if self.next_principal_redemption <= interest_due:
+ return UInt64(0)
+ principal_amount = self.next_principal_redemption - interest_due
+ if principal_amount > self.outstanding_principal:
+ return self.outstanding_principal
+ return principal_amount
+ assert (
+ entry.next_outstanding_principal <= self.outstanding_principal
+ ), err.INVALID_ACTUS_CONFIG
+ return self.outstanding_principal - entry.next_outstanding_principal
+
+ def _entry_ied_amount(self, entry: typ.ExecutionScheduleEntry) -> UInt64:
+ """
+ Return the contractual IED amount stored in normalized terms.
+
+ `IED` is a lifecycle transition on chain, not a funded holder cashflow,
+ so the amount is emitted for traceability but not settled from escrow.
+ """
+ assert entry.event_type.as_uint64() == UInt64(enums.EVT_IED), err.NOT_EVT_IED
+ return self.initial_exchange_amount
+
+ def _reserved_total(self) -> UInt64:
+ """Return the settlement funds already ring-fenced for holders."""
+ return self.reserved_interest + self.reserved_principal
+
+ ############################################################################
+ # Annuity (ANN) Specific Logic
+ ############################################################################
+
+ def _discount_annuity_factor(
+ self,
+ discount_factor: UInt64,
+ redemption_factor: UInt64,
+ ) -> UInt64:
+ """Advance an annuity discount factor by one redemption period."""
+ if redemption_factor == UInt64(0):
+ return discount_factor
+ period_rate = self.fixed_point_scale + self._scaled_mul_div(
+ self.nominal_interest_rate,
+ redemption_factor,
+ self.fixed_point_scale,
+ )
+ assert period_rate > UInt64(0), err.INVALID_ACTUS_CONFIG
+ return self._scaled_mul_div(
+ discount_factor,
+ self.fixed_point_scale,
+ period_rate,
+ )
+
+ def _recalculate_annuity_payment(self, entry: typ.ExecutionScheduleEntry) -> UInt64:
+ """
+ Recompute the next annuity payment after a `PRF` event.
+
+ The method walks the remaining redemption-bearing schedule entries,
+ discounts each future payment bucket, and solves for the flat payment
+ that amortizes the current outstanding state.
+ """
+ discount_factor = self.fixed_point_scale
+ denominator = UInt64(0)
+ skip_first_redemption = False
+
+ if entry.redemption_accrual_factor > UInt64(0):
+ # An initial PRF may describe the first redemption period directly.
+ discount_factor = self._discount_annuity_factor(
+ discount_factor,
+ entry.redemption_accrual_factor,
+ )
+ denominator += discount_factor
+ skip_first_redemption = True
+
+ future_event_id = self.event_cursor + UInt64(1)
+ while future_event_id < self.schedule_entry_count:
+ future_entry = self._get_schedule_entry(future_event_id)
+ future_event_type = future_entry.event_type.as_uint64()
+ # Only redemption-bearing events contribute to the annuity denominator.
+ is_redemption_event = future_event_type == UInt64(enums.EVT_PR) or (
+ future_event_type == UInt64(enums.EVT_MD)
+ and future_entry.redemption_accrual_factor > UInt64(0)
+ )
+ if is_redemption_event:
+ if skip_first_redemption:
+ skip_first_redemption = False
+ else:
+ discount_factor = self._discount_annuity_factor(
+ discount_factor,
+ future_entry.redemption_accrual_factor,
+ )
+ denominator += discount_factor
+ future_event_id += UInt64(1)
+
+ assert denominator > UInt64(0), err.INVALID_ACTUS_CONFIG
+ numerator = self.outstanding_principal
+ if entry.flags & UInt64(enums.FLAG_INITIAL_PRF) == UInt64(0):
+ # Subsequent PRF events amortize both principal and already accrued carry.
+ numerator += self.accrued_interest
+ return self._scaled_mul_div(
+ numerator,
+ self.fixed_point_scale,
+ denominator,
+ )
+
+ ############################################################################
+ # Apply Schedule Entries
+ ############################################################################
+
+ def _apply_cash_entry(
+ self, entry: typ.ExecutionScheduleEntry
+ ) -> tuple[UInt64, UInt64]:
+ """
+ Apply one due cash event and reserve its amount for later claims.
+
+ The kernel derives the contract-wide interest and principal due, turns
+ those amounts into per-unit index deltas, reserves settlement funds, and
+ advances the global cursor to the next schedule entry.
+ """
+ assert entry.event_id == self.event_cursor, err.INVALID_EVENT_CURSOR
+ assert entry.scheduled_time <= Global.latest_timestamp, err.NO_DUE_CASHFLOW
+
+ interest_amount_due = self._entry_interest_amount(entry)
+ principal_amount_due = self._entry_principal_amount(entry)
+ next_outstanding_principal = entry.next_outstanding_principal
+ next_interest_base = entry.next_outstanding_principal
+
+ if self._is_dynamic_annuity():
+ event_type = entry.event_type.as_uint64()
+ # Dynamic annuities derive next state from the payment decomposition,
+ # not only from the precomputed `next_*` fields.
+ if event_type == UInt64(enums.EVT_PR):
+ next_outstanding_principal = (
+ self.outstanding_principal - principal_amount_due
+ )
+ next_interest_base = next_outstanding_principal
+ elif event_type == UInt64(enums.EVT_IP):
+ next_outstanding_principal = self.outstanding_principal
+ next_interest_base = self.interest_calculation_base
+ elif event_type == UInt64(enums.EVT_MD):
+ next_outstanding_principal = UInt64(0)
+ next_interest_base = UInt64(0)
+
+ # Funding uses per-unit cumulative indices so each holder can settle
+ # independently from its current unit balance.
+ interest_index_delta = self._amount_to_index_delta(interest_amount_due)
+ principal_index_delta = self._amount_to_index_delta(principal_amount_due)
+ interest_amount = self._index_delta_to_amount(interest_index_delta)
+ principal_amount = self._index_delta_to_amount(principal_index_delta)
+ required_amount = interest_amount + principal_amount
+ assert (
+ self._available_settlement_funds() >= required_amount
+ ), err.NOT_ENOUGH_FUNDS
+
+ self.reserved_interest += interest_amount
+ self.reserved_principal += principal_amount
+ self.cumulative_interest_index += interest_index_delta
+ self.cumulative_principal_index += principal_index_delta
+ if entry.event_type.as_uint64() == UInt64(enums.EVT_PR):
+ # For PR, the period interest stays accrued until a later IP or MD.
+ self.accrued_interest += self._entry_interest_segment(entry)
+ else:
+ self.accrued_interest = UInt64(0)
+ if not self._is_dynamic_annuity() or entry.event_type.as_uint64() == UInt64(
+ enums.EVT_MD
+ ):
+ self.next_principal_redemption = entry.next_principal_redemption
+ self.outstanding_principal = next_outstanding_principal
+ self.interest_calculation_base = next_interest_base
+ self.event_cursor += UInt64(1)
+
+ if entry.event_type == arc4.UInt8(
+ enums.EVT_MD
+ ) and self.outstanding_principal == UInt64(0):
+ self.status = UInt64(enums.STATUS_ENDED)
+ self.interest_calculation_base = UInt64(0)
+
+ self._emit_execution_event(
+ entry=entry,
+ payoff=interest_amount + principal_amount,
+ settled_amount=interest_amount + principal_amount,
+ )
+ return interest_amount, principal_amount
+
+ def _apply_non_cash_schedule_entry(
+ self, entry: typ.ExecutionScheduleEntry, payload: typ.ObservedEventRequest
+ ) -> None:
+ """
+ Apply one due non-cash event and advance the kernel state.
+
+ Non-cash events do not reserve settlement assets, but they can activate
+ issuance, capitalize principal, change the running rate, or recalculate
+ future annuity payments.
+ """
+ assert entry.event_id == self.event_cursor, err.INVALID_EVENT_CURSOR
+ assert entry.scheduled_time <= Global.latest_timestamp, err.NO_DUE_CASHFLOW
+
+ event_type = entry.event_type.as_uint64()
+ if event_type == UInt64(enums.EVT_IED):
+ # IED finalizes issuance: reserved units become activatable and the
+ # schedule's initial contractual state becomes live.
+ assert self._status_is_pending_ied(), err.INVALID_ACTUS_CONFIG
+ assert (
+ self.reserved_units_total == self.total_units
+ ), err.PRIMARY_DISTRIBUTION_INCOMPLETE
+ self.outstanding_principal = entry.next_outstanding_principal
+ self.interest_calculation_base = entry.next_outstanding_principal
+ self.nominal_interest_rate = entry.next_nominal_interest_rate
+ self.accrued_interest = UInt64(0)
+ self.next_principal_redemption = entry.next_principal_redemption
+ self.event_cursor += UInt64(1)
+ self.status = UInt64(enums.STATUS_ACTIVE)
+ self._emit_execution_event(
+ entry=entry,
+ payoff=self._entry_ied_amount(entry),
+ settled_amount=UInt64(0),
+ )
+ return
+
+ self._assert_initial_exchange_executed()
+ self.accrued_interest += self._entry_interest_segment(entry)
+
+ if event_type == UInt64(enums.EVT_RR):
+ # RR derives the next rate from an observed oracle value plus the
+ # contract spread / multiplier terms, then enforces floor and cap.
+ observed_rate = self._scaled_mul_div(
+ payload.observed_rate,
+ self.rate_reset_multiplier,
+ self.fixed_point_scale,
+ )
+ self.nominal_interest_rate = self._clamp_rate(
+ observed_rate + self.rate_reset_spread
+ )
+ elif event_type == UInt64(enums.EVT_RRF):
+ next_rate = entry.next_nominal_interest_rate
+ if next_rate == UInt64(0):
+ next_rate = self.rate_reset_next
+ self.nominal_interest_rate = next_rate
+ else:
+ if entry.next_nominal_interest_rate != UInt64(0):
+ self.nominal_interest_rate = entry.next_nominal_interest_rate
+
+ if event_type == UInt64(enums.EVT_PI):
+ self.outstanding_principal = entry.next_outstanding_principal
+ self.interest_calculation_base = entry.next_outstanding_principal
+ elif event_type == UInt64(enums.EVT_IPCB):
+ # IPCB keeps principal unchanged and only resets the interest base.
+ self.interest_calculation_base = self.outstanding_principal
+
+ if self._is_dynamic_annuity():
+ if event_type == UInt64(enums.EVT_PRF):
+ ensure_budget(
+ required_budget=(
+ UInt64(cst.OP_UP_NON_CASH_BASE_BUDGET)
+ + (self.schedule_entry_count - self.event_cursor)
+ * UInt64(cst.OP_UP_NON_CASH_PER_ENTRY_BUDGET)
+ ),
+ )
+ self.next_principal_redemption = self._recalculate_annuity_payment(
+ entry
+ )
+ else:
+ self.next_principal_redemption = entry.next_principal_redemption
+ self.event_cursor += UInt64(1)
+ self._emit_execution_event(
+ entry=entry,
+ payoff=UInt64(0),
+ settled_amount=UInt64(0),
+ )
+
+ ############################################################################
+ # Execution Events
+ ############################################################################
+
+ def _emit_execution_event(
+ self,
+ *,
+ entry: typ.ExecutionScheduleEntry,
+ payoff: UInt64,
+ settled_amount: UInt64,
+ ) -> None:
+ """Emit a non-normative ARC-28 receipt for one applied schedule entry."""
+ arc4.emit(
+ ExecutionEvent(
+ contract_id=Global.current_application_id.id,
+ event_id=entry.event_id,
+ event_type=entry.event_type,
+ scheduled_time=entry.scheduled_time,
+ applied_at=Global.latest_timestamp,
+ payoff=payoff,
+ payoff_sign=arc4.UInt8(
+ self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ ),
+ settled_amount=settled_amount,
+ currency_id=self.settlement_asset_id,
+ sequence=entry.event_id + UInt64(1),
+ )
+ )
+
+ ############################################################################
+ # Others
+ ############################################################################
+
+ def _available_settlement_funds(self) -> UInt64:
+ """Return the app's free settlement balance after reserved cashflows."""
+ balance = self.settlement_asset_id.balance(Global.current_application_address)
+ reserved_total = self._reserved_total()
+ assert balance >= reserved_total, err.NOT_ENOUGH_FUNDS
+ return balance - reserved_total
+
+ def _clamp_rate(self, rate: UInt64) -> UInt64:
+ """Apply optional floor and cap terms to a normalized rate."""
+ if self.has_rate_reset_floor and rate < self.rate_reset_floor:
+ rate = self.rate_reset_floor
+ if self.has_rate_reset_cap and rate > self.rate_reset_cap:
+ rate = self.rate_reset_cap
+ return rate
+
+ def _payoff_sign(self, event_type: UInt64, payoff: UInt64) -> UInt64:
+ """Resolve the contractual payoff sign from cashflow direction alone."""
+ if payoff == UInt64(0):
+ return UInt64(enums.PAYOFF_SIGN_POSITIVE)
+ if event_type in (UInt64(enums.EVT_IED), UInt64(enums.EVT_PI)):
+ return UInt64(enums.PAYOFF_SIGN_POSITIVE)
+ return UInt64(enums.PAYOFF_SIGN_NEGATIVE)
+
+ def _assert_no_due_event_pending(self) -> None:
+ """
+ Require there to be no due schedule entry at the current cursor.
+
+ Transfers settle holders against the current global indices. Allowing a
+ transfer while a due event is still unapplied would let positions move
+ before the shared contract state catches up.
+ """
+ if self.event_cursor >= self.schedule_entry_count:
+ return
+ next_entry = self._get_schedule_entry(self.event_cursor)
+ assert (
+ next_entry.scheduled_time > Global.latest_timestamp
+ ), err.PENDING_ACTUS_EVENT
+
+ ############################################################################
+ # Contract Configuration
+ ############################################################################
+
+ def _assert_denomination_asset(self, denomination_asset_id: Asset) -> None:
+ # The reference implementation has on-chain denomination with ASA
+ _creator, exists = op.AssetParamsGet.asset_creator(denomination_asset_id)
+ assert exists, err.INVALID_DENOMINATION
+
+ def _set_denomination_asset(self, denomination_asset_id: Asset) -> None:
+ self.denomination_asset_id = denomination_asset_id
+
+ def _assert_settlement_asset(self, settlement_asset_id: Asset) -> None:
+ # The reference implementation settlement asset is the denomination asset
+ assert (
+ settlement_asset_id == self.denomination_asset_id
+ ), err.INVALID_SETTLEMENT_ASSET
+
+ def _set_settlement_asset(self, settlement_asset_id: Asset) -> None:
+ self.settlement_asset_id = settlement_asset_id
+ # The reference implementation has on-chain settlement with ASA
+ itxn.AssetTransfer(
+ xfer_asset=self.settlement_asset_id,
+ asset_receiver=Global.current_application_address,
+ asset_amount=0,
+ fee=Global.min_txn_fee,
+ ).submit()
+
+ def _store_contract_config(
+ self,
+ contract_type: UInt64,
+ terms: typ.NormalizedActusTerms,
+ initial_state: typ.InitialKernelState,
+ ) -> None:
+ """Persist normalized terms and initial kernel state once."""
+
+ self._validate_terms_for_contract_type(contract_type, terms)
+ assert self.status == UInt64(enums.STATUS_INACTIVE), err.ALREADY_CONFIGURED
+ assert self.initial_exchange_amount == UInt64(0), err.ALREADY_CONFIGURED
+
+ # Set Denomination Asset
+ self._assert_denomination_asset(terms.denomination_asset_id)
+ self._set_denomination_asset(terms.denomination_asset_id)
+
+ # Set Settlement Asset
+ self._assert_settlement_asset(terms.settlement_asset_id)
+ self._set_settlement_asset(terms.settlement_asset_id)
+
+ # Units
+ self.total_units = terms.total_units
+ self.reserved_units_total = UInt64(0)
+
+ # Day-Count Conventions
+ self.day_count_convention = terms.day_count_convention.as_uint64()
+
+ # Time
+ self.initial_exchange_date = terms.initial_exchange_date
+ self.maturity_date = terms.maturity_date
+ self.next_principal_redemption = initial_state.next_principal_redemption
+
+ # Principal
+ self.initial_exchange_amount = terms.initial_exchange_amount
+ self.dynamic_principal_redemption = terms.dynamic_principal_redemption
+ self.outstanding_principal = initial_state.outstanding_principal
+
+ # Interest
+ self.accrued_interest = initial_state.accrued_interest
+
+ # Interest Rate
+ self.nominal_interest_rate = initial_state.nominal_interest_rate
+ self.interest_calculation_base = initial_state.interest_calculation_base
+ self.rate_reset_spread = terms.rate_reset_spread
+ self.rate_reset_multiplier = terms.rate_reset_multiplier
+ self.rate_reset_floor = terms.rate_reset_floor
+ self.rate_reset_cap = terms.rate_reset_cap
+ self.rate_reset_next = terms.rate_reset_next
+ self.has_rate_reset_floor = terms.has_rate_reset_floor
+ self.has_rate_reset_cap = terms.has_rate_reset_cap
+
+ # Scaling
+ self.fixed_point_scale = terms.fixed_point_scale
+
+ # Schedule Processing
+ self.event_cursor = initial_state.event_cursor
+
+ # Per-Unit Fixed-Point Indexes
+ self.cumulative_interest_index = initial_state.cumulative_interest_index
+ self.cumulative_principal_index = initial_state.cumulative_principal_index
+
+ # Reserved Amount (for executed cashflows)
+ self.reserved_interest = UInt64(0)
+ self.reserved_principal = UInt64(0)
+
+ assert terms.initial_exchange_date > Global.latest_timestamp, err.INVALID_IED
+ assert terms.initial_exchange_date > initial_state.status_date, err.INVALID_IED
+ assert terms.initial_exchange_date < terms.maturity_date, err.INVALID_IED
+
+ ############################################################################
+ # Update Schedule
+ ############################################################################
+
+ def _store_contract_schedule_page(
+ self,
+ *,
+ contract_type: UInt64,
+ schedule_page_index: UInt64,
+ is_last_page: bool,
+ schedule_page: typ.ExecutionSchedulePage,
+ ) -> None:
+ """Validate and persist one normalized schedule page."""
+
+ assert self.status == UInt64(enums.STATUS_INACTIVE), err.ALREADY_CONFIGURED
+ assert schedule_page.length <= UInt64(
+ cst.SCHEDULE_PAGE_SIZE
+ ), err.INVALID_SCHEDULE_PAGE
+ assert self.initial_exchange_amount > UInt64(0), err.TERMS_NOT_CONFIGURED
+
+ page_cursor = schedule_page_index * UInt64(cst.SCHEDULE_PAGE_SIZE)
+ page_length = schedule_page.length
+ # Validation cost grows with page length, so configuration explicitly
+ # buys extra opcode budget for larger uploads.
+ ensure_budget(
+ required_budget=(
+ UInt64(cst.OP_UP_CONTRACT_CONFIG_BASE_BUDGET)
+ + page_length * UInt64(cst.OP_UP_CONTRACT_CONFIG_PER_ENTRY_BUDGET)
+ ),
+ )
+ index = UInt64(0)
+ while index < page_length:
+ entry = schedule_page[index].copy()
+ entry_event_type = entry.event_type.as_uint64()
+ assert entry.event_id == page_cursor + index, err.INVALID_EVENT_ID
+ self._assert_event_allowed_for_contract_type(
+ contract_type, entry_event_type
+ )
+ assert entry.scheduled_time > UInt64(0), err.INVALID_ACTUS_CONFIG
+ if entry.event_id > UInt64(0):
+ if index > UInt64(0):
+ previous_entry = schedule_page[index - UInt64(1)].copy()
+ else:
+ # The first entry of a page must still be ordered after the
+ # last entry of the previous page.
+ assert schedule_page_index > UInt64(0), err.INVALID_EVENT_ID
+ previous_page_index = schedule_page_index - UInt64(1)
+ assert (
+ previous_page_index in self.schedule_page
+ ), err.INVALID_SCHEDULE_PAGE
+ previous_page = self.schedule_page[previous_page_index].copy()
+ assert previous_page.length > UInt64(0), err.INVALID_SCHEDULE_PAGE
+ previous_entry = previous_page[
+ previous_page.length - UInt64(1)
+ ].copy()
+ assert (
+ previous_entry.scheduled_time <= entry.scheduled_time
+ ), err.INVALID_SORTING
+ if entry.event_id == UInt64(0):
+ assert entry_event_type == UInt64(
+ enums.EVT_IED
+ ), err.INVALID_ACTUS_CONFIG
+ index += UInt64(1)
+
+ self._store_schedule_page(schedule_page_index, schedule_page)
+ if is_last_page:
+ self.schedule_entry_count = (
+ schedule_page_index * UInt64(cst.SCHEDULE_PAGE_SIZE) + page_length
+ )
+ self.status = UInt64(enums.STATUS_PENDING_IED)
+
+ def _append_observed_event(self, payload: typ.ObservedEventRequest) -> None:
+ """
+ Append an authorized observed event to the schedule tail.
+
+ Observed events are runtime schedule entries supplied by an authorized
+ caller. Supported only for CLM contracts.
+ """
+ assert self._supports_observed_events(), err.OBSERVED_EVENT_REQUIRED
+ assert payload.event_id == self.schedule_entry_count, err.INVALID_EVENT_ID
+ self._assert_event_allowed_for_contract_type(
+ self.contract_type, payload.event_type.as_uint64()
+ )
+
+ page_index = self._schedule_page_index(self.schedule_entry_count)
+ page = typ.ExecutionSchedulePage()
+ if page_index in self.schedule_page:
+ page = self.schedule_page[page_index].copy()
+ assert page.length < UInt64(cst.SCHEDULE_PAGE_SIZE), err.INVALID_SCHEDULE_PAGE
+ page.append(
+ typ.ExecutionScheduleEntry(
+ event_id=payload.event_id,
+ event_type=payload.event_type,
+ scheduled_time=payload.scheduled_time,
+ accrual_factor=payload.accrual_factor,
+ redemption_accrual_factor=payload.redemption_accrual_factor,
+ next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ next_principal_redemption=payload.next_principal_redemption,
+ next_outstanding_principal=payload.next_outstanding_principal,
+ flags=payload.flags,
+ )
+ )
+ self.schedule_page[page_index] = page.copy()
+ self.schedule_entry_count += UInt64(1)
+
+ def _append_observed_cash_event(
+ self, payload: typ.ObservedCashEventRequest
+ ) -> None:
+ """
+ Append an authorized observed cash event to the schedule tail.
+
+ This v1 path is intentionally narrow: only CLM observed `PR` events may
+ be appended, and they must preserve the append-only schedule ordering.
+ """
+ assert self._supports_observed_events(), err.OBSERVED_EVENT_REQUIRED
+ assert payload.event_id == self.schedule_entry_count, err.INVALID_EVENT_ID
+ assert payload.event_type == arc4.UInt8(enums.EVT_PR), err.INVALID_EVENT_TYPE
+ assert payload.flags & UInt64(enums.FLAG_CASH_EVENT), err.INVALID_ACTUS_CONFIG
+
+ if self.schedule_entry_count > UInt64(0):
+ previous_entry = self._get_schedule_entry(
+ self.schedule_entry_count - UInt64(1)
+ )
+ assert (
+ previous_entry.scheduled_time <= payload.scheduled_time
+ ), err.INVALID_SORTING
+
+ page_index = self._schedule_page_index(self.schedule_entry_count)
+ page = typ.ExecutionSchedulePage()
+ if page_index in self.schedule_page:
+ page = self.schedule_page[page_index].copy()
+ assert page.length < UInt64(cst.SCHEDULE_PAGE_SIZE), err.INVALID_SCHEDULE_PAGE
+ page.append(
+ typ.ExecutionScheduleEntry(
+ event_id=payload.event_id,
+ event_type=payload.event_type,
+ scheduled_time=payload.scheduled_time,
+ accrual_factor=payload.accrual_factor,
+ redemption_accrual_factor=payload.redemption_accrual_factor,
+ next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ next_principal_redemption=payload.next_principal_redemption,
+ next_outstanding_principal=payload.next_outstanding_principal,
+ flags=payload.flags,
+ )
+ )
+ self.schedule_page[page_index] = page.copy()
+ self.schedule_entry_count += UInt64(1)
+
+ ############################################################################
+ # Public ABI
+ ############################################################################
+
+ @arc4.abimethod(create="require")
+ def contract_create(self, *, arranger: Account) -> typ.TimeStamp:
+ """
+ Create a new D-ASA contract and set the arranger role.
+
+ Args:
+ arranger: D-ASA arranger address.
+
+ Returns:
+ UNIX timestamp of contract creation.
+
+ Raises:
+ None: This method does not raise contract-specific errors.
+ """
+ self.arranger.value = arranger
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def contract_config(
+ self,
+ *,
+ terms: typ.NormalizedActusTerms,
+ initial_state: typ.InitialKernelState,
+ prospectus: typ.Prospectus,
+ ) -> UInt64:
+ """
+ Partial contract configuration with: normalized ACTUS terms, initial kernel
+ state (pre-IED), prospectus (informational only). The contract stays inactive
+ until all schedule pages are configured next.
+
+ Args:
+ terms: Normalized ACTUS terms.
+ initial_state: Initial kernel state captured before `IED`.
+ prospectus: Prospectus metadata stored for reference only.
+
+ Returns:
+ UNIX timestamp of contract configuration.
+
+ Raises:
+ UNAUTHORIZED: Caller is not the arranger.
+ ALREADY_CONFIGURED: Contract configuration was already stored.
+ INVALID_ACTUS_CONFIG: Normalized terms are incompatible with the kernel.
+ INVALID_DAY_COUNT_CONVENTION: Day-count identifier is not supported on chain.
+ INVALID_DENOMINATION: Denomination asset is not valid for this implementation.
+ INVALID_SETTLEMENT_ASSET: Settlement asset does not match implementation rules.
+ INVALID_IED: Initial exchange date is not in a valid future position.
+ """
+ self._assert_caller_is_arranger()
+
+ # Configure Contract
+ self.contract_type = terms.contract_type.as_uint64()
+ self._assert_supported_contract_type(self.contract_type)
+ self._store_contract_config(self.contract_type, terms, initial_state)
+
+ # Notarize prospectus (optional)
+ self.prospectus_hash = prospectus.hash.bytes
+ self.prospectus_url = prospectus.url
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def contract_schedule(
+ self,
+ *,
+ schedule_page_index: UInt64,
+ is_last_page: bool,
+ schedule_page: typ.ExecutionSchedulePage,
+ ) -> UInt64:
+ """
+ Upload one normalized schedule page.
+
+ The configuration operation is considered complete only when the last
+ page is stored. At that point `schedule_entry_count` is finalized and
+ the contract moves to `STATUS_PENDING_IED`.
+
+ Args:
+ schedule_page_index: Zero-based page index within the boxed schedule.
+ is_last_page: Whether this page finalizes the schedule upload.
+ schedule_page: Normalized schedule entries for the requested page.
+
+ Returns:
+ UNIX timestamp of the schedule upload.
+
+ Raises:
+ UNAUTHORIZED: Caller is not the arranger.
+ ALREADY_CONFIGURED: Schedule upload already finalized or contract is active.
+ TERMS_NOT_CONFIGURED: Terms were not stored before schedule upload.
+ INVALID_SCHEDULE_PAGE: Page size or page continuity is invalid.
+ INVALID_EVENT_ID: Event identifiers do not match the expected page offsets.
+ INVALID_ACTUS_CONFIG: Event type or entry payload is incompatible with the contract type.
+ INVALID_SORTING: Schedule entries are not chronologically ordered.
+ """
+ self._assert_caller_is_arranger()
+
+ self._store_contract_schedule_page(
+ contract_type=self.contract_type,
+ schedule_page_index=schedule_page_index,
+ is_last_page=is_last_page,
+ schedule_page=schedule_page,
+ )
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def contract_execute_ied(self) -> UInt64:
+ """
+ Execute the first due `IED` entry and activate the contract.
+
+ `IED` is the one non-cash event that moves the app from
+ `STATUS_PENDING_IED` to `STATUS_ACTIVE`.
+
+ Returns:
+ UNIX timestamp of the `IED` execution.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ UNAUTHORIZED: Caller is not the arranger.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ INVALID_EVENT_CURSOR: Current cursor does not point to the first schedule entry.
+ INVALID_EVENT_TYPE: Next due event is not `IED`.
+ NO_DUE_CASHFLOW: The `IED` entry is not yet due.
+ INVALID_ACTUS_CONFIG: Contract is not in the expected pre-IED state.
+ PRIMARY_DISTRIBUTION_INCOMPLETE: Not all units were allocated before issuance.
+ """
+ self._assert_configured()
+ self._assert_caller_is_arranger()
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+
+ assert self.event_cursor < self.schedule_entry_count, err.INVALID_EVENT_CURSOR
+ entry = self._get_schedule_entry(self.event_cursor)
+ assert entry.event_type == arc4.UInt8(enums.EVT_IED), err.INVALID_EVENT_TYPE
+ self._apply_non_cash_schedule_entry(
+ entry,
+ typ.ObservedEventRequest(
+ event_id=entry.event_id,
+ event_type=entry.event_type,
+ scheduled_time=entry.scheduled_time,
+ accrual_factor=entry.accrual_factor,
+ redemption_accrual_factor=entry.redemption_accrual_factor,
+ observed_rate=UInt64(0),
+ next_nominal_interest_rate=entry.next_nominal_interest_rate,
+ next_principal_redemption=entry.next_principal_redemption,
+ next_outstanding_principal=entry.next_outstanding_principal,
+ flags=entry.flags,
+ ),
+ )
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def apply_non_cash_event(
+ self,
+ *,
+ event_id: UInt64,
+ payload: typ.ObservedEventRequest,
+ ) -> UInt64:
+ """
+ Apply the next due non-cash event, optionally appending one first.
+
+ Observed payloads are appended before execution when flagged. Rate reset
+ events require the interest oracle because they can change the running
+ nominal rate; other non-cash events stay arranger-controlled.
+
+ Args:
+ event_id: Expected global schedule event identifier at the current cursor.
+ payload: Observed payload used for append-on-execute and/or rate resets.
+
+ Returns:
+ UNIX timestamp of the non-cash event application.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ OBSERVED_EVENT_REQUIRED: Observed-event append is not supported for this contract.
+ UNAUTHORIZED: Caller is not authorized for the selected non-cash event.
+ INVALID_EVENT_ID: Observed append payload does not target the schedule tail.
+ INVALID_EVENT_CURSOR: Requested event is not the next due cursor position.
+ INVALID_EVENT_TYPE: Requested event is not a supported non-cash event.
+ INVALID_SCHEDULE_PAGE: Observed append cannot be stored in the tail page.
+ INVALID_ACTUS_CONFIG: Event payload is incompatible with kernel state.
+ INVALID_SORTING: Observed append would break schedule ordering.
+ NO_DUE_CASHFLOW: The targeted non-cash event is not yet due.
+ PENDING_IED: Initial exchange has not executed yet for post-IED events.
+ """
+ self._assert_configured()
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+
+ if payload.flags & UInt64(enums.FLAG_OBSERVED_EVENT):
+ assert self._supports_observed_events(), err.OBSERVED_EVENT_REQUIRED
+ self._assert_caller_is_arranger()
+ self._append_observed_event(payload)
+
+ assert event_id == self.event_cursor, err.INVALID_EVENT_CURSOR
+ entry = self._get_schedule_entry(event_id)
+ assert self._event_is_non_cash(
+ entry.event_type.as_uint64()
+ ), err.INVALID_EVENT_TYPE
+ assert entry.event_type != arc4.UInt8(enums.EVT_IED), err.INVALID_EVENT_TYPE
+ if self._event_is_rate_reset(entry.event_type.as_uint64()):
+ self._assert_caller_is_observer()
+ else:
+ self._assert_caller_is_arranger()
+ self._apply_non_cash_schedule_entry(entry, payload)
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def append_observed_cash_event(
+ self,
+ *,
+ payload: typ.ObservedCashEventRequest,
+ ) -> UInt64:
+ """
+ Append an arranger-authorized observed cash event to the schedule tail.
+
+ Args:
+ payload: Observed cash-event payload to append after the current tail.
+
+ Returns:
+ UNIX timestamp of the append operation.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ UNAUTHORIZED: Caller is not the arranger.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ PENDING_IED: Initial exchange has not executed yet.
+ OBSERVED_EVENT_REQUIRED: Observed cash events are not supported for this contract.
+ INVALID_EVENT_ID: Payload event id does not match the schedule tail.
+ INVALID_EVENT_TYPE: Payload event type is not the supported observed cash type.
+ INVALID_SCHEDULE_PAGE: Tail page cannot accept another schedule entry.
+ INVALID_ACTUS_CONFIG: Payload flags or values are inconsistent with the contract.
+ INVALID_SORTING: Payload time is earlier than the current schedule tail.
+ """
+ self._assert_configured()
+ self._assert_caller_is_arranger()
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+ self._assert_initial_exchange_executed()
+
+ self._append_observed_cash_event(payload)
+ return Global.latest_timestamp
+
+ @arc4.abimethod(readonly=True)
+ def contract_get_state(self) -> typ.KernelState:
+ """
+ Return a readonly snapshot of the generic ACTUS kernel state.
+
+ Returns:
+ Current kernel state snapshot.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ """
+ self._assert_configured()
+ return typ.KernelState(
+ contract_type=arc4.UInt8(self.contract_type),
+ status=self.status,
+ total_units=self.total_units,
+ reserved_units_total=self.reserved_units_total,
+ initial_exchange_amount=self.initial_exchange_amount,
+ event_cursor=self.event_cursor,
+ schedule_entry_count=self.schedule_entry_count,
+ outstanding_principal=self.outstanding_principal,
+ interest_calculation_base=self.interest_calculation_base,
+ nominal_interest_rate=self.nominal_interest_rate,
+ accrued_interest=self.accrued_interest,
+ cumulative_interest_index=self.cumulative_interest_index,
+ cumulative_principal_index=self.cumulative_principal_index,
+ reserved_interest=self.reserved_interest,
+ reserved_principal=self.reserved_principal,
+ )
+
+ @arc4.abimethod(readonly=True)
+ def contract_get_next_due_event(self) -> typ.ExecutionScheduleEntry:
+ """
+ Return the next boxed schedule entry, or a zeroed sentinel if ended.
+
+ Returns:
+ Next due schedule entry, or an all-zero sentinel if the contract ended.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ """
+ self._assert_configured()
+ if self.event_cursor >= self.schedule_entry_count:
+ return typ.ExecutionScheduleEntry(
+ event_id=self.event_cursor,
+ event_type=arc4.UInt8(0),
+ scheduled_time=UInt64(0),
+ accrual_factor=UInt64(0),
+ redemption_accrual_factor=UInt64(0),
+ next_nominal_interest_rate=UInt64(0),
+ next_principal_redemption=UInt64(0),
+ next_outstanding_principal=UInt64(0),
+ flags=UInt64(0),
+ )
+ return self._get_schedule_entry(self.event_cursor)
diff --git a/modules/core_financial/__init__.py b/modules/core_financial/__init__.py
deleted file mode 100644
index 801fc5c3..00000000
--- a/modules/core_financial/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from .common import CoreFinancialCommonMixin
-from .coupon import (
- CouponCashflowMixin,
- FixedCouponCashflowMixin,
- PerpetualCouponCashflowMixin,
-)
-from .no_coupon import NoCouponCashflowMixin
-
-__all__ = [
- "CoreFinancialCommonMixin",
- "CouponCashflowMixin",
- "FixedCouponCashflowMixin",
- "NoCouponCashflowMixin",
- "PerpetualCouponCashflowMixin",
-]
diff --git a/modules/core_financial/common.py b/modules/core_financial/common.py
deleted file mode 100644
index 230a7064..00000000
--- a/modules/core_financial/common.py
+++ /dev/null
@@ -1,462 +0,0 @@
-from algopy import (
- Account,
- Asset,
- Box,
- Bytes,
- Global,
- OpUpFeeSource,
- Txn,
- UInt64,
- arc4,
- ensure_budget,
- itxn,
- op,
- urange,
-)
-
-from modules.accounting import AccountingModule
-from smart_contracts import abi_types as typ
-from smart_contracts import config as cfg
-from smart_contracts import constants as cst
-from smart_contracts import enums
-from smart_contracts import errors as err
-
-
-class CoreFinancialCommonMixin(AccountingModule):
- """Common financial core shared by Maturities and Non-Maturities variants."""
-
- def __init__(self) -> None:
- super().__init__()
-
- # Asset Configuration
- self.denomination_asset_id = Asset()
- self.settlement_asset_id = Asset()
- self.unit_value = UInt64()
- self.day_count_convention = UInt64()
-
- # Metadata
- self.metadata = Bytes()
-
- # Principal / Rates
- self.principal_discount = UInt64()
- self.interest_rate = UInt64()
- self.total_coupons = UInt64()
-
- # Time Schedule
- self.time_events = Box(typ.TimeEvents, key=cst.BOX_ID_TIME_EVENTS)
- self.primary_distribution_opening_date = UInt64()
- self.primary_distribution_closure_date = UInt64()
- self.issuance_date = UInt64()
- self.secondary_market_opening_date = UInt64()
- self.secondary_market_closure_date = UInt64()
- self.maturity_date = UInt64()
-
- def assert_denomination_asset(self, denomination_asset_id: Asset) -> None:
- # The reference implementation has on-chain denomination with ASA
- _creator, exists = op.AssetParamsGet.asset_creator(denomination_asset_id)
- assert exists, err.INVALID_DENOMINATION
-
- def set_denomination_asset(self, denomination_asset_id: Asset) -> None:
- self.denomination_asset_id = denomination_asset_id
-
- def assert_settlement_asset(self, settlement_asset_id: Asset) -> None:
- # The reference implementation settlement asset is the denomination asset
- assert (
- settlement_asset_id == self.denomination_asset_id
- ), err.INVALID_SETTLEMENT_ASSET
-
- def set_settlement_asset(self, settlement_asset_id: Asset) -> None:
- self.settlement_asset_id = settlement_asset_id
- # The reference implementation has on-chain settlement with ASA
- itxn.AssetTransfer(
- xfer_asset=self.settlement_asset_id,
- asset_receiver=Global.current_application_address,
- asset_amount=0,
- fee=Global.min_txn_fee,
- ).submit()
-
- def assert_day_count_convention(self, day_count_convention: UInt64) -> None:
- # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- assert day_count_convention in (
- UInt64(cst.DCC_A_A),
- UInt64(cst.DCC_CONT),
- ), err.INVALID_DAY_COUNT_CONVENTION
-
- def set_day_count_convention(self, day_count_convention: UInt64) -> None:
- self.day_count_convention = day_count_convention
-
- def assert_interest_rate(self, interest_rate: UInt64) -> None:
- # This subroutine must be used after the principal discount has been set
- if not self.principal_discount:
- assert interest_rate > UInt64(0), err.INVALID_INTEREST_RATE
-
- def set_interest_rate(self, interest_rate: UInt64) -> None:
- self.interest_rate = interest_rate
-
- def assert_coupon_rates(self, coupon_rates: typ.CouponRates) -> None:
- assert not coupon_rates.length, err.INVALID_COUPON_RATES
-
- def set_coupon_rates(self, coupon_rates: typ.CouponRates) -> None:
- self.total_coupons = coupon_rates.length
-
- def assert_time_schedule_limits(self, time_events: typ.TimeEvents) -> None:
- assert (
- time_events.length == self.total_coupons + cfg.TIME_SCHEDULE_LIMITS
- ), err.INVALID_TIME_EVENTS_LENGTH
-
- def assert_time_events_sorted(self, time_events: typ.TimeEvents) -> None:
- assert (
- time_events[cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX]
- > Global.latest_timestamp
- ), err.INVALID_TIME
- for idx in urange(time_events.length - 1):
- ensure_budget(
- required_budget=UInt64(cfg.OP_UP_TIME_EVENT_SORTING),
- fee_source=OpUpFeeSource.AppAccount,
- )
- time_i = time_events[idx]
- time_f = time_events[idx + 1]
- assert time_f > time_i, err.INVALID_SORTING
- if self.day_count_convention != UInt64(cst.DCC_CONT):
- # The reference implementation requires time periods expressed in days for regular day-count conventions
- assert (time_f - time_i) % UInt64(
- cst.DAY_2_SEC
- ) == 0, err.INVALID_TIME_PERIOD
-
- def set_time_events(self, time_events: typ.TimeEvents) -> None:
- self.time_events.value = time_events.copy()
- self.primary_distribution_opening_date = time_events[
- cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX
- ]
- self.primary_distribution_closure_date = time_events[
- cfg.PRIMARY_DISTRIBUTION_CLOSURE_DATE_IDX
- ]
- self.issuance_date = time_events[cfg.ISSUANCE_DATE_IDX]
- self.maturity_date = time_events[cfg.MATURITY_DATE_IDX]
-
- def assert_time_periods(self, time_periods: typ.TimePeriods) -> None:
- assert not time_periods.length, err.INVALID_TIME_PERIODS
-
- def set_time_periods(self, time_periods: typ.TimePeriods) -> None:
- pass
-
- def assert_is_primary_distribution_open(self) -> None:
- assert (
- self.status_is_active()
- and self.primary_distribution_opening_date
- <= Global.latest_timestamp
- < self.primary_distribution_closure_date
- ), err.PRIMARY_DISTRIBUTION_CLOSED
-
- def assert_is_secondary_market_open(self) -> None:
- assert (
- self.status_is_active()
- and self.secondary_market_opening_date <= Global.latest_timestamp
- and (
- not self.secondary_market_closure_date
- or Global.latest_timestamp < self.secondary_market_closure_date
- )
- ), err.SECONDARY_MARKET_CLOSED
-
- def days_in(self, time_period: UInt64) -> UInt64:
- return time_period // UInt64(cst.DAY_2_SEC)
-
- def assert_asset_transfer_authorization(
- self,
- sender_holding_address: Account,
- receiver_holding_address: Account,
- ) -> None:
- # The reference implementation grants transfer right to D-ASA owners. Other implementations may relay on other
- # roles, external Apps through C2C calls (e.g., an order book), or off-chain transfer agents.
- assert Txn.sender == sender_holding_address, err.UNAUTHORIZED
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
- self.assert_valid_holding_address(sender_holding_address)
- self.assert_valid_holding_address(receiver_holding_address)
- self.assert_is_not_account_suspended(sender_holding_address)
- self.assert_is_not_account_suspended(receiver_holding_address)
-
- def assert_asset_transfer_preconditions(
- self,
- sender_holding_address: Account,
- receiver_holding_address: Account,
- units: UInt64,
- ) -> None:
- self.assert_is_secondary_market_open()
- self.assert_asset_transfer_authorization(
- sender_holding_address,
- receiver_holding_address,
- )
- assert sender_holding_address != receiver_holding_address, err.SELF_TRANSFER
- assert units > 0, err.NULL_TRANSFER
- assert units <= self.account[sender_holding_address].units, err.OVER_TRANSFER
- self.assert_fungible_transfer(
- sender_holding_address,
- receiver_holding_address,
- )
-
- def update_supply_after_principal_payment(self, holding_address: Account) -> None:
- self.circulating_units -= self.account[holding_address].units
- self.account[holding_address].units = UInt64()
- self.end_if_no_circulating_units()
-
- # Hook defaults for feature-specialized mixins.
- def count_due_coupons(self) -> UInt64:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def all_due_coupons_paid(self, _due_coupons: UInt64) -> bool:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def assert_pay_principal_authorization(self, _holding_address: Account) -> None:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def _configure_asset_terms(
- self,
- *,
- denomination_asset_id: Asset,
- settlement_asset_id: Asset,
- principal: UInt64,
- principal_discount: UInt64,
- minimum_denomination: UInt64,
- day_count_convention: arc4.UInt8,
- interest_rate: arc4.UInt16,
- coupon_rates: typ.CouponRates,
- time_events: typ.TimeEvents,
- time_periods: typ.TimePeriods,
- ) -> None:
- self.assert_caller_is_arranger()
- assert self.status == enums.STATUS_INACTIVE, err.ALREADY_CONFIGURED
-
- # Set Denomination Asset
- self.assert_denomination_asset(denomination_asset_id)
- self.set_denomination_asset(denomination_asset_id)
-
- # Set Settlement Asset
- self.assert_settlement_asset(settlement_asset_id)
- self.set_settlement_asset(settlement_asset_id)
-
- # Set Principal and Minimum Denomination
- assert principal % minimum_denomination == 0, err.INVALID_MINIMUM_DENOMINATION
- self.unit_value = minimum_denomination
- self.total_units = principal // minimum_denomination
- self.principal_discount = principal_discount
-
- # Set Day-Count Convention
- self.assert_day_count_convention(day_count_convention.as_uint64())
- self.set_day_count_convention(day_count_convention.as_uint64())
-
- # Set Interest Rate
- self.assert_interest_rate(interest_rate.as_uint64())
- self.set_interest_rate(interest_rate.as_uint64())
-
- # Set Coupons
- self.assert_coupon_rates(coupon_rates)
- self.set_coupon_rates(coupon_rates)
-
- # Set Time Events
- self.assert_time_schedule_limits(time_events)
- self.assert_time_events_sorted(time_events)
- self.set_time_events(time_events)
-
- # Set Time Periods
- self.assert_time_periods(time_periods)
- self.set_time_periods(time_periods)
-
- self.status = UInt64(enums.STATUS_ACTIVE)
-
- @arc4.abimethod(create="require")
- def asset_create(self, *, arranger: Account, metadata: typ.AssetMetadata) -> None:
- """
- Create a new D-ASA
-
- Args:
- arranger: D-ASA Arranger Address
- metadata: D-ASA metadata
- """
- self.arranger.value = arranger
- self.metadata = metadata.bytes
-
- @arc4.abimethod(allow_actions=["UpdateApplication"])
- def asset_update(self, *, metadata: typ.AssetMetadata) -> None:
- """
- Update D-ASA application.
- """
- # The reference implementation grants the update permissions to the Arranger.
- # Other implementations may disable D-ASA application updatability or change its authorizations.
- # ⚠️ WARNING: Application updates must be executed VERY carefully, as they might introduce breaking changes.
- self.assert_caller_is_arranger()
- self.metadata = metadata.bytes
-
- @arc4.abimethod
- def set_secondary_time_events(
- self, *, secondary_market_time_events: typ.TimeEvents
- ) -> typ.SecondaryMarketSchedule:
- """
- Set secondary market time schedule
-
- Args:
- secondary_market_time_events: Secondary market time events (strictly ascending order)
-
- Returns:
- Secondary Market Opening Date, Secondary Market Closure Date
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- INVALID_TIME_EVENTS_LENGTH: Time events length is invalid
- INVALID_SORTING: Time events are not sorted correctly
- INVALID_SECONDARY_OPENING_DATE: Invalid secondary market opening date
- INVALID_SECONDARY_CLOSURE_DATE: Invalid secondary market closure date
- """
- self.assert_caller_is_arranger()
- assert not self.status_is_ended(), err.UNAUTHORIZED
- self.assert_is_not_asset_defaulted()
-
- assert secondary_market_time_events.length >= 1, err.INVALID_TIME_EVENTS_LENGTH
- if secondary_market_time_events.length > 1:
- self.assert_time_events_sorted(secondary_market_time_events)
-
- assert (
- self.issuance_date
- <= secondary_market_time_events[cfg.SECONDARY_MARKET_OPENING_DATE_IDX]
- ), err.INVALID_SECONDARY_OPENING_DATE
- self.secondary_market_opening_date = secondary_market_time_events[
- cfg.SECONDARY_MARKET_OPENING_DATE_IDX
- ]
- if self.maturity_date:
- assert (
- self.maturity_date
- >= secondary_market_time_events[cfg.SECONDARY_MARKET_CLOSURE_DATE_IDX]
- ), err.INVALID_SECONDARY_CLOSURE_DATE
- self.secondary_market_closure_date = secondary_market_time_events[
- cfg.SECONDARY_MARKET_CLOSURE_DATE_IDX
- ]
- return typ.SecondaryMarketSchedule(
- secondary_market_opening_date=self.secondary_market_opening_date,
- secondary_market_closure_date=self.secondary_market_closure_date,
- )
-
- @arc4.abimethod
- def set_default_status(self, *, defaulted: bool) -> UInt64:
- """
- Set D-ASA default status
-
- Args:
- defaulted: Default status
-
- Raises:
- UNAUTHORIZED: Not authorized
- """
-
- self.assert_caller_is_trustee()
- self.asset_defaulted = defaulted
- return Global.latest_timestamp
-
- @arc4.abimethod
- def primary_distribution(
- self, *, holding_address: Account, units: UInt64
- ) -> UInt64:
- """
- Distribute D-ASA units to accounts according the primary market
-
- Args:
- holding_address: Account Holding Address
- units: Amount of D-ASA units to distribute
-
- Returns:
- Remaining D-ASA units to be distributed
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- ZERO_UNITS: Cannot distribute zero units
- OVER_DISTRIBUTION: Insufficient remaining D-ASA units
- PRIMARY_DISTRIBUTION_CLOSED: Primary distribution is closed
- """
- self.assert_is_primary_distribution_open()
- # The reference implementation grants primary distribution permissions to the Primary Dealer role. Other
- # implementations may relay on other roles or external Apps through C2C calls (e.g., an auction).
- self.assert_caller_is_primary_dealer()
- self.assert_valid_holding_address(holding_address)
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
- assert units > 0, err.ZERO_UNITS
- assert self.circulating_units + units <= self.total_units, err.OVER_DISTRIBUTION
-
- self.circulating_units += units
- self.account[holding_address].units += units
- self.account[holding_address].unit_value = self.unit_value
- return self.total_units - self.circulating_units
-
- @arc4.abimethod(readonly=True)
- def get_asset_info(self) -> typ.AssetInfo:
- """
- Get D-ASA info
-
- Returns:
- Denomination asset ID, Settlement asset ID, Outstanding principal, Unit nominal value, Day-count convention,
- Interest rate, Total supply, Circulating supply, Primary distribution opening date, Primary distribution
- closure date, Issuance date, Maturity date, Suspended, Performance
- """
- performance = UInt64(cst.PRF_PERFORMANT)
- if Global.latest_timestamp > self.maturity_date > 0:
- performance = UInt64(cst.PRF_MATURED)
- # The reference implementation has no grace or delinquency periods
- if self.asset_defaulted:
- performance = UInt64(cst.PRF_DEFAULTED)
-
- return typ.AssetInfo(
- denomination_asset_id=self.denomination_asset_id.id,
- settlement_asset_id=self.settlement_asset_id.id,
- outstanding_principal=self.outstanding_principal(),
- unit_value=self.unit_value,
- day_count_convention=arc4.UInt8(self.day_count_convention),
- principal_discount=arc4.UInt16(self.principal_discount),
- interest_rate=arc4.UInt16(self.interest_rate),
- total_supply=self.total_units,
- circulating_supply=self.circulating_units,
- primary_distribution_opening_date=self.primary_distribution_opening_date,
- primary_distribution_closure_date=self.primary_distribution_closure_date,
- issuance_date=self.issuance_date,
- maturity_date=self.maturity_date,
- suspended=self.asset_suspended,
- performance=arc4.UInt8(performance),
- )
-
- @arc4.abimethod(readonly=True)
- def get_time_events(self) -> typ.TimeEvents:
- """
- Get D-ASA time events
-
- Returns:
- Time events
- """
- time_events = typ.TimeEvents()
- if self.status_is_active():
- time_events = self.time_events.value.copy()
- return time_events
-
- @arc4.abimethod(readonly=True)
- def get_secondary_market_schedule(self) -> typ.TimeEvents:
- """
- Get secondary market schedule
-
- Returns:
- Secondary market schedule
- """
- return typ.TimeEvents(
- (self.secondary_market_opening_date, self.secondary_market_closure_date)
- )
-
- @arc4.abimethod(readonly=True)
- def get_asset_metadata(self) -> typ.AssetMetadata:
- """
- Get D-ASA metadata
-
- Returns:
- Contract type, Calendar, Business day convention, End of month convention, Early repayment effect, Early
- repayment penalty type, Prospectus hash, Prospectus URL
- """
- return typ.AssetMetadata.from_bytes(self.metadata)
diff --git a/modules/core_financial/coupon.py b/modules/core_financial/coupon.py
deleted file mode 100644
index 281adca7..00000000
--- a/modules/core_financial/coupon.py
+++ /dev/null
@@ -1,536 +0,0 @@
-from algopy import (
- Account,
- Box,
- Global,
- OpUpFeeSource,
- UInt64,
- arc4,
- ensure_budget,
-)
-
-from smart_contracts import abi_types as typ
-from smart_contracts import config as fixed_cfg
-from smart_contracts import constants as cst
-from smart_contracts import errors as err
-
-from .common import CoreFinancialCommonMixin
-
-
-class CouponCashflowMixin(CoreFinancialCommonMixin):
- """Coupon cashflow primitives shared by PAM+coupon and PBN+coupon products."""
-
- def __init__(self) -> None:
- super().__init__()
- self.paid_coupon_units = UInt64()
-
- def all_due_coupons_paid(self, due_coupons: UInt64) -> bool:
- return self.paid_coupon_units >= self.circulating_units * due_coupons
-
- def assert_no_pending_coupon_payment(
- self, holding_address: Account, due_coupons: UInt64
- ) -> None:
- assert (
- self.account[holding_address].paid_coupons == due_coupons
- ), err.PENDING_COUPON_PAYMENT
-
- def core_prepare_coupon_payment(
- self, holding_address: Account
- ) -> tuple[UInt64, UInt64]:
- assert self.status_is_active(), err.UNAUTHORIZED
- self.assert_is_not_asset_defaulted()
- self.assert_is_not_asset_suspended()
- self.assert_valid_holding_address(holding_address)
-
- units = self.account[holding_address].units
- assert units > 0, err.NO_UNITS
-
- due_coupons = self.count_due_coupons()
- account_paid_coupons = self.account[holding_address].paid_coupons
- assert due_coupons > account_paid_coupons, err.NO_DUE_COUPON
- # The following conditions verify if other accounts are still waiting for the payment of previous coupons
- assert self.all_due_coupons_paid(
- account_paid_coupons
- ), err.PENDING_COUPON_PAYMENT
-
- payment_amount = self._compute_coupon_payment_amount(
- holding_address, account_paid_coupons
- )
- return payment_amount, units
-
- def core_apply_coupon_payment(
- self, holding_address: Account, units: UInt64
- ) -> None:
- self.account[holding_address].paid_coupons += 1
- self.paid_coupon_units += units
-
- def core_prepare_transfer_with_coupon(
- self, sender_holding_address: Account, units: UInt64
- ) -> UInt64:
- # Transfer is forbidden in case of pending coupon payments
- due_coupons = self.count_due_coupons()
- self.assert_no_pending_coupon_payment(sender_holding_address, due_coupons)
- return self.accrued_interest_amount(sender_holding_address, units, due_coupons)
-
- def core_prepare_principal_payment(self, holding_address: Account) -> UInt64:
- self.assert_pay_principal_authorization(holding_address)
- # Principal payment is forbidden in case of pending coupon payments
- assert self.all_due_coupons_paid(
- self.count_due_coupons()
- ), err.PENDING_COUPON_PAYMENT
- return self.account_total_units_value(holding_address)
-
- def core_apply_principal_payment(self, holding_address: Account) -> None:
- self.update_supply_after_principal_payment(holding_address)
-
- def _compute_coupon_payment_amount(
- self, _holding_address: Account, _account_paid_coupons: UInt64
- ) -> UInt64:
- return UInt64()
-
- def accrued_interest_amount(
- self, _holding_address: Account, _units: UInt64, _due_coupons: UInt64
- ) -> UInt64:
- return UInt64()
-
-
-class FixedCouponCashflowMixin(CouponCashflowMixin):
- """Coupon cashflow formulas and getters for PAM+coupon (fixed coupon bond)."""
-
- def __init__(self) -> None:
- super().__init__()
- self.coupon_rates = Box(typ.CouponRates, key=cst.BOX_ID_COUPON_RATES)
- self.due_coupons_watermark = UInt64()
-
- def assert_coupon_rates(self, coupon_rates: typ.CouponRates) -> None:
- assert coupon_rates.length, err.INVALID_COUPON_RATES
-
- def set_coupon_rates(self, coupon_rates: typ.CouponRates) -> None:
- self.total_coupons = coupon_rates.length
- self.coupon_rates.value = coupon_rates.copy()
-
- def count_due_coupons(self) -> UInt64:
- current_ts = Global.latest_timestamp
- due_coupons = self.due_coupons_watermark
- if current_ts >= self.maturity_date:
- due_coupons = self.total_coupons
- elif current_ts > self.issuance_date:
- coupon_idx = (
- UInt64(fixed_cfg.FIRST_COUPON_DATE_IDX) + self.due_coupons_watermark
- )
- coupon_due_date = self.time_events.value[coupon_idx]
- while current_ts >= coupon_due_date:
- ensure_budget(
- required_budget=UInt64(fixed_cfg.OP_UP_COUPON_DUE_COUNTING),
- fee_source=OpUpFeeSource.GroupCredit,
- )
- coupon_idx += 1
- coupon_due_date = self.time_events.value[coupon_idx]
- due_coupons = coupon_idx - fixed_cfg.FIRST_COUPON_DATE_IDX
- self.due_coupons_watermark = due_coupons
- return due_coupons
-
- def coupon_due_date(self, coupon: UInt64) -> UInt64:
- return self.time_events.value[fixed_cfg.FIRST_COUPON_DATE_IDX + coupon - 1]
-
- def latest_coupon_due_date(self, due_coupons: UInt64) -> UInt64:
- coupon_due_date = UInt64()
- if due_coupons >= UInt64(1):
- coupon_due_date = self.coupon_due_date(due_coupons)
- return coupon_due_date
-
- def next_coupon_due_date(self, due_coupons: UInt64) -> UInt64:
- coupon_due_date = UInt64()
- if due_coupons < self.total_coupons:
- coupon_due_date = self.coupon_due_date(due_coupons + 1)
- return coupon_due_date
-
- def coupon_interest_amount(
- self, principal_amount: UInt64, coupon: UInt64
- ) -> UInt64:
- coupon_rate_bps = self.coupon_rates.value[coupon - 1].as_uint64()
- return principal_amount * coupon_rate_bps // cst.BPS
-
- def day_count_factor(self, due_coupons: UInt64) -> typ.DayCountFactor:
- # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- if not due_coupons:
- accruing_start_time = self.issuance_date
- else:
- accruing_start_time = self.latest_coupon_due_date(due_coupons)
- coupon_accrued_period = Global.latest_timestamp - accruing_start_time
- coupon_period = self.next_coupon_due_date(due_coupons) - accruing_start_time
- if self.day_count_convention == UInt64(cst.DCC_A_A):
- coupon_accrued_period = self.days_in(coupon_accrued_period)
- coupon_period = self.days_in(coupon_period)
- return typ.DayCountFactor(
- numerator=coupon_accrued_period,
- denominator=coupon_period,
- )
-
- def is_accruing_interest(self, due_coupons: UInt64) -> bool:
- return (
- self.issuance_date != 0
- and Global.latest_timestamp >= self.issuance_date
- and due_coupons < self.total_coupons
- )
-
- def accrued_interest_amount(
- self, holding_address: Account, units: UInt64, due_coupons: UInt64
- ) -> UInt64:
- # The following assert safeguards the subroutine from forbidden invocations
- self.assert_no_pending_coupon_payment(holding_address, due_coupons)
- day_count_factor = self.day_count_factor(due_coupons)
- coupon_accrued_period = day_count_factor.numerator
- coupon_period = day_count_factor.denominator
- next_coupon_rate_bps = self.coupon_rates.value[due_coupons].as_uint64()
- # due_coupons is equal to the 0-base idx of next coupon
- return (
- self.account_units_value(holding_address, units)
- * next_coupon_rate_bps
- * coupon_accrued_period
- // (cst.BPS * coupon_period)
- ) # div-by-zero: coupon_period != 0 due to assert_time_events_sorted checks
-
- def _compute_coupon_payment_amount(
- self, holding_address: Account, account_paid_coupons: UInt64
- ) -> UInt64:
- return self.coupon_interest_amount(
- self.account_total_units_value(holding_address),
- account_paid_coupons + 1,
- )
-
- @arc4.abimethod(readonly=True)
- def get_account_units_current_value(
- self, *, holding_address: Account, units: UInt64
- ) -> typ.CurrentUnitsValue:
- """
- Get account's units current value and accrued interest
-
- Args:
- holding_address: Account Holding Address
- units: Account's units for the current value calculation
-
- Returns:
- Units current value in denomination asset, Accrued interest in denomination asset
-
- Raises:
- NO_PRIMARY_DISTRIBUTION: Primary distribution not yet executed
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- INVALID_UNITS: Invalid amount of units for the account
- PENDING_COUPON_PAYMENT: Pending due coupon payment for the account
- """
- assert (
- self.primary_distribution_opening_date
- and Global.latest_timestamp >= self.primary_distribution_opening_date
- ), err.NO_PRIMARY_DISTRIBUTION
- self.assert_valid_holding_address(holding_address)
- assert 0 < units <= self.account[holding_address].units, err.INVALID_UNITS
-
- # Value during primary distribution and at maturity
- account_units_nominal_value = self.account_units_value(holding_address, units)
- # Accruing interest during primary distribution and at maturity
- accrued_interest = UInt64()
- numerator = UInt64()
- denominator = UInt64()
-
- # Accruing interest
- due_coupons = self.count_due_coupons()
- self.assert_no_pending_coupon_payment(holding_address, due_coupons)
- if self.is_accruing_interest(due_coupons):
- day_count_factor = self.day_count_factor(due_coupons)
- accrued_interest = self.accrued_interest_amount(
- holding_address, units, due_coupons
- )
- numerator = day_count_factor.numerator
- denominator = day_count_factor.denominator
-
- return typ.CurrentUnitsValue(
- units_value=account_units_nominal_value,
- accrued_interest=accrued_interest,
- day_count_factor=typ.DayCountFactor(
- numerator=numerator,
- denominator=denominator,
- ),
- )
-
- @arc4.abimethod(readonly=True)
- def get_coupon_rates(self) -> typ.CouponRates:
- """
- Get D-ASA coupon rates
-
- Returns:
- Coupon rates
- """
- coupon_rates = typ.CouponRates()
- if self.status_is_active():
- coupon_rates = self.coupon_rates.value.copy()
- return coupon_rates
-
- @arc4.abimethod(readonly=True)
- def get_payment_amount(self, *, holding_address: Account) -> typ.PaymentAmounts:
- """
- Get the next payment amount
-
- Args:
- holding_address: Account Holding Address
-
- Returns:
- Interest amount in denomination asset, Principal amount in denomination asset
-
- Raises:
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- """
- self.assert_valid_holding_address(holding_address)
- interest_amount = UInt64()
- principal_amount = UInt64()
- if self.status_is_active():
- paid_coupons = self.account[holding_address].paid_coupons
- if paid_coupons < self.total_coupons:
- # Coupon Payment
- interest_amount = self.coupon_interest_amount(
- self.account_total_units_value(holding_address),
- paid_coupons + 1,
- )
- else:
- # Principal Payment
- principal_amount = self.account_total_units_value(holding_address)
- return typ.PaymentAmounts(
- interest=interest_amount,
- principal=principal_amount,
- )
-
- @arc4.abimethod(readonly=True)
- def get_coupons_status(self) -> typ.CouponsInfo:
- """
- Get D-ASA coupons status
-
- Returns:
- Total coupons, Due coupons, Next coupon due date, (Day count factor numerator,
- Day count factor denominator), All due coupons paid
- """
- due_coupons = self.count_due_coupons()
- next_coupon_due_date = self.next_coupon_due_date(due_coupons)
- all_due_coupons_paid = self.all_due_coupons_paid(due_coupons)
- numerator = UInt64()
- denominator = UInt64()
- if self.is_accruing_interest(due_coupons):
- day_count_factor = self.day_count_factor(due_coupons)
- numerator = day_count_factor.numerator
- denominator = day_count_factor.denominator
- return typ.CouponsInfo(
- total_coupons=self.total_coupons,
- due_coupons=due_coupons,
- next_coupon_due_date=next_coupon_due_date,
- day_count_factor=typ.DayCountFactor(
- numerator=numerator,
- denominator=denominator,
- ),
- all_due_coupons_paid=all_due_coupons_paid,
- )
-
-
-class PerpetualCouponCashflowMixin(CouponCashflowMixin):
- """Coupon cashflow formulas and getters for PBN+coupon (perpetual bond)."""
-
- def __init__(self) -> None:
- super().__init__()
- self.time_periods = Box(typ.TimePeriods, key=cst.BOX_ID_TIME_PERIODS)
- self.coupon_period = UInt64()
-
- def assert_time_periods(self, time_periods: typ.TimePeriods) -> None:
- # The perpetual bond defines a single time period for the coupon duration with unlimited repetitions
- assert time_periods.length == UInt64(1), err.INVALID_TIME_PERIODS
- coupon_period_duration = time_periods[0][0]
- repetitions = time_periods[0][1]
- assert coupon_period_duration > UInt64(0), err.INVALID_TIME_PERIOD_DURATION
- assert repetitions == UInt64(0), err.INVALID_TIME_PERIOD_REPETITIONS
-
- def set_time_periods(self, time_periods: typ.TimePeriods) -> None:
- self.time_periods.value = time_periods.copy()
- self.coupon_period = self.time_periods.value[0][0]
-
- def count_due_coupons(self) -> UInt64:
- due_coupons = UInt64(0)
- current_ts = Global.latest_timestamp
- if current_ts > self.issuance_date:
- due_coupons = (current_ts - self.issuance_date) // self.coupon_period
- # div-by-zero: coupon_period != 0 due to assert_time_periods checks
- return due_coupons
-
- def coupon_due_date(self, coupon: UInt64) -> UInt64:
- return self.issuance_date + coupon * self.coupon_period
-
- def latest_coupon_due_date(self, due_coupons: UInt64) -> UInt64:
- coupon_due_date = UInt64()
- if due_coupons >= UInt64(1):
- coupon_due_date = self.coupon_due_date(due_coupons)
- return coupon_due_date
-
- def next_coupon_due_date(self, due_coupons: UInt64) -> UInt64:
- return self.coupon_due_date(due_coupons + 1)
-
- def coupon_interest_amount(
- self, principal_amount: UInt64, _coupon: UInt64
- ) -> UInt64:
- return principal_amount * self.interest_rate // cst.BPS
-
- def day_count_factor(self, due_coupons: UInt64) -> typ.DayCountFactor:
- # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- if not due_coupons:
- accruing_start_time = self.issuance_date
- else:
- accruing_start_time = self.latest_coupon_due_date(due_coupons)
- coupon_accrued_period = Global.latest_timestamp - accruing_start_time
- coupon_period = self.coupon_period
- if self.day_count_convention == UInt64(cst.DCC_A_A):
- coupon_accrued_period = self.days_in(coupon_accrued_period)
- coupon_period = self.days_in(coupon_period)
- return typ.DayCountFactor(
- numerator=coupon_accrued_period,
- denominator=coupon_period,
- )
-
- def is_accruing_interest(self, _due_coupons: UInt64) -> bool:
- return self.issuance_date != 0 and Global.latest_timestamp > self.issuance_date
-
- def accrued_interest_amount(
- self, holding_address: Account, units: UInt64, due_coupons: UInt64
- ) -> UInt64:
- # The following assert safeguards the subroutine from forbidden invocations
- self.assert_no_pending_coupon_payment(holding_address, due_coupons)
- day_count_factor = self.day_count_factor(due_coupons)
- coupon_accrued_period = day_count_factor.numerator
- coupon_period = day_count_factor.denominator
- return (
- self.account_units_value(holding_address, units)
- * self.interest_rate
- * coupon_accrued_period
- // (cst.BPS * coupon_period)
- ) # div-by-zero: coupon_period != 0 due to assert_time_periods checks
-
- def _compute_coupon_payment_amount(
- self, holding_address: Account, _account_paid_coupons: UInt64
- ) -> UInt64:
- return self.coupon_interest_amount(
- self.account_total_units_value(holding_address), UInt64(1)
- )
-
- @arc4.abimethod(readonly=True)
- def get_account_units_current_value(
- self, *, holding_address: Account, units: UInt64
- ) -> typ.CurrentUnitsValue:
- """
- Get account's units current value and accrued interest
-
- Args:
- holding_address: Account Holding Address
- units: Account's units for the current value calculation
-
- Returns:
- Units current value in denomination asset, Accrued interest in denomination asset
-
- Raises:
- NO_PRIMARY_DISTRIBUTION: Primary distribution not yet executed
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- INVALID_UNITS: Invalid amount of units for the account
- PENDING_COUPON_PAYMENT: Pending due coupon payment for the account
- """
- assert (
- self.primary_distribution_opening_date
- and Global.latest_timestamp >= self.primary_distribution_opening_date
- ), err.NO_PRIMARY_DISTRIBUTION
- self.assert_valid_holding_address(holding_address)
- assert 0 < units <= self.account[holding_address].units, err.INVALID_UNITS
-
- # Value during primary distribution
- account_units_nominal_value = self.account_units_value(holding_address, units)
- # Accruing interest during primary distribution
- accrued_interest = UInt64()
- numerator = UInt64()
- denominator = UInt64()
-
- # Accruing interest
- due_coupons = self.count_due_coupons()
- self.assert_no_pending_coupon_payment(holding_address, due_coupons)
- if self.is_accruing_interest(due_coupons):
- day_count_factor = self.day_count_factor(due_coupons)
- accrued_interest = self.accrued_interest_amount(
- holding_address, units, due_coupons
- )
- numerator = day_count_factor.numerator
- denominator = day_count_factor.denominator
-
- return typ.CurrentUnitsValue(
- units_value=account_units_nominal_value,
- accrued_interest=accrued_interest,
- day_count_factor=typ.DayCountFactor(
- numerator=numerator,
- denominator=denominator,
- ),
- )
-
- @arc4.abimethod(readonly=True)
- def get_payment_amount(self, *, holding_address: Account) -> typ.PaymentAmounts:
- """
- Get the next payment amount
-
- Args:
- holding_address: Account Holding Address
-
- Returns:
- Interest amount in denomination asset, Principal amount in denomination asset
-
- Raises:
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- """
- self.assert_valid_holding_address(holding_address)
- interest_amount = (
- self.account_total_units_value(holding_address)
- * self.interest_rate
- // cst.BPS
- )
- return typ.PaymentAmounts(
- interest=interest_amount,
- principal=UInt64(0),
- )
-
- @arc4.abimethod(readonly=True)
- def get_coupons_status(self) -> typ.CouponsInfo:
- """
- Get D-ASA coupons status
-
- Returns:
- Total coupons, Due coupons, Next coupon due date, (Day count factor numerator,
- Day count factor denominator), All due coupons paid
- """
- due_coupons = self.count_due_coupons() if self.status_is_active() else UInt64()
- next_coupon_due_date = self.next_coupon_due_date(due_coupons)
- all_due_coupons_paid = self.all_due_coupons_paid(due_coupons)
- numerator = UInt64()
- denominator = UInt64()
- if self.is_accruing_interest(due_coupons):
- day_count_factor = self.day_count_factor(due_coupons)
- numerator = day_count_factor.numerator
- denominator = day_count_factor.denominator
- return typ.CouponsInfo(
- total_coupons=self.total_coupons,
- due_coupons=due_coupons,
- next_coupon_due_date=next_coupon_due_date,
- day_count_factor=typ.DayCountFactor(
- numerator=numerator,
- denominator=denominator,
- ),
- all_due_coupons_paid=all_due_coupons_paid,
- )
-
- @arc4.abimethod(readonly=True)
- def get_time_periods(self) -> typ.TimePeriods:
- """
- Get D-ASA time periods
-
- Returns:
- Time periods
- """
- time_periods = typ.TimePeriods()
- if self.status_is_active():
- time_periods = self.time_periods.value.copy()
- return time_periods
diff --git a/modules/core_financial/no_coupon.py b/modules/core_financial/no_coupon.py
deleted file mode 100644
index 3453fb28..00000000
--- a/modules/core_financial/no_coupon.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from algopy import Account, Global, UInt64, arc4
-
-from smart_contracts import abi_types as typ
-from smart_contracts import constants as cst
-from smart_contracts import errors as err
-
-from .common import CoreFinancialCommonMixin
-
-
-class NoCouponCashflowMixin(CoreFinancialCommonMixin):
- """Cashflow computation for products without coupons."""
-
- def assert_interest_rate(self, interest_rate: UInt64) -> None:
- # This subroutine must be used after the principal discount has been set
- assert interest_rate == UInt64(0), err.INVALID_INTEREST_RATE
-
- def day_count_factor(self) -> typ.DayCountFactor:
- # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- accrued_period = Global.latest_timestamp - self.issuance_date
- principal_period = self.maturity_date - self.issuance_date
- if self.day_count_convention == UInt64(cst.DCC_A_A):
- accrued_period = self.days_in(accrued_period)
- principal_period = self.days_in(principal_period)
- return typ.DayCountFactor(
- numerator=accrued_period,
- denominator=principal_period,
- )
-
- def is_accruing_interest(self) -> bool:
- # The check on maturity date ensures D-ASA has been configured as block timestamp cannot be less than 0 (init).
- return self.issuance_date <= Global.latest_timestamp < self.maturity_date
-
- def accrued_interest_amount(
- self, holding_address: Account, units: UInt64
- ) -> UInt64:
- day_count_factor = self.day_count_factor()
- accrued_period = day_count_factor.numerator
- principal_period = day_count_factor.denominator
- return (
- self.account_units_value(holding_address, units)
- * self.principal_discount
- * accrued_period
- // (cst.BPS * principal_period)
- ) # div-by-zero: principal_period != 0 due to assert_time_events_sorted checks
-
- def core_prepare_transfer_no_coupon(
- self, sender_holding_address: Account, units: UInt64
- ) -> UInt64:
- return self.accrued_interest_amount(sender_holding_address, units)
-
- def core_prepare_principal_payment(self, holding_address: Account) -> UInt64:
- self.assert_pay_principal_authorization(holding_address)
- return self.account_total_units_value(holding_address)
-
- def core_apply_principal_payment(self, holding_address: Account) -> None:
- self.update_supply_after_principal_payment(holding_address)
-
- @arc4.abimethod(readonly=True)
- def get_account_units_current_value(
- self, *, holding_address: Account, units: UInt64
- ) -> typ.CurrentUnitsValue:
- """
- Get account's units current value and accrued interest
-
- Args:
- holding_address: Account Holding Address
- units: Account's units for the current value calculation
-
- Returns:
- Units current value in denomination asset, Accrued interest in denomination asset
-
- Raises:
- NO_PRIMARY_DISTRIBUTION: Primary distribution not yet executed
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- INVALID_UNITS: Invalid amount of units for the account
- """
- assert (
- self.primary_distribution_opening_date
- and Global.latest_timestamp >= self.primary_distribution_opening_date
- ), err.NO_PRIMARY_DISTRIBUTION
- self.assert_valid_holding_address(holding_address)
- assert 0 < units <= self.account[holding_address].units, err.INVALID_UNITS
-
- account_units_nominal_value = self.account_units_value(holding_address, units)
- account_units_discount = (
- account_units_nominal_value * self.principal_discount // cst.BPS
- )
- # Value during primary distribution
- account_units_current_value = (
- account_units_nominal_value - account_units_discount
- )
-
- # Accruing interest during primary distribution and at maturity
- accrued_interest = UInt64()
- numerator = UInt64()
- denominator = UInt64()
-
- # Accruing interest
- if self.is_accruing_interest():
- day_count_factor = self.day_count_factor()
- accrued_interest = self.accrued_interest_amount(holding_address, units)
- numerator = day_count_factor.numerator
- denominator = day_count_factor.denominator
-
- # Value at maturity
- if Global.latest_timestamp >= self.maturity_date:
- account_units_current_value = account_units_nominal_value
-
- return typ.CurrentUnitsValue(
- units_value=account_units_current_value,
- accrued_interest=accrued_interest,
- day_count_factor=typ.DayCountFactor(
- numerator=numerator,
- denominator=denominator,
- ),
- )
-
- @arc4.abimethod(readonly=True)
- def get_payment_amount(self, *, holding_address: Account) -> typ.PaymentAmounts:
- """
- Get the next payment amount
-
- Args:
- holding_address: Account Holding Address
-
- Returns:
- Interest amount in denomination asset, Principal amount in denomination asset
-
- Raises:
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- INVALID_PAYMENT_INDEX: Invalid 1-based payment index
- """
- self.assert_valid_holding_address(holding_address)
- principal_amount = UInt64()
- if self.status_is_active():
- principal_amount = self.account_total_units_value(holding_address)
- return typ.PaymentAmounts(interest=UInt64(0), principal=principal_amount)
diff --git a/modules/payment_agent.py b/modules/payment_agent.py
new file mode 100644
index 00000000..cada6edc
--- /dev/null
+++ b/modules/payment_agent.py
@@ -0,0 +1,162 @@
+from algopy import Account, Bytes, Global, Txn, UInt64, arc4, ensure_budget, itxn
+
+from smart_contracts import abi_types as typ
+from smart_contracts import constants as cst
+from smart_contracts import errors as err
+
+from .accounting import AccountingModule
+
+
+class PaymentAgent(AccountingModule):
+ """Provide ACTUS cashflow funding and holder withdrawal behavior."""
+
+ def _assert_payment_authorization(self, holding_address: Account) -> None:
+ """Require the caller to be allowed to trigger a holder payment."""
+ if self.op_daemon.value != Global.zero_address:
+ assert (
+ Txn.sender == self.op_daemon.value
+ or Txn.sender == holding_address
+ or Txn.sender == self.account[holding_address].payment_address
+ ), err.UNAUTHORIZED
+
+ def _is_payment_executable(self, holding_address: Account) -> bool:
+ """Return whether a holder can currently receive an on-chain asset transfer."""
+ return (
+ self.account[holding_address].payment_address.is_opted_in(
+ self.settlement_asset_id
+ )
+ and not self.account[holding_address].suspended
+ )
+
+ def _assert_enough_funds(self, payment_amount: UInt64) -> None:
+ """Require the contract to hold at least the requested settlement amount."""
+ assert (
+ self.settlement_asset_id.balance(Global.current_application_address)
+ >= payment_amount
+ ), err.NOT_ENOUGH_FUNDS
+
+ def _pay(self, receiver: Account, amount: UInt64) -> None:
+ """Send settlement ASA from the app account to a receiver."""
+ itxn.AssetTransfer(
+ xfer_asset=self.settlement_asset_id,
+ asset_receiver=receiver,
+ asset_amount=amount,
+ fee=Global.min_txn_fee,
+ ).submit()
+
+ @arc4.abimethod
+ def fund_due_cashflows(self, *, max_event_count: UInt64) -> typ.CashFundingResult:
+ """
+ Reserve due ACTUS cash events into the escrow-style claim ledger.
+
+ Args:
+ max_event_count: Maximum number of due cash events to process in this call.
+
+ Returns:
+ Funding result with reserved interest, reserved principal, and event count.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ UNAUTHORIZED: Caller is not the arranger.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ PENDING_IED: Initial exchange has not executed yet.
+ NO_DUE_CASHFLOW: No due cash event is currently available for funding.
+ NOT_ENOUGH_FUNDS: Contract account does not hold enough free settlement funds.
+ """
+ self._assert_configured()
+ self._assert_caller_is_arranger()
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+ self._assert_initial_exchange_executed()
+ if self._is_dynamic_annuity():
+ ensure_budget(
+ required_budget=(
+ UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_BASE_BUDGET)
+ + max_event_count
+ * UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_PER_EVENT_BUDGET)
+ ),
+ )
+
+ processed_events = UInt64(0)
+ funded_interest = UInt64(0)
+ funded_principal = UInt64(0)
+
+ while (
+ processed_events < max_event_count
+ and self.event_cursor < self.schedule_entry_count
+ ):
+ entry = self._get_schedule_entry(self.event_cursor)
+ if entry.scheduled_time > Global.latest_timestamp:
+ break
+ if not self._event_is_cash(entry.event_type.as_uint64()):
+ break
+
+ interest_amount, principal_amount = self._apply_cash_entry(entry)
+ funded_interest += interest_amount
+ funded_principal += principal_amount
+ processed_events += UInt64(1)
+
+ assert processed_events > UInt64(0), err.NO_DUE_CASHFLOW
+ return typ.CashFundingResult(
+ funded_interest=funded_interest,
+ funded_principal=funded_principal,
+ total_funded=funded_interest + funded_principal,
+ processed_events=processed_events,
+ timestamp=Global.latest_timestamp,
+ )
+
+ @arc4.abimethod
+ def claim_due_cashflows(
+ self,
+ *,
+ holding_address: Account,
+ payment_info: Bytes,
+ ) -> typ.CashClaimResult:
+ """
+ Withdraw the holder's already funded ACTUS cash entitlements.
+
+ Args:
+ holding_address: Holder whose position should be settled and claimed.
+ payment_info: Opaque settlement context returned in the result.
+
+ Returns:
+ Claim result with realized interest, principal, and passthrough context.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ INVALID_HOLDING_ADDRESS: Holding address has no opened account.
+ UNAUTHORIZED: Caller is not authorized to trigger the claim.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset operations are suspended.
+ PENDING_IED: Initial exchange has not executed yet.
+ NO_DUE_CASHFLOW: The account has no claimable funded cashflow.
+ NOT_ENOUGH_FUNDS: Contract account lacks settlement funds for an executable payment.
+ """
+ self._assert_configured()
+ self._assert_valid_holding_address(holding_address)
+ self._assert_payment_authorization(holding_address)
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+ self._assert_initial_exchange_executed()
+
+ self._ensure_units_activated(holding_address)
+ self._settle_position(holding_address)
+ total_amount = self._claimable_total(holding_address)
+ assert total_amount > UInt64(0), err.NO_DUE_CASHFLOW
+
+ interest_amount = self.account[holding_address].claimable_interest
+ principal_amount = self.account[holding_address].claimable_principal
+
+ if self._is_payment_executable(holding_address):
+ self._assert_enough_funds(total_amount)
+ self._pay(self.account[holding_address].payment_address, total_amount)
+ interest_amount, principal_amount = self._reset_claimable(holding_address)
+
+ return typ.CashClaimResult(
+ interest_amount=interest_amount,
+ principal_amount=principal_amount,
+ total_amount=interest_amount + principal_amount,
+ timestamp=Global.latest_timestamp,
+ context=payment_info,
+ )
diff --git a/modules/payment_agent/__init__.py b/modules/payment_agent/__init__.py
deleted file mode 100644
index d620a1f6..00000000
--- a/modules/payment_agent/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from .common import PaymentAgentCommonMixin
-from .coupon import CouponPaymentAgentMixin
-from .no_principal import NoPrincipalPaymentMixin
-from .principal import PrincipalPaymentAgentMixin
-
-__all__ = [
- "CouponPaymentAgentMixin",
- "NoPrincipalPaymentMixin",
- "PaymentAgentCommonMixin",
- "PrincipalPaymentAgentMixin",
-]
diff --git a/modules/payment_agent/common.py b/modules/payment_agent/common.py
deleted file mode 100644
index cd47e1f4..00000000
--- a/modules/payment_agent/common.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from algopy import Account, Global, Txn, UInt64, itxn, op
-
-from modules.core_financial.common import (
- CoreFinancialCommonMixin,
-)
-from smart_contracts import errors as err
-
-
-class PaymentAgentCommonMixin(CoreFinancialCommonMixin):
- """Settlement execution helpers used by payment methods."""
-
- def assert_payment_authorization(self, holding_address: Account) -> None:
- if self.op_daemon.value != Global.zero_address:
- assert (
- Txn.sender == self.op_daemon.value
- or Txn.sender == holding_address
- or Txn.sender == self.account[holding_address].payment_address
- ), err.UNAUTHORIZED
-
- def is_payment_executable(self, holding_address: Account) -> bool:
- return (
- self.account[holding_address].payment_address.is_opted_in(
- self.settlement_asset_id
- )
- and not self.account[holding_address].suspended
- )
-
- def assert_enough_funds(self, payment_amount: UInt64) -> None:
- assert (
- self.settlement_asset_id.balance(Global.current_application_address)
- >= payment_amount
- ), err.NOT_ENOUGH_FUNDS
-
- def pay(self, receiver: Account, amount: UInt64) -> None:
- itxn.AssetTransfer(
- xfer_asset=self.settlement_asset_id,
- asset_receiver=receiver,
- asset_amount=amount,
- fee=Global.min_txn_fee,
- ).submit()
-
- # Hook defaults, implemented by core cashflow mixins.
- def core_prepare_coupon_payment(
- self, _holding_address: Account
- ) -> tuple[UInt64, UInt64]:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def core_apply_coupon_payment(
- self, _holding_address: Account, _units: UInt64
- ) -> None:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def core_prepare_principal_payment(self, _holding_address: Account) -> UInt64:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def core_apply_principal_payment(self, _holding_address: Account) -> None:
- op.err(err.INVALID_MIXIN_COMPOSITION)
diff --git a/modules/payment_agent/coupon.py b/modules/payment_agent/coupon.py
deleted file mode 100644
index 0304739f..00000000
--- a/modules/payment_agent/coupon.py
+++ /dev/null
@@ -1,72 +0,0 @@
-from algopy import Account, Bytes, Global, String, UInt64, arc4
-
-from smart_contracts import abi_types as typ
-from smart_contracts import enums
-from smart_contracts.events import Event
-
-from .common import PaymentAgentCommonMixin
-
-
-class CouponPaymentAgentMixin(PaymentAgentCommonMixin):
- """Executes coupon cashflows computed by the core financial module."""
-
- def _emit_ip(self, *, payoff: UInt64) -> None:
- """Emit Interest Payment (IP) event."""
- arc4.emit(
- Event(
- contract_id=Global.current_application_id.id,
- type=arc4.UInt8(enums.EVT_TYPE_IP),
- type_name=String("IP"),
- time=Global.latest_timestamp,
- payoff=payoff,
- currency_id=self.denomination_asset_id.id,
- currency_unit=self.denomination_asset_id.unit_name,
- nominal_value=self.circulating_units * self.unit_value,
- nominal_rate_bps=arc4.UInt16(0), # TODO: Add interest rate
- nominal_accrued=UInt64(0),
- )
- )
-
- @arc4.abimethod
- def pay_coupon(
- self, *, holding_address: Account, payment_info: Bytes
- ) -> typ.PaymentResult:
- """
- Pay due coupon to an account
-
- Args:
- holding_address: Account Holding Address
- payment_info: Additional payment information (Optional)
-
- Returns:
- Paid coupon amount in denomination asset, Payment timestamp, Payment context
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- NO_UNITS: No D-ASA units
- NO_DUE_COUPON: No due coupon to pay
- PENDING_COUPON_PAYMENT: Pending due coupon payment
- """
- payment_amount, units = self.core_prepare_coupon_payment(holding_address)
- self.assert_payment_authorization(holding_address)
- # The reference implementation does not assert if there is enough liquidity to pay current due coupon to all
-
- if self.is_payment_executable(holding_address):
- # The reference implementation has on-chain payment agent
- self.assert_enough_funds(payment_amount)
- # The reference implementation has the same asset for denomination and settlement, no conversion needed
- self.pay(self.account[holding_address].payment_address, payment_amount)
- else:
- # Accounts suspended or not opted in at the time of payments must not stall the D-ASA
- payment_amount = UInt64()
-
- self.core_apply_coupon_payment(holding_address, units)
- self._emit_ip(payoff=payment_amount)
- return typ.PaymentResult(
- amount=payment_amount,
- timestamp=Global.latest_timestamp,
- context=payment_info, # TODO: Add info on failed payment
- )
diff --git a/modules/payment_agent/no_principal.py b/modules/payment_agent/no_principal.py
deleted file mode 100644
index e2c0f4a3..00000000
--- a/modules/payment_agent/no_principal.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from modules.core_financial.common import (
- CoreFinancialCommonMixin,
-)
-
-
-class NoPrincipalPaymentMixin(CoreFinancialCommonMixin):
- """Marker mixin for non-redeemable products (no pay_principal ABI)."""
-
- pass
diff --git a/modules/payment_agent/principal.py b/modules/payment_agent/principal.py
deleted file mode 100644
index d1430e8b..00000000
--- a/modules/payment_agent/principal.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from algopy import Account, Bytes, Global, String, UInt64, arc4
-
-from smart_contracts import abi_types as typ
-from smart_contracts import enums
-from smart_contracts.events import Event
-
-from .common import PaymentAgentCommonMixin
-
-
-class PrincipalPaymentAgentMixin(PaymentAgentCommonMixin):
- """Executes principal cashflows computed by the core financial module."""
-
- def _emit_pr(self, *, payoff: UInt64) -> None:
- """Emit Principal Redemption (PR) event."""
- arc4.emit(
- Event(
- contract_id=Global.current_application_id.id,
- type=arc4.UInt8(enums.EVT_TYPE_PR),
- type_name=String("PR"),
- time=Global.latest_timestamp,
- payoff=payoff,
- currency_id=self.denomination_asset_id.id,
- currency_unit=self.denomination_asset_id.unit_name,
- nominal_value=self.circulating_units * self.unit_value,
- nominal_rate_bps=arc4.UInt16(0),
- nominal_accrued=UInt64(0),
- )
- )
-
- @arc4.abimethod
- def pay_principal(
- self, *, holding_address: Account, payment_info: Bytes
- ) -> typ.PaymentResult:
- """
- Pay the outstanding principal to an account
-
- Args:
- holding_address: Account Holding Address
- payment_info: Additional payment information (Optional)
-
- Returns:
- Paid principal amount in denomination asset, Payment timestamp, Payment context
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- NO_UNITS: No D-ASA units
- NOT_MATURE: Not mature
- """
- payment_amount = self.core_prepare_principal_payment(holding_address)
- self.assert_payment_authorization(holding_address)
- # The reference implementation does not assert if there is enough liquidity to pay the principal to all
-
- if self.is_payment_executable(holding_address):
- # The reference implementation has on-chain payment agent
- self.assert_enough_funds(payment_amount)
- # The reference implementation has the same asset for denomination and settlement, no conversion needed
- self.pay(self.account[holding_address].payment_address, payment_amount)
- else:
- # Accounts suspended or not opted in at the time of payments must not stall the D-ASA
- payment_amount = UInt64()
-
- self.core_apply_principal_payment(holding_address)
- self._emit_pr(payoff=payment_amount)
- return typ.PaymentResult(
- amount=payment_amount,
- timestamp=Global.latest_timestamp,
- context=payment_info, # TODO: Add info on failed payment
- )
diff --git a/modules/rbac.py b/modules/rbac.py
index 300c23be..df581d4e 100644
--- a/modules/rbac.py
+++ b/modules/rbac.py
@@ -1,10 +1,7 @@
-# pyright: reportMissingModuleSource=false
-
from algopy import (
Account,
ARC4Contract,
BoxMap,
- Bytes,
Global,
GlobalState,
Txn,
@@ -15,6 +12,7 @@
from smart_contracts import abi_types as typ
from smart_contracts import constants as cst
+from smart_contracts import enums
from smart_contracts import errors as err
@@ -31,22 +29,26 @@ def __init__(self) -> None:
self.arranger = GlobalState(Account(), key=cst.PREFIX_ID_ARRANGER)
self.op_daemon = GlobalState(Account(), key=cst.PREFIX_ID_OP_DAEMON)
self.account_manager = BoxMap(
- Account, typ.RoleConfig, key_prefix=cst.PREFIX_ID_ACCOUNT_MANAGER
+ Account, typ.RoleValidity, key_prefix=cst.PREFIX_ID_ACCOUNT_MANAGER
)
self.primary_dealer = BoxMap(
- Account, typ.RoleConfig, key_prefix=cst.PREFIX_ID_PRIMARY_DEALER
+ Account, typ.RoleValidity, key_prefix=cst.PREFIX_ID_PRIMARY_DEALER
+ )
+ self.trustee = BoxMap(
+ Account, typ.RoleValidity, key_prefix=cst.PREFIX_ID_TRUSTEE
)
- self.trustee = BoxMap(Account, typ.RoleConfig, key_prefix=cst.PREFIX_ID_TRUSTEE)
self.authority = BoxMap(
- Account, typ.RoleConfig, key_prefix=cst.PREFIX_ID_AUTHORITY
+ Account, typ.RoleValidity, key_prefix=cst.PREFIX_ID_AUTHORITY
)
- self.interest_oracle = BoxMap(
- Account, typ.RoleConfig, key_prefix=cst.PREFIX_ID_INTEREST_ORACLE
+ self.observer = BoxMap(
+ Account, typ.RoleValidity, key_prefix=cst.PREFIX_ID_OBSERVER
)
- # D-ASA Governance
- self.asset_suspended = False
- self.asset_defaulted = False
+ # Contract Governance
+ self.contract_suspended = False
+
+ # Contract Performance
+ self.defaulted = False
def _is_arranger(self, role_address: Account) -> bool:
return role_address == self.arranger.value
@@ -61,198 +63,240 @@ def _role_is_active(self, role_map: typ.RbacRole, role_address: Account) -> bool
<= role_map[role_address].role_validity_end
)
- def assert_caller_is_arranger(self) -> None:
+ def _assert_caller_is_arranger(self) -> None:
assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
- def assert_caller_is_account_manager(self) -> None:
+ def _assert_caller_is_account_manager(self) -> None:
assert self._role_is_active(self.account_manager, Txn.sender), err.UNAUTHORIZED
- def assert_caller_is_primary_dealer(self) -> None:
+ def _assert_caller_is_primary_dealer(self) -> None:
assert self._role_is_active(self.primary_dealer, Txn.sender), err.UNAUTHORIZED
- def assert_caller_is_trustee(self) -> None:
+ def _assert_caller_is_trustee(self) -> None:
assert self._role_is_active(self.trustee, Txn.sender), err.UNAUTHORIZED
- def assert_caller_is_authority(self) -> None:
+ def _assert_caller_is_authority(self) -> None:
assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
- def assert_caller_is_interest_oracle(self) -> None:
- assert self._role_is_active(self.interest_oracle, Txn.sender), err.UNAUTHORIZED
+ def _assert_caller_is_observer(self) -> None:
+ assert self._role_is_active(self.observer, Txn.sender), err.UNAUTHORIZED
- def assert_is_not_asset_defaulted(self) -> None:
- assert not self.asset_defaulted, err.DEFAULTED
+ def _assert_is_not_contract_defaulted(self) -> None:
+ assert not self.defaulted, err.DEFAULTED
- def assert_is_not_asset_suspended(self) -> None:
- assert not self.asset_suspended, err.SUSPENDED
+ def _assert_is_not_contract_suspended(self) -> None:
+ assert not self.contract_suspended, err.SUSPENDED
def _assert_valid_role(self, role_id: UInt64) -> None:
assert role_id in (
- UInt64(cst.ROLE_ARRANGER),
- UInt64(cst.ROLE_ACCOUNT_MANAGER),
- UInt64(cst.ROLE_PRIMARY_DEALER),
- UInt64(cst.ROLE_TRUSTEE),
- UInt64(cst.ROLE_AUTHORITY),
- UInt64(cst.ROLE_INTEREST_ORACLE),
+ UInt64(enums.ROLE_ARRANGER),
+ UInt64(enums.ROLE_OP_DAEMON),
+ UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ UInt64(enums.ROLE_PRIMARY_DEALER),
+ UInt64(enums.ROLE_TRUSTEE),
+ UInt64(enums.ROLE_AUTHORITY),
+ UInt64(enums.ROLE_OBSERVER),
), err.INVALID_ROLE
- def _upsert_role(
- self, role_id: UInt64, role_address: Account, config: Bytes
+ def _set_role(
+ self, role_id: UInt64, role_address: Account, validity: typ.RoleValidity
) -> None:
- if role_id == UInt64(cst.ROLE_ARRANGER):
+ if role_id == UInt64(enums.ROLE_ARRANGER):
self.arranger.value = role_address
return
- if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ if role_id == UInt64(enums.ROLE_ACCOUNT_MANAGER):
assert role_address not in self.account_manager, err.INVALID_ROLE_ADDRESS
- self.account_manager[role_address] = typ.RoleConfig.from_bytes(config)
+ self.account_manager[role_address] = validity.copy()
return
- if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
+ if role_id == UInt64(enums.ROLE_PRIMARY_DEALER):
assert role_address not in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- self.primary_dealer[role_address] = typ.RoleConfig.from_bytes(config)
+ self.primary_dealer[role_address] = validity.copy()
return
- if role_id == UInt64(cst.ROLE_TRUSTEE):
+ if role_id == UInt64(enums.ROLE_TRUSTEE):
assert role_address not in self.trustee, err.INVALID_ROLE_ADDRESS
- self.trustee[role_address] = typ.RoleConfig.from_bytes(config)
+ self.trustee[role_address] = validity.copy()
return
- if role_id == UInt64(cst.ROLE_AUTHORITY):
+ if role_id == UInt64(enums.ROLE_AUTHORITY):
assert role_address not in self.authority, err.INVALID_ROLE_ADDRESS
- self.authority[role_address] = typ.RoleConfig.from_bytes(config)
+ self.authority[role_address] = validity.copy()
return
- if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
- assert role_address not in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- self.interest_oracle[role_address] = typ.RoleConfig.from_bytes(config)
+ if role_id == UInt64(enums.ROLE_OBSERVER):
+ assert role_address not in self.observer, err.INVALID_ROLE_ADDRESS
+ self.observer[role_address] = validity.copy()
def _delete_role(self, role_id: UInt64, role_address: Account) -> None:
- assert role_id != UInt64(cst.ROLE_ARRANGER), err.INVALID_ROLE
- if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ assert role_id != UInt64(enums.ROLE_ARRANGER), err.INVALID_ROLE
+ if role_id == UInt64(enums.ROLE_ACCOUNT_MANAGER):
assert role_address in self.account_manager, err.INVALID_ROLE_ADDRESS
del self.account_manager[role_address]
return
- if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
+ if role_id == UInt64(enums.ROLE_PRIMARY_DEALER):
assert role_address in self.primary_dealer, err.INVALID_ROLE_ADDRESS
del self.primary_dealer[role_address]
return
- if role_id == UInt64(cst.ROLE_TRUSTEE):
+ if role_id == UInt64(enums.ROLE_TRUSTEE):
assert role_address in self.trustee, err.INVALID_ROLE_ADDRESS
del self.trustee[role_address]
return
- if role_id == UInt64(cst.ROLE_AUTHORITY):
+ if role_id == UInt64(enums.ROLE_AUTHORITY):
assert role_address in self.authority, err.INVALID_ROLE_ADDRESS
del self.authority[role_address]
return
- if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
- assert role_address in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- del self.interest_oracle[role_address]
+ if role_id == UInt64(enums.ROLE_OBSERVER):
+ assert role_address in self.observer, err.INVALID_ROLE_ADDRESS
+ del self.observer[role_address]
+
+ @arc4.abimethod(allow_actions=["UpdateApplication"])
+ def contract_update(self) -> None:
+ """
+ Update D-ASA application.
+
+ Returns:
+ None.
+
+ Raises:
+ UNAUTHORIZED: Caller is not the arranger.
+ """
+ # The reference implementation grants the update permissions to the Arranger.
+ # ⚠️ WARNING: Application updates must be executed VERY carefully, as they
+ # might introduce breaking changes.
+ self._assert_caller_is_arranger()
@arc4.abimethod
def rbac_rotate_arranger(self, *, new_arranger: Account) -> UInt64:
"""
- Rotate the Arranger address
+ Rotate the arranger address.
Args:
- new_arranger: New Arranger address
+ new_arranger: New arranger address.
Returns:
- Timestamp of the role assignment
+ UNIX timestamp of the role assignment.
+
+ Raises:
+ UNAUTHORIZED: Caller is not the current arranger.
"""
- self.assert_caller_is_arranger()
+ self._assert_caller_is_arranger()
self.arranger.value = new_arranger
return Global.latest_timestamp
@arc4.abimethod
def rbac_set_op_daemon(self, *, address: Account) -> UInt64:
"""
- Non-Normative: Set the Operation Daemon address
+ Non-normative helper to set the operation daemon address.
Args:
- address: Operation Daemon address
+ address: Operation daemon address.
Returns:
- Timestamp of the role assignment
+ UNIX timestamp of the role assignment.
+
+ Raises:
+ UNAUTHORIZED: Caller is not the arranger.
"""
- self.assert_caller_is_arranger()
+ self._assert_caller_is_arranger()
self.op_daemon.value = address
return Global.latest_timestamp
@arc4.abimethod
def rbac_assign_role(
- self, *, role_id: arc4.UInt8, role_address: Account, config: Bytes
+ self, *, role_id: arc4.UInt8, role_address: Account, validity: typ.RoleValidity
) -> UInt64:
"""
- Assign a role to an address
+ Assign a role to an address.
Args:
- role_id: Role Identifier
- role_address: Account Role Address
- config: Role configuration (Optional)
+ role_id: Role identifier.
+ role_address: Account role address.
+ validity: Inclusive validity interval for the assignment.
Returns:
- Timestamp of the role assignment
+ UNIX timestamp of the role assignment.
Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- INVALID_ROLE: Invalid role identifier
- INVALID_ROLE_ADDRESS: Invalid account role address
+ UNAUTHORIZED: Caller is not the arranger.
+ DEFAULTED: Asset is defaulted.
+ INVALID_ROLE: Role identifier is not supported.
+ INVALID_ROLE_ADDRESS: Address is invalid for the requested role.
"""
- self.assert_caller_is_arranger()
- self.assert_is_not_asset_defaulted()
+ self._assert_caller_is_arranger()
+ self._assert_is_not_contract_defaulted()
self._assert_valid_role(role_id.as_uint64())
- self._upsert_role(role_id.as_uint64(), role_address, config)
+ self._set_role(role_id.as_uint64(), role_address, validity)
return Global.latest_timestamp
@arc4.abimethod
def rbac_revoke_role(self, *, role_id: arc4.UInt8, role_address: Account) -> UInt64:
"""
- Revoke a role from an address
+ Revoke a role from an address.
Args:
- role_id: Role Identifier
- role_address: Account Role Address
+ role_id: Role identifier.
+ role_address: Account role address.
Returns:
- Timestamp of the role revocation
+ UNIX timestamp of the role revocation.
Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- INVALID_ROLE: Invalid role identifier
- INVALID_ROLE_ADDRESS: Invalid account role address
+ UNAUTHORIZED: Caller is not the arranger.
+ DEFAULTED: Asset is defaulted.
+ INVALID_ROLE: Role identifier is not supported.
+ INVALID_ROLE_ADDRESS: Address is not currently assigned to that role.
"""
- self.assert_caller_is_arranger()
- self.assert_is_not_asset_defaulted()
+ self._assert_caller_is_arranger()
+ self._assert_is_not_contract_defaulted()
self._assert_valid_role(role_id.as_uint64())
self._delete_role(role_id.as_uint64(), role_address)
return Global.latest_timestamp
- @arc4.abimethod # TODO: Update specs and add test
- def rbac_gov_asset_suspension(self, *, suspended: bool) -> UInt64:
+ @arc4.abimethod
+ def rbac_contract_suspension(self, *, suspended: bool) -> UInt64:
"""
- Set asset suspension status
+ Set the asset-wide suspension status.
Args:
- suspended: Suspension status
+ suspended: Suspension status to apply.
Returns:
- Timestamp of the set asset suspension status
+ UNIX timestamp of the suspension update.
+
+ Raises:
+ UNAUTHORIZED: Caller is not an active authority.
+ """
+
+ self._assert_caller_is_authority()
+ self.contract_suspended = suspended
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def rbac_contract_default(self, *, defaulted: bool) -> UInt64:
+ """
+ Set D-ASA default status
+
+ Args:
+ defaulted: Default status
Raises:
UNAUTHORIZED: Not authorized
"""
- self.assert_caller_is_authority()
- self.asset_suspended = suspended
+ self._assert_caller_is_trustee()
+ self.defaulted = defaulted
return Global.latest_timestamp
@arc4.abimethod(readonly=True)
def rbac_get_arranger(self) -> Account:
"""
- Get Arranger address
+ Get the arranger address.
Returns:
- Arranger address
+ Current arranger address.
+
+ Raises:
+ None: This method does not raise contract-specific errors.
"""
return self.arranger.value
@@ -261,67 +305,75 @@ def rbac_get_address_roles(
self, address: Account
) -> tuple[bool, bool, bool, bool, bool]:
"""
- Non-normative - Get roles assigned to an address
+ Non-normative helper to get the active roles assigned to an address.
Args:
- address: Address to get roles for
+ address: Address to query.
Returns:
- Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)
+ Roles mask in the order: account manager, primary dealer, trustee,
+ authority, observer.
+
+ Raises:
+ None: This method does not raise contract-specific errors.
"""
return (
self._role_is_active(self.account_manager, address),
self._role_is_active(self.primary_dealer, address),
self._role_is_active(self.trustee, address),
self._role_is_active(self.authority, address),
- self._role_is_active(self.interest_oracle, address),
+ self._role_is_active(self.observer, address),
)
@arc4.abimethod(readonly=True)
- def rbac_get_role_config(
+ def rbac_get_role_validity(
self, *, role_id: arc4.UInt8, role_address: Account
- ) -> typ.RoleConfig:
+ ) -> typ.RoleValidity:
"""
- Get role configuration
+ Get the stored validity interval for a role assignment.
Args:
- role_id: Role Identifier
- role_address: Account Role Address
+ role_id: Role identifier.
+ role_address: Account role address.
Returns:
- Role configuration
+ Stored role validity interval.
+
+ Raises:
+ INVALID_ROLE: Role identifier is not supported.
+ INVALID_ROLE_ADDRESS: Address is not assigned to that role.
"""
role = role_id.as_uint64()
self._assert_valid_role(role)
match role:
- case UInt64(cst.ROLE_ARRANGER):
- return typ.RoleConfig(
+ case UInt64(enums.ROLE_ARRANGER):
+ return typ.RoleValidity(
role_validity_start=UInt64(0), role_validity_end=UInt64(0)
)
- case UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ case UInt64(enums.ROLE_ACCOUNT_MANAGER):
assert self._has_role(
self.account_manager, role_address
), err.INVALID_ROLE_ADDRESS
return self.account_manager[role_address]
- case UInt64(cst.ROLE_PRIMARY_DEALER):
+ case UInt64(enums.ROLE_PRIMARY_DEALER):
assert self._has_role(
self.primary_dealer, role_address
), err.INVALID_ROLE_ADDRESS
return self.primary_dealer[role_address]
- case UInt64(cst.ROLE_TRUSTEE):
+ case UInt64(enums.ROLE_TRUSTEE):
assert self._has_role(
self.trustee, role_address
), err.INVALID_ROLE_ADDRESS
return self.trustee[role_address]
- case UInt64(cst.ROLE_AUTHORITY):
+ case UInt64(enums.ROLE_AUTHORITY):
assert self._has_role(
self.authority, role_address
), err.INVALID_ROLE_ADDRESS
return self.authority[role_address]
- case UInt64(cst.ROLE_INTEREST_ORACLE):
+ case UInt64(enums.ROLE_OBSERVER):
assert self._has_role(
- self.interest_oracle, role_address
+ self.observer, role_address
), err.INVALID_ROLE_ADDRESS
- return self.interest_oracle[role_address]
+ return self.observer[role_address]
case _:
op.err(err.INVALID_ROLE)
diff --git a/modules/transfer_agent.py b/modules/transfer_agent.py
new file mode 100644
index 00000000..a8687d79
--- /dev/null
+++ b/modules/transfer_agent.py
@@ -0,0 +1,154 @@
+from algopy import Account, Global, Txn, UInt64, arc4
+
+from smart_contracts import errors as err
+
+from .accounting import AccountingModule
+
+
+class TransferAgent(AccountingModule):
+ """Provide primary distribution and secondary transfer mechanics."""
+
+ def _assert_transfer_is_open(self) -> None:
+ """Require transfers to happen within the configured secondary market window."""
+ if self.transfer_opening_date:
+ assert (
+ self.transfer_opening_date <= Global.latest_timestamp
+ ), err.CLOSED_TRANSFER
+ if self.transfer_closure_date:
+ assert (
+ Global.latest_timestamp < self.transfer_closure_date
+ ), err.CLOSED_TRANSFER
+
+ @arc4.abimethod
+ def transfer_set_schedule(
+ self, *, open_date: UInt64, closure_date: UInt64
+ ) -> UInt64:
+ """
+ Configure the secondary-market transfer window.
+
+ Args:
+ open_date: Inclusive UNIX timestamp at which transfers may start.
+ closure_date: Exclusive UNIX timestamp at which transfers stop.
+
+ Returns:
+ UNIX timestamp of the schedule update.
+
+ Raises:
+ UNAUTHORIZED: Caller is not the arranger.
+ INVALID_SORTING: The opening date is not earlier than the closure date.
+ """
+ self._assert_caller_is_arranger()
+ assert open_date < closure_date, err.INVALID_SORTING
+
+ self.transfer_opening_date = open_date
+ self.transfer_closure_date = closure_date
+ return Global.latest_timestamp
+
+ @arc4.abimethod
+ def primary_distribution(
+ self,
+ *,
+ holding_address: Account,
+ units: UInt64,
+ ) -> UInt64:
+ """
+ Reserve units for a holder before the initial exchange activates issuance.
+
+ Args:
+ holding_address: Account receiving the reserved units.
+ units: Number of units to reserve.
+
+ Returns:
+ Remaining undistributed unit balance.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ UNAUTHORIZED: Caller is not an active primary dealer.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset or account operations are suspended.
+ PRIMARY_DISTRIBUTION_CLOSED: Issuance is no longer accepting allocations.
+ INVALID_HOLDING_ADDRESS: Holding address has no opened account.
+ ZERO_UNITS: Requested distribution amount is zero.
+ OVER_DISTRIBUTION: Requested units exceed the remaining supply.
+ """
+ self._assert_configured()
+ self._assert_caller_is_primary_dealer()
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+ assert self._status_is_pending_ied(), err.PRIMARY_DISTRIBUTION_CLOSED
+ self._assert_valid_holding_address(holding_address)
+ self._assert_is_not_account_suspended(holding_address)
+ assert units > UInt64(0), err.ZERO_UNITS
+ assert (
+ self.reserved_units_total + units <= self.total_units
+ ), err.OVER_DISTRIBUTION
+ if self.initial_exchange_date:
+ assert (
+ Global.latest_timestamp <= self.initial_exchange_date
+ ), err.PRIMARY_DISTRIBUTION_CLOSED
+
+ self._credit_reserved_units(holding_address, units)
+ self.reserved_units_total += units
+ return self.total_units - self.reserved_units_total
+
+ @arc4.abimethod
+ def transfer(
+ self,
+ *,
+ sender_holding_address: Account,
+ receiver_holding_address: Account,
+ units: UInt64,
+ ) -> UInt64:
+ """
+ Transfer active units after settling both counterparties to the current cursor.
+
+ Returns the number of units moved. The ACTUS kernel no longer persists a
+ nominal per-unit value on-chain, so transfer results are unit-based.
+
+ Args:
+ sender_holding_address: Account debited for the transfer.
+ receiver_holding_address: Account credited for the transfer.
+ units: Number of active units to move.
+
+ Returns:
+ Number of units transferred.
+
+ Raises:
+ NOT_CONFIGURED: Contract terms and schedule are not fully configured.
+ DEFAULTED: Asset is defaulted.
+ SUSPENDED: Asset or account operations are suspended.
+ PENDING_IED: Initial exchange has not executed yet.
+ CLOSED_TRANSFER: Transfer window is closed.
+ UNAUTHORIZED: Caller is not the sender holding address.
+ INVALID_HOLDING_ADDRESS: Sender or receiver account does not exist.
+ SELF_TRANSFER: Sender and receiver are the same address.
+ NULL_TRANSFER: Requested transfer amount is zero.
+ OVER_TRANSFER: Sender does not hold enough active units.
+ PENDING_ACTUS_EVENT: A due ACTUS event must be processed before transfer.
+ """
+ self._assert_configured()
+ self._assert_is_not_contract_defaulted()
+ self._assert_is_not_contract_suspended()
+ self._assert_initial_exchange_executed()
+ self._assert_transfer_is_open()
+
+ assert Txn.sender == sender_holding_address, err.UNAUTHORIZED
+ self._assert_valid_holding_address(sender_holding_address)
+ self._assert_valid_holding_address(receiver_holding_address)
+ self._assert_is_not_account_suspended(sender_holding_address)
+ self._assert_is_not_account_suspended(receiver_holding_address)
+ assert sender_holding_address != receiver_holding_address, err.SELF_TRANSFER
+ assert units > UInt64(0), err.NULL_TRANSFER
+ assert units <= self.account[sender_holding_address].units, err.OVER_TRANSFER
+
+ self._assert_no_due_event_pending()
+ self._ensure_units_activated(sender_holding_address)
+ self._ensure_units_activated(receiver_holding_address)
+ self._settle_position(sender_holding_address)
+ self._settle_position(receiver_holding_address)
+ self._apply_transfer(
+ sender_holding_address,
+ receiver_holding_address,
+ units,
+ )
+ return units
diff --git a/modules/transfer_agent/__init__.py b/modules/transfer_agent/__init__.py
deleted file mode 100644
index 7158d668..00000000
--- a/modules/transfer_agent/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from .common import TransferAgentCommonMixin
-from .coupon import CouponTransferAgentMixin
-from .no_coupon import NoCouponTransferAgentMixin
-
-__all__ = [
- "CouponTransferAgentMixin",
- "NoCouponTransferAgentMixin",
- "TransferAgentCommonMixin",
-]
diff --git a/modules/transfer_agent/common.py b/modules/transfer_agent/common.py
deleted file mode 100644
index 77988c53..00000000
--- a/modules/transfer_agent/common.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from algopy import Account, UInt64, op
-
-from modules.core_financial.common import (
- CoreFinancialCommonMixin,
-)
-from smart_contracts import errors as err
-
-
-class TransferAgentCommonMixin(CoreFinancialCommonMixin):
- """Ownership transfer helpers shared across transfer-agent variants."""
-
- # Hook defaults, implemented by core cashflow mixins.
- def core_prepare_transfer_no_coupon(
- self, _sender_holding_address: Account, _units: UInt64
- ) -> UInt64:
- op.err(err.INVALID_MIXIN_COMPOSITION)
-
- def core_prepare_transfer_with_coupon(
- self, _sender_holding_address: Account, _units: UInt64
- ) -> UInt64:
- op.err(err.INVALID_MIXIN_COMPOSITION)
diff --git a/modules/transfer_agent/coupon.py b/modules/transfer_agent/coupon.py
deleted file mode 100644
index e0052faa..00000000
--- a/modules/transfer_agent/coupon.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from algopy import Account, UInt64, arc4
-
-from .common import TransferAgentCommonMixin
-
-
-class CouponTransferAgentMixin(TransferAgentCommonMixin):
- """Transfers ownership for products with coupon payment ordering constraints."""
-
- @arc4.abimethod
- def asset_transfer(
- self,
- *,
- sender_holding_address: Account,
- receiver_holding_address: Account,
- units: UInt64,
- ) -> UInt64:
- """
- Transfer D-ASA units between accounts
-
- Args:
- sender_holding_address: Sender Account Holding Address
- receiver_holding_address: Receiver Account Holding Address
- units: Amount of D-ASA units to transfer
-
- Returns:
- Transferred actualized value in denomination asset
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- SECONDARY_MARKET_CLOSED: Secondary market is closed
- SELF_TRANSFER: Sender and receiver must be different
- NULL_TRANSFER: Transfer units must be greater than zero
- OVER_TRANSFER: Insufficient sender units to transfer
- NON_FUNGIBLE_UNITS: Sender and receiver units are not fungible
- PENDING_COUPON_PAYMENT: Pending due coupon payment
- """
- self.assert_asset_transfer_preconditions(
- sender_holding_address,
- receiver_holding_address,
- units,
- )
-
- # Transferred units value (must be computed before the transfer)
- sender_unit_value = self.account[sender_holding_address].unit_value
- accrued_interest = self.core_prepare_transfer_with_coupon(
- sender_holding_address, units
- )
-
- self.transfer_units(sender_holding_address, receiver_holding_address, units)
- return units * sender_unit_value + accrued_interest
diff --git a/modules/transfer_agent/no_coupon.py b/modules/transfer_agent/no_coupon.py
deleted file mode 100644
index 8b7213c7..00000000
--- a/modules/transfer_agent/no_coupon.py
+++ /dev/null
@@ -1,52 +0,0 @@
-from algopy import Account, UInt64, arc4
-
-from .common import TransferAgentCommonMixin
-
-
-class NoCouponTransferAgentMixin(TransferAgentCommonMixin):
- """Transfers ownership for products without coupon gating."""
-
- @arc4.abimethod
- def asset_transfer(
- self,
- *,
- sender_holding_address: Account,
- receiver_holding_address: Account,
- units: UInt64,
- ) -> UInt64:
- """
- Transfer D-ASA units between accounts
-
- Args:
- sender_holding_address: Sender Account Holding Address
- receiver_holding_address: Receiver Account Holding Address
- units: Amount of D-ASA units to transfer
-
- Returns:
- Transferred actualized value in denomination asset
-
- Raises:
- UNAUTHORIZED: Not authorized
- DEFAULTED: Defaulted
- SUSPENDED: Suspended operations
- INVALID_HOLDING_ADDRESS: Invalid account holding address
- SECONDARY_MARKET_CLOSED: Secondary market is closed
- SELF_TRANSFER: Sender and receiver must be different
- NULL_TRANSFER: Transfer units must be greater than zero
- OVER_TRANSFER: Insufficient sender units to transfer
- NON_FUNGIBLE_UNITS: Sender and receiver units are not fungible
- """
- self.assert_asset_transfer_preconditions(
- sender_holding_address,
- receiver_holding_address,
- units,
- )
-
- # Transferred units value (must be computed before the transfer)
- sender_unit_value = self.account[sender_holding_address].unit_value
- accrued_interest = self.core_prepare_transfer_no_coupon(
- sender_holding_address, units
- )
-
- self.transfer_units(sender_holding_address, receiver_holding_address, units)
- return units * sender_unit_value + accrued_interest
diff --git a/poetry.lock b/poetry.lock
index 97f2ea4f..c45e8287 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand.
[[package]]
name = "aiohappyeyeballs"
@@ -205,7 +205,7 @@ version = "3.4.0"
description = "API for writing Algorand Python Smart contracts"
optional = false
python-versions = "<4,>=3.12.0"
-groups = ["main"]
+groups = ["dev"]
files = [
{file = "algorand_python-3.4.0-py3-none-any.whl", hash = "sha256:5cede1c1b2bc7fae237fb3ba251f6a6a919d39de7b8de1f817973d45ced5bdf8"},
]
@@ -216,7 +216,7 @@ version = "4.12.1"
description = "High-level concurrency and networking framework on top of asyncio or Trio"
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
{file = "anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c"},
{file = "anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703"},
@@ -228,53 +228,209 @@ idna = ">=2.8"
[package.extras]
trio = ["trio (>=0.31.0) ; python_version < \"3.10\"", "trio (>=0.32.0) ; python_version >= \"3.10\""]
+[[package]]
+name = "appnope"
+version = "0.1.4"
+description = "Disable App Nap on macOS >= 10.9"
+optional = false
+python-versions = ">=3.6"
+groups = ["notebooks"]
+markers = "platform_system == \"Darwin\""
+files = [
+ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"},
+ {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"},
+]
+
+[[package]]
+name = "argon2-cffi"
+version = "25.1.0"
+description = "Argon2 for Python"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741"},
+ {file = "argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1"},
+]
+
+[package.dependencies]
+argon2-cffi-bindings = "*"
+
+[[package]]
+name = "argon2-cffi-bindings"
+version = "25.1.0"
+description = "Low-level CFFI bindings for Argon2"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6"},
+ {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98"},
+ {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94"},
+ {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e"},
+ {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d"},
+ {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584"},
+ {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690"},
+ {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520"},
+ {file = "argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d"},
+]
+
+[package.dependencies]
+cffi = [
+ {version = ">=1.0.1", markers = "python_version < \"3.14\""},
+ {version = ">=2.0.0b1", markers = "python_version >= \"3.14\""},
+]
+
+[[package]]
+name = "arrow"
+version = "1.4.0"
+description = "Better dates & times for Python"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205"},
+ {file = "arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7"},
+]
+
+[package.dependencies]
+python-dateutil = ">=2.7.0"
+tzdata = {version = "*", markers = "python_version >= \"3.9\""}
+
+[package.extras]
+doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"]
+test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2025.2)", "simplejson (==3.*)"]
+
+[[package]]
+name = "asttokens"
+version = "3.0.1"
+description = "Annotate AST trees with source code positions"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a"},
+ {file = "asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7"},
+]
+
+[package.extras]
+astroid = ["astroid (>=2,<5)"]
+test = ["astroid (>=2,<5)", "pytest (<9.0)", "pytest-cov", "pytest-xdist"]
+
+[[package]]
+name = "async-lru"
+version = "2.2.0"
+description = "Simple LRU cache for asyncio"
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "async_lru-2.2.0-py3-none-any.whl", hash = "sha256:e2c1cf731eba202b59c5feedaef14ffd9d02ad0037fcda64938699f2c380eafe"},
+ {file = "async_lru-2.2.0.tar.gz", hash = "sha256:80abae2a237dbc6c60861d621619af39f0d920aea306de34cb992c879e01370c"},
+]
+
[[package]]
name = "attrs"
version = "25.4.0"
description = "Classes Without Boilerplate"
optional = false
python-versions = ">=3.9"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
{file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"},
{file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"},
]
+[[package]]
+name = "babel"
+version = "2.18.0"
+description = "Internationalization utilities"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"},
+ {file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"},
+]
+
+[package.extras]
+dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.14.3"
+description = "Screen-scraping library"
+optional = false
+python-versions = ">=3.7.0"
+groups = ["notebooks"]
+files = [
+ {file = "beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb"},
+ {file = "beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86"},
+]
+
+[package.dependencies]
+soupsieve = ">=1.6.1"
+typing-extensions = ">=4.0.0"
+
+[package.extras]
+cchardet = ["cchardet"]
+chardet = ["chardet"]
+charset-normalizer = ["charset-normalizer"]
+html5lib = ["html5lib"]
+lxml = ["lxml"]
+
[[package]]
name = "black"
-version = "26.1.0"
+version = "26.3.1"
description = "The uncompromising code formatter."
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "black-26.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ca699710dece84e3ebf6e92ee15f5b8f72870ef984bf944a57a777a48357c168"},
- {file = "black-26.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e8e75dabb6eb83d064b0db46392b25cabb6e784ea624219736e8985a6b3675d"},
- {file = "black-26.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb07665d9a907a1a645ee41a0df8a25ffac8ad9c26cdb557b7b88eeeeec934e0"},
- {file = "black-26.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:7ed300200918147c963c87700ccf9966dceaefbbb7277450a8d646fc5646bf24"},
- {file = "black-26.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:c5b7713daea9bf943f79f8c3b46f361cc5229e0e604dcef6a8bb6d1c37d9df89"},
- {file = "black-26.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3cee1487a9e4c640dc7467aaa543d6c0097c391dc8ac74eb313f2fbf9d7a7cb5"},
- {file = "black-26.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d62d14ca31c92adf561ebb2e5f2741bf8dea28aef6deb400d49cca011d186c68"},
- {file = "black-26.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb1dafbbaa3b1ee8b4550a84425aac8874e5f390200f5502cf3aee4a2acb2f14"},
- {file = "black-26.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:101540cb2a77c680f4f80e628ae98bd2bd8812fb9d72ade4f8995c5ff019e82c"},
- {file = "black-26.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:6f3977a16e347f1b115662be07daa93137259c711e526402aa444d7a88fdc9d4"},
- {file = "black-26.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6eeca41e70b5f5c84f2f913af857cf2ce17410847e1d54642e658e078da6544f"},
- {file = "black-26.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd39eef053e58e60204f2cdf059e2442e2eb08f15989eefe259870f89614c8b6"},
- {file = "black-26.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9459ad0d6cd483eacad4c6566b0f8e42af5e8b583cee917d90ffaa3778420a0a"},
- {file = "black-26.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a19915ec61f3a8746e8b10adbac4a577c6ba9851fa4a9e9fbfbcf319887a5791"},
- {file = "black-26.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:643d27fb5facc167c0b1b59d0315f2674a6e950341aed0fc05cf307d22bf4954"},
- {file = "black-26.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ba1d768fbfb6930fc93b0ecc32a43d8861ded16f47a40f14afa9bb04ab93d304"},
- {file = "black-26.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2b807c240b64609cb0e80d2200a35b23c7df82259f80bef1b2c96eb422b4aac9"},
- {file = "black-26.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1de0f7d01cc894066a1153b738145b194414cc6eeaad8ef4397ac9abacf40f6b"},
- {file = "black-26.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:91a68ae46bf07868963671e4d05611b179c2313301bd756a89ad4e3b3db2325b"},
- {file = "black-26.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:be5e2fe860b9bd9edbf676d5b60a9282994c03fbbd40fe8f5e75d194f96064ca"},
- {file = "black-26.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9dc8c71656a79ca49b8d3e2ce8103210c9481c57798b48deeb3a8bb02db5f115"},
- {file = "black-26.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b22b3810451abe359a964cc88121d57f7bce482b53a066de0f1584988ca36e79"},
- {file = "black-26.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:53c62883b3f999f14e5d30b5a79bd437236658ad45b2f853906c7cbe79de00af"},
- {file = "black-26.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:f016baaadc423dc960cdddf9acae679e71ee02c4c341f78f3179d7e4819c095f"},
- {file = "black-26.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:66912475200b67ef5a0ab665011964bf924745103f51977a78b4fb92a9fc1bf0"},
- {file = "black-26.1.0-py3-none-any.whl", hash = "sha256:1054e8e47ebd686e078c0bb0eaf31e6ce69c966058d122f2c0c950311f9f3ede"},
- {file = "black-26.1.0.tar.gz", hash = "sha256:d294ac3340eef9c9eb5d29288e96dc719ff269a88e27b396340459dd85da4c58"},
+ {file = "black-26.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:86a8b5035fce64f5dcd1b794cf8ec4d31fe458cf6ce3986a30deb434df82a1d2"},
+ {file = "black-26.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5602bdb96d52d2d0672f24f6ffe5218795736dd34807fd0fd55ccd6bf206168b"},
+ {file = "black-26.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c54a4a82e291a1fee5137371ab488866b7c86a3305af4026bdd4dc78642e1ac"},
+ {file = "black-26.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:6e131579c243c98f35bce64a7e08e87fb2d610544754675d4a0e73a070a5aa3a"},
+ {file = "black-26.3.1-cp310-cp310-win_arm64.whl", hash = "sha256:5ed0ca58586c8d9a487352a96b15272b7fa55d139fc8496b519e78023a8dab0a"},
+ {file = "black-26.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:28ef38aee69e4b12fda8dba75e21f9b4f979b490c8ac0baa7cb505369ac9e1ff"},
+ {file = "black-26.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf9bf162ed91a26f1adba8efda0b573bc6924ec1408a52cc6f82cb73ec2b142c"},
+ {file = "black-26.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:474c27574d6d7037c1bc875a81d9be0a9a4f9ee95e62800dab3cfaadbf75acd5"},
+ {file = "black-26.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e9d0d86df21f2e1677cc4bd090cd0e446278bcbbe49bf3659c308c3e402843e"},
+ {file = "black-26.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:9a5e9f45e5d5e1c5b5c29b3bd4265dcc90e8b92cf4534520896ed77f791f4da5"},
+ {file = "black-26.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e6f89631eb88a7302d416594a32faeee9fb8fb848290da9d0a5f2903519fc1"},
+ {file = "black-26.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cd2012d35b47d589cb8a16faf8a32ef7a336f56356babd9fcf70939ad1897f"},
+ {file = "black-26.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f76ff19ec5297dd8e66eb64deda23631e642c9393ab592826fd4bdc97a4bce7"},
+ {file = "black-26.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ddb113db38838eb9f043623ba274cfaf7d51d5b0c22ecb30afe58b1bb8322983"},
+ {file = "black-26.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:dfdd51fc3e64ea4f35873d1b3fb25326773d55d2329ff8449139ebaad7357efb"},
+ {file = "black-26.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:855822d90f884905362f602880ed8b5df1b7e3ee7d0db2502d4388a954cc8c54"},
+ {file = "black-26.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8a33d657f3276328ce00e4d37fe70361e1ec7614da5d7b6e78de5426cb56332f"},
+ {file = "black-26.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1cd08e99d2f9317292a311dfe578fd2a24b15dbce97792f9c4d752275c1fa56"},
+ {file = "black-26.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7e72339f841b5a237ff14f7d3880ddd0fc7f98a1199e8c4327f9a4f478c1839"},
+ {file = "black-26.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc622538b430aa4c8c853f7f63bc582b3b8030fd8c80b70fb5fa5b834e575c2"},
+ {file = "black-26.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2d6bfaf7fd0993b420bed691f20f9492d53ce9a2bcccea4b797d34e947318a78"},
+ {file = "black-26.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f89f2ab047c76a9c03f78d0d66ca519e389519902fa27e7a91117ef7611c0568"},
+ {file = "black-26.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b07fc0dab849d24a80a29cfab8d8a19187d1c4685d8a5e6385a5ce323c1f015f"},
+ {file = "black-26.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0126ae5b7c09957da2bdbd91a9ba1207453feada9e9fe51992848658c6c8e01c"},
+ {file = "black-26.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:92c0ec1f2cc149551a2b7b47efc32c866406b6891b0ee4625e95967c8f4acfb1"},
+ {file = "black-26.3.1-py3-none-any.whl", hash = "sha256:2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b"},
+ {file = "black-26.3.1.tar.gz", hash = "sha256:2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07"},
]
[package.dependencies]
@@ -284,13 +440,32 @@ mypy-extensions = ">=0.4.3"
packaging = ">=22.0"
pathspec = ">=1.0.0"
platformdirs = ">=2"
-pytokens = ">=0.3.0"
+pytokens = ">=0.4.0,<0.5.0"
[package.extras]
colorama = ["colorama (>=0.4.3)"]
d = ["aiohttp (>=3.10)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
-uvloop = ["uvloop (>=0.15.2)"]
+uvloop = ["uvloop (>=0.15.2) ; sys_platform != \"win32\"", "winloop (>=0.5.0) ; sys_platform == \"win32\""]
+
+[[package]]
+name = "bleach"
+version = "6.3.0"
+description = "An easy safelist-based HTML-sanitizing tool."
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"},
+ {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"},
+]
+
+[package.dependencies]
+tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""}
+webencodings = "*"
+
+[package.extras]
+css = ["tinycss2 (>=1.1.0,<1.5)"]
[[package]]
name = "boolean-py"
@@ -360,14 +535,14 @@ ujson = ["ujson (>=5.10.0)"]
[[package]]
name = "certifi"
-version = "2026.1.4"
+version = "2026.2.25"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.7"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
- {file = "certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c"},
- {file = "certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"},
+ {file = "certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa"},
+ {file = "certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7"},
]
[[package]]
@@ -376,8 +551,7 @@ version = "2.0.0"
description = "Foreign Function Interface for Python calling C code."
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev"]
-markers = "platform_python_implementation != \"PyPy\""
+groups = ["main", "dev", "notebooks"]
files = [
{file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"},
{file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"},
@@ -464,6 +638,7 @@ files = [
{file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"},
{file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"},
]
+markers = {main = "platform_python_implementation != \"PyPy\"", dev = "platform_python_implementation != \"PyPy\""}
[package.dependencies]
pycparser = {version = "*", markers = "implementation_name != \"PyPy\""}
@@ -482,125 +657,125 @@ files = [
[[package]]
name = "charset-normalizer"
-version = "3.4.4"
+version = "3.4.5"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
- {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"},
- {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"},
- {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"},
- {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"},
- {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"},
- {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"},
- {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"},
- {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"},
- {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"},
- {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-win32.whl", hash = "sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05"},
+ {file = "charset_normalizer-3.4.5-cp310-cp310-win_arm64.whl", hash = "sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-win32.whl", hash = "sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a"},
+ {file = "charset_normalizer-3.4.5-cp311-cp311-win_arm64.whl", hash = "sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-win32.whl", hash = "sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636"},
+ {file = "charset_normalizer-3.4.5-cp312-cp312-win_arm64.whl", hash = "sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-win32.whl", hash = "sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-win_amd64.whl", hash = "sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7"},
+ {file = "charset_normalizer-3.4.5-cp313-cp313-win_arm64.whl", hash = "sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-win32.whl", hash = "sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-win_amd64.whl", hash = "sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa"},
+ {file = "charset_normalizer-3.4.5-cp314-cp314-win_arm64.whl", hash = "sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-win32.whl", hash = "sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c"},
+ {file = "charset_normalizer-3.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-win32.whl", hash = "sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc"},
+ {file = "charset_normalizer-3.4.5-cp39-cp39-win_arm64.whl", hash = "sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4"},
+ {file = "charset_normalizer-3.4.5-py3-none-any.whl", hash = "sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0"},
+ {file = "charset_normalizer-3.4.5.tar.gz", hash = "sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644"},
]
[[package]]
@@ -624,12 +799,27 @@ version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
-groups = ["dev"]
-markers = "sys_platform == \"win32\" or platform_system == \"Windows\""
+groups = ["dev", "notebooks"]
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
+markers = {dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", notebooks = "sys_platform == \"win32\""}
+
+[[package]]
+name = "comm"
+version = "0.2.3"
+description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"},
+ {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"},
+]
+
+[package.extras]
+test = ["pytest"]
[[package]]
name = "coverage"
@@ -775,14 +965,14 @@ xml-validation = ["lxml (>=4,<7)"]
[[package]]
name = "cyclopts"
-version = "4.5.3"
+version = "4.9.0"
description = "Intuitive, easy CLIs based on type hints."
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "cyclopts-4.5.3-py3-none-any.whl", hash = "sha256:50af3085bb15d4a6f2582dd383dad5e4ba6a0d4d4c64ee63326d881a752a6919"},
- {file = "cyclopts-4.5.3.tar.gz", hash = "sha256:35fa70971204c450d9668646a6ca372eb5fa3070fbe8dd51c5b4b31e65198f2d"},
+ {file = "cyclopts-4.9.0-py3-none-any.whl", hash = "sha256:583ea4090a040c92f9303bc0da26bca7b681c81bcea34097ace279e1acef22c1"},
+ {file = "cyclopts-4.9.0.tar.gz", hash = "sha256:f292868e4be33a3e622d8cf95d89f49222e987b1ccdbf40caf6514e19dd99a63"},
]
[package.dependencies]
@@ -800,13 +990,65 @@ toml = ["tomli (>=2.0.0) ; python_version < \"3.11\""]
trio = ["trio (>=0.10.0)"]
yaml = ["pyyaml (>=6.0.1)"]
+[[package]]
+name = "debugpy"
+version = "1.8.20"
+description = "An implementation of the Debug Adapter Protocol for Python"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "debugpy-1.8.20-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:157e96ffb7f80b3ad36d808646198c90acb46fdcfd8bb1999838f0b6f2b59c64"},
+ {file = "debugpy-1.8.20-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:c1178ae571aff42e61801a38b007af504ec8e05fde1c5c12e5a7efef21009642"},
+ {file = "debugpy-1.8.20-cp310-cp310-win32.whl", hash = "sha256:c29dd9d656c0fbd77906a6e6a82ae4881514aa3294b94c903ff99303e789b4a2"},
+ {file = "debugpy-1.8.20-cp310-cp310-win_amd64.whl", hash = "sha256:3ca85463f63b5dd0aa7aaa933d97cbc47c174896dcae8431695872969f981893"},
+ {file = "debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b"},
+ {file = "debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344"},
+ {file = "debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec"},
+ {file = "debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb"},
+ {file = "debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d"},
+ {file = "debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b"},
+ {file = "debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390"},
+ {file = "debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3"},
+ {file = "debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a"},
+ {file = "debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf"},
+ {file = "debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393"},
+ {file = "debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7"},
+ {file = "debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173"},
+ {file = "debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad"},
+ {file = "debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f"},
+ {file = "debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be"},
+ {file = "debugpy-1.8.20-cp38-cp38-macosx_15_0_x86_64.whl", hash = "sha256:b773eb026a043e4d9c76265742bc846f2f347da7e27edf7fe97716ea19d6bfc5"},
+ {file = "debugpy-1.8.20-cp38-cp38-manylinux_2_34_x86_64.whl", hash = "sha256:20d6e64ea177ab6732bffd3ce8fc6fb8879c60484ce14c3b3fe183b1761459ca"},
+ {file = "debugpy-1.8.20-cp38-cp38-win32.whl", hash = "sha256:0dfd9adb4b3c7005e9c33df430bcdd4e4ebba70be533e0066e3a34d210041b66"},
+ {file = "debugpy-1.8.20-cp38-cp38-win_amd64.whl", hash = "sha256:60f89411a6c6afb89f18e72e9091c3dfbcfe3edc1066b2043a1f80a3bbb3e11f"},
+ {file = "debugpy-1.8.20-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:bff8990f040dacb4c314864da95f7168c5a58a30a66e0eea0fb85e2586a92cd6"},
+ {file = "debugpy-1.8.20-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:70ad9ae09b98ac307b82c16c151d27ee9d68ae007a2e7843ba621b5ce65333b5"},
+ {file = "debugpy-1.8.20-cp39-cp39-win32.whl", hash = "sha256:9eeed9f953f9a23850c85d440bf51e3c56ed5d25f8560eeb29add815bd32f7ee"},
+ {file = "debugpy-1.8.20-cp39-cp39-win_amd64.whl", hash = "sha256:760813b4fff517c75bfe7923033c107104e76acfef7bda011ffea8736e9a66f8"},
+ {file = "debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7"},
+ {file = "debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33"},
+]
+
+[[package]]
+name = "decorator"
+version = "5.2.1"
+description = "Decorators for Humans"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"},
+ {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"},
+]
+
[[package]]
name = "defusedxml"
version = "0.7.1"
description = "XML bomb protection for Python stdlib modules"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
{file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
{file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
@@ -853,16 +1095,58 @@ files = [
{file = "docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968"},
]
+[[package]]
+name = "executing"
+version = "2.2.1"
+description = "Get the currently executing AST node of a frame, and other information"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"},
+ {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"},
+]
+
+[package.extras]
+tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""]
+
+[[package]]
+name = "fastjsonschema"
+version = "2.21.2"
+description = "Fastest Python implementation of JSON schema"
+optional = false
+python-versions = "*"
+groups = ["notebooks"]
+files = [
+ {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"},
+ {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"},
+]
+
+[package.extras]
+devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"]
+
[[package]]
name = "filelock"
-version = "3.24.3"
+version = "3.25.2"
description = "A platform independent file lock."
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "filelock-3.24.3-py3-none-any.whl", hash = "sha256:426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d"},
- {file = "filelock-3.24.3.tar.gz", hash = "sha256:011a5644dc937c22699943ebbfc46e969cdde3e171470a6e40b9533e5a72affa"},
+ {file = "filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70"},
+ {file = "filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694"},
+]
+
+[[package]]
+name = "fqdn"
+version = "1.5.1"
+description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers"
+optional = false
+python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4"
+groups = ["notebooks"]
+files = [
+ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"},
+ {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"},
]
[[package]]
@@ -1011,7 +1295,7 @@ version = "0.16.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
{file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"},
{file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"},
@@ -1023,7 +1307,7 @@ version = "1.0.9"
description = "A minimal low-level HTTP client."
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
{file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"},
{file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"},
@@ -1045,7 +1329,7 @@ version = "0.28.1"
description = "The next generation HTTP client."
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
{file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"},
{file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"},
@@ -1066,14 +1350,14 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "identify"
-version = "2.6.16"
+version = "2.6.17"
description = "File identification library for Python"
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "identify-2.6.16-py2.py3-none-any.whl", hash = "sha256:391ee4d77741d994189522896270b787aed8670389bfd60f326d677d64a6dfb0"},
- {file = "identify-2.6.16.tar.gz", hash = "sha256:846857203b5511bbe94d5a352a48ef2359532bc8f6727b5544077a0dcfb24980"},
+ {file = "identify-2.6.17-py2.py3-none-any.whl", hash = "sha256:be5f8412d5ed4b20f2bd41a65f920990bdccaa6a4a18a08f1eefdcd0bdd885f0"},
+ {file = "identify-2.6.17.tar.gz", hash = "sha256:f816b0b596b204c9fdf076ded172322f2723cf958d02f9c3587504834c8ff04d"},
]
[package.extras]
@@ -1085,7 +1369,7 @@ version = "3.11"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.8"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
{file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"},
{file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"},
@@ -1118,6 +1402,442 @@ files = [
{file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"},
]
+[[package]]
+name = "ipykernel"
+version = "7.2.0"
+description = "IPython Kernel for Jupyter"
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661"},
+ {file = "ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e"},
+]
+
+[package.dependencies]
+appnope = {version = ">=0.1.2", markers = "platform_system == \"Darwin\""}
+comm = ">=0.1.1"
+debugpy = ">=1.6.5"
+ipython = ">=7.23.1"
+jupyter-client = ">=8.8.0"
+jupyter-core = ">=5.1,<6.0.dev0 || >=6.1.dev0"
+matplotlib-inline = ">=0.1"
+nest-asyncio = ">=1.4"
+packaging = ">=22"
+psutil = ">=5.7"
+pyzmq = ">=25"
+tornado = ">=6.4.1"
+traitlets = ">=5.4.0"
+
+[package.extras]
+cov = ["coverage[toml]", "matplotlib", "pytest-cov", "trio"]
+docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx (<8.2.0)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"]
+pyqt5 = ["pyqt5"]
+pyside6 = ["pyside6"]
+test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<10)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "ipython"
+version = "9.11.0"
+description = "IPython: Productive Interactive Computing"
+optional = false
+python-versions = ">=3.12"
+groups = ["notebooks"]
+files = [
+ {file = "ipython-9.11.0-py3-none-any.whl", hash = "sha256:6922d5bcf944c6e525a76a0a304451b60a2b6f875e86656d8bc2dfda5d710e19"},
+ {file = "ipython-9.11.0.tar.gz", hash = "sha256:2a94bc4406b22ecc7e4cb95b98450f3ea493a76bec8896cda11b78d7752a6667"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.4.4", markers = "sys_platform == \"win32\""}
+decorator = ">=5.1.0"
+ipython-pygments-lexers = ">=1.0.0"
+jedi = ">=0.18.2"
+matplotlib-inline = ">=0.1.6"
+pexpect = {version = ">4.6", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""}
+prompt_toolkit = ">=3.0.41,<3.1.0"
+pygments = ">=2.14.0"
+stack_data = ">=0.6.0"
+traitlets = ">=5.13.0"
+
+[package.extras]
+all = ["argcomplete (>=3.0)", "ipython[doc,matplotlib,terminal,test,test-extra]", "types-decorator"]
+black = ["black"]
+doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[matplotlib,test]", "setuptools (>=80.0)", "sphinx (>=8.0)", "sphinx-rtd-theme (>=0.1.8)", "sphinx_toml (==0.0.4)", "typing_extensions"]
+matplotlib = ["matplotlib (>3.9)"]
+test = ["packaging (>=23.0.0)", "pytest (>=7.0.0)", "pytest-asyncio (>=1.0.0)", "setuptools (>=80.0)", "testpath (>=0.2)"]
+test-extra = ["curio", "ipykernel (>6.30)", "ipython[matplotlib]", "ipython[test]", "jupyter_ai", "nbclient", "nbformat", "numpy (>=2.0)", "pandas (>2.1)", "trio (>=0.22.0)"]
+
+[[package]]
+name = "ipython-pygments-lexers"
+version = "1.1.1"
+description = "Defines a variety of Pygments lexers for highlighting IPython code."
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"},
+ {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"},
+]
+
+[package.dependencies]
+pygments = "*"
+
+[[package]]
+name = "isoduration"
+version = "20.11.0"
+description = "Operations with ISO 8601 durations"
+optional = false
+python-versions = ">=3.7"
+groups = ["notebooks"]
+files = [
+ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"},
+ {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"},
+]
+
+[package.dependencies]
+arrow = ">=0.15.0"
+
+[[package]]
+name = "jedi"
+version = "0.19.2"
+description = "An autocompletion tool for Python that can be used for text editors."
+optional = false
+python-versions = ">=3.6"
+groups = ["notebooks"]
+files = [
+ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"},
+ {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"},
+]
+
+[package.dependencies]
+parso = ">=0.8.4,<0.9.0"
+
+[package.extras]
+docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
+testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"]
+
+[[package]]
+name = "jinja2"
+version = "3.1.6"
+description = "A very fast and expressive template engine."
+optional = false
+python-versions = ">=3.7"
+groups = ["notebooks"]
+files = [
+ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
+ {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=2.0"
+
+[package.extras]
+i18n = ["Babel (>=2.7)"]
+
+[[package]]
+name = "json5"
+version = "0.13.0"
+description = "A Python implementation of the JSON5 data format."
+optional = false
+python-versions = ">=3.8.0"
+groups = ["notebooks"]
+files = [
+ {file = "json5-0.13.0-py3-none-any.whl", hash = "sha256:9a08e1dd65f6a4d4c6fa82d216cf2477349ec2346a38fd70cc11d2557499fbcc"},
+ {file = "json5-0.13.0.tar.gz", hash = "sha256:b1edf8d487721c0bf64d83c28e91280781f6e21f4a797d3261c7c828d4c165bf"},
+]
+
+[[package]]
+name = "jsonpointer"
+version = "3.0.0"
+description = "Identify specific nodes in a JSON document (RFC 6901)"
+optional = false
+python-versions = ">=3.7"
+groups = ["notebooks"]
+files = [
+ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"},
+ {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"},
+]
+
+[[package]]
+name = "jsonschema"
+version = "4.26.0"
+description = "An implementation of JSON Schema validation for Python"
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"},
+ {file = "jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}
+jsonschema-specifications = ">=2023.3.6"
+referencing = ">=0.28.4"
+rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""}
+rfc3987-syntax = {version = ">=1.1.0", optional = true, markers = "extra == \"format-nongpl\""}
+rpds-py = ">=0.25.0"
+uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
+webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""}
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2025.9.1"
+description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"},
+ {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"},
+]
+
+[package.dependencies]
+referencing = ">=0.31.0"
+
+[[package]]
+name = "jupyter-client"
+version = "8.8.0"
+description = "Jupyter protocol implementation and client libraries"
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a"},
+ {file = "jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e"},
+]
+
+[package.dependencies]
+jupyter-core = ">=5.1"
+python-dateutil = ">=2.8.2"
+pyzmq = ">=25.0"
+tornado = ">=6.4.1"
+traitlets = ">=5.3"
+
+[package.extras]
+docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+orjson = ["orjson"]
+test = ["anyio", "coverage", "ipykernel (>=6.14)", "msgpack", "mypy ; platform_python_implementation != \"PyPy\"", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.6.2)", "pytest-timeout"]
+
+[[package]]
+name = "jupyter-core"
+version = "5.9.1"
+description = "Jupyter core package. A base package on which Jupyter projects rely."
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"},
+ {file = "jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508"},
+]
+
+[package.dependencies]
+platformdirs = ">=2.5"
+traitlets = ">=5.3"
+
+[package.extras]
+docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-spelling", "traitlets"]
+test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "jupyter-events"
+version = "0.12.0"
+description = "Jupyter Event System library"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"},
+ {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"},
+]
+
+[package.dependencies]
+jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]}
+packaging = "*"
+python-json-logger = ">=2.0.4"
+pyyaml = ">=5.3"
+referencing = "*"
+rfc3339-validator = "*"
+rfc3986-validator = ">=0.1.1"
+traitlets = ">=5.3"
+
+[package.extras]
+cli = ["click", "rich"]
+docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"]
+test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"]
+
+[[package]]
+name = "jupyter-lsp"
+version = "2.3.0"
+description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f"},
+ {file = "jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245"},
+]
+
+[package.dependencies]
+jupyter_server = ">=1.1.2"
+
+[[package]]
+name = "jupyter-server"
+version = "2.17.0"
+description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f"},
+ {file = "jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5"},
+]
+
+[package.dependencies]
+anyio = ">=3.1.0"
+argon2-cffi = ">=21.1"
+jinja2 = ">=3.0.3"
+jupyter-client = ">=7.4.4"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-events = ">=0.11.0"
+jupyter-server-terminals = ">=0.4.4"
+nbconvert = ">=6.4.4"
+nbformat = ">=5.3.0"
+packaging = ">=22.0"
+prometheus-client = ">=0.9"
+pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""}
+pyzmq = ">=24"
+send2trash = ">=1.8.2"
+terminado = ">=0.8.3"
+tornado = ">=6.2.0"
+traitlets = ">=5.6.0"
+websocket-client = ">=1.7"
+
+[package.extras]
+docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
+test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"]
+
+[[package]]
+name = "jupyter-server-terminals"
+version = "0.5.4"
+description = "A Jupyter Server Extension Providing Terminals."
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14"},
+ {file = "jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5"},
+]
+
+[package.dependencies]
+pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""}
+terminado = ">=0.8.3"
+
+[package.extras]
+docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"]
+test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"]
+
+[[package]]
+name = "jupyterlab"
+version = "4.5.6"
+description = "JupyterLab computational environment"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "jupyterlab-4.5.6-py3-none-any.whl", hash = "sha256:d6b3dac883aa4d9993348e0f8e95b24624f75099aed64eab6a4351a9cdd1e580"},
+ {file = "jupyterlab-4.5.6.tar.gz", hash = "sha256:642fe2cfe7f0f5922a8a558ba7a0d246c7bc133b708dfe43f7b3a826d163cf42"},
+]
+
+[package.dependencies]
+async-lru = ">=1.0.0"
+httpx = ">=0.25.0,<1"
+ipykernel = ">=6.5.0,<6.30.0 || >6.30.0"
+jinja2 = ">=3.0.3"
+jupyter-core = "*"
+jupyter-lsp = ">=2.0.0"
+jupyter-server = ">=2.4.0,<3"
+jupyterlab-server = ">=2.28.0,<3"
+notebook-shim = ">=0.2"
+packaging = "*"
+setuptools = ">=41.1.0"
+tornado = ">=6.2.0"
+traitlets = "*"
+
+[package.extras]
+dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.11.12)"]
+docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.2.0)", "sphinx-copybutton"]
+docs-screenshots = ["altair (==6.0.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)"]
+test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"]
+upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"]
+
+[[package]]
+name = "jupyterlab-pygments"
+version = "0.3.0"
+description = "Pygments theme using JupyterLab CSS variables"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"},
+ {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"},
+]
+
+[[package]]
+name = "jupyterlab-server"
+version = "2.28.0"
+description = "A set of server components for JupyterLab and JupyterLab like applications."
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968"},
+ {file = "jupyterlab_server-2.28.0.tar.gz", hash = "sha256:35baa81898b15f93573e2deca50d11ac0ae407ebb688299d3a5213265033712c"},
+]
+
+[package.dependencies]
+babel = ">=2.10"
+jinja2 = ">=3.0.3"
+json5 = ">=0.9.0"
+jsonschema = ">=4.18.0"
+jupyter-server = ">=1.21,<3"
+packaging = ">=21.3"
+requests = ">=2.31"
+
+[package.extras]
+docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"]
+openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"]
+test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"]
+
+[[package]]
+name = "lark"
+version = "1.3.1"
+description = "a modern parsing library"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12"},
+ {file = "lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905"},
+]
+
+[package.extras]
+atomic-cache = ["atomicwrites"]
+interegular = ["interegular (>=0.3.1,<0.4.0)"]
+nearley = ["js2py"]
+regex = ["regex"]
+
[[package]]
name = "librt"
version = "0.8.1"
@@ -1277,6 +1997,123 @@ profiling = ["gprof2dot"]
rtd = ["ipykernel", "jupyter_sphinx", "mdit-py-plugins (>=0.5.0)", "myst-parser", "pyyaml", "sphinx", "sphinx-book-theme (>=1.0,<2.0)", "sphinx-copybutton", "sphinx-design"]
testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "requests"]
+[[package]]
+name = "markupsafe"
+version = "3.0.3"
+description = "Safely add untrusted strings to HTML/XML markup."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"},
+ {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"},
+ {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"},
+ {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"},
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"},
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"},
+ {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"},
+ {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"},
+ {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"},
+ {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"},
+ {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"},
+ {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"},
+ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"},
+]
+
+[[package]]
+name = "matplotlib-inline"
+version = "0.2.1"
+description = "Inline Matplotlib backend for Jupyter"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"},
+ {file = "matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe"},
+]
+
+[package.dependencies]
+traitlets = "*"
+
+[package.extras]
+test = ["flake8", "nbdime", "nbval", "notebook", "pytest"]
+
[[package]]
name = "mdurl"
version = "0.1.2"
@@ -1289,6 +2126,18 @@ files = [
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
]
+[[package]]
+name = "mistune"
+version = "3.2.0"
+description = "A sane and fast Markdown parser with useful plugins and renderers"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1"},
+ {file = "mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a"},
+]
+
[[package]]
name = "msgpack"
version = "1.1.2"
@@ -1590,6 +2439,100 @@ files = [
{file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"},
]
+[[package]]
+name = "nbclient"
+version = "0.10.4"
+description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
+optional = false
+python-versions = ">=3.10.0"
+groups = ["notebooks"]
+files = [
+ {file = "nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440"},
+ {file = "nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9"},
+]
+
+[package.dependencies]
+jupyter-client = ">=6.1.12"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+nbformat = ">=5.1.3"
+traitlets = ">=5.4"
+
+[package.extras]
+dev = ["pre-commit"]
+docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=9.0.1,<10)", "pytest-asyncio (>=1.3.0)", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"]
+test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=9.0.1,<10)", "pytest-asyncio (>=1.3.0)", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
+
+[[package]]
+name = "nbconvert"
+version = "7.17.0"
+description = "Convert Jupyter Notebooks (.ipynb files) to other formats."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "nbconvert-7.17.0-py3-none-any.whl", hash = "sha256:4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518"},
+ {file = "nbconvert-7.17.0.tar.gz", hash = "sha256:1b2696f1b5be12309f6c7d707c24af604b87dfaf6d950794c7b07acab96dda78"},
+]
+
+[package.dependencies]
+beautifulsoup4 = "*"
+bleach = {version = "!=5.0.0", extras = ["css"]}
+defusedxml = "*"
+jinja2 = ">=3.0"
+jupyter-core = ">=4.7"
+jupyterlab-pygments = "*"
+markupsafe = ">=2.0"
+mistune = ">=2.0.3,<4"
+nbclient = ">=0.5.0"
+nbformat = ">=5.7"
+packaging = "*"
+pandocfilters = ">=1.4.1"
+pygments = ">=2.4.1"
+traitlets = ">=5.1"
+
+[package.extras]
+all = ["flaky", "intersphinx-registry", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (>=5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"]
+docs = ["intersphinx-registry", "ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (>=5.0.2)", "sphinxcontrib-spelling"]
+qtpdf = ["pyqtwebengine (>=5.15)"]
+qtpng = ["pyqtwebengine (>=5.15)"]
+serve = ["tornado (>=6.1)"]
+test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"]
+webpdf = ["playwright"]
+
+[[package]]
+name = "nbformat"
+version = "5.10.4"
+description = "The Jupyter Notebook format"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"},
+ {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"},
+]
+
+[package.dependencies]
+fastjsonschema = ">=2.15"
+jsonschema = ">=2.6"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+traitlets = ">=5.1"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["pep440", "pre-commit", "pytest", "testpath"]
+
+[[package]]
+name = "nest-asyncio"
+version = "1.6.0"
+description = "Patch asyncio to allow nested event loops"
+optional = false
+python-versions = ">=3.5"
+groups = ["notebooks"]
+files = [
+ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"},
+ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"},
+]
+
[[package]]
name = "networkx"
version = "3.6"
@@ -1597,6 +2540,7 @@ description = "Python package for creating and manipulating graphs and networks"
optional = false
python-versions = ">=3.11"
groups = ["dev"]
+markers = "python_version >= \"3.14\""
files = [
{file = "networkx-3.6-py3-none-any.whl", hash = "sha256:cdb395b105806062473d3be36458d8f1459a4e4b98e236a66c3a48996e07684f"},
{file = "networkx-3.6.tar.gz", hash = "sha256:285276002ad1f7f7da0f7b42f004bcba70d381e936559166363707fdad3d72ad"},
@@ -1613,6 +2557,30 @@ release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.
test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"]
test-extras = ["pytest-mpl", "pytest-randomly"]
+[[package]]
+name = "networkx"
+version = "3.6.1"
+description = "Python package for creating and manipulating graphs and networks"
+optional = false
+python-versions = "!=3.14.1,>=3.11"
+groups = ["dev"]
+markers = "python_version == \"3.13\""
+files = [
+ {file = "networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762"},
+ {file = "networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509"},
+]
+
+[package.extras]
+benchmarking = ["asv", "virtualenv"]
+default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"]
+developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"]
+doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"]
+example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"]
+extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"]
+release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"]
+test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"]
+test-extras = ["pytest-mpl", "pytest-randomly"]
+
[[package]]
name = "nodeenv"
version = "1.10.0"
@@ -1625,6 +2593,24 @@ files = [
{file = "nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb"},
]
+[[package]]
+name = "notebook-shim"
+version = "0.2.4"
+description = "A shim layer for notebook traits and config"
+optional = false
+python-versions = ">=3.7"
+groups = ["notebooks"]
+files = [
+ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"},
+ {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"},
+]
+
+[package.dependencies]
+jupyter-server = ">=1.8,<3"
+
+[package.extras]
+test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"]
+
[[package]]
name = "packageurl-python"
version = "0.17.6"
@@ -1644,17 +2630,45 @@ sqlalchemy = ["sqlalchemy (>=2.0.0)"]
test = ["pytest"]
[[package]]
-name = "packaging"
-version = "24.2"
-description = "Core utilities for Python packages"
+name = "packaging"
+version = "24.2"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.8"
+groups = ["dev", "notebooks"]
+files = [
+ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
+ {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
+]
+
+[[package]]
+name = "pandocfilters"
+version = "1.5.1"
+description = "Utilities for writing pandoc filters in python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+groups = ["notebooks"]
+files = [
+ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"},
+ {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"},
+]
+
+[[package]]
+name = "parso"
+version = "0.8.6"
+description = "A Python Parser"
optional = false
-python-versions = ">=3.8"
-groups = ["dev"]
+python-versions = ">=3.6"
+groups = ["notebooks"]
files = [
- {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
- {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
+ {file = "parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff"},
+ {file = "parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd"},
]
+[package.extras]
+qa = ["flake8 (==5.0.4)", "types-setuptools (==67.2.0.1)", "zuban (==0.5.1)"]
+testing = ["docopt", "pytest"]
+
[[package]]
name = "pathspec"
version = "1.0.4"
@@ -1673,6 +2687,22 @@ optional = ["typing-extensions (>=4)"]
re2 = ["google-re2 (>=1.1)"]
tests = ["pytest (>=9)", "typing-extensions (>=4.15)"]
+[[package]]
+name = "pexpect"
+version = "4.9.0"
+description = "Pexpect allows easy control of interactive console applications."
+optional = false
+python-versions = "*"
+groups = ["notebooks"]
+markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""
+files = [
+ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
+ {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
+]
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
[[package]]
name = "pip"
version = "26.0.1"
@@ -1753,14 +2783,14 @@ testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pyte
[[package]]
name = "platformdirs"
-version = "4.9.2"
+version = "4.9.4"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.10"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
- {file = "platformdirs-4.9.2-py3-none-any.whl", hash = "sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd"},
- {file = "platformdirs-4.9.2.tar.gz", hash = "sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291"},
+ {file = "platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868"},
+ {file = "platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934"},
]
[[package]]
@@ -1798,6 +2828,38 @@ nodeenv = ">=0.11.1"
pyyaml = ">=5.1"
virtualenv = ">=20.10.0"
+[[package]]
+name = "prometheus-client"
+version = "0.24.1"
+description = "Python client for the Prometheus monitoring system."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "prometheus_client-0.24.1-py3-none-any.whl", hash = "sha256:150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055"},
+ {file = "prometheus_client-0.24.1.tar.gz", hash = "sha256:7e0ced7fbbd40f7b84962d5d2ab6f17ef88a72504dcf7c0b40737b43b2a461f9"},
+]
+
+[package.extras]
+aiohttp = ["aiohttp"]
+django = ["django"]
+twisted = ["twisted"]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.52"
+description = "Library for building powerful interactive command lines in Python"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"},
+ {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"},
+]
+
+[package.dependencies]
+wcwidth = "*"
+
[[package]]
name = "propcache"
version = "0.4.1"
@@ -1930,6 +2992,69 @@ files = [
{file = "propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d"},
]
+[[package]]
+name = "psutil"
+version = "7.2.2"
+description = "Cross-platform lib for process and system monitoring."
+optional = false
+python-versions = ">=3.6"
+groups = ["notebooks"]
+files = [
+ {file = "psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b"},
+ {file = "psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea"},
+ {file = "psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63"},
+ {file = "psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312"},
+ {file = "psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b"},
+ {file = "psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9"},
+ {file = "psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00"},
+ {file = "psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9"},
+ {file = "psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a"},
+ {file = "psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf"},
+ {file = "psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1"},
+ {file = "psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841"},
+ {file = "psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486"},
+ {file = "psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979"},
+ {file = "psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9"},
+ {file = "psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e"},
+ {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8"},
+ {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc"},
+ {file = "psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988"},
+ {file = "psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee"},
+ {file = "psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372"},
+]
+
+[package.extras]
+dev = ["abi3audit", "black", "check-manifest", "colorama ; os_name == \"nt\"", "coverage", "packaging", "psleak", "pylint", "pyperf", "pypinfo", "pyreadline3 ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-xdist", "pywin32 ; os_name == \"nt\" and implementation_name != \"pypy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "validate-pyproject[all]", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and implementation_name != \"pypy\"", "wmi ; os_name == \"nt\" and implementation_name != \"pypy\""]
+test = ["psleak", "pytest", "pytest-instafail", "pytest-xdist", "pywin32 ; os_name == \"nt\" and implementation_name != \"pypy\"", "setuptools", "wheel ; os_name == \"nt\" and implementation_name != \"pypy\"", "wmi ; os_name == \"nt\" and implementation_name != \"pypy\""]
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+optional = false
+python-versions = "*"
+groups = ["notebooks"]
+markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\" or os_name != \"nt\""
+files = [
+ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+
+[[package]]
+name = "pure-eval"
+version = "0.2.3"
+description = "Safely evaluate AST nodes without side effects"
+optional = false
+python-versions = "*"
+groups = ["notebooks"]
+files = [
+ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"},
+ {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"},
+]
+
+[package.extras]
+tests = ["pytest"]
+
[[package]]
name = "puyapy"
version = "5.7.1"
@@ -1994,12 +3119,12 @@ version = "3.0"
description = "C parser in Python"
optional = false
python-versions = ">=3.10"
-groups = ["main", "dev"]
-markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\""
+groups = ["main", "dev", "notebooks"]
files = [
{file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"},
{file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"},
]
+markers = {main = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", dev = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", notebooks = "implementation_name != \"PyPy\""}
[[package]]
name = "pycryptodomex"
@@ -2078,7 +3203,7 @@ version = "2.19.2"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.8"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
{file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"},
{file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"},
@@ -2205,13 +3330,48 @@ termcolor = ">=2.1.0"
[package.extras]
dev = ["black", "flake8", "pre-commit"]
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+description = "Extensions to the standard Python datetime module"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+groups = ["notebooks"]
+files = [
+ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
+ {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
+]
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "python-discovery"
+version = "1.1.3"
+description = "Python interpreter discovery"
+optional = false
+python-versions = ">=3.8"
+groups = ["dev"]
+files = [
+ {file = "python_discovery-1.1.3-py3-none-any.whl", hash = "sha256:90e795f0121bc84572e737c9aa9966311b9fde44ffb88a5953b3ec9b31c6945e"},
+ {file = "python_discovery-1.1.3.tar.gz", hash = "sha256:7acca36e818cd88e9b2ba03e045ad7e93e1713e29c6bbfba5d90202310b7baa5"},
+]
+
+[package.dependencies]
+filelock = ">=3.15.4"
+platformdirs = ">=4.3.6,<5"
+
+[package.extras]
+docs = ["furo (>=2025.12.19)", "sphinx (>=9.1)", "sphinx-autodoc-typehints (>=3.6.3)", "sphinxcontrib-mermaid (>=2)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.5.4)", "pytest (>=8.3.5)", "pytest-mock (>=3.14)", "setuptools (>=75.1)"]
+
[[package]]
name = "python-dotenv"
version = "1.2.2"
description = "Read key-value pairs from a .env file and set them as environment variables"
optional = false
python-versions = ">=3.10"
-groups = ["main"]
+groups = ["dev"]
files = [
{file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"},
{file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"},
@@ -2220,6 +3380,21 @@ files = [
[package.extras]
cli = ["click (>=5.0)"]
+[[package]]
+name = "python-json-logger"
+version = "4.0.0"
+description = "JSON Log Formatter for the Python Logging Package"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2"},
+ {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"},
+]
+
+[package.extras]
+dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"]
+
[[package]]
name = "pytokens"
version = "0.4.1"
@@ -2275,13 +3450,40 @@ files = [
[package.extras]
dev = ["black", "build", "mypy", "pytest", "pytest-cov", "setuptools", "tox", "twine", "wheel"]
+[[package]]
+name = "pywinpty"
+version = "3.0.3"
+description = "Pseudo terminal support for Windows from Python."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+markers = "os_name == \"nt\""
+files = [
+ {file = "pywinpty-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:ff05f12d775b142b11c6fe085129bdd759b61cf7d41da6c745e78e3a1ef5bf40"},
+ {file = "pywinpty-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:340ccacb4d74278a631923794ccd758471cfc8eeeeee4610b280420a17ad1e82"},
+ {file = "pywinpty-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8"},
+ {file = "pywinpty-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:fbc1e230e5b193eef4431cba3f39996a288f9958f9c9f092c8a961d930ee8f68"},
+ {file = "pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0"},
+ {file = "pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9"},
+ {file = "pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab"},
+ {file = "pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523"},
+ {file = "pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a"},
+ {file = "pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759"},
+ {file = "pywinpty-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:d4b6b7b0fe0cdcd02e956bd57cfe9f4e5a06514eecf3b5ae174da4f951b58be9"},
+ {file = "pywinpty-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:34789d685fc0d547ce0c8a65e5a70e56f77d732fa6e03c8f74fefb8cbb252019"},
+ {file = "pywinpty-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0c37e224a47a971d1a6e08649a1714dac4f63c11920780977829ed5c8cadead1"},
+ {file = "pywinpty-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c4e9c3dff7d86ba81937438d5819f19f385a39d8f592d4e8af67148ceb4f6ab5"},
+ {file = "pywinpty-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:0f10e81d52d7f2c4d927f645f247028e64eaf205a3ed9e64dbd998122108a218"},
+ {file = "pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412"},
+]
+
[[package]]
name = "pyyaml"
version = "6.0.3"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.8"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
{file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"},
{file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"},
@@ -2358,13 +3560,134 @@ files = [
{file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"},
]
+[[package]]
+name = "pyzmq"
+version = "27.1.0"
+description = "Python bindings for 0MQ"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"},
+ {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"},
+ {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b"},
+ {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e"},
+ {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526"},
+ {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1"},
+ {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386"},
+ {file = "pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda"},
+ {file = "pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f"},
+ {file = "pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32"},
+ {file = "pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86"},
+ {file = "pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581"},
+ {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f"},
+ {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e"},
+ {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e"},
+ {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2"},
+ {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394"},
+ {file = "pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f"},
+ {file = "pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97"},
+ {file = "pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07"},
+ {file = "pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc"},
+ {file = "pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113"},
+ {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233"},
+ {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31"},
+ {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28"},
+ {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856"},
+ {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496"},
+ {file = "pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd"},
+ {file = "pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf"},
+ {file = "pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f"},
+ {file = "pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5"},
+ {file = "pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2"},
+ {file = "pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0"},
+ {file = "pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7"},
+ {file = "pyzmq-27.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18339186c0ed0ce5835f2656cdfb32203125917711af64da64dbaa3d949e5a1b"},
+ {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:753d56fba8f70962cd8295fb3edb40b9b16deaa882dd2b5a3a2039f9ff7625aa"},
+ {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b721c05d932e5ad9ff9344f708c96b9e1a485418c6618d765fca95d4daacfbef"},
+ {file = "pyzmq-27.1.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be883ff3d722e6085ee3f4afc057a50f7f2e0c72d289fd54df5706b4e3d3a50"},
+ {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e592db3a93128daf567de9650a2f3859017b3f7a66bc4ed6e4779d6034976f"},
+ {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad68808a61cbfbbae7ba26d6233f2a4aa3b221de379ce9ee468aa7a83b9c36b0"},
+ {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e2687c2d230e8d8584fbea433c24382edfeda0c60627aca3446aa5e58d5d1831"},
+ {file = "pyzmq-27.1.0-cp38-cp38-win32.whl", hash = "sha256:a1aa0ee920fb3825d6c825ae3f6c508403b905b698b6460408ebd5bb04bbb312"},
+ {file = "pyzmq-27.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:df7cd397ece96cf20a76fae705d40efbab217d217897a5053267cd88a700c266"},
+ {file = "pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb"},
+ {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429"},
+ {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d"},
+ {file = "pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345"},
+ {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968"},
+ {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098"},
+ {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f"},
+ {file = "pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78"},
+ {file = "pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db"},
+ {file = "pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc"},
+ {file = "pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6"},
+ {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90"},
+ {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62"},
+ {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74"},
+ {file = "pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba"},
+ {file = "pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066"},
+ {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604"},
+ {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c"},
+ {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271"},
+ {file = "pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355"},
+ {file = "pyzmq-27.1.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:50081a4e98472ba9f5a02850014b4c9b629da6710f8f14f3b15897c666a28f1b"},
+ {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:510869f9df36ab97f89f4cff9d002a89ac554c7ac9cadd87d444aa4cf66abd27"},
+ {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f8426a01b1c4098a750973c37131cf585f61c7911d735f729935a0c701b68d3"},
+ {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726b6a502f2e34c6d2ada5e702929586d3ac948a4dbbb7fed9854ec8c0466027"},
+ {file = "pyzmq-27.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd67e7c8f4654bef471c0b1ca6614af0b5202a790723a58b79d9584dc8022a78"},
+ {file = "pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f"},
+ {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8"},
+ {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381"},
+ {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172"},
+ {file = "pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9"},
+ {file = "pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540"},
+]
+
+[package.dependencies]
+cffi = {version = "*", markers = "implementation_name == \"pypy\""}
+
+[[package]]
+name = "referencing"
+version = "0.37.0"
+description = "JSON Referencing + Python"
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"},
+ {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
[[package]]
name = "requests"
version = "2.32.5"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.9"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
{file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"},
{file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"},
@@ -2380,16 +3703,61 @@ urllib3 = ">=1.21.1,<3"
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+[[package]]
+name = "rfc3339-validator"
+version = "0.1.4"
+description = "A pure python RFC3339 validator"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+groups = ["notebooks"]
+files = [
+ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"},
+ {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"},
+]
+
+[package.dependencies]
+six = "*"
+
+[[package]]
+name = "rfc3986-validator"
+version = "0.1.1"
+description = "Pure python rfc3986 validator"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+groups = ["notebooks"]
+files = [
+ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"},
+ {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"},
+]
+
+[[package]]
+name = "rfc3987-syntax"
+version = "1.1.0"
+description = "Helper functions to syntactically validate strings according to RFC 3987."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f"},
+ {file = "rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d"},
+]
+
+[package.dependencies]
+lark = ">=1.2.2"
+
+[package.extras]
+testing = ["pytest (>=8.3.5)"]
+
[[package]]
name = "rich"
-version = "14.3.2"
+version = "14.3.3"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
optional = false
python-versions = ">=3.8.0"
groups = ["dev"]
files = [
- {file = "rich-14.3.2-py3-none-any.whl", hash = "sha256:08e67c3e90884651da3239ea668222d19bea7b589149d8014a21c633420dbb69"},
- {file = "rich-14.3.2.tar.gz", hash = "sha256:e712f11c1a562a11843306f5ed999475f09ac31ffb64281f73ab29ffdda8b3b8"},
+ {file = "rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d"},
+ {file = "rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b"},
]
[package.dependencies]
@@ -2418,32 +3786,206 @@ rich = ">=12.0.0"
[package.extras]
docs = ["sphinx"]
+[[package]]
+name = "rpds-py"
+version = "0.30.0"
+description = "Python bindings to Rust's persistent data structures (rpds)"
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288"},
+ {file = "rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221"},
+ {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7"},
+ {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff"},
+ {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7"},
+ {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139"},
+ {file = "rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464"},
+ {file = "rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169"},
+ {file = "rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425"},
+ {file = "rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d"},
+ {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038"},
+ {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7"},
+ {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed"},
+ {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85"},
+ {file = "rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c"},
+ {file = "rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825"},
+ {file = "rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229"},
+ {file = "rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad"},
+ {file = "rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6"},
+ {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51"},
+ {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5"},
+ {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e"},
+ {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394"},
+ {file = "rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf"},
+ {file = "rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b"},
+ {file = "rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e"},
+ {file = "rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2"},
+ {file = "rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e"},
+ {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d"},
+ {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7"},
+ {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31"},
+ {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95"},
+ {file = "rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d"},
+ {file = "rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15"},
+ {file = "rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6"},
+ {file = "rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d"},
+ {file = "rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0"},
+ {file = "rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07"},
+ {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f"},
+ {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65"},
+ {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f"},
+ {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53"},
+ {file = "rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed"},
+ {file = "rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950"},
+ {file = "rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0"},
+ {file = "rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4"},
+ {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e"},
+ {file = "rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84"},
+]
+
[[package]]
name = "ruff"
-version = "0.15.4"
+version = "0.15.6"
description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false
python-versions = ">=3.7"
groups = ["dev"]
files = [
- {file = "ruff-0.15.4-py3-none-linux_armv6l.whl", hash = "sha256:a1810931c41606c686bae8b5b9a8072adac2f611bb433c0ba476acba17a332e0"},
- {file = "ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5a1632c66672b8b4d3e1d1782859e98d6e0b4e70829530666644286600a33992"},
- {file = "ruff-0.15.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a4386ba2cd6c0f4ff75252845906acc7c7c8e1ac567b7bc3d373686ac8c222ba"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2496488bdfd3732747558b6f95ae427ff066d1fcd054daf75f5a50674411e75"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f1c4893841ff2d54cbda1b2860fa3260173df5ddd7b95d370186f8a5e66a4ac"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:820b8766bd65503b6c30aaa6331e8ef3a6e564f7999c844e9a547c40179e440a"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9fb74bab47139c1751f900f857fa503987253c3ef89129b24ed375e72873e85"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f80c98765949c518142b3a50a5db89343aa90f2c2bf7799de9986498ae6176db"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451a2e224151729b3b6c9ffb36aed9091b2996fe4bdbd11f47e27d8f2e8888ec"},
- {file = "ruff-0.15.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a8f157f2e583c513c4f5f896163a93198297371f34c04220daf40d133fdd4f7f"},
- {file = "ruff-0.15.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:917cc68503357021f541e69b35361c99387cdbbf99bd0ea4aa6f28ca99ff5338"},
- {file = "ruff-0.15.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e9737c8161da79fd7cfec19f1e35620375bd8b2a50c3e77fa3d2c16f574105cc"},
- {file = "ruff-0.15.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:291258c917539e18f6ba40482fe31d6f5ac023994ee11d7bdafd716f2aab8a68"},
- {file = "ruff-0.15.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3f83c45911da6f2cd5936c436cf86b9f09f09165f033a99dcf7477e34041cbc3"},
- {file = "ruff-0.15.4-py3-none-win32.whl", hash = "sha256:65594a2d557d4ee9f02834fcdf0a28daa8b3b9f6cb2cb93846025a36db47ef22"},
- {file = "ruff-0.15.4-py3-none-win_amd64.whl", hash = "sha256:04196ad44f0df220c2ece5b0e959c2f37c777375ec744397d21d15b50a75264f"},
- {file = "ruff-0.15.4-py3-none-win_arm64.whl", hash = "sha256:60d5177e8cfc70e51b9c5fad936c634872a74209f934c1e79107d11787ad5453"},
- {file = "ruff-0.15.4.tar.gz", hash = "sha256:3412195319e42d634470cc97aa9803d07e9d5c9223b99bcb1518f0c725f26ae1"},
+ {file = "ruff-0.15.6-py3-none-linux_armv6l.whl", hash = "sha256:7c98c3b16407b2cf3d0f2b80c80187384bc92c6774d85fefa913ecd941256fff"},
+ {file = "ruff-0.15.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ee7dcfaad8b282a284df4aa6ddc2741b3f4a18b0555d626805555a820ea181c3"},
+ {file = "ruff-0.15.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3bd9967851a25f038fc8b9ae88a7fbd1b609f30349231dffaa37b6804923c4bb"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13f4594b04e42cd24a41da653886b04d2ff87adbf57497ed4f728b0e8a4866f8"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2ed8aea2f3fe57886d3f00ea5b8aae5bf68d5e195f487f037a955ff9fbaac9e"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70789d3e7830b848b548aae96766431c0dc01a6c78c13381f423bf7076c66d15"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:542aaf1de3154cea088ced5a819ce872611256ffe2498e750bbae5247a8114e9"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c22e6f02c16cfac3888aa636e9eba857254d15bbacc9906c9689fdecb1953ab"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98893c4c0aadc8e448cfa315bd0cc343a5323d740fe5f28ef8a3f9e21b381f7e"},
+ {file = "ruff-0.15.6-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:70d263770d234912374493e8cc1e7385c5d49376e41dfa51c5c3453169dc581c"},
+ {file = "ruff-0.15.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:55a1ad63c5a6e54b1f21b7514dfadc0c7fb40093fa22e95143cf3f64ebdcd512"},
+ {file = "ruff-0.15.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8dc473ba093c5ec238bb1e7429ee676dca24643c471e11fbaa8a857925b061c0"},
+ {file = "ruff-0.15.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:85b042377c2a5561131767974617006f99f7e13c63c111b998f29fc1e58a4cfb"},
+ {file = "ruff-0.15.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cef49e30bc5a86a6a92098a7fbf6e467a234d90b63305d6f3ec01225a9d092e0"},
+ {file = "ruff-0.15.6-py3-none-win32.whl", hash = "sha256:bbf67d39832404812a2d23020dda68fee7f18ce15654e96fb1d3ad21a5fe436c"},
+ {file = "ruff-0.15.6-py3-none-win_amd64.whl", hash = "sha256:aee25bc84c2f1007ecb5037dff75cef00414fdf17c23f07dc13e577883dca406"},
+ {file = "ruff-0.15.6-py3-none-win_arm64.whl", hash = "sha256:c34de3dd0b0ba203be50ae70f5910b17188556630e2178fd7d79fc030eb0d837"},
+ {file = "ruff-0.15.6.tar.gz", hash = "sha256:8394c7bb153a4e3811a4ecdacd4a8e6a4fa8097028119160dffecdcdf9b56ae4"},
+]
+
+[[package]]
+name = "send2trash"
+version = "2.1.0"
+description = "Send file to trash natively under Mac OS X, Windows and Linux"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c"},
+ {file = "send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459"},
+]
+
+[package.extras]
+nativelib = ["pyobjc (>=9.0) ; sys_platform == \"darwin\"", "pywin32 (>=305) ; sys_platform == \"win32\""]
+test = ["pytest (>=8)"]
+
+[[package]]
+name = "setuptools"
+version = "82.0.1"
+description = "Most extensible Python build backend with support for C/C++ extension modules"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb"},
+ {file = "setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9"},
+]
+
+[package.extras]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.13.0) ; sys_platform != \"cygwin\""]
+core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
+type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.18.*)", "pytest-mypy"]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+groups = ["notebooks"]
+files = [
+ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
+ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
]
[[package]]
@@ -2458,6 +4000,38 @@ files = [
{file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"},
]
+[[package]]
+name = "soupsieve"
+version = "2.8.3"
+description = "A modern CSS selector implementation for Beautiful Soup."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95"},
+ {file = "soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349"},
+]
+
+[[package]]
+name = "stack-data"
+version = "0.6.3"
+description = "Extract data from python stack frames and tracebacks for informative displays"
+optional = false
+python-versions = "*"
+groups = ["notebooks"]
+files = [
+ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
+ {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
+]
+
+[package.dependencies]
+asttokens = ">=2.1.0"
+executing = ">=1.2.0"
+pure-eval = "*"
+
+[package.extras]
+tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
+
[[package]]
name = "structlog"
version = "25.5.0"
@@ -2485,6 +4059,47 @@ files = [
[package.extras]
tests = ["pytest", "pytest-cov"]
+[[package]]
+name = "terminado"
+version = "0.18.1"
+description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"},
+ {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"},
+]
+
+[package.dependencies]
+ptyprocess = {version = "*", markers = "os_name != \"nt\""}
+pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""}
+tornado = ">=6.1.0"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
+test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"]
+typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"]
+
+[[package]]
+name = "tinycss2"
+version = "1.4.0"
+description = "A tiny CSS parser"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"},
+ {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"},
+]
+
+[package.dependencies]
+webencodings = ">=0.4"
+
+[package.extras]
+doc = ["sphinx", "sphinx_rtd_theme"]
+test = ["pytest", "ruff"]
+
[[package]]
name = "tomli"
version = "2.4.0"
@@ -2554,25 +4169,88 @@ files = [
{file = "tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021"},
]
+[[package]]
+name = "tornado"
+version = "6.5.5"
+description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa"},
+ {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521"},
+ {file = "tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5"},
+ {file = "tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07"},
+ {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e"},
+ {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca"},
+ {file = "tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7"},
+ {file = "tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b"},
+ {file = "tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6"},
+ {file = "tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9"},
+]
+
+[[package]]
+name = "traitlets"
+version = "5.14.3"
+description = "Traitlets Python configuration system"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"},
+ {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"},
+]
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
+test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"]
+
[[package]]
name = "typing-extensions"
version = "4.15.0"
description = "Backported and Experimental Type Hints for Python 3.9+"
optional = false
python-versions = ">=3.9"
-groups = ["main", "dev"]
+groups = ["main", "dev", "notebooks"]
files = [
{file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"},
{file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"},
]
+[[package]]
+name = "tzdata"
+version = "2025.3"
+description = "Provider of IANA time zone data"
+optional = false
+python-versions = ">=2"
+groups = ["notebooks"]
+files = [
+ {file = "tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1"},
+ {file = "tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7"},
+]
+
+[[package]]
+name = "uri-template"
+version = "1.3.0"
+description = "RFC 6570 URI Template Processor"
+optional = false
+python-versions = ">=3.7"
+groups = ["notebooks"]
+files = [
+ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"},
+ {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"},
+]
+
+[package.extras]
+dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"]
+
[[package]]
name = "urllib3"
version = "2.6.3"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.9"
-groups = ["dev"]
+groups = ["dev", "notebooks"]
files = [
{file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"},
{file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"},
@@ -2586,163 +4264,211 @@ zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""]
[[package]]
name = "virtualenv"
-version = "20.38.0"
+version = "21.2.0"
description = "Virtual Python Environment builder"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
files = [
- {file = "virtualenv-20.38.0-py3-none-any.whl", hash = "sha256:d6e78e5889de3a4742df2d3d44e779366325a90cf356f15621fddace82431794"},
- {file = "virtualenv-20.38.0.tar.gz", hash = "sha256:94f39b1abaea5185bf7ea5a46702b56f1d0c9aa2f41a6c2b8b0af4ddc74c10a7"},
+ {file = "virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f"},
+ {file = "virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098"},
]
[package.dependencies]
distlib = ">=0.3.7,<1"
filelock = {version = ">=3.24.2,<4", markers = "python_version >= \"3.10\""}
platformdirs = ">=3.9.1,<5"
+python-discovery = ">=1"
+
+[[package]]
+name = "wcwidth"
+version = "0.6.0"
+description = "Measures the displayed width of unicode strings in a terminal"
+optional = false
+python-versions = ">=3.8"
+groups = ["notebooks"]
+files = [
+ {file = "wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad"},
+ {file = "wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159"},
+]
+
+[[package]]
+name = "webcolors"
+version = "25.10.0"
+description = "A library for working with the color formats defined by HTML and CSS."
+optional = false
+python-versions = ">=3.10"
+groups = ["notebooks"]
+files = [
+ {file = "webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d"},
+ {file = "webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf"},
+]
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+optional = false
+python-versions = "*"
+groups = ["notebooks"]
+files = [
+ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+
+[[package]]
+name = "websocket-client"
+version = "1.9.0"
+description = "WebSocket client for Python with low level API options"
+optional = false
+python-versions = ">=3.9"
+groups = ["notebooks"]
+files = [
+ {file = "websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef"},
+ {file = "websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"},
+]
[package.extras]
-docs = ["furo (>=2023.7.26)", "pre-commit-uv (>=4.1.4)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinx-autodoc-typehints (>=3.6.2)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2025.12.21.14)", "sphinxcontrib-mermaid (>=2)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
-test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "pytest-xdist (>=3.5)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""]
+docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx_rtd_theme (>=1.1.0)"]
+optional = ["python-socks", "wsaccel"]
+test = ["pytest", "websockets"]
[[package]]
name = "yarl"
-version = "1.22.0"
+version = "1.23.0"
description = "Yet another URL library"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"},
- {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"},
- {file = "yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf"},
- {file = "yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a"},
- {file = "yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c"},
- {file = "yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147"},
- {file = "yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb"},
- {file = "yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6"},
- {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0"},
- {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda"},
- {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc"},
- {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737"},
- {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467"},
- {file = "yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea"},
- {file = "yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca"},
- {file = "yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b"},
- {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511"},
- {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6"},
- {file = "yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028"},
- {file = "yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d"},
- {file = "yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503"},
- {file = "yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65"},
- {file = "yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e"},
- {file = "yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d"},
- {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7"},
- {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967"},
- {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed"},
- {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6"},
- {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e"},
- {file = "yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca"},
- {file = "yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b"},
- {file = "yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376"},
- {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f"},
- {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2"},
- {file = "yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74"},
- {file = "yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df"},
- {file = "yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb"},
- {file = "yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2"},
- {file = "yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82"},
- {file = "yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a"},
- {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124"},
- {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa"},
- {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7"},
- {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d"},
- {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520"},
- {file = "yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8"},
- {file = "yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c"},
- {file = "yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74"},
- {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53"},
- {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a"},
- {file = "yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c"},
- {file = "yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601"},
- {file = "yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a"},
- {file = "yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df"},
- {file = "yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2"},
- {file = "yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b"},
- {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273"},
- {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a"},
- {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d"},
- {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02"},
- {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67"},
- {file = "yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95"},
- {file = "yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d"},
- {file = "yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b"},
- {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10"},
- {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3"},
- {file = "yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9"},
- {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f"},
- {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0"},
- {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e"},
- {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708"},
- {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f"},
- {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d"},
- {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8"},
- {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5"},
- {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f"},
- {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62"},
- {file = "yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03"},
- {file = "yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249"},
- {file = "yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b"},
- {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4"},
- {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683"},
- {file = "yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b"},
- {file = "yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e"},
- {file = "yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590"},
- {file = "yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2"},
- {file = "yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da"},
- {file = "yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784"},
- {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b"},
- {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694"},
- {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d"},
- {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd"},
- {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da"},
- {file = "yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2"},
- {file = "yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79"},
- {file = "yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33"},
- {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1"},
- {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca"},
- {file = "yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53"},
- {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c"},
- {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf"},
- {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face"},
- {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b"},
- {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486"},
- {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138"},
- {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a"},
- {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529"},
- {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093"},
- {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c"},
- {file = "yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e"},
- {file = "yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27"},
- {file = "yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1"},
- {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748"},
- {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859"},
- {file = "yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9"},
- {file = "yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054"},
- {file = "yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b"},
- {file = "yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60"},
- {file = "yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890"},
- {file = "yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba"},
- {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca"},
- {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba"},
- {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b"},
- {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e"},
- {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8"},
- {file = "yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b"},
- {file = "yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed"},
- {file = "yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2"},
- {file = "yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff"},
- {file = "yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71"},
+ {file = "yarl-1.23.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cff6d44cb13d39db2663a22b22305d10855efa0fa8015ddeacc40bc59b9d8107"},
+ {file = "yarl-1.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c53f8347cd4200f0d70a48ad059cabaf24f5adc6ba08622a23423bc7efa10d"},
+ {file = "yarl-1.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a6940a074fb3c48356ed0158a3ca5699c955ee4185b4d7d619be3c327143e05"},
+ {file = "yarl-1.23.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed5f69ce7be7902e5c70ea19eb72d20abf7d725ab5d49777d696e32d4fc1811d"},
+ {file = "yarl-1.23.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:389871e65468400d6283c0308e791a640b5ab5c83bcee02a2f51295f95e09748"},
+ {file = "yarl-1.23.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dda608c88cf709b1d406bdfcd84d8d63cff7c9e577a403c6108ce8ce9dcc8764"},
+ {file = "yarl-1.23.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8c4fe09e0780c6c3bf2b7d4af02ee2394439d11a523bbcf095cf4747c2932007"},
+ {file = "yarl-1.23.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c9921eb8bd12633b41ad27686bbb0b1a2a9b8452bfdf221e34f311e9942ed4"},
+ {file = "yarl-1.23.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5f10fd85e4b75967468af655228fbfd212bdf66db1c0d135065ce288982eda26"},
+ {file = "yarl-1.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dbf507e9ef5688bada447a24d68b4b58dd389ba93b7afc065a2ba892bea54769"},
+ {file = "yarl-1.23.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:85e9beda1f591bc73e77ea1c51965c68e98dafd0fec72cdd745f77d727466716"},
+ {file = "yarl-1.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0e1fdaa14ef51366d7757b45bde294e95f6c8c049194e793eedb8387c86d5993"},
+ {file = "yarl-1.23.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:75e3026ab649bf48f9a10c0134512638725b521340293f202a69b567518d94e0"},
+ {file = "yarl-1.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:80e6d33a3d42a7549b409f199857b4fb54e2103fc44fb87605b6663b7a7ff750"},
+ {file = "yarl-1.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ec2f42d41ccbd5df0270d7df31618a8ee267bfa50997f5d720ddba86c4a83a6"},
+ {file = "yarl-1.23.0-cp310-cp310-win32.whl", hash = "sha256:debe9c4f41c32990771be5c22b56f810659f9ddf3d63f67abfdcaa2c6c9c5c1d"},
+ {file = "yarl-1.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f043cb8a2d71c981c09c510da013bc79fd661f5c60139f00dd3c3cc4f2ffb"},
+ {file = "yarl-1.23.0-cp310-cp310-win_arm64.whl", hash = "sha256:263cd4f47159c09b8b685890af949195b51d1aa82ba451c5847ca9bc6413c220"},
+ {file = "yarl-1.23.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b35d13d549077713e4414f927cdc388d62e543987c572baee613bf82f11a4b99"},
+ {file = "yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c"},
+ {file = "yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432"},
+ {file = "yarl-1.23.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2c6b50c7b0464165472b56b42d4c76a7b864597007d9c085e8b63e185cf4a7a"},
+ {file = "yarl-1.23.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:aafe5dcfda86c8af00386d7781d4c2181b5011b7be3f2add5e99899ea925df05"},
+ {file = "yarl-1.23.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ee33b875f0b390564c1fb7bc528abf18c8ee6073b201c6ae8524aca778e2d83"},
+ {file = "yarl-1.23.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c41e021bc6d7affb3364dc1e1e5fa9582b470f283748784bd6ea0558f87f42c"},
+ {file = "yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598"},
+ {file = "yarl-1.23.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2af5c81a1f124609d5f33507082fc3f739959d4719b56877ab1ee7e7b3d602b"},
+ {file = "yarl-1.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6b41389c19b07c760c7e427a3462e8ab83c4bb087d127f0e854c706ce1b9215c"},
+ {file = "yarl-1.23.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1dc702e42d0684f42d6519c8d581e49c96cefaaab16691f03566d30658ee8788"},
+ {file = "yarl-1.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e40111274f340d32ebcc0a5668d54d2b552a6cca84c9475859d364b380e3222"},
+ {file = "yarl-1.23.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4764a6a7588561a9aef92f65bda2c4fb58fe7c675c0883862e6df97559de0bfb"},
+ {file = "yarl-1.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:03214408cfa590df47728b84c679ae4ef00be2428e11630277be0727eba2d7cc"},
+ {file = "yarl-1.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:170e26584b060879e29fac213e4228ef063f39128723807a312e5c7fec28eff2"},
+ {file = "yarl-1.23.0-cp311-cp311-win32.whl", hash = "sha256:51430653db848d258336cfa0244427b17d12db63d42603a55f0d4546f50f25b5"},
+ {file = "yarl-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46"},
+ {file = "yarl-1.23.0-cp311-cp311-win_arm64.whl", hash = "sha256:b39cb32a6582750b6cc77bfb3c49c0f8760dc18dc96ec9fb55fbb0f04e08b928"},
+ {file = "yarl-1.23.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1932b6b8bba8d0160a9d1078aae5838a66039e8832d41d2992daa9a3a08f7860"},
+ {file = "yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069"},
+ {file = "yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13a563739ae600a631c36ce096615fe307f131344588b0bc0daec108cdb47b25"},
+ {file = "yarl-1.23.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cbf44c5cb4a7633d078788e1b56387e3d3cf2b8139a3be38040b22d6c3221c8"},
+ {file = "yarl-1.23.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53ad387048f6f09a8969631e4de3f1bf70c50e93545d64af4f751b2498755072"},
+ {file = "yarl-1.23.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4a59ba56f340334766f3a4442e0efd0af895fae9e2b204741ef885c446b3a1a8"},
+ {file = "yarl-1.23.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:803a3c3ce4acc62eaf01eaca1208dcf0783025ef27572c3336502b9c232005e7"},
+ {file = "yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51"},
+ {file = "yarl-1.23.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c75eb09e8d55bceb4367e83496ff8ef2bc7ea6960efb38e978e8073ea59ecb67"},
+ {file = "yarl-1.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877b0738624280e34c55680d6054a307aa94f7d52fa0e3034a9cc6e790871da7"},
+ {file = "yarl-1.23.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b5405bb8f0e783a988172993cfc627e4d9d00432d6bbac65a923041edacf997d"},
+ {file = "yarl-1.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c3a3598a832590c5a3ce56ab5576361b5688c12cb1d39429cf5dba30b510760"},
+ {file = "yarl-1.23.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8419ebd326430d1cbb7efb5292330a2cf39114e82df5cc3d83c9a0d5ebeaf2f2"},
+ {file = "yarl-1.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:be61f6fff406ca40e3b1d84716fde398fc08bc63dd96d15f3a14230a0973ed86"},
+ {file = "yarl-1.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ceb13c5c858d01321b5d9bb65e4cf37a92169ea470b70fec6f236b2c9dd7e34"},
+ {file = "yarl-1.23.0-cp312-cp312-win32.whl", hash = "sha256:fffc45637bcd6538de8b85f51e3df3223e4ad89bccbfca0481c08c7fc8b7ed7d"},
+ {file = "yarl-1.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:f69f57305656a4852f2a7203efc661d8c042e6cc67f7acd97d8667fb448a426e"},
+ {file = "yarl-1.23.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e87a6e8735b44816e7db0b2fbc9686932df473c826b0d9743148432e10bb9b9"},
+ {file = "yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e"},
+ {file = "yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5"},
+ {file = "yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b"},
+ {file = "yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035"},
+ {file = "yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5"},
+ {file = "yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735"},
+ {file = "yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401"},
+ {file = "yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4"},
+ {file = "yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f"},
+ {file = "yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a"},
+ {file = "yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2"},
+ {file = "yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f"},
+ {file = "yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b"},
+ {file = "yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a"},
+ {file = "yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543"},
+ {file = "yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957"},
+ {file = "yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3"},
+ {file = "yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3"},
+ {file = "yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa"},
+ {file = "yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120"},
+ {file = "yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59"},
+ {file = "yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512"},
+ {file = "yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4"},
+ {file = "yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1"},
+ {file = "yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea"},
+ {file = "yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9"},
+ {file = "yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123"},
+ {file = "yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24"},
+ {file = "yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de"},
+ {file = "yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b"},
+ {file = "yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6"},
+ {file = "yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6"},
+ {file = "yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5"},
+ {file = "yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595"},
+ {file = "yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090"},
+ {file = "yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144"},
+ {file = "yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912"},
+ {file = "yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474"},
+ {file = "yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719"},
+ {file = "yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319"},
+ {file = "yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434"},
+ {file = "yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723"},
+ {file = "yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039"},
+ {file = "yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52"},
+ {file = "yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c"},
+ {file = "yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae"},
+ {file = "yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e"},
+ {file = "yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85"},
+ {file = "yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd"},
+ {file = "yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6"},
+ {file = "yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe"},
+ {file = "yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169"},
+ {file = "yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70"},
+ {file = "yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e"},
+ {file = "yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679"},
+ {file = "yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412"},
+ {file = "yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4"},
+ {file = "yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c"},
+ {file = "yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4"},
+ {file = "yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94"},
+ {file = "yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28"},
+ {file = "yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6"},
+ {file = "yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277"},
+ {file = "yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4"},
+ {file = "yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a"},
+ {file = "yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb"},
+ {file = "yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41"},
+ {file = "yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2"},
+ {file = "yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4"},
+ {file = "yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4"},
+ {file = "yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2"},
+ {file = "yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25"},
+ {file = "yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f"},
+ {file = "yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5"},
]
[package.dependencies]
@@ -2752,5 +4478,5 @@ propcache = ">=0.2.1"
[metadata]
lock-version = "2.1"
-python-versions = "^3.13"
-content-hash = "f000f425f54e910b120aebd9fbcbbb8a10841657f38653781d08f74c31194f87"
+python-versions = ">=3.13,<4.0"
+content-hash = "e579058bb43df2de9afcaf071ed40e61d9c1177011ed99632b829abab8b7b5d3"
diff --git a/pyproject.toml b/pyproject.toml
index c6a82cf0..e3a3dd89 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,14 +1,19 @@
-[tool.poetry]
-package-mode = false
+[project]
name = "d-asa"
-version = "0.5.0"
+version = "0.20.0"
description = "Debt Algorand Standard Application"
license = "AGPL-3.0"
-authors = ["cusma "]
-maintainers = ["cusma "]
-readme = ["README.md", "docs/SUMMARY.md"]
-documentation = "https://cusma.github.io/d-asa/"
-repository = "https://github.com/cusma/d-asa"
+readme = "README.md"
+requires-python = ">=3.13,<4.0"
+authors = [
+ { name = "cusma", email = "cosimo.bassi@gmail.com" },
+]
+maintainers = [
+ { name = "cusma", email = "cosimo.bassi@gmail.com" },
+]
+dependencies = [
+ "algokit-utils>=4.2.3,<5.0.0",
+]
keywords = [
"algorand",
"blockchain",
@@ -18,16 +23,27 @@ keywords = [
"actus",
]
+[project.urls]
+Documentation = "https://cusma.github.io/d-asa/"
+Repository = "https://github.com/cusma/d-asa"
+
+[tool.poetry]
+packages = [
+ { include = "d_asa", from = "src" },
+]
+include = [
+ { path = "src/d_asa/artifacts/*.json", format = ["sdist", "wheel"] },
+ { path = "src/d_asa/py.typed", format = ["sdist", "wheel"] },
+]
+
[tool.poetry.dependencies]
-python = "^3.13"
-algokit-utils = "^4.2.3"
-python-dotenv = "^1.2.2"
-algorand-python = "^3.4.0"
+python = ">=3.13,<4.0"
[tool.poetry.group.dev.dependencies]
algokit-client-generator = "^2.2.0"
-black = { extras = ["d"], version = "^26.1.0" }
-ruff = "^0.15.4"
+algorand-python = "^3.4.0"
+black = { extras = ["d"], version = "^26.3.1" }
+ruff = "^0.15.5"
mypy = "^1.19.1"
pytest = "^9.0.2"
pytest-cov = "^7.0.0"
@@ -37,9 +53,17 @@ pre-commit = "^4.5.1"
puyapy = "^5.7.1"
urllib3 = "^2.6.3"
pip = "^26.0.1"
+python-dotenv = "^1.2.2"
+
+[tool.poetry.group.notebooks]
+optional = true
+
+[tool.poetry.group.notebooks.dependencies]
+ipykernel = "^7.2.0"
+jupyterlab = "^4.4.7"
[build-system]
-requires = ["poetry-core"]
+requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.ruff]
@@ -64,17 +88,24 @@ lint.unfixable = ["B", "RUF"]
[tool.ruff.lint.per-file-ignores]
"tests/**" = ["ANN001", "ANN401", "E501"]
+"smart_contracts/abi_types.py" = ["UP040"]
+"smart_contracts/events.py" = ["UP040"]
+"modules/**" = ["UP040"]
[tool.ruff.lint.flake8-annotations]
allow-star-arg-any = true
suppress-none-returning = true
[tool.pytest.ini_options]
-pythonpath = ["smart_contracts", "tests"]
+pythonpath = ["src", "tests"]
+markers = [
+ "showcase: narrative LocalNet walkthroughs that are excluded from the default test run",
+]
[tool.mypy]
files = "smart_contracts/"
-python_version = "3.12"
+python_version = "3.13"
+mypy_path = "src"
disallow_any_generics = true
disallow_subclassing_any = true
disallow_untyped_calls = true
@@ -93,6 +124,12 @@ disallow_any_decorated = true
disallow_any_explicit = true
untyped_calls_exclude = ["algosdk"]
+[[tool.mypy.overrides]]
+module = "smart_contracts.d_asa.deploy_config"
+disallow_any_unimported = false
+disallow_any_expr = false
+follow_imports = "skip"
+
[[tool.mypy.overrides]]
module = "tests.*"
disallow_any_expr = false
diff --git a/smart_contracts/__main__.py b/smart_contracts/__main__.py
index 50e5f440..f0c06caa 100644
--- a/smart_contracts/__main__.py
+++ b/smart_contracts/__main__.py
@@ -1,6 +1,7 @@
import dataclasses
import importlib
import logging
+import re
import subprocess
import sys
from collections.abc import Callable
@@ -10,9 +11,7 @@
from algokit_utils.config import config
from dotenv import load_dotenv
-from smart_contracts import errors as err
-
-from .mixin_composition import CompositionValidationError, validate_contract_composition
+config.configure(debug=True, trace_all=False)
# Set up logging and load environment variables.
logging.basicConfig(
@@ -22,13 +21,14 @@
logger.info("Loading .env")
load_dotenv()
-# Set trace_all to True to capture all transactions, defaults to capturing traces only on failure
-# Learn more about using AlgoKit AVM Debugger to debug your TEAL source codes and inspect various kinds of
-# Algorand transactions in atomic groups -> https://github.com/algorandfoundation/algokit-avm-vscode-debugger
-config.configure(debug=True, trace_all=False, logger=logger)
-
# Determine the root path based on this file's location.
root_path = Path(__file__).parent
+src_artifact_path = root_path.parent / "src" / "d_asa" / "artifacts"
+canonical_src_contract_name = "d_asa"
+canonical_src_app_spec_name = "DASA.arc56.json"
+canonical_src_client_name = "dasa_client.py"
+canonical_src_avm_client_name = "dasa_avm_client.py"
+generated_artifacts_init = '"""Generated client artifacts."""\n'
# ----------------------- Contract Configuration ----------------------- #
@@ -55,7 +55,14 @@ def import_deploy_if_exists(folder: Path) -> Callable[[], None] | None:
module_name = f"{folder.parent.name}.{folder.name}.deploy_config"
deploy_module = importlib.import_module(module_name)
return deploy_module.deploy # type: ignore[no-any-return, misc]
- except ImportError:
+ except ImportError as e:
+ # Log the import error for debugging, but don't fail if deploy_config doesn't exist
+ if "No module named" in str(e) and "deploy_config" in str(e):
+ logger.debug(f"No deploy_config found for {folder.name}")
+ else:
+ logger.warning(
+ f"Failed to import deploy_config for {folder.name}: {e}", exc_info=True
+ )
return None
@@ -79,55 +86,108 @@ def has_contract_file(directory: Path) -> bool:
# -------------------------- Build Logic -------------------------- #
deployment_extension = "py"
-INVALID_MIXIN_MARKERS: tuple[str, ...] = (
- "INVALID_MIXIN_COMPOSITION",
- err.INVALID_MIXIN_COMPOSITION,
-)
-def _get_output_path(output_dir: Path, deployment_extension: str) -> Path:
+def _to_snake_case(name: str) -> str:
+ """Converts CamelCase or acronym-heavy names to snake_case."""
+ if name.isupper():
+ return name.lower()
+
+ first_pass = re.sub(r"(.)([A-Z][a-z]+)", r"\1_\2", name)
+ second_pass = re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", first_pass)
+ return second_pass.lower()
+
+
+def _get_client_output_dir(output_dir: Path, contract_name: str) -> Path:
+ """Returns where generated clients should be written for a contract."""
+ if contract_name == canonical_src_contract_name:
+ return src_artifact_path
+ return output_dir
+
+
+def _get_typed_client_output_path(
+ target_dir: Path,
+ contract_name: str,
+ app_spec_contract_name: str,
+ deployment_extension: str,
+) -> Path:
"""Constructs the output path for the generated client file."""
- return output_dir / Path(
- "{contract_name}"
- + ("_client" if deployment_extension == "py" else "Client")
- + f".{deployment_extension}"
+ if contract_name == canonical_src_contract_name:
+ return target_dir / canonical_src_client_name
+
+ base_name = (
+ f"{_to_snake_case(app_spec_contract_name)}_client"
+ if deployment_extension == "py"
+ else f"{app_spec_contract_name}Client"
+ )
+ return target_dir / f"{base_name}.{deployment_extension}"
+
+
+def _get_avm_client_output_path(
+ target_dir: Path, contract_name: str, app_spec_contract_name: str
+) -> Path:
+ """Constructs the output path for the generated AVM client file."""
+ if contract_name == canonical_src_contract_name:
+ return target_dir / canonical_src_avm_client_name
+
+ return target_dir / f"{_to_snake_case(app_spec_contract_name)}_avm_client.py"
+
+
+def _get_app_spec_path(output_dir: Path, contract_name: str) -> Path | None:
+ """Gets the canonical ARC-56 path for a contract if it exists."""
+ if contract_name == canonical_src_contract_name:
+ app_spec_path = src_artifact_path / canonical_src_app_spec_name
+ return app_spec_path if app_spec_path.exists() else None
+
+ return next(
+ (
+ file
+ for file in output_dir.iterdir()
+ if file.is_file() and file.suffixes == [".arc56", ".json"]
+ ),
+ None,
)
-def _assert_no_invalid_mixin_markers(output_dir: Path) -> None:
- scanned_files = list(output_dir.glob("*.teal")) + list(
- output_dir.glob("*.arc56.json")
+def _reset_src_artifacts(contract_name: str) -> None:
+ """Clears and recreates the canonical generated artifact package."""
+ if contract_name != canonical_src_contract_name:
+ return
+
+ if src_artifact_path.exists():
+ rmtree(src_artifact_path)
+ src_artifact_path.mkdir(parents=True, exist_ok=True)
+ (src_artifact_path / "__init__.py").write_text(
+ generated_artifacts_init, encoding="utf-8"
)
- offending: list[Path] = []
- for artifact_file in scanned_files:
- content = artifact_file.read_text(encoding="utf-8")
- if any(marker in content for marker in INVALID_MIXIN_MARKERS):
- offending.append(artifact_file)
- if offending:
- file_list = "\n".join(f"- {file}" for file in offending)
- raise Exception(
- "Invalid mixin composition marker found in compiled artifacts:\n"
- f"{file_list}\n"
- "This indicates a broken MRO/composition, aborting."
- )
-def build(output_dir: Path, contract_path: Path) -> Path:
+def _sync_src_artifacts(output_dir: Path, contract_name: str) -> Path | None:
+ """Moves the canonical D-ASA artifacts into src/d_asa/artifacts."""
+ if contract_name != canonical_src_contract_name:
+ return None
+
+ src_artifact_path.mkdir(parents=True, exist_ok=True)
+
+ app_spec_path = output_dir / canonical_src_app_spec_name
+ if not app_spec_path.exists():
+ raise Exception("Could not build contract, DASA.arc56.json file not found")
+
+ canonical_app_spec_path = src_artifact_path / canonical_src_app_spec_name
+ app_spec_path.replace(canonical_app_spec_path)
+ return canonical_app_spec_path
+
+
+def build(output_dir: Path, contract_name: str, contract_path: Path) -> Path:
"""
Builds the contract by exporting (compiling) its source and generating a client.
If the output directory already exists, it is cleared.
"""
- try:
- validate_contract_composition(contract_path, root_path)
- except CompositionValidationError as exc:
- raise Exception(
- f"Could not build contract due to invalid mixin composition:\n{exc}"
- ) from exc
-
output_dir = output_dir.resolve()
if output_dir.exists():
rmtree(output_dir)
output_dir.mkdir(exist_ok=True, parents=True)
+ _reset_src_artifacts(contract_name)
logger.info(f"Exporting {contract_path} to {output_dir}")
build_result = subprocess.run(
@@ -138,14 +198,16 @@ def build(output_dir: Path, contract_path: Path) -> Path:
"python",
str(contract_path.resolve()),
f"--out-dir={output_dir}",
- "--no-output-arc32",
- "--output-arc56",
"--output-source-map",
],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
)
+
+ if build_result.stdout:
+ print(build_result.stdout)
+
if build_result.returncode:
raise Exception(f"Could not build contract:\n{build_result.stdout}")
@@ -160,9 +222,20 @@ def build(output_dir: Path, contract_path: Path) -> Path:
"No '*.arc56.json' file found (likely a logic signature being compiled). Skipping client generation."
)
else:
+ target_dir = _get_client_output_dir(output_dir, contract_name)
+ target_dir.mkdir(exist_ok=True, parents=True)
+
+ # Generate Python App Clients (off-chain)
for file_name in app_spec_file_names:
client_file = file_name
print(file_name)
+ app_spec_contract_name = file_name.removesuffix(".arc56.json")
+ client_output_path = _get_typed_client_output_path(
+ target_dir,
+ contract_name,
+ app_spec_contract_name,
+ deployment_extension,
+ )
generate_result = subprocess.run(
[
"algokit",
@@ -170,12 +243,16 @@ def build(output_dir: Path, contract_path: Path) -> Path:
"client",
str(output_dir),
"--output",
- str(_get_output_path(output_dir, deployment_extension)),
+ str(client_output_path),
],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
)
+
+ if generate_result.stdout:
+ print(generate_result.stdout)
+
if generate_result.returncode:
if "No such command" in generate_result.stdout:
raise Exception(
@@ -186,10 +263,51 @@ def build(output_dir: Path, contract_path: Path) -> Path:
f"Could not generate typed client:\n{generate_result.stdout}"
)
- _assert_no_invalid_mixin_markers(output_dir)
+ # Generate Python AVM Clients (on-chain)
+ for file_name in app_spec_file_names:
+ app_spec_contract_name = file_name.removesuffix(".arc56.json")
+ logger.info(f"Generating AVM Client (on-chain) for {file_name}")
+ puyapy_result = subprocess.run(
+ [
+ "poetry",
+ "run",
+ "puyapy-clientgen",
+ str(output_dir / file_name),
+ "--out-dir",
+ str(target_dir),
+ ],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True,
+ )
+
+ if puyapy_result.stdout:
+ print(puyapy_result.stdout)
+
+ if puyapy_result.returncode:
+ raise Exception(
+ f"Could not generate client with puyapy-clientgen:\n{puyapy_result.stdout}"
+ )
+
+ generated_file = target_dir / f"client_{app_spec_contract_name}.py"
+ desired_file = _get_avm_client_output_path(
+ target_dir, contract_name, app_spec_contract_name
+ )
+
+ if not generated_file.exists():
+ raise FileNotFoundError(
+ f"Expected generated AVM client '{generated_file.name}' was not created by puyapy-clientgen"
+ )
+
+ if desired_file.exists():
+ desired_file.unlink()
+
+ generated_file.rename(desired_file)
+ logger.info(f"Renamed AVM client to {desired_file.name}")
+ canonical_app_spec_path = _sync_src_artifacts(output_dir, contract_name)
if client_file:
- return output_dir / client_file
+ return canonical_app_spec_path or output_dir / client_file
return output_dir
@@ -210,29 +328,20 @@ def main(action: str, contract_name: str | None = None) -> None:
case "build":
for contract in filtered_contracts:
logger.info(f"Building app at {contract.path}")
- build(artifact_path / contract.name, contract.path)
+ build(artifact_path / contract.name, contract.name, contract.path)
case "deploy":
for contract in filtered_contracts:
output_dir = artifact_path / contract.name
- app_spec_file_name = next(
- (
- file.name
- for file in output_dir.iterdir()
- if file.is_file() and file.suffixes == [".arc56", ".json"]
- ),
- None,
- )
- if app_spec_file_name is None:
+ app_spec_path = _get_app_spec_path(output_dir, contract.name)
+ if app_spec_path is None:
raise Exception("Could not deploy app, .arc56.json file not found")
- _assert_no_invalid_mixin_markers(output_dir)
if contract.deploy:
logger.info(f"Deploying app {contract.name}")
contract.deploy()
case "all":
for contract in filtered_contracts:
logger.info(f"Building app at {contract.path}")
- build(artifact_path / contract.name, contract.path)
- _assert_no_invalid_mixin_markers(artifact_path / contract.name)
+ build(artifact_path / contract.name, contract.name, contract.path)
if contract.deploy:
logger.info(f"Deploying {contract.name}")
contract.deploy()
diff --git a/smart_contracts/abi_types.py b/smart_contracts/abi_types.py
index 3d86ce1d..05dde824 100644
--- a/smart_contracts/abi_types.py
+++ b/smart_contracts/abi_types.py
@@ -3,6 +3,7 @@
from algopy import (
Account,
Array,
+ Asset,
BoxMap,
Bytes,
FixedBytes,
@@ -12,110 +13,179 @@
arc4,
)
-CouponRates: TypeAlias = Array[arc4.UInt16]
-TimeEvents: TypeAlias = Array[UInt64]
-TimePeriod: TypeAlias = tuple[UInt64, UInt64]
-TimePeriods: TypeAlias = Array[TimePeriod]
-ProspectusHash: TypeAlias = FixedBytes[Literal[32]]
+class RoleValidity(Struct, kw_only=True):
+ """D-ASA Role Configuration"""
-class AssetInfo(Struct, kw_only=True):
- """D-ASA Info"""
+ role_validity_start: UInt64
+ role_validity_end: UInt64
- denomination_asset_id: UInt64
- settlement_asset_id: UInt64
- outstanding_principal: UInt64
- unit_value: UInt64
- day_count_convention: arc4.UInt8
- principal_discount: arc4.UInt16
- interest_rate: arc4.UInt16
- total_supply: UInt64
- circulating_supply: UInt64
- primary_distribution_opening_date: UInt64
- primary_distribution_closure_date: UInt64
- issuance_date: UInt64
- maturity_date: UInt64
- suspended: bool
- performance: arc4.UInt8
+RbacRole: TypeAlias = BoxMap[Account, RoleValidity]
+ContractTypeId: TypeAlias = arc4.UInt8
+EventTypeId: TypeAlias = arc4.UInt8
+DayCountConvention: TypeAlias = arc4.UInt8
+TimeStamp: TypeAlias = UInt64
+Hash: TypeAlias = FixedBytes[Literal[32]]
-# FIXME: Switch to Struct when bytes operations are supported
-class AssetMetadata(arc4.Struct, kw_only=True):
- """D-ASA Metadata"""
- contract_type: arc4.UInt8
- calendar: arc4.UInt8
- business_day_convention: arc4.UInt8
- end_of_month_convention: arc4.UInt8
- prepayment_effect: arc4.UInt8
- penalty_type: arc4.UInt8
- prospectus_hash: ProspectusHash
- prospectus_url: String
+class Prospectus(Struct, kw_only=True):
+ """Contract Prospectus."""
+ hash: Hash
+ url: String
-class AccountInfo(Struct, kw_only=True):
- """D-ASA Account Info"""
- payment_address: Account
- units: UInt64
- unit_value: UInt64
- paid_coupons: UInt64
- suspended: bool
+class NormalizedActusTerms(Struct, kw_only=True):
+ """Normalized ACTUS terms required by the AVM kernel."""
+ contract_type: ContractTypeId
+ denomination_asset_id: Asset
+ settlement_asset_id: Asset
+ total_units: UInt64
+ notional_principal: UInt64
+ initial_exchange_amount: UInt64
+ initial_exchange_date: TimeStamp
+ maturity_date: TimeStamp
+ day_count_convention: DayCountConvention
+ rate_reset_spread: UInt64
+ rate_reset_multiplier: UInt64
+ rate_reset_floor: UInt64
+ rate_reset_cap: UInt64
+ rate_reset_next: UInt64
+ has_rate_reset_floor: bool
+ has_rate_reset_cap: bool
+ dynamic_principal_redemption: bool
+ fixed_point_scale: UInt64
-class DayCountFactor(Struct, kw_only=True):
- """D-ASA Day Count Factor"""
- numerator: UInt64
- denominator: UInt64
+class ExecutionScheduleEntry(Struct, kw_only=True):
+ """A single normalized ACTUS event."""
+ event_id: UInt64
+ event_type: EventTypeId
+ scheduled_time: TimeStamp
+ accrual_factor: UInt64
+ redemption_accrual_factor: UInt64
+ next_nominal_interest_rate: UInt64
+ next_principal_redemption: UInt64
+ next_outstanding_principal: UInt64
+ flags: UInt64
-class CouponsInfo(Struct, kw_only=True):
- """D-ASA Coupons Info"""
- total_coupons: UInt64
- due_coupons: UInt64
- next_coupon_due_date: UInt64
- day_count_factor: DayCountFactor
- all_due_coupons_paid: bool
+ExecutionSchedulePage: TypeAlias = Array[ExecutionScheduleEntry]
-class PaymentAmounts(Struct, kw_only=True):
- """D-ASA Payment Amounts"""
+class InitialKernelState(Struct, kw_only=True):
+ """Initial kernel state at deployment status date."""
- interest: UInt64
- principal: UInt64
+ status_date: TimeStamp
+ event_cursor: UInt64
+ outstanding_principal: UInt64
+ interest_calculation_base: UInt64
+ nominal_interest_rate: UInt64
+ accrued_interest: UInt64
+ next_principal_redemption: UInt64
+ cumulative_interest_index: UInt64
+ cumulative_principal_index: UInt64
+
+
+class ObservedEventRequest(Struct, kw_only=True):
+ """Authorized payload for appending or applying observed ACTUS events."""
+
+ event_id: UInt64
+ event_type: EventTypeId
+ scheduled_time: TimeStamp
+ accrual_factor: UInt64
+ redemption_accrual_factor: UInt64
+ observed_rate: UInt64
+ next_nominal_interest_rate: UInt64
+ next_principal_redemption: UInt64
+ next_outstanding_principal: UInt64
+ flags: UInt64
+
+
+class ObservedCashEventRequest(Struct, kw_only=True):
+ """Authorized payload for appending observed ACTUS cash events."""
+
+ event_id: UInt64
+ event_type: EventTypeId
+ scheduled_time: TimeStamp
+ accrual_factor: UInt64
+ redemption_accrual_factor: UInt64
+ next_nominal_interest_rate: UInt64
+ next_principal_redemption: UInt64
+ next_outstanding_principal: UInt64
+ flags: UInt64
+
+
+class KernelState(Struct, kw_only=True):
+ """Typed Global State."""
+
+ contract_type: ContractTypeId
+ status: UInt64
+ total_units: UInt64
+ reserved_units_total: UInt64
+ initial_exchange_amount: UInt64
+ event_cursor: UInt64
+ schedule_entry_count: UInt64
+ outstanding_principal: UInt64
+ interest_calculation_base: UInt64
+ nominal_interest_rate: UInt64
+ accrued_interest: UInt64
+ cumulative_interest_index: UInt64
+ cumulative_principal_index: UInt64
+ reserved_interest: UInt64
+ reserved_principal: UInt64
+
+
+class AccountPosition(Struct, kw_only=True):
+ """
+ Tracks the account's units and lazy-settlement state. `interest_checkpoint`
+ and `principal_checkpoint` are cumulative per-unit fixed-point indices already
+ applied to this account. Any later index growth is converted into absolute
+ amounts in `claimable_interest` and `claimable_principal` when the position is
+ settled. `settled_cursor` records the global event cursor seen at the last
+ settlement.
+
+ Attributes:
+ payment_address: Destination for cashflow withdrawals.
+ units: Active units that accrue funded cashflows.
+ reserved_units: Pre-IED units not yet active.
+ suspended: Whether the account is suspended.
+ settled_cursor: Global event cursor at the last account settlement.
+ interest_checkpoint: Applied cumulative per-unit interest index.
+ principal_checkpoint: Applied cumulative per-unit principal index.
+ claimable_interest: Absolute interest amount currently claimable.
+ claimable_principal: Absolute principal amount currently claimable.
+ """
+ payment_address: Account
+ units: UInt64
+ reserved_units: UInt64
+ suspended: bool
+ settled_cursor: UInt64
+ interest_checkpoint: UInt64
+ principal_checkpoint: UInt64
+ claimable_interest: UInt64
+ claimable_principal: UInt64
-class PaymentResult(Struct, kw_only=True):
- """D-ASA Payment Result"""
- amount: UInt64
+class CashClaimResult(Struct, kw_only=True):
+ """Result returned after a holder cashflow claim attempt."""
+
+ interest_amount: UInt64
+ principal_amount: UInt64
+ total_amount: UInt64
timestamp: UInt64
context: Bytes
-class SecondaryMarketSchedule(Struct, kw_only=True):
- """D-ASA Secondary Market Schedule"""
-
- secondary_market_opening_date: UInt64
- secondary_market_closure_date: UInt64
-
-
-class CurrentUnitsValue(Struct, kw_only=True):
- """D-ASA Account's Current Units Value"""
-
- units_value: UInt64
- accrued_interest: UInt64
- day_count_factor: DayCountFactor
-
-
-# FIXME: Switch to Struct when bytes operations are supported
-class RoleConfig(arc4.Struct, kw_only=True):
- """D-ASA Role Configuration"""
+class CashFundingResult(Struct, kw_only=True):
+ """Result returned after funding one or more due ACTUS cash events."""
- role_validity_start: UInt64
- role_validity_end: UInt64
-
-
-RbacRole: TypeAlias = BoxMap[Account, RoleConfig]
+ funded_interest: UInt64
+ funded_principal: UInt64
+ total_funded: UInt64
+ processed_events: UInt64
+ timestamp: UInt64
diff --git a/smart_contracts/artifacts/d_asa/DASA.approval.puya.map b/smart_contracts/artifacts/d_asa/DASA.approval.puya.map
new file mode 100644
index 00000000..27364a58
--- /dev/null
+++ b/smart_contracts/artifacts/d_asa/DASA.approval.puya.map
@@ -0,0 +1,64018 @@
+{
+ "version": 3,
+ "sources": [
+ "../../../modules/accounting.py",
+ "../../../modules/actus_kernel.py",
+ "../../../modules/payment_agent.py",
+ "../../../modules/rbac.py",
+ "../../../modules/transfer_agent.py",
+ "../../d_asa/contract.py"
+ ],
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AG4BmD;;AAAf;;AAA5B;AAC4C;;AAAf;;AAA7B;AAkBA;;AAA0B;AAA1B;AAGA;;AAAiB;AAAjB;AFMA;AAAc;AAAd;AACA;;AAAqB;AAArB;AAGA;;AAAuB;;AAAvB;AACA;;AAAsB;;AAAtB;AAGA;;AAA6B;AAA7B;AACA;;AAA2B;AAA3B;AAGA;;AAA6B;AAA7B;AACA;;AAAqB;AAArB;AACA;;AAA6B;AAA7B;AACA;;AAA6B;AAA7B;AAGA;;AAA4B;AAA5B;AAGA;;AAAmB;AAAnB;AACA;;AAA4B;AAA5B;AAGA;;AAA+B;AAA/B;AACA;;AAA6B;AAA7B;AACA;;AAAiC;AAAjC;AACA;;AAAoC;AAApC;AAGA;;AAAiC;AAAjC;AACA;;AAAwB;AAAxB;AAGA;;AAA6B;AAA7B;AACA;;AAAyB;AAAzB;AACA;;AAA6B;AAA7B;AACA;;AAAwB;AAAxB;AACA;;AAAsB;AAAtB;AACA;;AAAuB;AAAvB;AACA;;AAA4B;AAA5B;AACA;;AAA0B;AAA1B;AAGA;;AAA0B;AAA1B;AACA;;AAAyB;AAAzB;AAGA;;AAAiC;AAAjC;AACA;;AAAkC;AAAlC;AAQA;AAAoB;AAApB;AACA;AAA4B;AAA5B;AAGA;;AAAyB;AAAzB;AIhGO;;AAA6B;;AAA7B;AAAP;AACO;;AAAuB;;AAAvB;AAAP;AACO;;AAAA;AAAP;AACO;;AAAA;AAAP;AAlBR;;;;;;AAAA;;;AAAA;;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;AF8IK;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADvGA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ADgGU;AAAA;AAAA;AAAA;AAAP;AC3EA;;;AACA;;;AACA;;;ADiEO;AAAA;AAAA;AAAA;AAAe;;AAAf;AAYA;AAAP;AC3EG;;;AAAX;;;AAIsB;AACA;;AADA;AADF;;AAAA;AAFR;AAAA;;;AAQe;AAAnB;;AACkB;AAAlB;;AACmB;AAAnB;;AAGI;;AAAA;;AAAA;AAAA;;;AACI;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAApB;AADJ;;;AAGiC;AAAA;AAAA;AAAA;AAAzB;;;AAAA;AAAA;;AACL;;AAAA;AAAA;AAAA;;AAAuB;;AAAvB;AAAf;;;AAEuC;;AAAA;AAAA;AAAA;AAAA;;ADmQ3B;AADG;AAAA;AAAA;;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;;AClQA;;;ADwcA;;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAlB;AAAP;AACO;;AAAwB;;AAAxB;AAAP;AAxIG;;AAAA;;;AAAA;;AAAyC;;AAAzC;AAAA;;;AACQ;;;AAYE;;AAAA;AAAA;AAAA;AAAA;;AACS;;AAAnB;AAAA;;;AAAA;;AAAyC;;AAAzC;AAAA;;;AACQ;;;AA6HkB;;AAAA;;AAAA;AAAA;;AAG1B;;;AAAX;;;;;;;AAkB+B;;AAAA;;;AACC;;AAAA;;;AACN;;AAAA;;;AAAA;AAAA;;AAAA;;AACC;AAAA;;;AAAA;AAAA;;AACD;;AAAA;;AAAA;AAAA;AAAA;;AA4JyB;;AAAjC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAtRH;AAAA;;AAAA;AAAA;AAAyB;AAAA;;AAAA;AAAA;AAAzB;;AAAA;AAwRA;;AAAA;;AAAA;AAAP;AACO;;AAAA;AAAA;AA7JH;;AAAA;AADJ;AAIA;;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AACG;;AAAA;AAAA;AAAgC;;AAAhC;AAAX;;;AAEY;AAAA;;AAAA;AAAA;AAAyB;;AAAA;;;AAAA;;AAAzB;AAAA;;AAAA;AAAA;AAGG;;;AAAJ;;;AAAkC;;AAAA;AAAA;AAAgC;;AAAhC;AAAlC;;;AAGkC;;AAAA;;AAAA;AAAjC;;AAAA;AAAA;AACJ;;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;AAAA;AAAA;AAAA;AAAqB;AAArB;AAAA;AAAA;AAAA;AAEG;;AAAA;;;AAAoB;;;AAApB;AAAA;;;AAEG;AAAA;;AAAA;AAAA;AAFH;;;AAGC;AAAc;;;AAAd;AACA;;AAAiC;AAAjC;AAEJ;;AAAA;;AAAA;AAAA;;;AAAA;AC9fI;;AAAA;;AAAA;AAAA;;AACA;;AAAA;;AAAA;AAAA;;AACA;;AAAoB;AAApB;AAAA;;;;;AD6eA;;AAAwB;AAAxB;;;;AAlCa;;AAAA;AAAA;AAAA;AAAA;;AAGI;;AAAd;AAAf;;;AAEoB;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;;;;;AAGH;;AAAc;AAAd;AAAjB;;;AAC6C;AAAA;;AAAA;AAAA;AAAA;;AAAA;AACR;AAAA;;AAAA;AAAA;AAAA;;AAAA;;;;AACpB;;AAAc;;AAAd;AAAjB;;;;;;;AAAA;;;AAC6C;AAA7B;;AACqB;AAArB;;;;;AA7IL;;;AAAX;;;AACe;;AAAc;;AAAd;AAAf;;;AACuB;AAAA;;AAAA;AAAA;;;AAyHQ;;;AAxHJ;AAAA;;AAAA;AAAA;AAAwB;;AAAA;;;AAAA;;AAAxB;AAAA;AAAA;;AACZ;AAAA;;AAAA;AAAA;AAAA;AAAf;;;AACuB;;;AAsHQ;;;AArHA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AACG;AAAA;;AAAA;AAAA;AAAnB;AAAf;;;AACuB;AAAA;;AAAA;AAAA;;;AAmHQ;;;;;;;AAAA;;;AAhHnB;;AAAA;;AAAA;AAAoC;AAAA;;AAAA;AAAA;AAApC;AAAA;AADJ;AAGO;AAAA;;;AA8GgB;;;AAzIhB;AAAA;;AAAA;AAAA;AAAwB;;AAAA;;;AAAA;;AAAxB;;;AAwIe;;;ACnctB;;AAAA;AAAA;AAIiB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAEH;;AALP;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAtDV;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;AA8DA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;ADkCU;AAAA;AAAA;AAAA;AAAP;ADvH0B;;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AETG;AAAA;;AAAA;AAAA;AAAwB;;AAAxB;AAAX;;;AAEgB;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAA;;;AACG;;AAAA;;AAAA;AADH;;;AAEG;;AAAc;;AAAA;AAAA;AAAA;;;AAAd;AAFH;;;;AADJ;AA2HJ;;;AACA;;;ADLO;AAAA;AAAA;AAAA;AAAe;;AAAf;AAYA;AAAP;ACJA;;AAAA;AAAA;;;AACA;;;;;AF3BI;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AACE;AAAA;;AAAA;AAAA;AAAA;;AADF;;AAAA;AAAA;AAAA;;AE6BJ;AAzHI;;;AACI;AAAA;;AAAA;AAAA;AADJ;;AAAA;;AAAA;;;AAGQ;AAAA;AAAA;AAAA;;;AAAA;AAAJ;;;;AA2HhB;;;AArH6C;;AAAjC;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AADJ;AAwHc;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAjHd;AAIQ;;;;;;;;;;;;;AAJR;;;;;;AAAA;AFsFkB;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AACC;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAGW;AAA9B;AAAA;AAAA;;AAAA;;AACA;AAAA;;AACA;;AAAA;AAAA;AAEO;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;AAGA;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AEoBiB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AACH;;AAJP;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AA/CV;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;AEvFA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBG;;;AACO;AAAA;AAAP;AAEA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AACO;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AHgGU;AAAA;AAAA;AAAA;AAAP;AEtE4B;;AAAqB;;AAA1C;;;AAAP;ACGA;;;AACA;;;AH0DO;AAAA;AAAA;AAAA;AAAe;;AAAf;AGzDP;AJtD0B;;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAP;AIwDA;AAAA;;;AACA;AAAA;AAEI;AAAA;;AAAA;AAAA;AAAA;AAAqC;AAAA;;AAAA;AAAA;AAArC;AADJ;AAGG;AAAA;;AAAA;AAAA;AAAX;;;AAEgB;;AAA2B;AAAA;;AAAA;AAAA;AAA3B;AADJ;AJ8DJ;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AIzDA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;AAAA;AA7CV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AA+CA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AHiDU;AAAA;AAAA;AAAA;AAAP;AGbA;;;AACA;;;AHIO;AAAA;AAAA;AAAA;AAAe;;AAAf;AAYA;AAAP;AGtIG;AAAA;;AAAA;AAAA;AAAX;;;AAEgB;AAAA;;AAAA;AAAA;AAA8B;;AAA9B;AADJ;AAGD;AAAA;;AAAA;AAAA;AAAX;;;AAEgB;;AAA0B;AAAA;;AAAA;AAAA;AAA1B;AADJ;AAqHG;;AAAA;;AAAA;AAAA;;AAAA;AAAP;AJ/G0B;;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AAA0B;;AAAnB;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAP;AIkHA;;AAAA;;;AACA;AAAA;;;AACO;;AAAA;AAAP;AACA;;AAAA;AAAA;AACgB;AAAA;AAAA;AAAA;AAAA;AAAT;AAAP;AH6mBG;AAAA;AAAA;AAAA;AAAqB;AAAA;AAAA;AAAA;AAArB;AAAX;;;AAE8C;AAAA;AAAA;AAAA;AAAzB;;;AAET;;AAAA;AAA4B;;AAA5B;AADJ;AG7mBA;;AAAA;AAAA;;;AACA;;AAAA;AAAA;;AAAA;;;AACA;;;;;AACA;;;;;AJIgB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;;AAAA;AAAA;;AAAA;;AAAA;AAAP;AACA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AATA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AIlDH;AAAA;;AAAA;AAAA;AAAA;AAAA;AJuEA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AGtF+B;;AAAgB;;AAArC;;;AAAP;AHvD0B;;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AAiKA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACO;;AArBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AGtH+B;;AAAsB;;AAA3C;;;AAAP;AFqEO;AAAA;AAAA;AAAA;AAAe;;;AAAf;ADuEA;AAAP;AACA;;;AACA;;;AAC8B;;AAAvB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AAnLU;AAFH;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAsLP;AACO;;AA3BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAjM6B;;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AAsNO;;AAAA;;AAAA;AAAP;AACA;;;AACA;;;AACA;AAAA;;AAAA;AACO;;AAzBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA5N6B;;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA2OO;AAAA;AAfV;AAAA;AAAA;AAAA;AAAA;AAAA;ACuwBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcG;;AAAA;AAAA;AACO;;AAfV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAiBA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AA8BG;;;AAGqB;AAAA;AAAA;AAArB;;AAAA;;AAAA;AAn1BO;;;AAAA;AAEH;AAFG;AAAA;;;AAAA;AAGH;;AAHG;AAAA;;;AAAA;AAIH;;AAJG;AAAA;;;AAAA;AAKH;;AALG;AAAA;;;AAAA;AAMH;;AANG;AAAA;;;;AAWP;AA00B4B;AAAA;;AAAA;AAAA;AAAA;;AAAA;AA1uBrB;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AAEI;;AAAA;AAAA;AAAA;;AA9BG;;;AAAA;;AAEH;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;;AAYP;AAoBG;AAAiB;AAAjB;AAAX;;;AACuB;;AAAA;;;AAAA;AAAJ;AAAP;AA6dG;AAAA;AAAA;AAAA;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAA;AAAP;AAGgC;;AAAA;AAAA;AAAA;AAnCb;AAAA;;AAAA;;AACnB;AAGA;;AAAA;;AAAA;AAmC8B;;AAAA;;AAAA;AA9B1B;AAAA;;AAAA;AADJ;AAKA;;AAAA;;AAAA;AAEA;AAIQ;;AAFW;;AACF;;;;;;;;AAHjB;;;;;;AAAA;AA4BmB;AAAA;;AAAA;AAAnB;;AAAA;AAAA;AACA;;AAA4B;AAA5B;AAGA;;AAAA;;AAAA;AAG6B;AAAA;;AAAA;AAA7B;;AAAA;;AAAA;AACqB;;AAAA;;AAAA;AAArB;;AAAA;;AAAA;AACiC;;AAAA;AAAA;;AAAA;;AAAA;AAAjC;;AAAA;AAAA;AAGA;;AAAA;;AAAA;AACoC;;AAAA;;;AAAA;AAApC;;AAAA;AAAA;AAC6B;;AAAA;;AAAA;AAA7B;;AAAA;AAAA;AAGwB;;AAAA;;AAAA;AAAxB;;AAAA;AAAA;AAG6B;;AAAA;AAAA;AAA7B;;AAAA;AAAA;AACiC;;AAAA;;AAAA;AAAjC;;AAAA;AAAA;AACyB;;AAAA;;AAAA;AAAzB;;AAAA;AAAA;AAC6B;;AAAA;;AAAA;AAA7B;;AAAA;AAAA;AACwB;;AAAA;;AAAA;AAAxB;;AAAA;AAAA;AACsB;;AAAA;;AAAA;AAAtB;;AAAA;AAAA;AACuB;;AAAA;;AAAA;AAAvB;;AAAA;AAAA;AAC4B;;AAAA;;;AAAA;AAA5B;;AAAA;AAAA;AAC0B;;AAAA;;;AAAA;AAA1B;;AAAA;AAAA;AAGyB;;AAAA;;AAAA;AAAzB;;AAAA;AAAA;AAGoB;;AAAA;AAAA;AAApB;AAAA;AAAA;AAGiC;;AAAA;;AAAA;AAAjC;;AAAA;AAAA;AACkC;;AAAA;;AAAA;AAAlC;;AAAA;AAAA;AAGA;;AAAyB;AAAzB;AACA;;AAA0B;AAA1B;AAEO;;AAA8B;;AAA9B;AAAP;AACqC;AAAA;AAAA;AAA9B;;AAAA;AAAP;AACO;AAAP;AAiNuB;;AAAA;;;AAAvB;;AAAA;AAAA;AACsB;;AAAA;;;AAAtB;;AAAA;AAAA;AACO;;AAxCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;AA0CA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAgCG;;;AAGkB;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAxOX;AAAA;AAAA;AAAA;AAAA;AAAP;AACO;AAAwB;;AAAxB;AAAP;AAGO;AAAA;;AAAA;AAAA;AAAP;AAEc;AAAsB;;AAAtB;AAAA;AAOU;;AAAd;AADF;;AAAA;AAFR;AAAA;;;AAMQ;AACF;AAAA;;AAAA;AAAd;;;AACoB;;AAAA;;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AACW;AADX;AACW;AAAA;AAAA;;AAAA;;AACZ;AAAA;AAAA;AAAA;AAAA;;AAAkB;;AAAA;;AAAA;AAAlB;;AAAA;AAAP;AACA;;AAAA;;AAAA;;;AAGO;AAAA;;AAAA;AAAA;AAAA;;AAAP;AACZ;;;AACA;AAAA;;;AACmD;AAAQ;AAAR;AAAd;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAejB;;AAAA;AAAA;;AAAA;AADJ;AAGhB;;AAAA;;;AACuB;;AAAoB;AAApB;AAAP;AAGJ;AAAS;AAAT;AAAA;;;;;AAjBQ;;AAAA;AAAA;AAC4C;AAAtB;AAElB;AAAuB;;AAAvB;AAAA;AAAA;AAAA;AAAA;;AADJ;AAGgB;AAAA;AAAA;;AAAA;AAAA;AAChB;AAAA;AAE2B;AAAvB;AADa;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;;;AA/sBV;;AAAA;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AA4tBR;;AAAA;;;AAEgB;;AAAA;;AAAA;AADJ;AAAA;AAAA;AAGA;AAAc;;AAAd;AAsLG;;AAxCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAv6BU;AAAA;AAAA;AAAA;AAAP;AAw+BA;;;AACA;;;AACA;;;AAEO;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAApB;;AAAA;AAAP;AACQ;;;AACD;AAAA;;;AAAA;AAAoB;;;AAApB;AAAP;AAIiB;;AAAA;;;AAEM;;AAAA;;;AACA;;AAAA;;;AACW;;AAAA;;;AAEC;;AAAA;;;AACD;;AAAA;;;AACC;;AAAA;;;AACrB;;AAAA;;;AAVV;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAMkB;AANlB;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAFJ;;;AAAA;;AAeO;;AA7CV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;AA+CA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAhgCU;AAAA;AAAA;AAAA;AAAP;AAqiCA;;;AACA;;;AAEG;;AAAA;AAAA;AAAgB;;AAAhB;AAAX;;;AA98Be;AAAA;;AAAA;AAAA;AAAsB;;AAAtB;AA+8BH;AACA;;;AAh9BG;AAAA;;AAAA;AAAA;AAAA;AAAsB;;AAAtB;AAwsBP;AACO;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAoB;AAAA;AAAA;AAAA;AAApB;AAAP;AAEwB;AAAA;;;AAAA;;AAAA;AAAA;AADxB;;;AAIuC;AAAA;AAAA;AAAA;AAzvBpB;;AAAZ;AA0vBA;;AAAA;;AACJ;AAAc;;AAAd;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAX;;;AACmB;;AAAA;AAAA;AAAA;;AAAA;AACJ;;AAAA;AAAA;AAAA;AAAA;AAAc;;AAAd;AAAP;AAKuB;;AAAA;AAAA;;;AACA;;AAAA;;;AACW;;AAAA;;;AACC;;AAAA;;;AACD;;AAAA;;;AACC;;AAAA;;;AAR/B;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AADJ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAaA;;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAA6B;AAA7B;AAAA;AAAA;AAAA;AAkPmB;AAAA;AAAA;AAAA;AAAZ;;AAAA;AAAA;;AAAA;AAAP;AACQ;;;AAAA;AAAA;;AAEJ;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAn1BA;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;;AAm1BP;AAGO;;AAAoB;;;AAApB;AAAP;AA30BO;;AAAe;;AAAf;AAAA;;;AAAA;;AAAqC;;AAArC;AAAA;;;;AA40Bf;;;AEhnCoC;;AAAe;;AAApC;;;AAAP;AFonCA;;AAAA;;AAAA;;;AAAA;;AACO;;AAxDV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDO;;;;;;;;;;;;;;;;AAIP;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AA1jCU;AAAA;AAAA;AAAA;AAAP;AAulCA;;;AACA;;;AACA;;;AAjmCO;AAAA;AAAA;AAAA;AAAe;;AAAf;AAYA;AAAP;AAsFO;AAAA;;AAAA;AAAA;AAAsB;;AAAtB;AA4uBP;AACO;AAAA;AAAA;AAAA;AAAA;;AAAoB;AAAA;AAAA;AAAA;AAApB;AAAA;;AAAA;AAAP;AACO;;AAAA;;;AAAA;AAAA;;AAAsB;;;AAAtB;AAAP;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAgB;AAAhB;AAAP;AAER;;;AAEgB;AAAA;AAAA;AAAA;AAA4B;AAA5B;AADa;;;AAIb;;AAAA;AAAiC;;AAAA;;AAAA;AAAjC;AADJ;AAImC;AAAA;AAAA;AAAA;AApyBpB;;AAAZ;AAqyBA;;AAAA;;AACJ;AAAc;;AAAd;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAX;;;AACmB;;AAAA;AAAA;AAAA;;AAAA;AACJ;;AAAA;AAAA;AAAA;AAAA;AAAc;;AAAd;AAAP;AAKuB;;AAAA;AAAA;;;AACA;;AAAA;;;AACW;;AAAA;;;AACC;;AAAA;;;AACD;;AAAA;;;AACC;;AAAA;;;AAR/B;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AADJ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAaA;;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAA6B;AAA7B;AAAA;AAAA;AAAA;AAuPO;;AAnCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1jCU;AAAA;AAAA;AAAA;AAAP;AAAA;AA4mC6B;AAAA;;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAEF;AAAA;;AAAA;AAAA;AACS;AAAA;;AAAA;AAAA;AACG;AAAA;;AAAA;AAAA;AACX;AAAA;AAAA;AAAA;AACQ;AAAA;AAAA;AAAA;AACC;AAAA;;AAAA;AAAA;AACI;AAAA;;AAAA;AAAA;AACJ;AAAA;;AAAA;AAAA;AACL;AAAA;;AAAA;AAAA;AACS;AAAA;;AAAA;AAAA;AACC;AAAA;;AAAA;AAAA;AACT;AAAA;;AAAA;AAAA;AACC;AAAA;;AAAA;AAAA;AAfhB;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAZV;AAAA;AAAA;AAAA;AAAA;AAAA;AA/lCU;AAAA;AAAA;AAAA;AAAP;AAyoCG;AAAA;AAAA;AAAA;AAAqB;AAAA;AAAA;AAAA;AAArB;AAAX;;;AAEyB;AAAA;AAAA;AAAA;AADN;AAEQ;;AAFR;AAGY;AAHZ;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAbd;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBmC;AAAA;AAAA;AAAA;AAAzB;;;AAxBV;;;AExmCG;;;AAdH;AAAA;AAgBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcG;;;AACA;;AAAA;AAAA;AACO;;AAhBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcG;;;AACA;;AAAA;AAAA;AACO;;AAhBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAsBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AA1Hc;;AAAX;AAAX;;;AACY;;AAAA;;AAAA;AA2HG;;AA1BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9FM;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAqHJ;;;AAnHG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAiHJ;;;AA/GG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA6GJ;;;AA3GG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAyGJ;;;AAvGG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;;;;AAwGP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAmBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AA1HO;AAAW;;AAAX;AAAP;AACc;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAyHG;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhGM;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAoHJ;;;AAlHG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAgHJ;;;AA9GG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA4GJ;;;AA1GG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;;;;AA2GP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhL+B;;AAAgB;;AAArC;;;AAAP;AAgMA;;AAAA;AAAA;AACO;;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtM+B;;AAAc;;AAAnC;;;AAAP;AAmNA;;AAAA;AAAA;AACO;;AAdV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BU;AAAA;;AAAA;AAAA;AAXV;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB4B;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AAtBP;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAkBU;AACP;AAAA;;;AAES;;;;;;;;AADT;;AAAA;;;;;;;;;;;;;;AA+BQ;AAJI;;AA9TL;;AAAA;AAAA;AAAA;AAAA;;AA6TC;AAGO;AAAA;AAjDlB;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Ce;;AAzTL;;AAAA;AAAA;AAAA;AAAA;;AAwTC;AAGO;AAAA;AA5ClB;;;AAqCe;;AApTL;;AAAA;AAAA;AAAA;AAAA;;AAmTC;AAGO;AAAA;AAvClB;;;AAgCe;;AA/SL;;AAAA;AAAA;AAAA;AAAA;;AA8SC;AAGO;AAAA;AAlClB;;;AA2Be;;AA1SL;;AAAA;AAAA;AAAA;AAAA;;AAySC;AAGO;AAAA;AA7BlB;;;AAsBkB;;;;;;;;;;;;;;;;;;AAtBlB;;;AH9SD;;;AAEe;;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAJ;AAAP;;AAgBJ;;;AApB8B;;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AAqCW;AAAA;AAAA;AAIM;AAAA;;AAAA;AAAA;AAAiC;;AAAA;;AAAA;AAAjC;AAEb;AAAA;;AAAA;AAAA;AAAkC;;AAAA;;AAAA;AAAlC;AAMgB;;AAAA;AAAA;AAAgB;AAAA;;AAAA;AAAA;AADf;;AAAA;;AAAA;;AAAA;;;AAIgB;AAAA;;AAAA;AAAA;AADf;;AAAA;;AAAA;;AAAA;;;AAMtB;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAI+B;AAAA;;AAAA;AAAA;AAA/B;AAAA;;AACgC;AAAA;;AAAA;AAAA;AAAhC;AAAA;;AAG0B;AAAA;AAAA;AAAA;AAA1B;AAAA;;AAIA;;AAAA;AAAA;AACA;AAEJ;;;;;;AAzE8B;;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AC+GO;AAAA;AAAA;AAAA;AAAe;;AAAf;ADnCf;;;AACY;AAEO;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AACR;;AAAA;AAAA;AAAA;;AAAX;;;AACY;AAGJ;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAC0B;AAA1B;AAAA;;AACA;;AAAA;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;AAAA;AAAA;;AAAA;AAAA;;ACyCJ;;;AAIO;;AAAA;;;AAAA;;AAAA;;;AACQ;AAAP;AACQ;;AAAA;;AAAA;AACL;;AAAA;AAAP;AAEJ;;;AAEJ;;AAAA;;;AACmB;AAAP;AACG;AAAA;;AAAA;AAAA;AAAP;AAAA;AACoC;AAAA;;AAAA;AAAA;AAA7B;;AAAA;AAAA;;AAAA;;;AAAP;AAEJ;;;AAOJ;;AAAA;;;AACmB;AAAP;AAEA;AAAA;;AAAA;AAAA;AAEA;AAAA;;AAAA;AAAA;AAHG;;AAAA;AAAA;;;AAAP;AAwBJ;;;AAEsB;AAAA;AAAA;AAAA;AAAX;;AAAA;AAAP;AAdO;;AAAY;;AAAZ;AAgBA;AAAc;;AAAd;AAAA;AAAA;AAAA;AAAA;;AAAP;AAZO;;AAAW;;AAAX;AAeS;;AAAA;AAAA;;AAAA;AAAA;AAAT;;AAAA;AAAP;AACO;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAP;AAuGJ;;;AA1DO;;AARC;AAQD;AAAA;;;AAAA;;AAPC;AAOD;AAAA;;;AAAA;;AANC;;AAMD;AAAA;;;AAAA;;AALC;;AAKD;AAAA;;;AAAA;;AAJC;;AAID;AAAA;;;AACQ;AA6DX;;AA1DR;;AAAA;;;AAEmB;AAwDJ;;;AAtDJ;;AAAiB;;AAAjB;AAAA;;;AAAyC;;AAAiB;;AAAjB;AAAzC;;;AAIQ;;AACH;;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;;AAkDJ;;;;AAAA;;;AA7CJ;;AAAiB;AAAjB;AAAX;;;AAEmB;;AACH;;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;;AA2CJ;;;;AAAA;;;AArCJ;;AAAiB;;AAAjB;AAAX;;;AAEmB;;AACH;;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;;AAmCJ;;;;AAAA;;;AA5BJ;;AAAiB;;AAAjB;AAAX;;;AAEmB;;AAAc;;AAAd;AA0BJ;;;AAxBA;AAwBA;;;AAkBH;AAAA;;AAAA;AAAA;AAAsB;AAAtB;AAAA;;;AACI;AAAA;;AAAA;AAAA;AADJ;;;;AADJ;;AAAA;AA8CJ;;;AASQ;;AAAA;;AAAA;AAAA;AAAA;;;AACG;AAAA;;AAAA;AAAA;AADH;;;AAEG;AAAA;;AAAA;AAAA;AAFH;;;AAIO;AAAP;;AAAA;;AAAA;AAEA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAHM;;;AAQN;AAAA;;AAAA;AAAA;AAHG;;AAAA;AAAA;;;AAAP;;AAAA;;AAAA;AA+DJ;;;AAMJ;;AAAA;;;AACY;;AAAA;AACU;AAAA;;AAAA;AAAA;AACV;AAAA;;AAAA;AAAA;AADmC;;AAAA;;AAAA;;;AAAzB;AAKd;AAAA;AAGI;AAAA;;AAAA;AAAA;AAFG;;AAAA;AAAA;;AAAA;;;AAAP;AAyIJ;;;;;;;;AAUW;;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAlB;AAAP;AACO;;AAAA;;AAAA;AAAwB;;AAAxB;AAAP;AAEa;;AAAA;AAAA;AAAA;AACI;AAAd;AAAA;AAAX;;;AA5ee;AAAA;AAAA;AAAA;AAAe;;AAAf;AA+eH;AAEI;AAAA;;AAAA;AAAA;AAA6B;AAAA;;AAAA;AAAA;AAA7B;AADJ;AAG6B;;AAAA;;AAAA;AAA7B;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAC6B;;AAAA;;AAAA;AAA7B;;AAAA;AAAA;AACA;;AAAwB;AAAxB;AACiC;;AAAA;;AAAA;AAAjC;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAqB;AAArB;AAAA;AAAA;AAAA;AACA;AAAc;;AAAd;AA7LJ;;AAAA;AACO;AAAA;;AAAA;AAAA;AA6LH;;AAAA;AAGmB;AAHnB;;;;AAAA;;AAKA;;AAAA;;AAAA;;AAAA;AA/fG;AAAA;AAAA;AAAA;AAAe;;AAAf;AAYA;AAAP;AAsfA;AAAA;;AAAA;AAAA;AAAyB;;AAAA;;;AAAA;;AAAzB;AAAA;;AAAA;AAAA;AAEG;;AAAc;;AAAd;AAAX;;;AAIgB;;AAAA;;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAHY;;;AAMI;AAAA;;AAAA;AAAA;AAAhB;AAAA;;AAiFL;AAAA;;AAAA;AAAA;AAAA;;;AAAqC;AAAA;;AAAA;AAAA;AAAP;;AAAA;AAA9B;;;AACQ;AAAA;;AAAA;AAAA;AAAA;;AAAA;AACR;AAAA;;AAAA;AAAA;AAAA;;;AAAmC;AAAA;;AAAA;AAAA;AAAP;;AAAA;AAA5B;;;AACQ;AAAA;;AAAA;AAAA;AAAA;;AAAA;AArFP;;AAAA;;AAAA;AAYD;;AAAc;;AAAd;AAAX;;;AACyC;;AAAA;;AAAA;AAA7B;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAKD;;;AAAX;;;AACe;;AAAc;;AAAd;AAAf;;;AAI2B;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAA5B;AACD;;AADA;AADF;;AAAA;AAFR;AAAA;;;AA9LU;AAAA;;AAAA;AAAA;AAAA;;AAAA;AACJ;AAAd;;AACwB;AAAxB;;AAEG;;AAAA;;AAAA;AAAA;AAAA;;AAAX;;;AAE8B;;AAAA;;AAAA;;;AAAA;AAAA;;AAKM;AAAxB;;;;AAEc;AAAA;AAAA;AAAA;AAAoB;AAApB;AAAA;;AACM;AAAA;AAAA;AAAA;AAAlB;;AAAA;AAAd;;;AAC2B;;AAAA;;;AAAA;AAAA;;AACK;AAAA;AAAA;AAAA;;AAEuB;;AAArB;AAAA;;;AAClB;;AAAqB;;AAArB;AAAA;;;AACI;;AAAA;;AAAA;AADJ;;;;AAGhB;;;AACA;;AAAA;;;AAC4C;AAAxB;;AAOR;;AAAmB;AAAnB;AAAA;;;;;AAHY;;AAAA;;AAAA;AAFc;;AAAA;AAAA;;;AAAA;AAAA;;AAIlB;;AAAA;AAAA;;;;;;;;;AAGZ;;AAAA;AACY;AAAA;;AAAA;AAAA;AACT;;AAAA;;AAAA;AAAc;AAAd;AAAX;;;AAEyB;AAAA;;AAAA;AAAA;AAAb;AAGA;AAAA;;AAAA;AAAA;AAFG;;AAAA;;;AA+JC;;AAAA;AAAA;AAKR;AAAA;AAAA;AAAA;AAAqB;AAArB;AAAA;AAAA;AAAA;AACA;;AAEW;AACQ;AAHnB;;;;AAAA;;;;;;;;;AAFqC;;AAAA;;AAAA;AAAjC;;AAAA;AAAA;;;;AAjBC;;AAAc;;AAAd;AAAb;;;AAE6C;AAAA;;AAAA;AAAA;AAAjC;;AAAA;AAAA;;;;AAdC;;AAAc;;AAAd;AAAb;;;AACwB;;AAAA;;AAAA;AAAA;AAAA;;AACxB;;;AAC4B;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAChB;;AAAA;;AAAA;;;;AAEG;;AAAA;;AAAA;AAAA;AAAA;;AAAf;;;AACgB;;AAAA;;AAAA;;;;AAkCZ;;;AAUwB;;AACH;;AAAA;AAAA;AACE;;AAAA;;;AACI;;AAAA;;;AACJ;;AAGW;;AALX;AAKW;AA6BtC;;AAAA;;;AACmB;AA/BS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAIA;AAAA;;AAAA;AAAA;AACH;;AAAA;AAAiB;AAAjB;AAZb;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AADJ;;;;;;AAAA;AAAA;AAAA;;;;;;AAwCG;;AAAe;AAAf;AAAA;;;AAAA;;AAAsC;;AAAtC;AAAA;;;AACQ;AAhCC;;;AAiCL;;;AAjCK;;;AErpBhB;;;;;AAFW;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAGA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;AADH;AAAA;;;AAEG;;AAAA;AAAA;AAAA;AAAA;AADA;;AAAA;AADH;;;;AADJ;;AAAA;;;;;AAOyB;;AAbF;AAAA;;AAAA;AAAA;AAAhB;AAaP;;AAkBW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAEJ;;;AACW;;AACH;;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;AAAA;;AAOH;;AAPG;AAAA;;;;AAAP;;;",
+ "op_pc_offset": 0,
+ "pc_events": {
+ "1": {
+ "subroutine": "algopy.arc4.ARC4Contract.approval_program",
+ "params": {},
+ "block": "main",
+ "stack_in": [],
+ "op": "intcblock 0 1 8 32 1500"
+ },
+ "9": {
+ "op": "bytecblock 0x151f7c75 \"status\" \"event_cursor\" \"schedule_entry_count\" \"outstanding_principal\" \"fixed_point_scale\" \"accrued_interest\" \"interest_calculation_base\" 0x4123 \"nominal_interest_rate\" \"contract_type\" \"reserved_units_total\" \"reserved_principal\" \"total_units\" \"next_principal_redemption\" \"reserved_interest\" \"cumulative_interest_index\" \"cumulative_principal_index\" 0x523a41525223 \"settlement_asset_id\" \"initial_exchange_amount\" 0x523a41555423 0x523a50594423 0x523a4d4e4723 0x5323 0x523a4d4f4323 0x523a54525323 0x523a4f504423 \"initial_exchange_date\" \"transfer_opening_date\" \"transfer_closure_date\" \"rate_reset_floor\" \"rate_reset_cap\" \"contract_suspended\" \"defaulted\" \"dynamic_principal_redemption\" \"rate_reset_spread\" \"rate_reset_multiplier\" \"rate_reset_next\" \"has_rate_reset_floor\" \"has_rate_reset_cap\" 0x00 \"prospectus_hash\" \"prospectus_url\" \"denomination_asset_id\" \"maturity_date\" \"day_count_convention\" 0x068101 0x0000"
+ },
+ "773": {
+ "op": "txn ApplicationID",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "775": {
+ "op": "bnz main_after_if_else@2",
+ "stack_out": []
+ },
+ "778": {
+ "op": "bytec 18 // 0x523a41525223",
+ "defined_out": [
+ "0x523a41525223"
+ ],
+ "stack_out": [
+ "0x523a41525223"
+ ]
+ },
+ "780": {
+ "op": "global ZeroAddress",
+ "defined_out": [
+ "0x523a41525223",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "0x523a41525223",
+ "tmp%0#3"
+ ]
+ },
+ "782": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "783": {
+ "op": "bytec 27 // 0x523a4f504423",
+ "defined_out": [
+ "0x523a4f504423"
+ ],
+ "stack_out": [
+ "0x523a4f504423"
+ ]
+ },
+ "785": {
+ "op": "global ZeroAddress",
+ "defined_out": [
+ "0x523a4f504423",
+ "tmp%1#3"
+ ],
+ "stack_out": [
+ "0x523a4f504423",
+ "tmp%1#3"
+ ]
+ },
+ "787": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "788": {
+ "op": "bytec 33 // \"contract_suspended\"",
+ "defined_out": [
+ "\"contract_suspended\""
+ ],
+ "stack_out": [
+ "\"contract_suspended\""
+ ]
+ },
+ "790": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "\"contract_suspended\"",
+ "0"
+ ],
+ "stack_out": [
+ "\"contract_suspended\"",
+ "0"
+ ]
+ },
+ "791": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "792": {
+ "op": "bytec 34 // \"defaulted\"",
+ "defined_out": [
+ "\"defaulted\""
+ ],
+ "stack_out": [
+ "\"defaulted\""
+ ]
+ },
+ "794": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"defaulted\"",
+ "0"
+ ]
+ },
+ "795": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "796": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\""
+ ],
+ "stack_out": [
+ "\"status\""
+ ]
+ },
+ "797": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"status\"",
+ "0"
+ ]
+ },
+ "798": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "799": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\""
+ ],
+ "stack_out": [
+ "\"contract_type\""
+ ]
+ },
+ "801": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"contract_type\"",
+ "0"
+ ]
+ },
+ "802": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "803": {
+ "op": "bytec 42 // \"prospectus_hash\"",
+ "defined_out": [
+ "\"prospectus_hash\""
+ ],
+ "stack_out": [
+ "\"prospectus_hash\""
+ ]
+ },
+ "805": {
+ "op": "pushbytes 0x",
+ "defined_out": [
+ "\"prospectus_hash\"",
+ "0x"
+ ],
+ "stack_out": [
+ "\"prospectus_hash\"",
+ "0x"
+ ]
+ },
+ "807": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "808": {
+ "op": "bytec 43 // \"prospectus_url\"",
+ "defined_out": [
+ "\"prospectus_url\""
+ ],
+ "stack_out": [
+ "\"prospectus_url\""
+ ]
+ },
+ "810": {
+ "op": "pushbytes \"\"",
+ "defined_out": [
+ "\"\"",
+ "\"prospectus_url\""
+ ],
+ "stack_out": [
+ "\"prospectus_url\"",
+ "\"\""
+ ]
+ },
+ "812": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "813": {
+ "op": "bytec 44 // \"denomination_asset_id\"",
+ "defined_out": [
+ "\"denomination_asset_id\""
+ ],
+ "stack_out": [
+ "\"denomination_asset_id\""
+ ]
+ },
+ "815": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"denomination_asset_id\"",
+ "0"
+ ]
+ },
+ "816": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "817": {
+ "op": "bytec 19 // \"settlement_asset_id\"",
+ "defined_out": [
+ "\"settlement_asset_id\""
+ ],
+ "stack_out": [
+ "\"settlement_asset_id\""
+ ]
+ },
+ "819": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"settlement_asset_id\"",
+ "0"
+ ]
+ },
+ "820": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "821": {
+ "op": "bytec 28 // \"initial_exchange_date\"",
+ "defined_out": [
+ "\"initial_exchange_date\""
+ ],
+ "stack_out": [
+ "\"initial_exchange_date\""
+ ]
+ },
+ "823": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"initial_exchange_date\"",
+ "0"
+ ]
+ },
+ "824": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "825": {
+ "op": "bytec 45 // \"maturity_date\"",
+ "defined_out": [
+ "\"maturity_date\""
+ ],
+ "stack_out": [
+ "\"maturity_date\""
+ ]
+ },
+ "827": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"maturity_date\"",
+ "0"
+ ]
+ },
+ "828": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "829": {
+ "op": "bytec 29 // \"transfer_opening_date\"",
+ "defined_out": [
+ "\"transfer_opening_date\""
+ ],
+ "stack_out": [
+ "\"transfer_opening_date\""
+ ]
+ },
+ "831": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"transfer_opening_date\"",
+ "0"
+ ]
+ },
+ "832": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "833": {
+ "op": "bytec 30 // \"transfer_closure_date\"",
+ "defined_out": [
+ "\"transfer_closure_date\""
+ ],
+ "stack_out": [
+ "\"transfer_closure_date\""
+ ]
+ },
+ "835": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"transfer_closure_date\"",
+ "0"
+ ]
+ },
+ "836": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "837": {
+ "op": "bytec 46 // \"day_count_convention\"",
+ "defined_out": [
+ "\"day_count_convention\""
+ ],
+ "stack_out": [
+ "\"day_count_convention\""
+ ]
+ },
+ "839": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"day_count_convention\"",
+ "0"
+ ]
+ },
+ "840": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "841": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\""
+ ],
+ "stack_out": [
+ "\"total_units\""
+ ]
+ },
+ "843": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"total_units\"",
+ "0"
+ ]
+ },
+ "844": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "845": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\""
+ ],
+ "stack_out": [
+ "\"reserved_units_total\""
+ ]
+ },
+ "847": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"reserved_units_total\"",
+ "0"
+ ]
+ },
+ "848": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "849": {
+ "op": "bytec 20 // \"initial_exchange_amount\"",
+ "defined_out": [
+ "\"initial_exchange_amount\""
+ ],
+ "stack_out": [
+ "\"initial_exchange_amount\""
+ ]
+ },
+ "851": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"initial_exchange_amount\"",
+ "0"
+ ]
+ },
+ "852": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "853": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\""
+ ],
+ "stack_out": [
+ "\"outstanding_principal\""
+ ]
+ },
+ "855": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"outstanding_principal\"",
+ "0"
+ ]
+ },
+ "856": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "857": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\""
+ ],
+ "stack_out": [
+ "\"next_principal_redemption\""
+ ]
+ },
+ "859": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"next_principal_redemption\"",
+ "0"
+ ]
+ },
+ "860": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "861": {
+ "op": "bytec 35 // \"dynamic_principal_redemption\"",
+ "defined_out": [
+ "\"dynamic_principal_redemption\""
+ ],
+ "stack_out": [
+ "\"dynamic_principal_redemption\""
+ ]
+ },
+ "863": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"dynamic_principal_redemption\"",
+ "0"
+ ]
+ },
+ "864": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "865": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\""
+ ],
+ "stack_out": [
+ "\"interest_calculation_base\""
+ ]
+ },
+ "867": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"interest_calculation_base\"",
+ "0"
+ ]
+ },
+ "868": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "869": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\""
+ ],
+ "stack_out": [
+ "\"accrued_interest\""
+ ]
+ },
+ "871": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"accrued_interest\"",
+ "0"
+ ]
+ },
+ "872": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "873": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\""
+ ],
+ "stack_out": [
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "875": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"nominal_interest_rate\"",
+ "0"
+ ]
+ },
+ "876": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "877": {
+ "op": "bytec 36 // \"rate_reset_spread\"",
+ "defined_out": [
+ "\"rate_reset_spread\""
+ ],
+ "stack_out": [
+ "\"rate_reset_spread\""
+ ]
+ },
+ "879": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"rate_reset_spread\"",
+ "0"
+ ]
+ },
+ "880": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "881": {
+ "op": "bytec 37 // \"rate_reset_multiplier\"",
+ "defined_out": [
+ "\"rate_reset_multiplier\""
+ ],
+ "stack_out": [
+ "\"rate_reset_multiplier\""
+ ]
+ },
+ "883": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"rate_reset_multiplier\"",
+ "0"
+ ]
+ },
+ "884": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "885": {
+ "op": "bytec 31 // \"rate_reset_floor\"",
+ "defined_out": [
+ "\"rate_reset_floor\""
+ ],
+ "stack_out": [
+ "\"rate_reset_floor\""
+ ]
+ },
+ "887": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"rate_reset_floor\"",
+ "0"
+ ]
+ },
+ "888": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "889": {
+ "op": "bytec 32 // \"rate_reset_cap\"",
+ "defined_out": [
+ "\"rate_reset_cap\""
+ ],
+ "stack_out": [
+ "\"rate_reset_cap\""
+ ]
+ },
+ "891": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"rate_reset_cap\"",
+ "0"
+ ]
+ },
+ "892": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "893": {
+ "op": "bytec 38 // \"rate_reset_next\"",
+ "defined_out": [
+ "\"rate_reset_next\""
+ ],
+ "stack_out": [
+ "\"rate_reset_next\""
+ ]
+ },
+ "895": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"rate_reset_next\"",
+ "0"
+ ]
+ },
+ "896": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "897": {
+ "op": "bytec 39 // \"has_rate_reset_floor\"",
+ "defined_out": [
+ "\"has_rate_reset_floor\""
+ ],
+ "stack_out": [
+ "\"has_rate_reset_floor\""
+ ]
+ },
+ "899": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"has_rate_reset_floor\"",
+ "0"
+ ]
+ },
+ "900": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "901": {
+ "op": "bytec 40 // \"has_rate_reset_cap\"",
+ "defined_out": [
+ "\"has_rate_reset_cap\""
+ ],
+ "stack_out": [
+ "\"has_rate_reset_cap\""
+ ]
+ },
+ "903": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"has_rate_reset_cap\"",
+ "0"
+ ]
+ },
+ "904": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "905": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "defined_out": [
+ "\"reserved_principal\""
+ ],
+ "stack_out": [
+ "\"reserved_principal\""
+ ]
+ },
+ "907": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"reserved_principal\"",
+ "0"
+ ]
+ },
+ "908": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "909": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "defined_out": [
+ "\"reserved_interest\""
+ ],
+ "stack_out": [
+ "\"reserved_interest\""
+ ]
+ },
+ "911": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"reserved_interest\"",
+ "0"
+ ]
+ },
+ "912": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "913": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "defined_out": [
+ "\"cumulative_interest_index\""
+ ],
+ "stack_out": [
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "915": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"cumulative_interest_index\"",
+ "0"
+ ]
+ },
+ "916": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "917": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "defined_out": [
+ "\"cumulative_principal_index\""
+ ],
+ "stack_out": [
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "919": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"cumulative_principal_index\"",
+ "0"
+ ]
+ },
+ "920": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "921": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\""
+ ],
+ "stack_out": [
+ "\"event_cursor\""
+ ]
+ },
+ "922": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"event_cursor\"",
+ "0"
+ ]
+ },
+ "923": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "924": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\""
+ ],
+ "stack_out": [
+ "\"schedule_entry_count\""
+ ]
+ },
+ "925": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"schedule_entry_count\"",
+ "0"
+ ]
+ },
+ "926": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "927": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\""
+ ],
+ "stack_out": [
+ "\"fixed_point_scale\""
+ ]
+ },
+ "929": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "\"fixed_point_scale\"",
+ "0"
+ ]
+ },
+ "930": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "931": {
+ "op": "txn GlobalNumByteSlice",
+ "defined_out": [
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "tmp%0#2"
+ ]
+ },
+ "933": {
+ "op": "pushint 10",
+ "defined_out": [
+ "10",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "tmp%0#2",
+ "10"
+ ]
+ },
+ "935": {
+ "op": "==",
+ "defined_out": [
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "tmp%1#2"
+ ]
+ },
+ "936": {
+ "error": "Wrong Global Bytes allocation",
+ "op": "assert // Wrong Global Bytes allocation",
+ "stack_out": []
+ },
+ "937": {
+ "op": "txn GlobalNumUint",
+ "defined_out": [
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "tmp%2#1"
+ ]
+ },
+ "939": {
+ "op": "pushint 54",
+ "defined_out": [
+ "54",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "tmp%2#1",
+ "54"
+ ]
+ },
+ "941": {
+ "op": "==",
+ "defined_out": [
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "tmp%3#1"
+ ]
+ },
+ "942": {
+ "error": "Wrong Global UInts allocation",
+ "op": "assert // Wrong Global UInts allocation",
+ "stack_out": []
+ },
+ "943": {
+ "op": "txn LocalNumByteSlice",
+ "defined_out": [
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%4#1"
+ ]
+ },
+ "945": {
+ "op": "!",
+ "defined_out": [
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "tmp%5#0"
+ ]
+ },
+ "946": {
+ "error": "Wrong Local Bytes allocation",
+ "op": "assert // Wrong Local Bytes allocation",
+ "stack_out": []
+ },
+ "947": {
+ "op": "txn LocalNumUint",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "949": {
+ "op": "!",
+ "defined_out": [
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "tmp%7#0"
+ ]
+ },
+ "950": {
+ "error": "Wrong Local UInts allocation",
+ "op": "assert // Wrong Local UInts allocation",
+ "stack_out": []
+ },
+ "951": {
+ "block": "main_after_if_else@2",
+ "stack_in": [],
+ "op": "pushbytes 0x914f04eb // method \"contract_update()void\"",
+ "defined_out": [
+ "Method(contract_update()void)"
+ ],
+ "stack_out": [
+ "Method(contract_update()void)"
+ ]
+ },
+ "957": {
+ "op": "txna ApplicationArgs 0",
+ "defined_out": [
+ "Method(contract_update()void)",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "Method(contract_update()void)",
+ "tmp%0#1"
+ ]
+ },
+ "960": {
+ "op": "match main_contract_update_route@4",
+ "stack_out": []
+ },
+ "964": {
+ "block": "main_switch_case_next@5",
+ "stack_in": [],
+ "op": "txn OnCompletion",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "966": {
+ "op": "!",
+ "defined_out": [
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "tmp%7#0"
+ ]
+ },
+ "967": {
+ "op": "assert",
+ "stack_out": []
+ },
+ "968": {
+ "op": "txn ApplicationID",
+ "defined_out": [
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "tmp%8#0"
+ ]
+ },
+ "970": {
+ "op": "bz main_create_NoOp@33",
+ "stack_out": []
+ },
+ "973": {
+ "op": "pushbytess 0xb44618c8 0xe7832529 0x94388723 0x6c85e3ee 0xbdd1a944 0x7c0f1812 0x14fc10ef 0x74a7297f 0x09d4fe14 0x9a9bfa85 0x85eed33d 0xab2c0fc4 0xd9f225ac 0x9883505a 0x8ea6e74c 0x02af557a 0x82f71b2d 0xef04f5d3 0xdf343550 0x3dbe80bd 0x1e3e48e7 0x39241fa3 0x010c8299 0x7406acd2 0x1a72a2ee // method \"fund_due_cashflows(uint64)(uint64,uint64,uint64,uint64,uint64)\", method \"claim_due_cashflows(address,byte[])(uint64,uint64,uint64,uint64,byte[])\", method \"transfer_set_schedule(uint64,uint64)uint64\", method \"primary_distribution(address,uint64)uint64\", method \"transfer(address,address,uint64)uint64\", method \"account_suspension(address,bool)uint64\", method \"account_open(address,address)uint64\", method \"account_update_payment_address(address,address)uint64\", method \"account_get_position(address)(address,uint64,uint64,bool,uint64,uint64,uint64,uint64,uint64)\", method \"contract_config((uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint64,uint64,uint64,uint64,uint64,bool,bool,bool,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64),(byte[32],string))uint64\", method \"contract_schedule(uint64,bool,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)[])uint64\", method \"contract_execute_ied()uint64\", method \"apply_non_cash_event(uint64,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64\", method \"append_observed_cash_event((uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64\", method \"contract_get_state()(uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)\", method \"contract_get_next_due_event()(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)\", method \"rbac_rotate_arranger(address)uint64\", method \"rbac_set_op_daemon(address)uint64\", method \"rbac_assign_role(uint8,address,(uint64,uint64))uint64\", method \"rbac_revoke_role(uint8,address)uint64\", method \"rbac_contract_suspension(bool)uint64\", method \"rbac_contract_default(bool)uint64\", method \"rbac_get_arranger()address\", method \"rbac_get_address_roles(address)(bool,bool,bool,bool,bool)\", method \"rbac_get_role_validity(uint8,address)(uint64,uint64)\"",
+ "defined_out": [
+ "Method(account_get_position(address)(address,uint64,uint64,bool,uint64,uint64,uint64,uint64,uint64))",
+ "Method(account_open(address,address)uint64)",
+ "Method(account_suspension(address,bool)uint64)",
+ "Method(account_update_payment_address(address,address)uint64)",
+ "Method(append_observed_cash_event((uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(apply_non_cash_event(uint64,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(claim_due_cashflows(address,byte[])(uint64,uint64,uint64,uint64,byte[]))",
+ "Method(contract_config((uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint64,uint64,uint64,uint64,uint64,bool,bool,bool,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64),(byte[32],string))uint64)",
+ "Method(contract_execute_ied()uint64)",
+ "Method(contract_get_next_due_event()(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_get_state()(uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_schedule(uint64,bool,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)[])uint64)",
+ "Method(fund_due_cashflows(uint64)(uint64,uint64,uint64,uint64,uint64))",
+ "Method(primary_distribution(address,uint64)uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
+ "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
+ "Method(rbac_get_arranger()address)",
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))",
+ "Method(rbac_revoke_role(uint8,address)uint64)",
+ "Method(rbac_rotate_arranger(address)uint64)",
+ "Method(rbac_set_op_daemon(address)uint64)",
+ "Method(transfer(address,address,uint64)uint64)",
+ "Method(transfer_set_schedule(uint64,uint64)uint64)"
+ ],
+ "stack_out": [
+ "Method(fund_due_cashflows(uint64)(uint64,uint64,uint64,uint64,uint64))",
+ "Method(claim_due_cashflows(address,byte[])(uint64,uint64,uint64,uint64,byte[]))",
+ "Method(transfer_set_schedule(uint64,uint64)uint64)",
+ "Method(primary_distribution(address,uint64)uint64)",
+ "Method(transfer(address,address,uint64)uint64)",
+ "Method(account_suspension(address,bool)uint64)",
+ "Method(account_open(address,address)uint64)",
+ "Method(account_update_payment_address(address,address)uint64)",
+ "Method(account_get_position(address)(address,uint64,uint64,bool,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_config((uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint64,uint64,uint64,uint64,uint64,bool,bool,bool,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64),(byte[32],string))uint64)",
+ "Method(contract_schedule(uint64,bool,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)[])uint64)",
+ "Method(contract_execute_ied()uint64)",
+ "Method(apply_non_cash_event(uint64,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(append_observed_cash_event((uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(contract_get_state()(uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_get_next_due_event()(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(rbac_rotate_arranger(address)uint64)",
+ "Method(rbac_set_op_daemon(address)uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
+ "Method(rbac_revoke_role(uint8,address)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
+ "Method(rbac_get_arranger()address)",
+ "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))"
+ ]
+ },
+ "1100": {
+ "op": "txna ApplicationArgs 0",
+ "defined_out": [
+ "Method(account_get_position(address)(address,uint64,uint64,bool,uint64,uint64,uint64,uint64,uint64))",
+ "Method(account_open(address,address)uint64)",
+ "Method(account_suspension(address,bool)uint64)",
+ "Method(account_update_payment_address(address,address)uint64)",
+ "Method(append_observed_cash_event((uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(apply_non_cash_event(uint64,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(claim_due_cashflows(address,byte[])(uint64,uint64,uint64,uint64,byte[]))",
+ "Method(contract_config((uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint64,uint64,uint64,uint64,uint64,bool,bool,bool,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64),(byte[32],string))uint64)",
+ "Method(contract_execute_ied()uint64)",
+ "Method(contract_get_next_due_event()(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_get_state()(uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_schedule(uint64,bool,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)[])uint64)",
+ "Method(fund_due_cashflows(uint64)(uint64,uint64,uint64,uint64,uint64))",
+ "Method(primary_distribution(address,uint64)uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
+ "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
+ "Method(rbac_get_arranger()address)",
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))",
+ "Method(rbac_revoke_role(uint8,address)uint64)",
+ "Method(rbac_rotate_arranger(address)uint64)",
+ "Method(rbac_set_op_daemon(address)uint64)",
+ "Method(transfer(address,address,uint64)uint64)",
+ "Method(transfer_set_schedule(uint64,uint64)uint64)",
+ "tmp%10#0"
+ ],
+ "stack_out": [
+ "Method(fund_due_cashflows(uint64)(uint64,uint64,uint64,uint64,uint64))",
+ "Method(claim_due_cashflows(address,byte[])(uint64,uint64,uint64,uint64,byte[]))",
+ "Method(transfer_set_schedule(uint64,uint64)uint64)",
+ "Method(primary_distribution(address,uint64)uint64)",
+ "Method(transfer(address,address,uint64)uint64)",
+ "Method(account_suspension(address,bool)uint64)",
+ "Method(account_open(address,address)uint64)",
+ "Method(account_update_payment_address(address,address)uint64)",
+ "Method(account_get_position(address)(address,uint64,uint64,bool,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_config((uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint64,uint64,uint64,uint64,uint64,bool,bool,bool,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64),(byte[32],string))uint64)",
+ "Method(contract_schedule(uint64,bool,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)[])uint64)",
+ "Method(contract_execute_ied()uint64)",
+ "Method(apply_non_cash_event(uint64,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(append_observed_cash_event((uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64)",
+ "Method(contract_get_state()(uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(contract_get_next_due_event()(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))",
+ "Method(rbac_rotate_arranger(address)uint64)",
+ "Method(rbac_set_op_daemon(address)uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
+ "Method(rbac_revoke_role(uint8,address)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
+ "Method(rbac_get_arranger()address)",
+ "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))",
+ "tmp%10#0"
+ ]
+ },
+ "1103": {
+ "op": "match fund_due_cashflows claim_due_cashflows transfer_set_schedule primary_distribution transfer account_suspension account_open account_update_payment_address account_get_position contract_config contract_schedule contract_execute_ied apply_non_cash_event append_observed_cash_event contract_get_state contract_get_next_due_event rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_contract_suspension rbac_contract_default rbac_get_arranger rbac_get_address_roles rbac_get_role_validity",
+ "stack_out": []
+ },
+ "1155": {
+ "op": "err"
+ },
+ "1156": {
+ "block": "main_create_NoOp@33",
+ "stack_in": [],
+ "op": "pushbytes 0x956d7156 // method \"contract_create(address)uint64\"",
+ "defined_out": [
+ "Method(contract_create(address)uint64)"
+ ],
+ "stack_out": [
+ "Method(contract_create(address)uint64)"
+ ]
+ },
+ "1162": {
+ "op": "txna ApplicationArgs 0",
+ "defined_out": [
+ "Method(contract_create(address)uint64)",
+ "tmp%11#0"
+ ],
+ "stack_out": [
+ "Method(contract_create(address)uint64)",
+ "tmp%11#0"
+ ]
+ },
+ "1165": {
+ "op": "match contract_create",
+ "stack_out": []
+ },
+ "1169": {
+ "op": "err"
+ },
+ "1170": {
+ "block": "main_contract_update_route@4",
+ "stack_in": [],
+ "op": "txn OnCompletion",
+ "defined_out": [
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "tmp%1#1"
+ ]
+ },
+ "1172": {
+ "op": "pushint 4 // UpdateApplication",
+ "defined_out": [
+ "UpdateApplication",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "tmp%1#1",
+ "UpdateApplication"
+ ]
+ },
+ "1174": {
+ "op": "==",
+ "defined_out": [
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0"
+ ]
+ },
+ "1175": {
+ "op": "txn ApplicationID",
+ "defined_out": [
+ "tmp%2#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%2#0",
+ "tmp%3#0"
+ ]
+ },
+ "1177": {
+ "op": "&&",
+ "defined_out": [
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "tmp%5#0"
+ ]
+ },
+ "1178": {
+ "op": "assert",
+ "stack_out": []
+ },
+ "1179": {
+ "op": "b contract_update"
+ },
+ "1182": {
+ "subroutine": "_puya_lib.util.ensure_budget",
+ "params": {
+ "required_budget#0": "uint64",
+ "fee_source#0": "uint64"
+ },
+ "block": "ensure_budget",
+ "stack_in": [],
+ "op": "proto 2 0"
+ },
+ "1185": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "required_budget#0 (copy)"
+ ],
+ "stack_out": [
+ "required_budget#0 (copy)"
+ ]
+ },
+ "1187": {
+ "op": "pushint 10",
+ "defined_out": [
+ "10",
+ "required_budget#0 (copy)"
+ ],
+ "stack_out": [
+ "required_budget#0 (copy)",
+ "10"
+ ]
+ },
+ "1189": {
+ "op": "+",
+ "defined_out": [
+ "required_budget_with_buffer#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1190": {
+ "block": "ensure_budget_while_top@1",
+ "stack_in": [
+ "required_budget_with_buffer#0"
+ ],
+ "op": "frame_dig 0",
+ "defined_out": [
+ "required_budget_with_buffer#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1192": {
+ "op": "global OpcodeBudget",
+ "defined_out": [
+ "required_budget_with_buffer#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "required_budget_with_buffer#0",
+ "tmp%1#0"
+ ]
+ },
+ "1194": {
+ "op": ">",
+ "defined_out": [
+ "required_budget_with_buffer#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "tmp%2#0"
+ ]
+ },
+ "1195": {
+ "op": "bz ensure_budget_after_while@6",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1198": {
+ "op": "itxn_begin"
+ },
+ "1199": {
+ "op": "pushint 6 // appl",
+ "defined_out": [
+ "appl",
+ "required_budget_with_buffer#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "appl"
+ ]
+ },
+ "1201": {
+ "op": "itxn_field TypeEnum",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1203": {
+ "op": "pushint 5 // DeleteApplication",
+ "defined_out": [
+ "DeleteApplication",
+ "required_budget_with_buffer#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "DeleteApplication"
+ ]
+ },
+ "1205": {
+ "op": "itxn_field OnCompletion",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1207": {
+ "op": "bytec 47 // 0x068101",
+ "defined_out": [
+ "0x068101",
+ "required_budget_with_buffer#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "0x068101"
+ ]
+ },
+ "1209": {
+ "op": "itxn_field ApprovalProgram",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1211": {
+ "op": "bytec 47 // 0x068101",
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "0x068101"
+ ]
+ },
+ "1213": {
+ "op": "itxn_field ClearStateProgram",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1215": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "fee_source#0 (copy)",
+ "required_budget_with_buffer#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "fee_source#0 (copy)"
+ ]
+ },
+ "1217": {
+ "op": "switch ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1223": {
+ "block": "ensure_budget_switch_case_next@5",
+ "stack_in": [
+ "required_budget_with_buffer#0"
+ ],
+ "op": "itxn_submit"
+ },
+ "1224": {
+ "op": "b ensure_budget_while_top@1"
+ },
+ "1227": {
+ "block": "ensure_budget_switch_case_1@4",
+ "stack_in": [
+ "required_budget_with_buffer#0"
+ ],
+ "op": "global MinTxnFee",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "tmp%3#0"
+ ]
+ },
+ "1229": {
+ "op": "itxn_field Fee",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1231": {
+ "op": "b ensure_budget_switch_case_next@5"
+ },
+ "1234": {
+ "block": "ensure_budget_switch_case_0@3",
+ "stack_in": [
+ "required_budget_with_buffer#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "required_budget_with_buffer#0",
+ "0"
+ ]
+ },
+ "1235": {
+ "op": "itxn_field Fee",
+ "stack_out": [
+ "required_budget_with_buffer#0"
+ ]
+ },
+ "1237": {
+ "op": "b ensure_budget_switch_case_next@5"
+ },
+ "1240": {
+ "block": "ensure_budget_after_while@6",
+ "stack_in": [
+ "required_budget_with_buffer#0"
+ ],
+ "retsub": true,
+ "op": "retsub"
+ },
+ "1241": {
+ "subroutine": "modules.payment_agent.PaymentAgent.fund_due_cashflows[routing]",
+ "params": {},
+ "block": "fund_due_cashflows",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0"
+ ]
+ },
+ "1242": {
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0"
+ ]
+ },
+ "1244": {
+ "op": "dupn 13",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0"
+ ]
+ },
+ "1246": {
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "tmp%0#0"
+ ]
+ },
+ "1249": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "1250": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "1251": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "tmp%0#0",
+ "len%0#0",
+ "8"
+ ]
+ },
+ "1252": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "1253": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "tmp%0#0"
+ ]
+ },
+ "1254": {
+ "op": "btoi",
+ "defined_out": [
+ "max_event_count#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1255": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1256": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "max_event_count#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "1257": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "max_event_count#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1258": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "1259": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1260": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "1263": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "1266": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "1269": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1270": {
+ "op": "bytec_1 // \"status\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "1271": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1272": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "1273": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "max_event_count#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "1275": {
+ "op": "==",
+ "defined_out": [
+ "max_event_count#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#1"
+ ]
+ },
+ "1276": {
+ "op": "!",
+ "defined_out": [
+ "max_event_count#0",
+ "tmp%0#1",
+ "tmp%1#4"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%1#4"
+ ]
+ },
+ "1277": {
+ "error": "IED not yet executed",
+ "op": "assert // IED not yet executed",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1278": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._is_dynamic_annuity",
+ "op": "callsub _is_dynamic_annuity",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#1"
+ ]
+ },
+ "1281": {
+ "op": "bz fund_due_cashflows_after_if_else@3",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1284": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "max_event_count#0"
+ ]
+ },
+ "1285": {
+ "op": "pushint 100",
+ "defined_out": [
+ "100",
+ "max_event_count#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "max_event_count#0",
+ "100"
+ ]
+ },
+ "1287": {
+ "op": "*",
+ "defined_out": [
+ "max_event_count#0",
+ "tmp%0#1",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%1#1"
+ ]
+ },
+ "1288": {
+ "op": "intc 4 // 1500",
+ "defined_out": [
+ "1500",
+ "max_event_count#0",
+ "tmp%0#1",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%1#1",
+ "1500"
+ ]
+ },
+ "1290": {
+ "op": "+",
+ "defined_out": [
+ "max_event_count#0",
+ "tmp%0#1",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%2#1"
+ ]
+ },
+ "1291": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%2#1",
+ "0"
+ ]
+ },
+ "1292": {
+ "callsub": "_puya_lib.util.ensure_budget",
+ "op": "callsub ensure_budget",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1295": {
+ "block": "fund_due_cashflows_after_if_else@3",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ]
+ },
+ "1296": {
+ "op": "bury 5",
+ "defined_out": [
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1298": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "funded_interest#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_interest#0"
+ ]
+ },
+ "1299": {
+ "op": "bury 14",
+ "defined_out": [
+ "funded_interest#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1301": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_principal#0"
+ ]
+ },
+ "1302": {
+ "op": "bury 13",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1304": {
+ "block": "fund_due_cashflows_while_top@4",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 4",
+ "defined_out": [
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ]
+ },
+ "1306": {
+ "op": "dig 1",
+ "defined_out": [
+ "max_event_count#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "max_event_count#0"
+ ]
+ },
+ "1308": {
+ "op": "<",
+ "defined_out": [
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%3#1"
+ ]
+ },
+ "1309": {
+ "op": "bz fund_due_cashflows_after_while@11",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1312": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "max_event_count#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1313": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "max_event_count#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "1314": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "max_event_count#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1315": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "1316": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "1317": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "1318": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "max_event_count#0",
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "1319": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "1320": {
+ "op": "<",
+ "defined_out": [
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%4#0"
+ ]
+ },
+ "1321": {
+ "op": "bz fund_due_cashflows_after_while@11",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1324": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1325": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "1326": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "max_event_count#0",
+ "maybe_exists%2#0",
+ "maybe_value%2#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "1327": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "1328": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1331": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "entry#0"
+ ]
+ },
+ "1332": {
+ "op": "bury 17",
+ "defined_out": [
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1334": {
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "9"
+ ]
+ },
+ "1336": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0"
+ ]
+ },
+ "1337": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "values%0#0"
+ ]
+ },
+ "1338": {
+ "op": "bury 3",
+ "defined_out": [
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0"
+ ]
+ },
+ "1340": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%6#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "tmp%6#0"
+ ]
+ },
+ "1342": {
+ "op": ">",
+ "defined_out": [
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%7#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%7#0"
+ ]
+ },
+ "1343": {
+ "op": "bnz fund_due_cashflows_after_while@11",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1346": {
+ "op": "dig 15",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1348": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "entry#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "8"
+ ]
+ },
+ "1349": {
+ "op": "getbyte",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1350": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "1351": {
+ "op": "bury 16",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1353": {
+ "op": "intc_2 // 8",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "8"
+ ]
+ },
+ "1354": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#1"
+ ]
+ },
+ "1355": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#1",
+ "tmp%0#1"
+ ]
+ },
+ "1356": {
+ "op": "bury 4",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#1"
+ ]
+ },
+ "1358": {
+ "op": "bnz fund_due_cashflows_bool_true@52",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1361": {
+ "op": "dig 14",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1363": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "3"
+ ]
+ },
+ "1365": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%0#1",
+ "tmp%1#4",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%1#4"
+ ]
+ },
+ "1366": {
+ "op": "bnz fund_due_cashflows_bool_true@52",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1369": {
+ "op": "dig 14",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1371": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "19"
+ ]
+ },
+ "1373": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%0#1",
+ "tmp%2#2",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%2#2"
+ ]
+ },
+ "1374": {
+ "op": "bz fund_due_cashflows_bool_false@53",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1377": {
+ "block": "fund_due_cashflows_bool_true@52",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "or_result%0#0"
+ ]
+ },
+ "1378": {
+ "block": "fund_due_cashflows_bool_merge@54",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "or_result%0#0"
+ ],
+ "op": "bz fund_due_cashflows_after_while@11",
+ "defined_out": [],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1381": {
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1383": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "0"
+ ]
+ },
+ "1384": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "entry#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#1"
+ ]
+ },
+ "1385": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#1",
+ "0"
+ ]
+ },
+ "1386": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "entry#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#1",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "1387": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "entry#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#1",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1388": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#1",
+ "maybe_value%0#0"
+ ]
+ },
+ "1389": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#2"
+ ]
+ },
+ "1390": {
+ "error": "Invalid event cursor",
+ "op": "assert // Invalid event cursor",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1391": {
+ "op": "dig 1",
+ "defined_out": [
+ "entry#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0"
+ ]
+ },
+ "1393": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "entry#0",
+ "tmp%1#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "tmp%1#1"
+ ]
+ },
+ "1395": {
+ "op": "<=",
+ "defined_out": [
+ "entry#0",
+ "tmp%2#2",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%2#2"
+ ]
+ },
+ "1396": {
+ "error": "No due cashflow to pay",
+ "op": "assert // No due cashflow to pay",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1397": {
+ "op": "dig 2",
+ "defined_out": [
+ "entry#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%0#1"
+ ]
+ },
+ "1399": {
+ "op": "bnz fund_due_cashflows_after_if_else@15",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1402": {
+ "op": "dig 14",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1404": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "entry#0",
+ "event_type#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "19"
+ ]
+ },
+ "1406": {
+ "op": "==",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%2#2"
+ ]
+ },
+ "1407": {
+ "op": "bnz fund_due_cashflows_after_if_else@15",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1410": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "interest_amount_due#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_amount_due#0"
+ ]
+ },
+ "1411": {
+ "op": "bury 11",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "interest_amount_due#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1413": {
+ "block": "fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_interest_amount@16",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1415": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "8"
+ ]
+ },
+ "1416": {
+ "op": "getbyte",
+ "defined_out": [
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1417": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "1418": {
+ "op": "bury 16",
+ "defined_out": [
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1420": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "3"
+ ]
+ },
+ "1422": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "tmp%1#4"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%1#4"
+ ]
+ },
+ "1423": {
+ "op": "bnz fund_due_cashflows_after_if_else@19",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1426": {
+ "op": "dig 14",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1428": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "19"
+ ]
+ },
+ "1430": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "tmp%2#2"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%2#2"
+ ]
+ },
+ "1431": {
+ "op": "bnz fund_due_cashflows_after_if_else@19",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1434": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1435": {
+ "op": "bury 6",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1437": {
+ "block": "fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1439": {
+ "op": "pushint 49",
+ "defined_out": [
+ "49",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "49"
+ ]
+ },
+ "1441": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "entry#0",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_outstanding_principal#0"
+ ]
+ },
+ "1442": {
+ "op": "bury 8",
+ "defined_out": [
+ "entry#0",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1444": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._is_dynamic_annuity",
+ "op": "callsub _is_dynamic_annuity",
+ "defined_out": [
+ "entry#0",
+ "next_outstanding_principal#0",
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%3#1"
+ ]
+ },
+ "1447": {
+ "op": "bnz fund_due_cashflows_if_body@29",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1450": {
+ "op": "dig 7",
+ "defined_out": [
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_interest_base#2"
+ ]
+ },
+ "1452": {
+ "op": "bury 9",
+ "defined_out": [
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1454": {
+ "block": "fund_due_cashflows_after_if_else@38",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 10",
+ "defined_out": [
+ "interest_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_amount_due#0"
+ ]
+ },
+ "1456": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._amount_to_index_delta",
+ "op": "callsub _amount_to_index_delta",
+ "defined_out": [
+ "interest_amount_due#0",
+ "interest_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0"
+ ]
+ },
+ "1459": {
+ "op": "dig 6",
+ "defined_out": [
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1461": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._amount_to_index_delta",
+ "op": "callsub _amount_to_index_delta",
+ "defined_out": [
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0"
+ ]
+ },
+ "1464": {
+ "op": "dig 1",
+ "defined_out": [
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "interest_index_delta#0 (copy)",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "interest_index_delta#0 (copy)"
+ ]
+ },
+ "1466": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._index_delta_to_amount",
+ "op": "callsub _index_delta_to_amount",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "interest_amount#1"
+ ]
+ },
+ "1469": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "interest_amount#1",
+ "interest_amount#1 (copy)"
+ ]
+ },
+ "1470": {
+ "op": "cover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "interest_amount#1"
+ ]
+ },
+ "1472": {
+ "op": "bury 15",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0"
+ ]
+ },
+ "1474": {
+ "op": "dup",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "principal_index_delta#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_index_delta#0 (copy)"
+ ]
+ },
+ "1475": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._index_delta_to_amount",
+ "op": "callsub _index_delta_to_amount",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1"
+ ]
+ },
+ "1478": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "principal_amount#1"
+ ]
+ },
+ "1479": {
+ "op": "bury 11",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1"
+ ]
+ },
+ "1481": {
+ "op": "dig 2",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount#1 (copy)",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "interest_amount#1 (copy)"
+ ]
+ },
+ "1483": {
+ "op": "dig 1",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount#1 (copy)",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount#1 (copy)",
+ "principal_amount_due#0",
+ "principal_index_delta#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "interest_amount#1 (copy)",
+ "principal_amount#1 (copy)"
+ ]
+ },
+ "1485": {
+ "op": "+",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0"
+ ]
+ },
+ "1486": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "required_amount#0"
+ ]
+ },
+ "1487": {
+ "op": "bury 9",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0"
+ ]
+ },
+ "1489": {
+ "op": "global CurrentApplicationAddress",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "tmp%0#3"
+ ]
+ },
+ "1491": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "tmp%0#3",
+ "0"
+ ]
+ },
+ "1492": {
+ "op": "bytec 19 // \"settlement_asset_id\"",
+ "defined_out": [
+ "\"settlement_asset_id\"",
+ "0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "tmp%0#3",
+ "0",
+ "\"settlement_asset_id\""
+ ]
+ },
+ "1494": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "tmp%0#3",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1495": {
+ "error": "check self.settlement_asset_id exists",
+ "op": "assert // check self.settlement_asset_id exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "tmp%0#3",
+ "maybe_value%0#0"
+ ]
+ },
+ "1496": {
+ "op": "asset_holding_get AssetBalance",
+ "defined_out": [
+ "balance#0",
+ "check%0#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "check%0#0"
+ ]
+ },
+ "1498": {
+ "error": "account opted into asset",
+ "op": "assert // account opted into asset",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0"
+ ]
+ },
+ "1499": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "0"
+ ]
+ },
+ "1500": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "defined_out": [
+ "\"reserved_interest\"",
+ "0",
+ "balance#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "0",
+ "\"reserved_interest\""
+ ]
+ },
+ "1502": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1503": {
+ "error": "check self.reserved_interest exists",
+ "op": "assert // check self.reserved_interest exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "1504": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "1505": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "defined_out": [
+ "\"reserved_principal\"",
+ "0",
+ "balance#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "0",
+ "\"reserved_principal\""
+ ]
+ },
+ "1507": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "balance#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "1508": {
+ "error": "check self.reserved_principal exists",
+ "op": "assert // check self.reserved_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "1509": {
+ "op": "dig 1",
+ "defined_out": [
+ "balance#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "maybe_value%1#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "1511": {
+ "op": "+",
+ "defined_out": [
+ "balance#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "reserved_total#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "reserved_total#0"
+ ]
+ },
+ "1512": {
+ "op": "dig 2",
+ "defined_out": [
+ "balance#0",
+ "balance#0 (copy)",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "reserved_total#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "reserved_total#0",
+ "balance#0 (copy)"
+ ]
+ },
+ "1514": {
+ "op": "dig 1",
+ "defined_out": [
+ "balance#0",
+ "balance#0 (copy)",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "reserved_total#0",
+ "reserved_total#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "reserved_total#0",
+ "balance#0 (copy)",
+ "reserved_total#0 (copy)"
+ ]
+ },
+ "1516": {
+ "op": ">=",
+ "defined_out": [
+ "balance#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "reserved_total#0",
+ "tmp%2#2"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "reserved_total#0",
+ "tmp%2#2"
+ ]
+ },
+ "1517": {
+ "error": "Not enough funds for the payment",
+ "op": "assert // Not enough funds for the payment",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "balance#0",
+ "maybe_value%0#0",
+ "reserved_total#0"
+ ]
+ },
+ "1518": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "maybe_value%0#0",
+ "reserved_total#0",
+ "balance#0"
+ ]
+ },
+ "1520": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "maybe_value%0#0",
+ "balance#0",
+ "reserved_total#0"
+ ]
+ },
+ "1521": {
+ "op": "-",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%3#3"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "required_amount#0",
+ "maybe_value%0#0",
+ "tmp%3#3"
+ ]
+ },
+ "1522": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "maybe_value%0#0",
+ "tmp%3#3",
+ "required_amount#0"
+ ]
+ },
+ "1524": {
+ "op": ">=",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_value%0#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%15#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "maybe_value%0#0",
+ "tmp%15#1"
+ ]
+ },
+ "1525": {
+ "error": "Not enough funds for the payment",
+ "op": "assert // Not enough funds for the payment",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "interest_amount#1",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "maybe_value%0#0"
+ ]
+ },
+ "1526": {
+ "op": "uncover 3",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "maybe_value%0#0",
+ "interest_amount#1"
+ ]
+ },
+ "1528": {
+ "op": "+",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%16#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "tmp%16#1"
+ ]
+ },
+ "1529": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "tmp%16#1",
+ "\"reserved_interest\""
+ ]
+ },
+ "1531": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "\"reserved_interest\"",
+ "tmp%16#1"
+ ]
+ },
+ "1532": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1"
+ ]
+ },
+ "1533": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "0"
+ ]
+ },
+ "1534": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "0",
+ "\"reserved_principal\""
+ ]
+ },
+ "1536": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_exists%5#0",
+ "maybe_value%5#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "1537": {
+ "error": "check self.reserved_principal exists",
+ "op": "assert // check self.reserved_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "principal_amount#1",
+ "maybe_value%5#0"
+ ]
+ },
+ "1538": {
+ "op": "+",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%17#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "tmp%17#0"
+ ]
+ },
+ "1539": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "tmp%17#0",
+ "\"reserved_principal\""
+ ]
+ },
+ "1541": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "\"reserved_principal\"",
+ "tmp%17#0"
+ ]
+ },
+ "1542": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0"
+ ]
+ },
+ "1543": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "0"
+ ]
+ },
+ "1544": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "defined_out": [
+ "\"cumulative_interest_index\"",
+ "0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "0",
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "1546": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_index_delta#0",
+ "maybe_exists%6#0",
+ "maybe_value%6#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "maybe_value%6#0",
+ "maybe_exists%6#0"
+ ]
+ },
+ "1547": {
+ "error": "check self.cumulative_interest_index exists",
+ "op": "assert // check self.cumulative_interest_index exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_index_delta#0",
+ "principal_index_delta#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "1548": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "maybe_value%6#0",
+ "interest_index_delta#0"
+ ]
+ },
+ "1550": {
+ "op": "+",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0",
+ "tmp%18#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "tmp%18#0"
+ ]
+ },
+ "1551": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "tmp%18#0",
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "1553": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "\"cumulative_interest_index\"",
+ "tmp%18#0"
+ ]
+ },
+ "1554": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0"
+ ]
+ },
+ "1555": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "0"
+ ]
+ },
+ "1556": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "defined_out": [
+ "\"cumulative_principal_index\"",
+ "0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "0",
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "1558": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "maybe_exists%7#0",
+ "maybe_value%7#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "principal_index_delta#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "maybe_value%7#0",
+ "maybe_exists%7#0"
+ ]
+ },
+ "1559": {
+ "error": "check self.cumulative_principal_index exists",
+ "op": "assert // check self.cumulative_principal_index exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_index_delta#0",
+ "maybe_value%7#0"
+ ]
+ },
+ "1560": {
+ "op": "+",
+ "defined_out": [
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0",
+ "tmp%19#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%19#0"
+ ]
+ },
+ "1561": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%19#0",
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "1563": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"cumulative_principal_index\"",
+ "tmp%19#0"
+ ]
+ },
+ "1564": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1565": {
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1567": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "8"
+ ]
+ },
+ "1568": {
+ "op": "getbyte",
+ "defined_out": [
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0",
+ "tmp%20#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%20#0"
+ ]
+ },
+ "1569": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0",
+ "tmp%20#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%20#0",
+ "3"
+ ]
+ },
+ "1571": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0",
+ "tmp%21#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%21#0"
+ ]
+ },
+ "1572": {
+ "op": "bz fund_due_cashflows_else_body@40",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1575": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1576": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0",
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"accrued_interest\""
+ ]
+ },
+ "1578": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "maybe_exists%8#0",
+ "maybe_value%8#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%8#0",
+ "maybe_exists%8#0"
+ ]
+ },
+ "1579": {
+ "error": "check self.accrued_interest exists",
+ "op": "assert // check self.accrued_interest exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%8#0"
+ ]
+ },
+ "1580": {
+ "op": "dig 16",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%8#0",
+ "entry#0"
+ ]
+ },
+ "1582": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._entry_interest_segment",
+ "op": "callsub _entry_interest_segment",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "maybe_value%8#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%8#0",
+ "_entry_interest_segment%0#0",
+ "entry#0"
+ ]
+ },
+ "1585": {
+ "op": "bury 18",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "maybe_value%8#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%8#0",
+ "_entry_interest_segment%0#0"
+ ]
+ },
+ "1587": {
+ "op": "+",
+ "defined_out": [
+ "entry#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "required_amount#0",
+ "tmp%22#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%22#0"
+ ]
+ },
+ "1588": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%22#0",
+ "\"accrued_interest\""
+ ]
+ },
+ "1590": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"accrued_interest\"",
+ "tmp%22#0"
+ ]
+ },
+ "1591": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1592": {
+ "block": "fund_due_cashflows_after_if_else@41",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "callsub": "modules.actus_kernel.ActusKernelModule._is_dynamic_annuity",
+ "op": "callsub _is_dynamic_annuity",
+ "defined_out": [
+ "tmp%23#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%23#0"
+ ]
+ },
+ "1595": {
+ "op": "bz fund_due_cashflows_if_body@43",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1598": {
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1600": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "8"
+ ]
+ },
+ "1601": {
+ "op": "getbyte",
+ "defined_out": [
+ "entry#0",
+ "tmp%24#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%24#0"
+ ]
+ },
+ "1602": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "entry#0",
+ "tmp%24#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%24#0",
+ "19"
+ ]
+ },
+ "1604": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "tmp%25#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%25#0"
+ ]
+ },
+ "1605": {
+ "op": "bz fund_due_cashflows_after_if_else@44",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1608": {
+ "block": "fund_due_cashflows_if_body@43",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1610": {
+ "op": "pushint 41",
+ "defined_out": [
+ "41",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "41"
+ ]
+ },
+ "1612": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "entry#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%4#0"
+ ]
+ },
+ "1613": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "entry#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%4#0",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "1615": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"next_principal_redemption\"",
+ "values%4#0"
+ ]
+ },
+ "1616": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1617": {
+ "block": "fund_due_cashflows_after_if_else@44",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\""
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1619": {
+ "op": "dig 8",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"outstanding_principal\"",
+ "next_outstanding_principal#0"
+ ]
+ },
+ "1621": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1622": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "1624": {
+ "op": "dig 9",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"interest_calculation_base\"",
+ "next_interest_base#2"
+ ]
+ },
+ "1626": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1627": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1628": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "1629": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%9#0",
+ "maybe_value%9#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%9#0",
+ "maybe_exists%9#0"
+ ]
+ },
+ "1630": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%9#0"
+ ]
+ },
+ "1631": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "maybe_value%9#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%9#0",
+ "1"
+ ]
+ },
+ "1632": {
+ "op": "+",
+ "defined_out": [
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "tmp%26#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%26#0"
+ ]
+ },
+ "1633": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%26#0",
+ "\"event_cursor\""
+ ]
+ },
+ "1634": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"event_cursor\"",
+ "tmp%26#0"
+ ]
+ },
+ "1635": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1636": {
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1638": {
+ "op": "extract 8 1",
+ "defined_out": [
+ "aggregate%extract%10#0",
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "aggregate%extract%10#0"
+ ]
+ },
+ "1641": {
+ "op": "pushbytes 0x13",
+ "defined_out": [
+ "0x13",
+ "aggregate%extract%10#0",
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "aggregate%extract%10#0",
+ "0x13"
+ ]
+ },
+ "1644": {
+ "op": "b==",
+ "defined_out": [
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "tmp%27#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%27#0"
+ ]
+ },
+ "1645": {
+ "op": "bz fund_due_cashflows_after_if_else@47",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1648": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1649": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1651": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "entry#0",
+ "maybe_exists%10#0",
+ "maybe_value%10#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%10#0",
+ "maybe_exists%10#0"
+ ]
+ },
+ "1652": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%10#0"
+ ]
+ },
+ "1653": {
+ "op": "bnz fund_due_cashflows_after_if_else@47",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1656": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"status\""
+ ]
+ },
+ "1657": {
+ "op": "pushint 200",
+ "defined_out": [
+ "\"status\"",
+ "200",
+ "entry#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"status\"",
+ "200"
+ ]
+ },
+ "1660": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1661": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "1663": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"interest_calculation_base\"",
+ "0"
+ ]
+ },
+ "1664": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1665": {
+ "block": "fund_due_cashflows_after_if_else@47",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1667": {
+ "op": "dig 4",
+ "defined_out": [
+ "entry#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "required_amount#0"
+ ]
+ },
+ "1669": {
+ "op": "dup",
+ "defined_out": [
+ "entry#0",
+ "required_amount#0",
+ "required_amount#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "required_amount#0 (copy)",
+ "required_amount#0"
+ ]
+ },
+ "1670": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._emit_execution_event",
+ "op": "callsub _emit_execution_event",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1673": {
+ "op": "pop",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1674": {
+ "op": "dig 13",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_interest#0"
+ ]
+ },
+ "1676": {
+ "op": "dig 12",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "interest_amount#1",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_interest#0",
+ "interest_amount#1"
+ ]
+ },
+ "1678": {
+ "op": "+",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_interest#0"
+ ]
+ },
+ "1679": {
+ "op": "bury 14",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "interest_amount#1",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1681": {
+ "op": "dig 12",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_principal#0"
+ ]
+ },
+ "1683": {
+ "op": "dig 7",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "principal_amount#1",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_principal#0",
+ "principal_amount#1"
+ ]
+ },
+ "1685": {
+ "op": "+",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "funded_principal#0"
+ ]
+ },
+ "1686": {
+ "op": "bury 13",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "principal_amount#1",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1688": {
+ "op": "dig 4",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "principal_amount#1",
+ "processed_events#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ]
+ },
+ "1690": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "entry#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "principal_amount#1",
+ "processed_events#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "1"
+ ]
+ },
+ "1691": {
+ "op": "+",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ]
+ },
+ "1692": {
+ "op": "bury 5",
+ "defined_out": [
+ "entry#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "principal_amount#1",
+ "processed_events#0",
+ "required_amount#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1694": {
+ "op": "b fund_due_cashflows_while_top@4"
+ },
+ "1697": {
+ "block": "fund_due_cashflows_else_body@40",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\""
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"accrued_interest\""
+ ]
+ },
+ "1699": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "\"accrued_interest\"",
+ "0"
+ ]
+ },
+ "1700": {
+ "op": "app_global_put",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1701": {
+ "op": "b fund_due_cashflows_after_if_else@41"
+ },
+ "1704": {
+ "block": "fund_due_cashflows_if_body@29",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1706": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "8"
+ ]
+ },
+ "1707": {
+ "op": "getbyte",
+ "defined_out": [
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1708": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "1709": {
+ "op": "bury 16",
+ "defined_out": [
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1711": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "3"
+ ]
+ },
+ "1713": {
+ "op": "==",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%5#0"
+ ]
+ },
+ "1714": {
+ "op": "bz fund_due_cashflows_else_body@31",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1717": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1718": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "entry#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1720": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "maybe_exists%1#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "1721": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "1722": {
+ "op": "dig 6",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "maybe_value%1#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1724": {
+ "op": "-",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "next_outstanding_principal#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_outstanding_principal#0"
+ ]
+ },
+ "1725": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_outstanding_principal#0",
+ "next_outstanding_principal#0"
+ ]
+ },
+ "1726": {
+ "op": "bury 9",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_interest_base#2"
+ ]
+ },
+ "1728": {
+ "op": "bury 9",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1730": {
+ "op": "b fund_due_cashflows_after_if_else@38"
+ },
+ "1733": {
+ "block": "fund_due_cashflows_else_body@31",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 14",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1735": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "8"
+ ]
+ },
+ "1736": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%7#0"
+ ]
+ },
+ "1737": {
+ "op": "bz fund_due_cashflows_else_body@33",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1740": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1741": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1743": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%2#0",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_outstanding_principal#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "1744": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_exists%2#0",
+ "next_outstanding_principal#0"
+ ]
+ },
+ "1745": {
+ "op": "bury 9",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%2#0",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "1747": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1748": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1749": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "0",
+ "event_type#0",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "1751": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%3#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_interest_base#2",
+ "maybe_exists%3#0"
+ ]
+ },
+ "1752": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_exists%3#0",
+ "next_interest_base#2"
+ ]
+ },
+ "1753": {
+ "op": "bury 10",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%3#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "1755": {
+ "error": "check self.interest_calculation_base exists",
+ "op": "assert // check self.interest_calculation_base exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1756": {
+ "op": "b fund_due_cashflows_after_if_else@38"
+ },
+ "1759": {
+ "block": "fund_due_cashflows_else_body@33",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 14",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1761": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "19"
+ ]
+ },
+ "1763": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%8#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%8#1"
+ ]
+ },
+ "1764": {
+ "op": "bnz fund_due_cashflows_if_body@34",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1767": {
+ "op": "dig 7",
+ "defined_out": [
+ "event_type#0",
+ "next_interest_base#2"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_interest_base#2"
+ ]
+ },
+ "1769": {
+ "op": "bury 9",
+ "defined_out": [
+ "event_type#0",
+ "next_interest_base#2"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1771": {
+ "op": "b fund_due_cashflows_after_if_else@38"
+ },
+ "1774": {
+ "block": "fund_due_cashflows_if_body@34",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_outstanding_principal#0"
+ ]
+ },
+ "1775": {
+ "op": "bury 8",
+ "defined_out": [
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1777": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "next_interest_base#2"
+ ]
+ },
+ "1778": {
+ "op": "bury 9",
+ "defined_out": [
+ "next_interest_base#2",
+ "next_outstanding_principal#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1780": {
+ "op": "b fund_due_cashflows_after_if_else@38"
+ },
+ "1783": {
+ "block": "fund_due_cashflows_after_if_else@19",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "callsub": "modules.actus_kernel.ActusKernelModule._is_dynamic_annuity",
+ "op": "callsub _is_dynamic_annuity",
+ "defined_out": [
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%3#1"
+ ]
+ },
+ "1786": {
+ "op": "bz fund_due_cashflows_after_if_else@27",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1789": {
+ "op": "dig 14",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0"
+ ]
+ },
+ "1791": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "event_type#0",
+ "19"
+ ]
+ },
+ "1793": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%4#0"
+ ]
+ },
+ "1794": {
+ "op": "bz fund_due_cashflows_after_if_else@22",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1797": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1798": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1800": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1801": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "defined_out": [
+ "event_type#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1802": {
+ "op": "bury 6",
+ "defined_out": [
+ "event_type#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1804": {
+ "op": "b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28"
+ },
+ "1807": {
+ "block": "fund_due_cashflows_after_if_else@22",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1808": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"accrued_interest\""
+ ]
+ },
+ "1810": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "1811": {
+ "error": "check self.accrued_interest exists",
+ "op": "assert // check self.accrued_interest exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "1812": {
+ "op": "dig 16",
+ "defined_out": [
+ "entry#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0",
+ "entry#0"
+ ]
+ },
+ "1814": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._entry_interest_segment",
+ "op": "callsub _entry_interest_segment",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0",
+ "_entry_interest_segment%0#0",
+ "entry#0"
+ ]
+ },
+ "1817": {
+ "op": "bury 18",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%1#0",
+ "_entry_interest_segment%0#0"
+ ]
+ },
+ "1819": {
+ "op": "+",
+ "defined_out": [
+ "entry#0",
+ "interest_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0"
+ ]
+ },
+ "1820": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0",
+ "interest_due#0"
+ ]
+ },
+ "1821": {
+ "op": "bury 11",
+ "defined_out": [
+ "entry#0",
+ "interest_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0"
+ ]
+ },
+ "1823": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0",
+ "0"
+ ]
+ },
+ "1824": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "0",
+ "entry#0",
+ "interest_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0",
+ "0",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "1826": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "entry#0",
+ "interest_due#0",
+ "maybe_exists%2#0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "1827": {
+ "error": "check self.next_principal_redemption exists",
+ "op": "assert // check self.next_principal_redemption exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_due#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "1828": {
+ "op": ">=",
+ "defined_out": [
+ "entry#0",
+ "interest_due#0",
+ "tmp%6#2"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%6#2"
+ ]
+ },
+ "1829": {
+ "op": "bz fund_due_cashflows_after_if_else@24",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1832": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "entry#0",
+ "interest_due#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1833": {
+ "op": "bury 6",
+ "defined_out": [
+ "entry#0",
+ "interest_due#0",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1835": {
+ "op": "b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28"
+ },
+ "1838": {
+ "block": "fund_due_cashflows_after_if_else@24",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1839": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "1841": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%3#0",
+ "maybe_value%3#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%3#1",
+ "maybe_exists%3#0"
+ ]
+ },
+ "1842": {
+ "error": "check self.next_principal_redemption exists",
+ "op": "assert // check self.next_principal_redemption exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%3#1"
+ ]
+ },
+ "1843": {
+ "op": "dig 10",
+ "defined_out": [
+ "interest_due#0",
+ "maybe_value%3#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%3#1",
+ "interest_due#0"
+ ]
+ },
+ "1845": {
+ "op": "-",
+ "defined_out": [
+ "interest_due#0",
+ "principal_amount#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1"
+ ]
+ },
+ "1846": {
+ "op": "dup",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1",
+ "principal_amount#1"
+ ]
+ },
+ "1847": {
+ "op": "bury 8",
+ "defined_out": [
+ "interest_due#0",
+ "principal_amount#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1"
+ ]
+ },
+ "1849": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1",
+ "0"
+ ]
+ },
+ "1850": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "interest_due#0",
+ "principal_amount#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1852": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "interest_due#0",
+ "maybe_exists%4#1",
+ "maybe_value%4#1",
+ "principal_amount#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1",
+ "maybe_value%4#1",
+ "maybe_exists%4#1"
+ ]
+ },
+ "1853": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount#1",
+ "maybe_value%4#1"
+ ]
+ },
+ "1854": {
+ "op": ">",
+ "defined_out": [
+ "interest_due#0",
+ "principal_amount#1",
+ "tmp%8#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%8#1"
+ ]
+ },
+ "1855": {
+ "op": "bz fund_due_cashflows_after_if_else@26",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1858": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1859": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1861": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "interest_due#0",
+ "maybe_exists%5#0",
+ "maybe_value%5#0",
+ "principal_amount#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "1862": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "defined_out": [
+ "interest_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1863": {
+ "op": "bury 6",
+ "defined_out": [
+ "interest_due#0",
+ "principal_amount#1",
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1865": {
+ "op": "b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28"
+ },
+ "1868": {
+ "block": "fund_due_cashflows_after_if_else@26",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 6",
+ "defined_out": [
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1870": {
+ "op": "bury 6",
+ "defined_out": [
+ "principal_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1872": {
+ "op": "b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28"
+ },
+ "1875": {
+ "block": "fund_due_cashflows_after_if_else@27",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 15",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0"
+ ]
+ },
+ "1877": {
+ "op": "pushint 49",
+ "defined_out": [
+ "49",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "entry#0",
+ "49"
+ ]
+ },
+ "1879": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "entry#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0"
+ ]
+ },
+ "1880": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "entry#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "1881": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "entry#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "1883": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "entry#0",
+ "maybe_exists%6#0",
+ "maybe_value%6#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "maybe_value%6#0",
+ "maybe_exists%6#0"
+ ]
+ },
+ "1884": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "1885": {
+ "op": "dup2",
+ "defined_out": [
+ "entry#0",
+ "maybe_value%6#0",
+ "maybe_value%6#0 (copy)",
+ "values%0#0",
+ "values%0#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "maybe_value%6#0",
+ "values%0#0 (copy)",
+ "maybe_value%6#0 (copy)"
+ ]
+ },
+ "1886": {
+ "op": "<=",
+ "defined_out": [
+ "entry#0",
+ "maybe_value%6#0",
+ "tmp%9#2",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "maybe_value%6#0",
+ "tmp%9#2"
+ ]
+ },
+ "1887": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "values%0#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "1888": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%6#0",
+ "values%0#0"
+ ]
+ },
+ "1889": {
+ "op": "-",
+ "defined_out": [
+ "entry#0",
+ "principal_amount_due#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "principal_amount_due#0"
+ ]
+ },
+ "1890": {
+ "op": "bury 6",
+ "defined_out": [
+ "entry#0",
+ "principal_amount_due#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1892": {
+ "op": "b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28"
+ },
+ "1895": {
+ "block": "fund_due_cashflows_after_if_else@15",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0"
+ ]
+ },
+ "1896": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0",
+ "\"accrued_interest\""
+ ]
+ },
+ "1898": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1899": {
+ "error": "check self.accrued_interest exists",
+ "op": "assert // check self.accrued_interest exists",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "1900": {
+ "op": "dig 16",
+ "defined_out": [
+ "entry#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "entry#0"
+ ]
+ },
+ "1902": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._entry_interest_segment",
+ "op": "callsub _entry_interest_segment",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "_entry_interest_segment%0#0",
+ "entry#0"
+ ]
+ },
+ "1905": {
+ "op": "bury 18",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "maybe_value%0#0",
+ "_entry_interest_segment%0#0"
+ ]
+ },
+ "1907": {
+ "op": "+",
+ "defined_out": [
+ "entry#0",
+ "interest_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "interest_amount_due#0"
+ ]
+ },
+ "1908": {
+ "op": "bury 11",
+ "defined_out": [
+ "entry#0",
+ "interest_amount_due#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1910": {
+ "op": "b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_interest_amount@16"
+ },
+ "1913": {
+ "block": "fund_due_cashflows_after_while@11",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "dig 4",
+ "defined_out": [
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ]
+ },
+ "1915": {
+ "op": "dup",
+ "defined_out": [
+ "processed_events#0",
+ "processed_events#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "processed_events#0 (copy)"
+ ]
+ },
+ "1916": {
+ "error": "No due cashflow to pay",
+ "op": "assert // No due cashflow to pay",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0"
+ ]
+ },
+ "1917": {
+ "op": "dig 14",
+ "defined_out": [
+ "funded_interest#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_interest#0"
+ ]
+ },
+ "1919": {
+ "op": "dup",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_interest#0 (copy)",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_interest#0",
+ "funded_interest#0 (copy)"
+ ]
+ },
+ "1920": {
+ "op": "dig 15",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_interest#0 (copy)",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_interest#0",
+ "funded_interest#0 (copy)",
+ "funded_principal#0"
+ ]
+ },
+ "1922": {
+ "op": "dup",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_interest#0 (copy)",
+ "funded_principal#0",
+ "funded_principal#0 (copy)",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_interest#0",
+ "funded_interest#0 (copy)",
+ "funded_principal#0 (copy)",
+ "funded_principal#0 (copy)"
+ ]
+ },
+ "1923": {
+ "op": "cover 3",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_principal#0",
+ "funded_interest#0",
+ "funded_interest#0 (copy)",
+ "funded_principal#0 (copy)"
+ ]
+ },
+ "1925": {
+ "op": "+",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%14#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_principal#0",
+ "funded_interest#0",
+ "tmp%14#0"
+ ]
+ },
+ "1926": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_principal#0",
+ "funded_interest#0",
+ "tmp%14#0",
+ "tmp%15#0"
+ ]
+ },
+ "1928": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_principal#0",
+ "tmp%14#0",
+ "tmp%15#0",
+ "funded_interest#0"
+ ]
+ },
+ "1930": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "funded_principal#0",
+ "tmp%14#0",
+ "tmp%15#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "1931": {
+ "op": "uncover 3",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0",
+ "aggregate%val_as_bytes%0#0",
+ "funded_principal#0"
+ ]
+ },
+ "1933": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%1#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "1934": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%14#0",
+ "tmp%15#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "1935": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%15#0",
+ "aggregate%head%1#0",
+ "tmp%14#0"
+ ]
+ },
+ "1937": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%2#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%15#0",
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%2#0"
+ ]
+ },
+ "1938": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "processed_events#0",
+ "tmp%15#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "1939": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%15#0",
+ "aggregate%head%2#0",
+ "processed_events#0"
+ ]
+ },
+ "1941": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%3#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%15#0",
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%3#0"
+ ]
+ },
+ "1942": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%15#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "1943": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "aggregate%head%3#0",
+ "tmp%15#0"
+ ]
+ },
+ "1944": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%4#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%4#0"
+ ]
+ },
+ "1945": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%4#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "1946": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%head%4#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "aggregate%head%4#0",
+ "0x151f7c75"
+ ]
+ },
+ "1947": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "0x151f7c75",
+ "aggregate%head%4#0"
+ ]
+ },
+ "1948": {
+ "op": "concat",
+ "defined_out": [
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "tmp%3#0"
+ ]
+ },
+ "1949": {
+ "op": "log",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1950": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "funded_interest#0",
+ "funded_principal#0",
+ "processed_events#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "1"
+ ]
+ },
+ "1951": {
+ "op": "return",
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ]
+ },
+ "1952": {
+ "block": "fund_due_cashflows_bool_false@53",
+ "stack_in": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "event_type#0",
+ "funded_interest#0",
+ "funded_principal#0",
+ "interest_amount#1",
+ "interest_amount_due#0",
+ "interest_due#0",
+ "next_interest_base#2",
+ "next_outstanding_principal#0",
+ "principal_amount#1",
+ "principal_amount_due#0",
+ "processed_events#0",
+ "required_amount#0",
+ "tmp%0#1",
+ "values%0#0",
+ "max_event_count#0",
+ "or_result%0#0"
+ ]
+ },
+ "1953": {
+ "op": "b fund_due_cashflows_bool_merge@54"
+ },
+ "1956": {
+ "subroutine": "modules.payment_agent.PaymentAgent.claim_due_cashflows[routing]",
+ "params": {},
+ "block": "claim_due_cashflows",
+ "stack_in": [],
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "interest_amount#0"
+ ]
+ },
+ "1958": {
+ "op": "dupn 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ]
+ },
+ "1960": {
+ "op": "txna ApplicationArgs 1"
+ },
+ "1963": {
+ "op": "dupn 2",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "1965": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "1966": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "1967": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "1968": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0"
+ ]
+ },
+ "1969": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "1972": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "1973": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)",
+ "0"
+ ]
+ },
+ "1974": {
+ "error": "invalid array length header",
+ "op": "extract_uint16 // on error: invalid array length header",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "1975": {
+ "op": "pushint 2",
+ "defined_out": [
+ "2",
+ "aggregate%array_length%0#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "aggregate%array_length%0#0",
+ "2"
+ ]
+ },
+ "1977": {
+ "op": "+",
+ "defined_out": [
+ "add%0#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "add%0#0"
+ ]
+ },
+ "1978": {
+ "op": "dig 1",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "add%0#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "1980": {
+ "op": "len",
+ "defined_out": [
+ "add%0#0",
+ "holding_address#0",
+ "len%1#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "add%0#0",
+ "len%1#0"
+ ]
+ },
+ "1981": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0",
+ "eq%1#0"
+ ]
+ },
+ "1982": {
+ "error": "invalid number of bytes for arc4.dynamic_array",
+ "op": "assert // invalid number of bytes for arc4.dynamic_array",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "1983": {
+ "op": "extract 2 0",
+ "defined_out": [
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "holding_address#0",
+ "payment_info#0"
+ ]
+ },
+ "1986": {
+ "op": "swap",
+ "defined_out": [
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0"
+ ]
+ },
+ "1987": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0",
+ "0"
+ ]
+ },
+ "1988": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "1989": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1990": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "1991": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0"
+ ]
+ },
+ "1992": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "holding_address#0",
+ "0x4123"
+ ]
+ },
+ "1994": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "0x4123",
+ "holding_address#0"
+ ]
+ },
+ "1995": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "1996": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "1997": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "1998": {
+ "op": "bury 1",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2000": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2001": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "0"
+ ]
+ },
+ "2002": {
+ "op": "bytec 27 // 0x523a4f504423",
+ "defined_out": [
+ "0",
+ "0x523a4f504423",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "0",
+ "0x523a4f504423"
+ ]
+ },
+ "2004": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#3",
+ "payment_info#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#3",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2005": {
+ "error": "check self.op_daemon exists",
+ "op": "assert // check self.op_daemon exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#3"
+ ]
+ },
+ "2006": {
+ "op": "global ZeroAddress",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "maybe_value%0#3",
+ "payment_info#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#3",
+ "tmp%0#1"
+ ]
+ },
+ "2008": {
+ "op": "!=",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%1#2"
+ ]
+ },
+ "2009": {
+ "op": "bz claim_due_cashflows_after_if_else@17",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2012": {
+ "op": "txn Sender",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%2#3"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%2#3"
+ ]
+ },
+ "2014": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%2#3",
+ "0"
+ ]
+ },
+ "2015": {
+ "op": "bytec 27 // 0x523a4f504423",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%2#3",
+ "0",
+ "0x523a4f504423"
+ ]
+ },
+ "2017": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "maybe_exists%1#0",
+ "maybe_value%1#1",
+ "payment_info#0",
+ "tmp%2#3"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%2#3",
+ "maybe_value%1#1",
+ "maybe_exists%1#0"
+ ]
+ },
+ "2018": {
+ "error": "check self.op_daemon exists",
+ "op": "assert // check self.op_daemon exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%2#3",
+ "maybe_value%1#1"
+ ]
+ },
+ "2019": {
+ "op": "==",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%3#1"
+ ]
+ },
+ "2020": {
+ "op": "bnz claim_due_cashflows_bool_true@14",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2023": {
+ "op": "txn Sender",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%4#0"
+ ]
+ },
+ "2025": {
+ "op": "dig 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%4#0",
+ "holding_address#0"
+ ]
+ },
+ "2027": {
+ "op": "==",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%5#2"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%5#2"
+ ]
+ },
+ "2028": {
+ "op": "bnz claim_due_cashflows_bool_true@14",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2031": {
+ "op": "txn Sender",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%6#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#1"
+ ]
+ },
+ "2033": {
+ "op": "dig 1",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#1",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2035": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%6#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#1",
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "2036": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#1",
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "2037": {
+ "op": "extract 0 32",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%6#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#1",
+ "aggregate%extract%0#0"
+ ]
+ },
+ "2040": {
+ "op": "==",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "payment_info#0",
+ "tmp%7#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%7#1"
+ ]
+ },
+ "2041": {
+ "op": "bz claim_due_cashflows_bool_false@15",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2044": {
+ "block": "claim_due_cashflows_bool_true@14",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "or_result%0#0"
+ ]
+ },
+ "2045": {
+ "error": "Not authorized",
+ "block": "claim_due_cashflows_bool_merge@16",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "or_result%0#0"
+ ],
+ "op": "assert // Not authorized",
+ "defined_out": [],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2046": {
+ "block": "claim_due_cashflows_after_if_else@17",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ],
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "2049": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "2052": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "0"
+ ]
+ },
+ "2053": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "0",
+ "\"status\""
+ ]
+ },
+ "2054": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2055": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0"
+ ]
+ },
+ "2056": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "2058": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#2"
+ ]
+ },
+ "2059": {
+ "op": "!",
+ "defined_out": [
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%1#2"
+ ]
+ },
+ "2060": {
+ "error": "IED not yet executed",
+ "op": "assert // IED not yet executed",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2061": {
+ "op": "dig 2",
+ "defined_out": [
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0"
+ ]
+ },
+ "2063": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2064": {
+ "callsub": "modules.accounting.AccountingModule._ensure_units_activated",
+ "op": "callsub _ensure_units_activated",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0"
+ ]
+ },
+ "2067": {
+ "callsub": "modules.accounting.AccountingModule._settle_position",
+ "op": "callsub _settle_position",
+ "defined_out": [
+ "holding_address#0",
+ "{_settle_position}.0",
+ "{_settle_position}.1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "{_settle_position}.0",
+ "{_settle_position}.1"
+ ]
+ },
+ "2070": {
+ "op": "popn 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2072": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2073": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0"
+ ]
+ },
+ "2074": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0"
+ ]
+ },
+ "2075": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)",
+ "box_prefixed_key%0#4",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)"
+ ]
+ },
+ "2076": {
+ "op": "pushint 73",
+ "defined_out": [
+ "73",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)",
+ "box_prefixed_key%0#4",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)",
+ "73"
+ ]
+ },
+ "2078": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "interest_amount#0"
+ ]
+ },
+ "2079": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "interest_amount#0",
+ "interest_amount#0 (copy)"
+ ]
+ },
+ "2080": {
+ "op": "cover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0",
+ "interest_amount#0"
+ ]
+ },
+ "2082": {
+ "op": "bury 8",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0"
+ ]
+ },
+ "2084": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)"
+ ]
+ },
+ "2085": {
+ "op": "pushint 81",
+ "defined_out": [
+ "81",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%2#0 (copy)",
+ "81"
+ ]
+ },
+ "2087": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0",
+ "principal_amount#0"
+ ]
+ },
+ "2088": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0",
+ "principal_amount#0",
+ "principal_amount#0"
+ ]
+ },
+ "2089": {
+ "op": "bury 8",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "aggregate%box_get%2#0",
+ "principal_amount#0"
+ ]
+ },
+ "2091": {
+ "op": "uncover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "principal_amount#0",
+ "interest_amount#0"
+ ]
+ },
+ "2093": {
+ "op": "+",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "total_amount#0"
+ ]
+ },
+ "2094": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "total_amount#0",
+ "total_amount#0"
+ ]
+ },
+ "2095": {
+ "op": "bury 6",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0",
+ "total_amount#0"
+ ]
+ },
+ "2097": {
+ "error": "No due cashflow to pay",
+ "op": "assert // No due cashflow to pay",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%2#0"
+ ]
+ },
+ "2098": {
+ "op": "extract 0 32",
+ "defined_out": [
+ "aggregate%extract%5#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "2101": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%extract%5#0",
+ "0"
+ ]
+ },
+ "2102": {
+ "op": "bytec 19 // \"settlement_asset_id\"",
+ "defined_out": [
+ "\"settlement_asset_id\"",
+ "0",
+ "aggregate%extract%5#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%extract%5#0",
+ "0",
+ "\"settlement_asset_id\""
+ ]
+ },
+ "2104": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%extract%5#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2105": {
+ "error": "check self.settlement_asset_id exists",
+ "op": "assert // check self.settlement_asset_id exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%extract%5#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2106": {
+ "op": "asset_holding_get AssetBalance",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%0#5",
+ "tmp%1#2",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#5",
+ "tmp%1#2"
+ ]
+ },
+ "2108": {
+ "op": "bury 1",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%1#2"
+ ]
+ },
+ "2110": {
+ "op": "bz claim_due_cashflows_bool_false@24",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2113": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2114": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%12#0",
+ "aggregate%box_get%13#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%12#0",
+ "aggregate%box_get%13#0"
+ ]
+ },
+ "2115": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%12#0"
+ ]
+ },
+ "2116": {
+ "op": "pushint 384",
+ "defined_out": [
+ "384",
+ "aggregate%box_get%12#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%12#0",
+ "384"
+ ]
+ },
+ "2119": {
+ "op": "getbit",
+ "defined_out": [
+ "aggregate%get_bit%0#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%get_bit%0#0"
+ ]
+ },
+ "2120": {
+ "op": "bnz claim_due_cashflows_bool_false@24",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2123": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "and_result%0#0",
+ "box_prefixed_key%0#4",
+ "holding_address#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "and_result%0#0"
+ ]
+ },
+ "2124": {
+ "block": "claim_due_cashflows_bool_merge@25",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "and_result%0#0"
+ ],
+ "op": "bz claim_due_cashflows_after_if_else@3",
+ "defined_out": [],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2127": {
+ "op": "global CurrentApplicationAddress",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#1"
+ ]
+ },
+ "2129": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#1",
+ "0"
+ ]
+ },
+ "2130": {
+ "op": "bytec 19 // \"settlement_asset_id\"",
+ "defined_out": [
+ "\"settlement_asset_id\"",
+ "0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#1",
+ "0",
+ "\"settlement_asset_id\""
+ ]
+ },
+ "2132": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#1",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2133": {
+ "error": "check self.settlement_asset_id exists",
+ "op": "assert // check self.settlement_asset_id exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#1",
+ "maybe_value%0#0"
+ ]
+ },
+ "2134": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "tmp%0#1"
+ ]
+ },
+ "2135": {
+ "op": "dig 1",
+ "defined_out": [
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "tmp%0#1",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "2137": {
+ "op": "asset_holding_get AssetBalance",
+ "defined_out": [
+ "check%0#0",
+ "maybe_value%0#0",
+ "value%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "value%0#0",
+ "check%0#0"
+ ]
+ },
+ "2139": {
+ "error": "account opted into asset",
+ "op": "assert // account opted into asset",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "value%0#0"
+ ]
+ },
+ "2140": {
+ "op": "dig 5",
+ "defined_out": [
+ "maybe_value%0#0",
+ "total_amount#0",
+ "value%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "value%0#0",
+ "total_amount#0"
+ ]
+ },
+ "2142": {
+ "op": "dup",
+ "defined_out": [
+ "maybe_value%0#0",
+ "total_amount#0",
+ "total_amount#0 (copy)",
+ "value%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "value%0#0",
+ "total_amount#0 (copy)",
+ "total_amount#0 (copy)"
+ ]
+ },
+ "2143": {
+ "op": "cover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "value%0#0",
+ "total_amount#0 (copy)"
+ ]
+ },
+ "2145": {
+ "op": ">=",
+ "defined_out": [
+ "maybe_value%0#0",
+ "tmp%1#2",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "tmp%1#2"
+ ]
+ },
+ "2146": {
+ "error": "Not enough funds for the payment",
+ "op": "assert // Not enough funds for the payment",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0"
+ ]
+ },
+ "2147": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2149": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4 (copy)",
+ "maybe_value%0#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "box_prefixed_key%0#4 (copy)",
+ "box_prefixed_key%0#4 (copy)"
+ ]
+ },
+ "2150": {
+ "op": "cover 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "box_prefixed_key%0#4 (copy)"
+ ]
+ },
+ "2152": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%15#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "position#0",
+ "aggregate%box_get%15#0"
+ ]
+ },
+ "2153": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "position#0"
+ ]
+ },
+ "2154": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "position#0 (copy)",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "position#0",
+ "position#0 (copy)"
+ ]
+ },
+ "2155": {
+ "op": "extract 0 32",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "receiver#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "position#0",
+ "receiver#0"
+ ]
+ },
+ "2158": {
+ "op": "itxn_begin"
+ },
+ "2159": {
+ "op": "global MinTxnFee",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "maybe_value%0#0",
+ "position#0",
+ "receiver#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "total_amount#0",
+ "position#0",
+ "receiver#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "2161": {
+ "op": "uncover 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "receiver#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "total_amount#0"
+ ]
+ },
+ "2163": {
+ "op": "itxn_field AssetAmount",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "receiver#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "2165": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "receiver#0"
+ ]
+ },
+ "2166": {
+ "op": "itxn_field AssetReceiver",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "position#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "2168": {
+ "op": "uncover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2170": {
+ "op": "itxn_field XferAsset",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "2172": {
+ "op": "pushint 4 // axfer",
+ "defined_out": [
+ "axfer",
+ "box_prefixed_key%0#4",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "position#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "axfer"
+ ]
+ },
+ "2174": {
+ "op": "itxn_field TypeEnum",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "2176": {
+ "op": "itxn_field Fee",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0"
+ ]
+ },
+ "2178": {
+ "op": "itxn_submit"
+ },
+ "2179": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "position#0 (copy)"
+ ]
+ },
+ "2180": {
+ "op": "pushint 73",
+ "defined_out": [
+ "73",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "position#0 (copy)",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "position#0 (copy)",
+ "73"
+ ]
+ },
+ "2182": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "interest_amount#0"
+ ]
+ },
+ "2183": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "position#0",
+ "interest_amount#0",
+ "interest_amount#0 (copy)"
+ ]
+ },
+ "2184": {
+ "op": "cover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "interest_amount#0"
+ ]
+ },
+ "2186": {
+ "op": "bury 9",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0"
+ ]
+ },
+ "2188": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "position#0 (copy)"
+ ]
+ },
+ "2189": {
+ "op": "pushint 81",
+ "defined_out": [
+ "81",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "position#0 (copy)",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "position#0 (copy)",
+ "81"
+ ]
+ },
+ "2191": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0"
+ ]
+ },
+ "2192": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0",
+ "principal_amount#0 (copy)"
+ ]
+ },
+ "2193": {
+ "op": "cover 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0"
+ ]
+ },
+ "2195": {
+ "op": "bury 9",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0"
+ ]
+ },
+ "2197": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0",
+ "0"
+ ]
+ },
+ "2198": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2199": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "aggregate%val_as_bytes%0#0",
+ "position#0"
+ ]
+ },
+ "2200": {
+ "op": "dig 1",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%0#0 (copy)",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "position#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "aggregate%val_as_bytes%0#0",
+ "position#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2202": {
+ "op": "replace2 73",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "aggregate%val_as_bytes%0#0",
+ "position#0"
+ ]
+ },
+ "2204": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2205": {
+ "op": "replace2 81",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0"
+ ]
+ },
+ "2207": {
+ "op": "uncover 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "position#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2209": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "box_prefixed_key%0#4",
+ "position#0"
+ ]
+ },
+ "2210": {
+ "op": "box_put",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0"
+ ]
+ },
+ "2211": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "0"
+ ]
+ },
+ "2212": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "defined_out": [
+ "\"reserved_interest\"",
+ "0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "0",
+ "\"reserved_interest\""
+ ]
+ },
+ "2214": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2215": {
+ "error": "check self.reserved_interest exists",
+ "op": "assert // check self.reserved_interest exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2216": {
+ "op": "dup",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "2217": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "interest_amount#0 (copy)",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "interest_amount#0 (copy)"
+ ]
+ },
+ "2219": {
+ "op": ">=",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "principal_amount#0",
+ "tmp%0#2",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "tmp%0#2"
+ ]
+ },
+ "2220": {
+ "error": "Not enough funds for the payment",
+ "op": "assert // Not enough funds for the payment",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2221": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "2222": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "defined_out": [
+ "\"reserved_principal\"",
+ "0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "0",
+ "\"reserved_principal\""
+ ]
+ },
+ "2224": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "2225": {
+ "error": "check self.reserved_principal exists",
+ "op": "assert // check self.reserved_principal exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "2226": {
+ "op": "dig 3",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "principal_amount#0",
+ "principal_amount#0 (copy)",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "principal_amount#0 (copy)"
+ ]
+ },
+ "2228": {
+ "op": ">=",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0",
+ "tmp%1#2"
+ ]
+ },
+ "2229": {
+ "error": "Not enough funds for the payment",
+ "op": "assert // Not enough funds for the payment",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2230": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "maybe_value%0#0",
+ "interest_amount#0"
+ ]
+ },
+ "2231": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%2#2",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "tmp%2#2"
+ ]
+ },
+ "2232": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "tmp%2#2",
+ "\"reserved_interest\""
+ ]
+ },
+ "2234": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "\"reserved_interest\"",
+ "tmp%2#2"
+ ]
+ },
+ "2235": {
+ "op": "app_global_put",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0"
+ ]
+ },
+ "2236": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "0"
+ ]
+ },
+ "2237": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "0",
+ "\"reserved_principal\""
+ ]
+ },
+ "2239": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "maybe_exists%3#0",
+ "maybe_value%3#0",
+ "principal_amount#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "2240": {
+ "error": "check self.reserved_principal exists",
+ "op": "assert // check self.reserved_principal exists",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "2241": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "maybe_value%3#0",
+ "principal_amount#0"
+ ]
+ },
+ "2242": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%3#0",
+ "total_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%3#0"
+ ]
+ },
+ "2243": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%3#0",
+ "\"reserved_principal\""
+ ]
+ },
+ "2245": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "\"reserved_principal\"",
+ "tmp%3#0"
+ ]
+ },
+ "2246": {
+ "op": "app_global_put",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2247": {
+ "block": "claim_due_cashflows_after_if_else@3",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ],
+ "op": "dig 5",
+ "defined_out": [
+ "interest_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0"
+ ]
+ },
+ "2249": {
+ "op": "dup",
+ "defined_out": [
+ "interest_amount#0",
+ "interest_amount#0 (copy)"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "interest_amount#0 (copy)"
+ ]
+ },
+ "2250": {
+ "op": "dig 6",
+ "defined_out": [
+ "interest_amount#0",
+ "interest_amount#0 (copy)",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "interest_amount#0 (copy)",
+ "principal_amount#0"
+ ]
+ },
+ "2252": {
+ "op": "dup",
+ "defined_out": [
+ "interest_amount#0",
+ "interest_amount#0 (copy)",
+ "principal_amount#0",
+ "principal_amount#0 (copy)"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "interest_amount#0",
+ "interest_amount#0 (copy)",
+ "principal_amount#0 (copy)",
+ "principal_amount#0 (copy)"
+ ]
+ },
+ "2253": {
+ "op": "cover 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "interest_amount#0 (copy)",
+ "principal_amount#0 (copy)"
+ ]
+ },
+ "2255": {
+ "op": "+",
+ "defined_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%5#1"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "tmp%5#1"
+ ]
+ },
+ "2256": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%5#1",
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "interest_amount#0",
+ "tmp%5#1",
+ "tmp%6#0"
+ ]
+ },
+ "2258": {
+ "op": "uncover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "tmp%5#1",
+ "tmp%6#0",
+ "interest_amount#0"
+ ]
+ },
+ "2260": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%1#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%5#1",
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "principal_amount#0",
+ "tmp%5#1",
+ "tmp%6#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "2261": {
+ "op": "uncover 3",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%5#1",
+ "tmp%6#0",
+ "aggregate%val_as_bytes%1#0",
+ "principal_amount#0"
+ ]
+ },
+ "2263": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%val_as_bytes%2#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%5#1",
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%5#1",
+ "tmp%6#0",
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%val_as_bytes%2#0"
+ ]
+ },
+ "2264": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%5#1",
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%5#1",
+ "tmp%6#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "2265": {
+ "op": "uncover 2",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#0",
+ "aggregate%head%1#0",
+ "tmp%5#1"
+ ]
+ },
+ "2267": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%3#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#0",
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%3#0"
+ ]
+ },
+ "2268": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "interest_amount#0",
+ "principal_amount#0",
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%6#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "2269": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%2#0",
+ "tmp%6#0"
+ ]
+ },
+ "2270": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%4#0",
+ "interest_amount#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%4#0"
+ ]
+ },
+ "2271": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "interest_amount#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0"
+ ]
+ },
+ "2272": {
+ "op": "dig 2",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "payment_info#0"
+ ]
+ },
+ "2274": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "payment_info#0 (copy)",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "payment_info#0",
+ "payment_info#0 (copy)"
+ ]
+ },
+ "2275": {
+ "op": "len",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "aggregate%length%0#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "payment_info#0",
+ "aggregate%length%0#0"
+ ]
+ },
+ "2276": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%as_bytes%0#0",
+ "aggregate%head%3#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "payment_info#0",
+ "aggregate%as_bytes%0#0"
+ ]
+ },
+ "2277": {
+ "op": "extract 6 2",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "aggregate%length_uint16%0#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "payment_info#0",
+ "aggregate%length_uint16%0#0"
+ ]
+ },
+ "2280": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "aggregate%length_uint16%0#0",
+ "payment_info#0"
+ ]
+ },
+ "2281": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%encoded_value%0#0",
+ "aggregate%head%3#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%3#0",
+ "aggregate%encoded_value%0#0"
+ ]
+ },
+ "2282": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%encoded_value%0#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "2283": {
+ "op": "pushbytes 0x0022",
+ "defined_out": [
+ "0x0022",
+ "aggregate%encoded_value%0#0",
+ "aggregate%head%3#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%encoded_value%0#0",
+ "aggregate%head%3#0",
+ "0x0022"
+ ]
+ },
+ "2287": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%encoded_value%0#0",
+ "aggregate%head%4#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%encoded_value%0#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "2288": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%head%4#0",
+ "aggregate%encoded_value%0#0"
+ ]
+ },
+ "2289": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%concat%0#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%concat%0#0"
+ ]
+ },
+ "2290": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%concat%0#0",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "aggregate%concat%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "2291": {
+ "op": "swap",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "0x151f7c75",
+ "aggregate%concat%0#0"
+ ]
+ },
+ "2292": {
+ "op": "concat",
+ "defined_out": [
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0",
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "tmp%5#0"
+ ]
+ },
+ "2293": {
+ "op": "log",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2294": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "interest_amount#0",
+ "payment_info#0",
+ "principal_amount#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "1"
+ ]
+ },
+ "2295": {
+ "op": "return",
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2296": {
+ "block": "claim_due_cashflows_bool_false@24",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "and_result%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "and_result%0#0"
+ ]
+ },
+ "2297": {
+ "op": "b claim_due_cashflows_bool_merge@25"
+ },
+ "2300": {
+ "block": "claim_due_cashflows_bool_false@15",
+ "stack_in": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "interest_amount#0",
+ "principal_amount#0",
+ "total_amount#0",
+ "holding_address#0",
+ "payment_info#0",
+ "box_prefixed_key%0#4",
+ "or_result%0#0"
+ ]
+ },
+ "2301": {
+ "op": "b claim_due_cashflows_bool_merge@16"
+ },
+ "2304": {
+ "subroutine": "modules.transfer_agent.TransferAgent.transfer_set_schedule[routing]",
+ "params": {},
+ "block": "transfer_set_schedule",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "2307": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "2308": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "2309": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0",
+ "8"
+ ]
+ },
+ "2310": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "2311": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "2312": {
+ "op": "btoi",
+ "defined_out": [
+ "open_date#0"
+ ],
+ "stack_out": [
+ "open_date#0"
+ ]
+ },
+ "2313": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "open_date#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "tmp%2#0"
+ ]
+ },
+ "2316": {
+ "op": "dup",
+ "defined_out": [
+ "open_date#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "2317": {
+ "op": "len",
+ "defined_out": [
+ "len%1#0",
+ "open_date#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "tmp%2#0",
+ "len%1#0"
+ ]
+ },
+ "2318": {
+ "op": "intc_2 // 8",
+ "stack_out": [
+ "open_date#0",
+ "tmp%2#0",
+ "len%1#0",
+ "8"
+ ]
+ },
+ "2319": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "open_date#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "tmp%2#0",
+ "eq%1#0"
+ ]
+ },
+ "2320": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "open_date#0",
+ "tmp%2#0"
+ ]
+ },
+ "2321": {
+ "op": "btoi",
+ "defined_out": [
+ "closure_date#0",
+ "open_date#0"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "closure_date#0"
+ ]
+ },
+ "2322": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "2325": {
+ "op": "dup2",
+ "defined_out": [
+ "closure_date#0",
+ "closure_date#0 (copy)",
+ "open_date#0",
+ "open_date#0 (copy)"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "closure_date#0",
+ "open_date#0 (copy)",
+ "closure_date#0 (copy)"
+ ]
+ },
+ "2326": {
+ "op": "<",
+ "defined_out": [
+ "closure_date#0",
+ "open_date#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "closure_date#0",
+ "tmp%0#1"
+ ]
+ },
+ "2327": {
+ "error": "Time events must be sorted in strictly ascending order",
+ "op": "assert // Time events must be sorted in strictly ascending order",
+ "stack_out": [
+ "open_date#0",
+ "closure_date#0"
+ ]
+ },
+ "2328": {
+ "op": "bytec 29 // \"transfer_opening_date\"",
+ "defined_out": [
+ "\"transfer_opening_date\"",
+ "closure_date#0",
+ "open_date#0"
+ ],
+ "stack_out": [
+ "open_date#0",
+ "closure_date#0",
+ "\"transfer_opening_date\""
+ ]
+ },
+ "2330": {
+ "op": "uncover 2",
+ "stack_out": [
+ "closure_date#0",
+ "\"transfer_opening_date\"",
+ "open_date#0"
+ ]
+ },
+ "2332": {
+ "op": "app_global_put",
+ "stack_out": [
+ "closure_date#0"
+ ]
+ },
+ "2333": {
+ "op": "bytec 30 // \"transfer_closure_date\"",
+ "defined_out": [
+ "\"transfer_closure_date\"",
+ "closure_date#0"
+ ],
+ "stack_out": [
+ "closure_date#0",
+ "\"transfer_closure_date\""
+ ]
+ },
+ "2335": {
+ "op": "swap",
+ "stack_out": [
+ "\"transfer_closure_date\"",
+ "closure_date#0"
+ ]
+ },
+ "2336": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "2337": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "tmp%1#1"
+ ]
+ },
+ "2339": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2340": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "2341": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2342": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "2343": {
+ "op": "log",
+ "stack_out": []
+ },
+ "2344": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "2345": {
+ "op": "return",
+ "stack_out": []
+ },
+ "2346": {
+ "subroutine": "modules.transfer_agent.TransferAgent.primary_distribution[routing]",
+ "params": {},
+ "block": "primary_distribution",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2349": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2350": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "2351": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2352": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "2353": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2354": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "2357": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "2358": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%1#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "len%1#0"
+ ]
+ },
+ "2359": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "holding_address#0",
+ "len%1#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "len%1#0",
+ "8"
+ ]
+ },
+ "2360": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "eq%1#0"
+ ]
+ },
+ "2361": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "2362": {
+ "op": "btoi",
+ "defined_out": [
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "units#0"
+ ]
+ },
+ "2363": {
+ "op": "dup",
+ "stack_out": [
+ "holding_address#0",
+ "units#0",
+ "units#0"
+ ]
+ },
+ "2364": {
+ "op": "cover 2",
+ "defined_out": [
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0"
+ ]
+ },
+ "2366": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2367": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "2368": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2369": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2370": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0"
+ ]
+ },
+ "2371": {
+ "op": "bytec 22 // 0x523a50594423",
+ "defined_out": [
+ "0x523a50594423",
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0x523a50594423"
+ ]
+ },
+ "2373": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a50594423",
+ "holding_address#0",
+ "tmp%0#3",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0x523a50594423",
+ "tmp%0#3"
+ ]
+ },
+ "2375": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%1#2",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "tmp%1#2"
+ ]
+ },
+ "2378": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0"
+ ]
+ },
+ "2379": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "2382": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "2385": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2386": {
+ "op": "bytec_1 // \"status\"",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "2387": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2388": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2389": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "holding_address#0",
+ "maybe_value%0#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "2391": {
+ "op": "==",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%0#4",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "tmp%0#4"
+ ]
+ },
+ "2392": {
+ "error": "Primary distribution is closed",
+ "op": "assert // Primary distribution is closed",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0"
+ ]
+ },
+ "2393": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0x4123"
+ ]
+ },
+ "2395": {
+ "op": "dig 2",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "0x4123",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2397": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2398": {
+ "op": "dup",
+ "stack_out": [
+ "units#0",
+ "holding_address#0",
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2399": {
+ "op": "cover 3",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2401": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "units#0",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2402": {
+ "op": "bury 1",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "units#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2404": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "units#0"
+ ]
+ },
+ "2405": {
+ "op": "swap",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "holding_address#0"
+ ]
+ },
+ "2406": {
+ "callsub": "modules.accounting.AccountingModule._assert_is_not_account_suspended",
+ "op": "callsub _assert_is_not_account_suspended",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ]
+ },
+ "2409": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "units#0",
+ "units#0 (copy)"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "units#0 (copy)"
+ ]
+ },
+ "2410": {
+ "error": "Can not distribute zero units",
+ "op": "assert // Can not distribute zero units",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ]
+ },
+ "2411": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "0"
+ ]
+ },
+ "2412": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "2414": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2415": {
+ "error": "check self.reserved_units_total exists",
+ "op": "assert // check self.reserved_units_total exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2416": {
+ "op": "+",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%2#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#1"
+ ]
+ },
+ "2417": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#1",
+ "0"
+ ]
+ },
+ "2418": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "tmp%2#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#1",
+ "0",
+ "\"total_units\""
+ ]
+ },
+ "2420": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "tmp%2#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#1",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "2421": {
+ "error": "check self.total_units exists",
+ "op": "assert // check self.total_units exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#1",
+ "maybe_value%1#0"
+ ]
+ },
+ "2422": {
+ "op": "<=",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%3#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%3#1"
+ ]
+ },
+ "2423": {
+ "error": "Insufficient remaining D-ASA units",
+ "op": "assert // Insufficient remaining D-ASA units",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2424": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "0"
+ ]
+ },
+ "2425": {
+ "op": "bytec 28 // \"initial_exchange_date\"",
+ "defined_out": [
+ "\"initial_exchange_date\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "0",
+ "\"initial_exchange_date\""
+ ]
+ },
+ "2427": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%2#0",
+ "maybe_value%2#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "2428": {
+ "error": "check self.initial_exchange_date exists",
+ "op": "assert // check self.initial_exchange_date exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%2#0"
+ ]
+ },
+ "2429": {
+ "op": "bz primary_distribution_after_if_else@3",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2432": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%5#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%5#1"
+ ]
+ },
+ "2434": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%5#1",
+ "0"
+ ]
+ },
+ "2435": {
+ "op": "bytec 28 // \"initial_exchange_date\"",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%5#1",
+ "0",
+ "\"initial_exchange_date\""
+ ]
+ },
+ "2437": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%3#0",
+ "maybe_value%3#0",
+ "tmp%5#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%5#1",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "2438": {
+ "error": "check self.initial_exchange_date exists",
+ "op": "assert // check self.initial_exchange_date exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%5#1",
+ "maybe_value%3#0"
+ ]
+ },
+ "2439": {
+ "op": "<=",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%6#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%6#1"
+ ]
+ },
+ "2440": {
+ "error": "Primary distribution is closed",
+ "op": "assert // Primary distribution is closed",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2441": {
+ "block": "primary_distribution_after_if_else@3",
+ "stack_in": [
+ "units#0",
+ "box_prefixed_key%0#1"
+ ],
+ "op": "dupn 2",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "2443": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "2444": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "2445": {
+ "op": "pushint 40",
+ "defined_out": [
+ "40",
+ "aggregate%box_get%0#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%0#0",
+ "40"
+ ]
+ },
+ "2447": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "values%0#0"
+ ]
+ },
+ "2448": {
+ "op": "dig 3",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "units#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "values%0#0",
+ "units#0"
+ ]
+ },
+ "2450": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "units#0",
+ "units#0 (copy)",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1",
+ "values%0#0",
+ "units#0 (copy)",
+ "units#0 (copy)"
+ ]
+ },
+ "2451": {
+ "op": "cover 3",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "box_prefixed_key%0#1",
+ "values%0#0",
+ "units#0 (copy)"
+ ]
+ },
+ "2453": {
+ "op": "+",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%0#2",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%0#2"
+ ]
+ },
+ "2454": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "box_prefixed_key%0#1",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2455": {
+ "op": "pushint 40"
+ },
+ "2457": {
+ "op": "swap",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "box_prefixed_key%0#1",
+ "40",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2458": {
+ "op": "box_replace",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ]
+ },
+ "2459": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "0"
+ ]
+ },
+ "2460": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "2462": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%4#0",
+ "maybe_value%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "2463": {
+ "error": "check self.reserved_units_total exists",
+ "op": "assert // check self.reserved_units_total exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "units#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "2464": {
+ "op": "+",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0"
+ ]
+ },
+ "2465": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "2467": {
+ "op": "dig 1",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "tmp%7#0 (copy)",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "\"reserved_units_total\"",
+ "tmp%7#0 (copy)"
+ ]
+ },
+ "2469": {
+ "op": "app_global_put",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0"
+ ]
+ },
+ "2470": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "0"
+ ]
+ },
+ "2471": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "0",
+ "\"total_units\""
+ ]
+ },
+ "2473": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%5#0",
+ "maybe_value%5#0",
+ "tmp%7#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "2474": {
+ "error": "check self.total_units exists",
+ "op": "assert // check self.total_units exists",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%7#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "2475": {
+ "op": "swap",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%5#0",
+ "tmp%7#0"
+ ]
+ },
+ "2476": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%8#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%8#0"
+ ]
+ },
+ "2477": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%1#0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "2478": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%1#0",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "aggregate%val_as_bytes%1#0",
+ "0x151f7c75"
+ ]
+ },
+ "2479": {
+ "op": "swap",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "2480": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%6#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "tmp%6#0"
+ ]
+ },
+ "2481": {
+ "op": "log",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2482": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "box_prefixed_key%0#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1",
+ "1"
+ ]
+ },
+ "2483": {
+ "op": "return",
+ "stack_out": [
+ "units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2484": {
+ "subroutine": "modules.transfer_agent.TransferAgent.transfer[routing]",
+ "params": {},
+ "block": "transfer",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2485": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2486": {
+ "op": "txna ApplicationArgs 1"
+ },
+ "2489": {
+ "op": "dup",
+ "defined_out": [
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "sender_holding_address#0"
+ ]
+ },
+ "2490": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "2491": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "len%0#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2492": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "2493": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0"
+ ]
+ },
+ "2494": {
+ "op": "txna ApplicationArgs 2"
+ },
+ "2497": {
+ "op": "dup",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2498": {
+ "op": "len",
+ "defined_out": [
+ "len%1#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "len%1#0"
+ ]
+ },
+ "2499": {
+ "op": "intc_3 // 32",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "len%1#0",
+ "32"
+ ]
+ },
+ "2500": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "eq%1#0"
+ ]
+ },
+ "2501": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2502": {
+ "op": "txna ApplicationArgs 3"
+ },
+ "2505": {
+ "op": "dupn 2",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "tmp%4#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "tmp%4#0",
+ "tmp%4#0 (copy)"
+ ]
+ },
+ "2507": {
+ "op": "len",
+ "defined_out": [
+ "len%2#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "tmp%4#0",
+ "len%2#0"
+ ]
+ },
+ "2508": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "len%2#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "tmp%4#0",
+ "len%2#0",
+ "8"
+ ]
+ },
+ "2509": {
+ "op": "==",
+ "defined_out": [
+ "eq%2#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "tmp%4#0",
+ "eq%2#0"
+ ]
+ },
+ "2510": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "tmp%4#0"
+ ]
+ },
+ "2511": {
+ "op": "btoi",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2512": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2513": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "2514": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2515": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2516": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2517": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "2520": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "2523": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2524": {
+ "op": "bytec_1 // \"status\"",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "2525": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2526": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2527": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "maybe_value%0#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "2529": {
+ "op": "==",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%0#3",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%0#3"
+ ]
+ },
+ "2530": {
+ "op": "!",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%1#1",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%1#1"
+ ]
+ },
+ "2531": {
+ "error": "IED not yet executed",
+ "op": "assert // IED not yet executed",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2532": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2533": {
+ "op": "bytec 29 // \"transfer_opening_date\"",
+ "defined_out": [
+ "\"transfer_opening_date\"",
+ "0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"transfer_opening_date\""
+ ]
+ },
+ "2535": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2536": {
+ "error": "check self.transfer_opening_date exists",
+ "op": "assert // check self.transfer_opening_date exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2537": {
+ "op": "bz transfer_after_if_else@3",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2540": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2541": {
+ "op": "bytec 29 // \"transfer_opening_date\"",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"transfer_opening_date\""
+ ]
+ },
+ "2543": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "2544": {
+ "error": "check self.transfer_opening_date exists",
+ "op": "assert // check self.transfer_opening_date exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "2545": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "maybe_value%1#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%1#2",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%1#0",
+ "tmp%1#2"
+ ]
+ },
+ "2547": {
+ "op": "<=",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%2#1",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%2#1"
+ ]
+ },
+ "2548": {
+ "error": "Transfer is closed",
+ "op": "assert // Transfer is closed",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2549": {
+ "block": "transfer_after_if_else@3",
+ "stack_in": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2550": {
+ "op": "bytec 30 // \"transfer_closure_date\"",
+ "defined_out": [
+ "\"transfer_closure_date\"",
+ "0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"transfer_closure_date\""
+ ]
+ },
+ "2552": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%2#0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "2553": {
+ "error": "check self.transfer_closure_date exists",
+ "op": "assert // check self.transfer_closure_date exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "2554": {
+ "op": "bz transfer_after_if_else@5",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2557": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%4#2"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%4#2"
+ ]
+ },
+ "2559": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%4#2",
+ "0"
+ ]
+ },
+ "2560": {
+ "op": "bytec 30 // \"transfer_closure_date\"",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%4#2",
+ "0",
+ "\"transfer_closure_date\""
+ ]
+ },
+ "2562": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%3#0",
+ "maybe_value%3#0",
+ "tmp%4#2"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%4#2",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "2563": {
+ "error": "check self.transfer_closure_date exists",
+ "op": "assert // check self.transfer_closure_date exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%4#2",
+ "maybe_value%3#0"
+ ]
+ },
+ "2564": {
+ "op": "<",
+ "defined_out": [
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%5#0"
+ ]
+ },
+ "2565": {
+ "error": "Transfer is closed",
+ "op": "assert // Transfer is closed",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2566": {
+ "block": "transfer_after_if_else@5",
+ "stack_in": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "op": "txn Sender",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%0#1"
+ ]
+ },
+ "2568": {
+ "op": "dig 4",
+ "defined_out": [
+ "sender_holding_address#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%0#1",
+ "sender_holding_address#0"
+ ]
+ },
+ "2570": {
+ "op": "dup",
+ "defined_out": [
+ "sender_holding_address#0",
+ "sender_holding_address#0 (copy)",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%0#1",
+ "sender_holding_address#0 (copy)",
+ "sender_holding_address#0 (copy)"
+ ]
+ },
+ "2571": {
+ "op": "cover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "tmp%0#1",
+ "sender_holding_address#0 (copy)"
+ ]
+ },
+ "2573": {
+ "op": "==",
+ "defined_out": [
+ "sender_holding_address#0",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "tmp%1#1"
+ ]
+ },
+ "2574": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0"
+ ]
+ },
+ "2575": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "0x4123"
+ ]
+ },
+ "2577": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "0x4123",
+ "sender_holding_address#0 (copy)"
+ ]
+ },
+ "2579": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2580": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2581": {
+ "op": "bury 8",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2583": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#3 (copy)",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#3 (copy)"
+ ]
+ },
+ "2584": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#3",
+ "maybe_exists%0#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2585": {
+ "op": "bury 1",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2587": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2588": {
+ "op": "bytec 8 // 0x4123",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "0x4123"
+ ]
+ },
+ "2590": {
+ "op": "dig 5",
+ "defined_out": [
+ "0x4123",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "0x4123",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2592": {
+ "op": "dup",
+ "defined_out": [
+ "0x4123",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "receiver_holding_address#0 (copy)",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "0x4123",
+ "receiver_holding_address#0 (copy)",
+ "receiver_holding_address#0 (copy)"
+ ]
+ },
+ "2593": {
+ "op": "cover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "0x4123",
+ "receiver_holding_address#0 (copy)"
+ ]
+ },
+ "2595": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2596": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2597": {
+ "op": "bury 9",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2599": {
+ "op": "box_len",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2600": {
+ "op": "bury 1",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2602": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2603": {
+ "op": "dig 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0 (copy)"
+ ]
+ },
+ "2605": {
+ "callsub": "modules.accounting.AccountingModule._assert_is_not_account_suspended",
+ "op": "callsub _assert_is_not_account_suspended",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2608": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "receiver_holding_address#0 (copy)"
+ ]
+ },
+ "2609": {
+ "callsub": "modules.accounting.AccountingModule._assert_is_not_account_suspended",
+ "op": "callsub _assert_is_not_account_suspended",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2612": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ]
+ },
+ "2614": {
+ "op": "!=",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "tmp%2#1"
+ ]
+ },
+ "2615": {
+ "error": "Sender and receiver must be different",
+ "op": "assert // Sender and receiver must be different",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2616": {
+ "op": "dig 1",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0"
+ ]
+ },
+ "2618": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0",
+ "units#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "units#0 (copy)"
+ ]
+ },
+ "2619": {
+ "error": "Transfer units must be greater than zero",
+ "op": "assert // Transfer units must be greater than zero",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0"
+ ]
+ },
+ "2620": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2621": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "2622": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "2623": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "aggregate%box_get%0#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "aggregate%box_get%0#0",
+ "32"
+ ]
+ },
+ "2624": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "values%0#0"
+ ]
+ },
+ "2625": {
+ "op": "<=",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#1",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%4#1"
+ ]
+ },
+ "2626": {
+ "error": "Insufficient sender units to transfer",
+ "op": "assert // Insufficient sender units to transfer",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2627": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2628": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "2629": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2630": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2631": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "2632": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "maybe_value%0#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "2633": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "2634": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "2635": {
+ "op": ">=",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%0#3",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%0#3"
+ ]
+ },
+ "2636": {
+ "op": "bnz transfer_after_inlined_modules.actus_kernel.ActusKernelModule._assert_no_due_event_pending@10",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2639": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0"
+ ]
+ },
+ "2640": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "2641": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "maybe_exists%2#0",
+ "maybe_value%2#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "2642": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "2643": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "next_entry#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "next_entry#0"
+ ]
+ },
+ "2646": {
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "next_entry#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "next_entry#0",
+ "9"
+ ]
+ },
+ "2648": {
+ "op": "extract_uint64",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "values%0#0"
+ ]
+ },
+ "2649": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%2#3",
+ "units#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "values%0#0",
+ "tmp%2#3"
+ ]
+ },
+ "2651": {
+ "op": ">",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%3#3",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%3#3"
+ ]
+ },
+ "2652": {
+ "error": "ACTUS event not yet executed",
+ "op": "assert // ACTUS event not yet executed",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2653": {
+ "block": "transfer_after_inlined_modules.actus_kernel.ActusKernelModule._assert_no_due_event_pending@10",
+ "stack_in": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "op": "dig 3",
+ "defined_out": [
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0"
+ ]
+ },
+ "2655": {
+ "op": "dup",
+ "defined_out": [
+ "sender_holding_address#0",
+ "sender_holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "sender_holding_address#0 (copy)"
+ ]
+ },
+ "2656": {
+ "callsub": "modules.accounting.AccountingModule._ensure_units_activated",
+ "op": "callsub _ensure_units_activated",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0"
+ ]
+ },
+ "2659": {
+ "op": "dig 3",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2661": {
+ "op": "dup",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "receiver_holding_address#0 (copy)",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "sender_holding_address#0",
+ "receiver_holding_address#0 (copy)",
+ "receiver_holding_address#0 (copy)"
+ ]
+ },
+ "2662": {
+ "op": "cover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "receiver_holding_address#0 (copy)"
+ ]
+ },
+ "2664": {
+ "callsub": "modules.accounting.AccountingModule._ensure_units_activated",
+ "op": "callsub _ensure_units_activated",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ]
+ },
+ "2667": {
+ "callsub": "modules.accounting.AccountingModule._settle_position",
+ "op": "callsub _settle_position",
+ "defined_out": [
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "{_settle_position}.0",
+ "{_settle_position}.1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "receiver_holding_address#0",
+ "{_settle_position}.0",
+ "{_settle_position}.1"
+ ]
+ },
+ "2670": {
+ "op": "popn 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "receiver_holding_address#0"
+ ]
+ },
+ "2672": {
+ "callsub": "modules.accounting.AccountingModule._settle_position",
+ "op": "callsub _settle_position",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "{_settle_position}.0",
+ "{_settle_position}.1"
+ ]
+ },
+ "2675": {
+ "op": "popn 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2677": {
+ "op": "dig 5",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2679": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#3 (copy)",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#3 (copy)"
+ ]
+ },
+ "2680": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0"
+ ]
+ },
+ "2681": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "aggregate%box_get%2#0"
+ ]
+ },
+ "2682": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "aggregate%box_get%2#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "aggregate%box_get%2#0",
+ "32"
+ ]
+ },
+ "2683": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "values%0#0"
+ ]
+ },
+ "2684": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "values%0#0",
+ "units#0"
+ ]
+ },
+ "2686": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0",
+ "units#0 (copy)",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "values%0#0",
+ "units#0 (copy)",
+ "units#0 (copy)"
+ ]
+ },
+ "2687": {
+ "op": "cover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "values%0#0",
+ "units#0 (copy)"
+ ]
+ },
+ "2689": {
+ "op": "dig 1",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0",
+ "units#0 (copy)",
+ "values%0#0",
+ "values%0#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "values%0#0",
+ "units#0 (copy)",
+ "values%0#0 (copy)"
+ ]
+ },
+ "2691": {
+ "op": "<=",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%0#3",
+ "units#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "values%0#0",
+ "tmp%0#3"
+ ]
+ },
+ "2692": {
+ "error": "Insufficient sender units to transfer",
+ "op": "assert // Insufficient sender units to transfer",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "values%0#0"
+ ]
+ },
+ "2693": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "values%0#0",
+ "units#0 (copy)"
+ ]
+ },
+ "2695": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%1#2",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "tmp%1#2"
+ ]
+ },
+ "2696": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#3",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "units#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2697": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#3"
+ ]
+ },
+ "2699": {
+ "op": "intc_3 // 32",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#3",
+ "32"
+ ]
+ },
+ "2700": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#3",
+ "32",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2702": {
+ "op": "box_replace",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0"
+ ]
+ },
+ "2703": {
+ "op": "dig 5",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#4"
+ ]
+ },
+ "2705": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4 (copy)",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "box_prefixed_key%0#4 (copy)"
+ ]
+ },
+ "2706": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%6#0",
+ "aggregate%box_get%7#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%6#0",
+ "aggregate%box_get%7#0"
+ ]
+ },
+ "2707": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%6#0"
+ ]
+ },
+ "2708": {
+ "op": "intc_3 // 32",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "aggregate%box_get%6#0",
+ "32"
+ ]
+ },
+ "2709": {
+ "op": "extract_uint64",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "values%0#0"
+ ]
+ },
+ "2710": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "values%0#0",
+ "units#0"
+ ]
+ },
+ "2712": {
+ "op": "+",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%0#5",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "tmp%0#5"
+ ]
+ },
+ "2713": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%1#0",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "2714": {
+ "op": "intc_3 // 32"
+ },
+ "2715": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "box_prefixed_key%0#4",
+ "32",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "2716": {
+ "op": "box_replace",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2717": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0x151f7c75"
+ ]
+ },
+ "2718": {
+ "op": "dig 2",
+ "defined_out": [
+ "0x151f7c75",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "0x151f7c75",
+ "tmp%4#0"
+ ]
+ },
+ "2720": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "tmp%8#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "tmp%8#0"
+ ]
+ },
+ "2721": {
+ "op": "log",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2722": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "receiver_holding_address#0",
+ "sender_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0",
+ "1"
+ ]
+ },
+ "2723": {
+ "op": "return",
+ "stack_out": [
+ "box_prefixed_key%0#3",
+ "box_prefixed_key%0#4",
+ "sender_holding_address#0",
+ "receiver_holding_address#0",
+ "tmp%4#0",
+ "units#0"
+ ]
+ },
+ "2724": {
+ "subroutine": "modules.accounting.AccountingModule.account_suspension[routing]",
+ "params": {},
+ "block": "account_suspension",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2727": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2728": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "2729": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2730": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "2731": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2732": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "2735": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "2736": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%1#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "len%1#0"
+ ]
+ },
+ "2737": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "holding_address#0",
+ "len%1#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "len%1#0",
+ "1"
+ ]
+ },
+ "2738": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "eq%1#0"
+ ]
+ },
+ "2739": {
+ "error": "invalid number of bytes for arc4.bool",
+ "op": "assert // invalid number of bytes for arc4.bool",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "2740": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "0"
+ ]
+ },
+ "2741": {
+ "op": "getbit",
+ "defined_out": [
+ "holding_address#0",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "suspended#0"
+ ]
+ },
+ "2742": {
+ "op": "bytec 21 // 0x523a41555423",
+ "defined_out": [
+ "0x523a41555423",
+ "holding_address#0",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "suspended#0",
+ "0x523a41555423"
+ ]
+ },
+ "2744": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a41555423",
+ "holding_address#0",
+ "suspended#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "suspended#0",
+ "0x523a41555423",
+ "tmp%0#2"
+ ]
+ },
+ "2746": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "holding_address#0",
+ "suspended#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "suspended#0",
+ "tmp%1#0"
+ ]
+ },
+ "2749": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "holding_address#0",
+ "suspended#0"
+ ]
+ },
+ "2750": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "suspended#0",
+ "0x4123"
+ ]
+ },
+ "2752": {
+ "op": "uncover 2",
+ "stack_out": [
+ "suspended#0",
+ "0x4123",
+ "holding_address#0"
+ ]
+ },
+ "2754": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2755": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "2756": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2757": {
+ "op": "bury 1",
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2759": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2760": {
+ "op": "dup",
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "2761": {
+ "op": "pushint 48",
+ "defined_out": [
+ "48",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "48"
+ ]
+ },
+ "2763": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "48",
+ "1"
+ ]
+ },
+ "2764": {
+ "op": "box_extract",
+ "defined_out": [
+ "box%box_extract%0#0",
+ "box_prefixed_key%0#1",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "box%box_extract%0#0"
+ ]
+ },
+ "2765": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "suspended#0",
+ "box_prefixed_key%0#1",
+ "box%box_extract%0#0",
+ "0"
+ ]
+ },
+ "2766": {
+ "op": "uncover 3",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "box%box_extract%0#0",
+ "0",
+ "suspended#0"
+ ]
+ },
+ "2768": {
+ "op": "setbit",
+ "defined_out": [
+ "aggregate%updated_target%0#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "aggregate%updated_target%0#0"
+ ]
+ },
+ "2769": {
+ "op": "pushint 48"
+ },
+ "2771": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "48",
+ "aggregate%updated_target%0#0"
+ ]
+ },
+ "2772": {
+ "op": "box_replace",
+ "stack_out": []
+ },
+ "2773": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "2775": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2776": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "2777": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2778": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "2779": {
+ "op": "log",
+ "stack_out": []
+ },
+ "2780": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "1"
+ ]
+ },
+ "2781": {
+ "op": "return",
+ "stack_out": []
+ },
+ "2782": {
+ "subroutine": "modules.accounting.AccountingModule.account_open[routing]",
+ "params": {},
+ "block": "account_open",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2785": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2786": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "2787": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2788": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "2789": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2790": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "holding_address#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0"
+ ]
+ },
+ "2793": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "payment_address#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "payment_address#0 (copy)"
+ ]
+ },
+ "2794": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%1#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "len%1#0"
+ ]
+ },
+ "2795": {
+ "op": "intc_3 // 32",
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "len%1#0",
+ "32"
+ ]
+ },
+ "2796": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "holding_address#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "eq%1#0"
+ ]
+ },
+ "2797": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0"
+ ]
+ },
+ "2798": {
+ "op": "bytec 23 // 0x523a4d4e4723",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "holding_address#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "0x523a4d4e4723"
+ ]
+ },
+ "2800": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "holding_address#0",
+ "payment_address#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "0x523a4d4e4723",
+ "tmp%0#2"
+ ]
+ },
+ "2802": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "tmp%1#1"
+ ]
+ },
+ "2805": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0"
+ ]
+ },
+ "2806": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "holding_address#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "0"
+ ]
+ },
+ "2807": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "holding_address#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "2808": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2809": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "2810": {
+ "op": "pushint 200",
+ "defined_out": [
+ "200",
+ "holding_address#0",
+ "maybe_value%0#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "maybe_value%0#0",
+ "200"
+ ]
+ },
+ "2813": {
+ "op": "==",
+ "defined_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "tmp%0#3"
+ ]
+ },
+ "2814": {
+ "op": "!",
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "tmp%1#1"
+ ]
+ },
+ "2815": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0"
+ ]
+ },
+ "2816": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "2819": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "2822": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "payment_address#0",
+ "0x4123"
+ ]
+ },
+ "2824": {
+ "op": "uncover 2",
+ "stack_out": [
+ "payment_address#0",
+ "0x4123",
+ "holding_address#0"
+ ]
+ },
+ "2826": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "2827": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "2828": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%0#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2829": {
+ "op": "bury 1",
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2831": {
+ "op": "!",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "payment_address#0",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0",
+ "tmp%2#1"
+ ]
+ },
+ "2832": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "2833": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0",
+ "0"
+ ]
+ },
+ "2834": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "payment_address#0",
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2835": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "payment_address#0"
+ ]
+ },
+ "2837": {
+ "op": "dig 1",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%0#0 (copy)",
+ "box_prefixed_key%0#0",
+ "payment_address#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "payment_address#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2839": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "2840": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2842": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "2843": {
+ "op": "bytec 41 // 0x00",
+ "defined_out": [
+ "0x00",
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%2#0",
+ "0x00"
+ ]
+ },
+ "2845": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "2846": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2848": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "2849": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2851": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%5#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "2852": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%5#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2854": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "2855": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "2857": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "2858": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2859": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%8#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "2860": {
+ "op": "box_put",
+ "stack_out": []
+ },
+ "2861": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%4#1"
+ ]
+ },
+ "2863": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%7#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%7#0"
+ ]
+ },
+ "2864": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%7#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%7#0",
+ "0x151f7c75"
+ ]
+ },
+ "2865": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%7#0"
+ ]
+ },
+ "2866": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "2867": {
+ "op": "log",
+ "stack_out": []
+ },
+ "2868": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "2869": {
+ "op": "return",
+ "stack_out": []
+ },
+ "2870": {
+ "subroutine": "modules.accounting.AccountingModule.account_update_payment_address[routing]",
+ "params": {},
+ "block": "account_update_payment_address",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2873": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2874": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "2875": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2876": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "2877": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2878": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "2881": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "2882": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%1#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "len%1#0"
+ ]
+ },
+ "2883": {
+ "op": "intc_3 // 32",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "len%1#0",
+ "32"
+ ]
+ },
+ "2884": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "eq%1#0"
+ ]
+ },
+ "2885": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0"
+ ]
+ },
+ "2886": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "0x4123"
+ ]
+ },
+ "2888": {
+ "op": "dig 2",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "0x4123",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2890": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2891": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "holding_address#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "2892": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "maybe_exists%0#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2893": {
+ "op": "bury 1",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2895": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2896": {
+ "op": "txn Sender",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "holding_address#0",
+ "tmp%0#1",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "tmp%0#1"
+ ]
+ },
+ "2898": {
+ "op": "uncover 3",
+ "stack_out": [
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "tmp%0#1",
+ "holding_address#0"
+ ]
+ },
+ "2900": {
+ "op": "==",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%1#1",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "tmp%1#1"
+ ]
+ },
+ "2901": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "tmp%2#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2902": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "2905": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "2908": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "box_prefixed_key%0#1",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0",
+ "box_prefixed_key%0#1",
+ "0"
+ ]
+ },
+ "2909": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "0",
+ "tmp%2#0"
+ ]
+ },
+ "2911": {
+ "op": "box_replace",
+ "stack_out": []
+ },
+ "2912": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "tmp%2#1"
+ ]
+ },
+ "2914": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2915": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "2916": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2917": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "2918": {
+ "op": "log",
+ "stack_out": []
+ },
+ "2919": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "2920": {
+ "op": "return",
+ "stack_out": []
+ },
+ "2921": {
+ "subroutine": "modules.accounting.AccountingModule.account_get_position[routing]",
+ "params": {},
+ "block": "account_get_position",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2924": {
+ "op": "dup",
+ "defined_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "2925": {
+ "op": "len",
+ "defined_out": [
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0"
+ ]
+ },
+ "2926": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "holding_address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2927": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "eq%0#0"
+ ]
+ },
+ "2928": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "holding_address#0"
+ ]
+ },
+ "2929": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0"
+ ],
+ "stack_out": [
+ "holding_address#0",
+ "0x4123"
+ ]
+ },
+ "2931": {
+ "op": "swap",
+ "stack_out": [
+ "0x4123",
+ "holding_address#0"
+ ]
+ },
+ "2932": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2933": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "2934": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2935": {
+ "op": "bury 1",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "2937": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "2938": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ],
+ "stack_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "2939": {
+ "op": "pop",
+ "stack_out": [
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "2940": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%box_get%0#0"
+ ],
+ "stack_out": [
+ "aggregate%box_get%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "2941": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "2942": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%3#0"
+ ]
+ },
+ "2943": {
+ "op": "log",
+ "stack_out": []
+ },
+ "2944": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "2945": {
+ "op": "return",
+ "stack_out": []
+ },
+ "2946": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.contract_create[routing]",
+ "params": {},
+ "block": "contract_create",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "arranger#0"
+ ],
+ "stack_out": [
+ "arranger#0"
+ ]
+ },
+ "2949": {
+ "op": "dup",
+ "defined_out": [
+ "arranger#0",
+ "arranger#0 (copy)"
+ ],
+ "stack_out": [
+ "arranger#0",
+ "arranger#0 (copy)"
+ ]
+ },
+ "2950": {
+ "op": "len",
+ "defined_out": [
+ "arranger#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "arranger#0",
+ "len%0#0"
+ ]
+ },
+ "2951": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "arranger#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "arranger#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "2952": {
+ "op": "==",
+ "defined_out": [
+ "arranger#0",
+ "eq%0#0"
+ ],
+ "stack_out": [
+ "arranger#0",
+ "eq%0#0"
+ ]
+ },
+ "2953": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "arranger#0"
+ ]
+ },
+ "2954": {
+ "op": "bytec 18 // 0x523a41525223",
+ "defined_out": [
+ "0x523a41525223",
+ "arranger#0"
+ ],
+ "stack_out": [
+ "arranger#0",
+ "0x523a41525223"
+ ]
+ },
+ "2956": {
+ "op": "swap",
+ "stack_out": [
+ "0x523a41525223",
+ "arranger#0"
+ ]
+ },
+ "2957": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "2958": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "2960": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2961": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "2962": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "2963": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "2964": {
+ "op": "log",
+ "stack_out": []
+ },
+ "2965": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "2966": {
+ "op": "return",
+ "stack_out": []
+ },
+ "2967": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.contract_config[routing]",
+ "params": {},
+ "block": "contract_config",
+ "stack_in": [],
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "day_count_convention#0"
+ ]
+ },
+ "2969": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2"
+ ]
+ },
+ "2970": {
+ "op": "txna ApplicationArgs 1"
+ },
+ "2973": {
+ "op": "dupn 2",
+ "defined_out": [
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "2975": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "terms#0",
+ "len%0#0"
+ ]
+ },
+ "2976": {
+ "op": "pushint 107",
+ "defined_out": [
+ "107",
+ "len%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "terms#0",
+ "len%0#0",
+ "107"
+ ]
+ },
+ "2978": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "terms#0",
+ "eq%0#0"
+ ]
+ },
+ "2979": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.NormalizedActusTerms",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.NormalizedActusTerms",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "terms#0"
+ ]
+ },
+ "2980": {
+ "op": "txna ApplicationArgs 2"
+ },
+ "2983": {
+ "op": "dup",
+ "defined_out": [
+ "initial_state#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "terms#0",
+ "initial_state#0",
+ "initial_state#0"
+ ]
+ },
+ "2984": {
+ "op": "cover 2",
+ "defined_out": [
+ "initial_state#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "terms#0",
+ "initial_state#0"
+ ]
+ },
+ "2986": {
+ "op": "len",
+ "defined_out": [
+ "initial_state#0",
+ "len%1#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "terms#0",
+ "len%1#0"
+ ]
+ },
+ "2987": {
+ "op": "pushint 72",
+ "defined_out": [
+ "72",
+ "initial_state#0",
+ "len%1#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "terms#0",
+ "len%1#0",
+ "72"
+ ]
+ },
+ "2989": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "initial_state#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "terms#0",
+ "eq%1#0"
+ ]
+ },
+ "2990": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.InitialKernelState",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.InitialKernelState",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "terms#0"
+ ]
+ },
+ "2991": {
+ "op": "txna ApplicationArgs 3"
+ },
+ "2994": {
+ "op": "dup",
+ "defined_out": [
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "terms#0",
+ "prospectus#0",
+ "prospectus#0"
+ ]
+ },
+ "2995": {
+ "op": "cover 2",
+ "defined_out": [
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0"
+ ]
+ },
+ "2997": {
+ "op": "dup",
+ "defined_out": [
+ "initial_state#0",
+ "prospectus#0",
+ "prospectus#0 (copy)",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "prospectus#0 (copy)"
+ ]
+ },
+ "2998": {
+ "op": "len",
+ "defined_out": [
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0"
+ ]
+ },
+ "2999": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "prospectus#0 (copy)"
+ ]
+ },
+ "3001": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "initial_state#0",
+ "prospectus#0",
+ "prospectus#0 (copy)",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "prospectus#0 (copy)",
+ "32"
+ ]
+ },
+ "3002": {
+ "error": "invalid tuple encoding",
+ "op": "extract_uint16 // on error: invalid tuple encoding",
+ "defined_out": [
+ "extract_uint16%0#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "extract_uint16%0#0"
+ ]
+ },
+ "3003": {
+ "op": "dup",
+ "defined_out": [
+ "extract_uint16%0#0",
+ "extract_uint16%0#0 (copy)",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "extract_uint16%0#0",
+ "extract_uint16%0#0 (copy)"
+ ]
+ },
+ "3004": {
+ "op": "pushint 34",
+ "defined_out": [
+ "34",
+ "extract_uint16%0#0",
+ "extract_uint16%0#0 (copy)",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "extract_uint16%0#0",
+ "extract_uint16%0#0 (copy)",
+ "34"
+ ]
+ },
+ "3006": {
+ "op": "==",
+ "defined_out": [
+ "eq%2#0",
+ "extract_uint16%0#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "extract_uint16%0#0",
+ "eq%2#0"
+ ]
+ },
+ "3007": {
+ "error": "invalid tail pointer at index 1 of (uint8[32],(len+utf8[]))",
+ "op": "assert // invalid tail pointer at index 1 of (uint8[32],(len+utf8[]))",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "prospectus#0",
+ "tuple_len%0#0",
+ "extract_uint16%0#0"
+ ]
+ },
+ "3008": {
+ "op": "uncover 2",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "extract_uint16%0#0",
+ "prospectus#0"
+ ]
+ },
+ "3010": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "prospectus#0",
+ "extract_uint16%0#0"
+ ]
+ },
+ "3011": {
+ "op": "dig 2",
+ "defined_out": [
+ "extract_uint16%0#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "tuple_len%0#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "prospectus#0",
+ "extract_uint16%0#0",
+ "tuple_len%0#0 (copy)"
+ ]
+ },
+ "3013": {
+ "op": "substring3",
+ "defined_out": [
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "substring3%0#0"
+ ]
+ },
+ "3014": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "substring3%0#0",
+ "substring3%0#0"
+ ]
+ },
+ "3015": {
+ "op": "cover 3",
+ "defined_out": [
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "substring3%0#0"
+ ]
+ },
+ "3017": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "substring3%0#0",
+ "0"
+ ]
+ },
+ "3018": {
+ "error": "invalid array length header",
+ "op": "extract_uint16 // on error: invalid array length header",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "3019": {
+ "op": "pushint 36",
+ "defined_out": [
+ "36",
+ "aggregate%array_length%0#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "aggregate%array_length%0#0",
+ "36"
+ ]
+ },
+ "3021": {
+ "op": "+",
+ "defined_out": [
+ "add%1#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tuple_len%0#0",
+ "add%1#0"
+ ]
+ },
+ "3022": {
+ "op": "==",
+ "defined_out": [
+ "eq%3#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "eq%3#0"
+ ]
+ },
+ "3023": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.Prospectus",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.Prospectus",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ]
+ },
+ "3024": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "3027": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "0"
+ ]
+ },
+ "3028": {
+ "op": "getbyte",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3029": {
+ "op": "dup",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3030": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "\"contract_type\""
+ ]
+ },
+ "3032": {
+ "op": "dig 1",
+ "defined_out": [
+ "\"contract_type\"",
+ "contract_type#0",
+ "contract_type#0 (copy)",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "\"contract_type\"",
+ "contract_type#0 (copy)"
+ ]
+ },
+ "3034": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3035": {
+ "op": "bz contract_config_bool_true@7",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3038": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3039": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "1"
+ ]
+ },
+ "3040": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%1#2"
+ ]
+ },
+ "3041": {
+ "op": "bnz contract_config_bool_true@7",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3044": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3045": {
+ "op": "pushint 2",
+ "defined_out": [
+ "2",
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "2"
+ ]
+ },
+ "3047": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%2#0"
+ ]
+ },
+ "3048": {
+ "op": "bnz contract_config_bool_true@7",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3051": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3052": {
+ "op": "pushint 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "3"
+ ]
+ },
+ "3054": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%3#0"
+ ]
+ },
+ "3055": {
+ "op": "bnz contract_config_bool_true@7",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3058": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3059": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "4"
+ ]
+ },
+ "3061": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%4#1"
+ ]
+ },
+ "3062": {
+ "op": "bnz contract_config_bool_true@7",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3065": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3066": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "5"
+ ]
+ },
+ "3068": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%5#1"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%5#1"
+ ]
+ },
+ "3069": {
+ "op": "bz contract_config_bool_false@8",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3072": {
+ "block": "contract_config_bool_true@7",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "or_result%0#0"
+ ]
+ },
+ "3073": {
+ "error": "Invalid ACTUS configuration",
+ "block": "contract_config_bool_merge@9",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "or_result%0#0"
+ ],
+ "op": "assert // Invalid ACTUS configuration",
+ "defined_out": [],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3074": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0"
+ ]
+ },
+ "3075": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "3077": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "contract_type#0",
+ "maybe_exists%1#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "3078": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "maybe_exists%1#0",
+ "contract_type#0"
+ ]
+ },
+ "3079": {
+ "op": "bury 2",
+ "defined_out": [
+ "contract_type#0",
+ "maybe_exists%1#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "3081": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3082": {
+ "op": "dig 4",
+ "defined_out": [
+ "contract_type#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3084": {
+ "op": "dup",
+ "defined_out": [
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3085": {
+ "op": "pushint 33",
+ "defined_out": [
+ "33",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "33"
+ ]
+ },
+ "3087": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "contract_type#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%0#2"
+ ]
+ },
+ "3088": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%0#2",
+ "values%0#2"
+ ]
+ },
+ "3089": {
+ "op": "bury 8",
+ "defined_out": [
+ "contract_type#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%0#2"
+ ]
+ },
+ "3091": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3092": {
+ "op": "pushint 57",
+ "defined_out": [
+ "57",
+ "contract_type#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "57"
+ ]
+ },
+ "3094": {
+ "op": "getbyte",
+ "defined_out": [
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3095": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3096": {
+ "op": "bury 8",
+ "defined_out": [
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3098": {
+ "op": "bz contract_config_bool_true@16",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3101": {
+ "op": "dig 6",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3103": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0",
+ "1"
+ ]
+ },
+ "3104": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "tmp%1#2",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%1#2"
+ ]
+ },
+ "3105": {
+ "op": "bnz contract_config_bool_true@16",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3108": {
+ "op": "dig 6",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3110": {
+ "op": "pushint 2",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0",
+ "2"
+ ]
+ },
+ "3112": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "tmp%2#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%2#0"
+ ]
+ },
+ "3113": {
+ "op": "bnz contract_config_bool_true@16",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3116": {
+ "op": "dig 6",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3118": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0",
+ "3"
+ ]
+ },
+ "3120": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "tmp%3#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%3#0"
+ ]
+ },
+ "3121": {
+ "op": "bnz contract_config_bool_true@16",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3124": {
+ "op": "dig 6",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0"
+ ]
+ },
+ "3126": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "day_count_convention#0",
+ "4"
+ ]
+ },
+ "3128": {
+ "op": "==",
+ "defined_out": [
+ "contract_type#0",
+ "day_count_convention#0",
+ "terms#0",
+ "tmp%4#1",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%4#1"
+ ]
+ },
+ "3129": {
+ "op": "bz contract_config_bool_false@17",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3132": {
+ "block": "contract_config_bool_true@16",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "or_result%0#0"
+ ]
+ },
+ "3133": {
+ "error": "Invalid day-count convention ID",
+ "block": "contract_config_bool_merge@18",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "or_result%0#0"
+ ],
+ "op": "assert // Invalid day-count convention ID",
+ "defined_out": [],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3134": {
+ "op": "dup",
+ "defined_out": [
+ "contract_type#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0"
+ ]
+ },
+ "3135": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "contract_type#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "contract_type#0",
+ "1"
+ ]
+ },
+ "3136": {
+ "op": "!=",
+ "defined_out": [
+ "contract_type#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%2#0"
+ ]
+ },
+ "3137": {
+ "op": "bz contract_config_after_if_else@20",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3140": {
+ "op": "dig 4",
+ "defined_out": [
+ "contract_type#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3142": {
+ "op": "pushint 786",
+ "defined_out": [
+ "786",
+ "contract_type#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "786"
+ ]
+ },
+ "3145": {
+ "op": "getbit",
+ "defined_out": [
+ "aggregate%get_bit%0#0",
+ "contract_type#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "aggregate%get_bit%0#0"
+ ]
+ },
+ "3146": {
+ "op": "!",
+ "defined_out": [
+ "contract_type#0",
+ "terms#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%3#0"
+ ]
+ },
+ "3147": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3148": {
+ "block": "contract_config_after_if_else@20",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0"
+ ]
+ },
+ "3149": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "3150": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#1",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "maybe_value%0#1",
+ "maybe_exists%0#1"
+ ]
+ },
+ "3151": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "maybe_value%0#1"
+ ]
+ },
+ "3152": {
+ "op": "!",
+ "defined_out": [
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%0#2"
+ ]
+ },
+ "3153": {
+ "error": "D-ASA already configured",
+ "op": "assert // D-ASA already configured",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3154": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0"
+ ]
+ },
+ "3155": {
+ "op": "bytec 20 // \"initial_exchange_amount\"",
+ "defined_out": [
+ "\"initial_exchange_amount\"",
+ "0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0",
+ "\"initial_exchange_amount\""
+ ]
+ },
+ "3157": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%1#1"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "maybe_value%1#1",
+ "maybe_exists%1#0"
+ ]
+ },
+ "3158": {
+ "error": "check self.initial_exchange_amount exists",
+ "op": "assert // check self.initial_exchange_amount exists",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "maybe_value%1#1"
+ ]
+ },
+ "3159": {
+ "op": "!",
+ "defined_out": [
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%1#2"
+ ]
+ },
+ "3160": {
+ "error": "D-ASA already configured",
+ "op": "assert // D-ASA already configured",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3161": {
+ "op": "dig 4",
+ "defined_out": [
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3163": {
+ "op": "dup",
+ "defined_out": [
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3164": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "1"
+ ]
+ },
+ "3165": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "denomination_asset_id#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0"
+ ]
+ },
+ "3166": {
+ "op": "dup",
+ "defined_out": [
+ "denomination_asset_id#0",
+ "denomination_asset_id#0 (copy)",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "denomination_asset_id#0 (copy)"
+ ]
+ },
+ "3167": {
+ "op": "asset_params_get AssetCreator",
+ "defined_out": [
+ "_creator#0",
+ "denomination_asset_id#0",
+ "exists#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "_creator#0",
+ "exists#0"
+ ]
+ },
+ "3169": {
+ "op": "bury 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "exists#0"
+ ]
+ },
+ "3171": {
+ "error": "Denomination asset is not properly set",
+ "op": "assert // Denomination asset is not properly set",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0"
+ ]
+ },
+ "3172": {
+ "op": "bytec 44 // \"denomination_asset_id\"",
+ "defined_out": [
+ "\"denomination_asset_id\"",
+ "denomination_asset_id#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "\"denomination_asset_id\""
+ ]
+ },
+ "3174": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "\"denomination_asset_id\"",
+ "denomination_asset_id#0 (copy)"
+ ]
+ },
+ "3176": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0"
+ ]
+ },
+ "3177": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3179": {
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "denomination_asset_id#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "terms#0 (copy)",
+ "9"
+ ]
+ },
+ "3181": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "denomination_asset_id#0",
+ "settlement_asset_id#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "settlement_asset_id#0"
+ ]
+ },
+ "3182": {
+ "op": "dup",
+ "defined_out": [
+ "denomination_asset_id#0",
+ "settlement_asset_id#0",
+ "settlement_asset_id#0 (copy)",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "denomination_asset_id#0",
+ "settlement_asset_id#0",
+ "settlement_asset_id#0 (copy)"
+ ]
+ },
+ "3183": {
+ "op": "uncover 2",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "settlement_asset_id#0 (copy)",
+ "denomination_asset_id#0"
+ ]
+ },
+ "3185": {
+ "op": "==",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "tmp%0#2"
+ ]
+ },
+ "3186": {
+ "error": "Different settlement asset not supported, must be equal to denomination asset",
+ "op": "assert // Different settlement asset not supported, must be equal to denomination asset",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0"
+ ]
+ },
+ "3187": {
+ "op": "bytec 19 // \"settlement_asset_id\"",
+ "defined_out": [
+ "\"settlement_asset_id\"",
+ "settlement_asset_id#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "\"settlement_asset_id\""
+ ]
+ },
+ "3189": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "\"settlement_asset_id\"",
+ "settlement_asset_id#0 (copy)"
+ ]
+ },
+ "3191": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0"
+ ]
+ },
+ "3192": {
+ "op": "itxn_begin"
+ },
+ "3193": {
+ "op": "global MinTxnFee",
+ "defined_out": [
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "settlement_asset_id#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "3195": {
+ "op": "global CurrentApplicationAddress",
+ "defined_out": [
+ "inner_txn_params%0%%param_AssetReceiver_idx_0#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "settlement_asset_id#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "inner_txn_params%0%%param_AssetReceiver_idx_0#0"
+ ]
+ },
+ "3197": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "inner_txn_params%0%%param_AssetReceiver_idx_0#0",
+ "0"
+ ]
+ },
+ "3198": {
+ "op": "itxn_field AssetAmount",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "inner_txn_params%0%%param_AssetReceiver_idx_0#0"
+ ]
+ },
+ "3200": {
+ "op": "itxn_field AssetReceiver",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "settlement_asset_id#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "3202": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "settlement_asset_id#0"
+ ]
+ },
+ "3203": {
+ "op": "itxn_field XferAsset",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "3205": {
+ "op": "pushint 4 // axfer",
+ "defined_out": [
+ "axfer",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0",
+ "axfer"
+ ]
+ },
+ "3207": {
+ "op": "itxn_field TypeEnum",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "inner_txn_params%0%%param_Fee_idx_0#0"
+ ]
+ },
+ "3209": {
+ "op": "itxn_field Fee",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3211": {
+ "op": "itxn_submit"
+ },
+ "3212": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3213": {
+ "op": "pushint 17",
+ "defined_out": [
+ "17",
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "17"
+ ]
+ },
+ "3215": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "terms#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%4#0"
+ ]
+ },
+ "3216": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "terms#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%4#0",
+ "\"total_units\""
+ ]
+ },
+ "3218": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "\"total_units\"",
+ "values%4#0"
+ ]
+ },
+ "3219": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3220": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "3222": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "\"reserved_units_total\"",
+ "0"
+ ]
+ },
+ "3223": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3224": {
+ "op": "bytec 46 // \"day_count_convention\"",
+ "defined_out": [
+ "\"day_count_convention\"",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "\"day_count_convention\""
+ ]
+ },
+ "3226": {
+ "op": "dig 8",
+ "defined_out": [
+ "\"day_count_convention\"",
+ "day_count_convention#0",
+ "terms#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "\"day_count_convention\"",
+ "day_count_convention#0"
+ ]
+ },
+ "3228": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0"
+ ]
+ },
+ "3229": {
+ "op": "dup",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3230": {
+ "op": "pushint 41",
+ "defined_out": [
+ "41",
+ "day_count_convention#0",
+ "terms#0",
+ "terms#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "41"
+ ]
+ },
+ "3232": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "terms#0",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0"
+ ]
+ },
+ "3233": {
+ "op": "bytec 28 // \"initial_exchange_date\"",
+ "defined_out": [
+ "\"initial_exchange_date\"",
+ "day_count_convention#0",
+ "terms#0",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "\"initial_exchange_date\""
+ ]
+ },
+ "3235": {
+ "op": "dig 1",
+ "defined_out": [
+ "\"initial_exchange_date\"",
+ "day_count_convention#0",
+ "terms#0",
+ "values%5#0",
+ "values%5#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "\"initial_exchange_date\"",
+ "values%5#0 (copy)"
+ ]
+ },
+ "3237": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0"
+ ]
+ },
+ "3238": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3240": {
+ "op": "pushint 49",
+ "defined_out": [
+ "49",
+ "day_count_convention#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "terms#0 (copy)",
+ "49"
+ ]
+ },
+ "3242": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ]
+ },
+ "3243": {
+ "op": "bytec 45 // \"maturity_date\"",
+ "defined_out": [
+ "\"maturity_date\"",
+ "day_count_convention#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "\"maturity_date\""
+ ]
+ },
+ "3245": {
+ "op": "dig 1",
+ "defined_out": [
+ "\"maturity_date\"",
+ "day_count_convention#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "values%6#0 (copy)"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "\"maturity_date\"",
+ "values%6#0 (copy)"
+ ]
+ },
+ "3247": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ]
+ },
+ "3248": {
+ "op": "dig 6",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "initial_state#0"
+ ]
+ },
+ "3250": {
+ "op": "dup",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3251": {
+ "op": "cover 2",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3253": {
+ "op": "pushint 48",
+ "defined_out": [
+ "48",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "48"
+ ]
+ },
+ "3255": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "values%7#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%7#0"
+ ]
+ },
+ "3256": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%5#0",
+ "values%6#0",
+ "values%7#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%7#0",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "3258": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"next_principal_redemption\"",
+ "values%7#0"
+ ]
+ },
+ "3259": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3260": {
+ "op": "bytec 20 // \"initial_exchange_amount\"",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"initial_exchange_amount\""
+ ]
+ },
+ "3262": {
+ "op": "dig 10",
+ "defined_out": [
+ "\"initial_exchange_amount\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"initial_exchange_amount\"",
+ "values%0#2"
+ ]
+ },
+ "3264": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3265": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3267": {
+ "op": "pushint 786",
+ "defined_out": [
+ "786",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "786"
+ ]
+ },
+ "3270": {
+ "op": "getbit",
+ "defined_out": [
+ "aggregate%get_bit%1#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "aggregate%get_bit%1#0"
+ ]
+ },
+ "3271": {
+ "op": "bytec 35 // \"dynamic_principal_redemption\"",
+ "defined_out": [
+ "\"dynamic_principal_redemption\"",
+ "aggregate%get_bit%1#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "aggregate%get_bit%1#0",
+ "\"dynamic_principal_redemption\""
+ ]
+ },
+ "3273": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"dynamic_principal_redemption\"",
+ "aggregate%get_bit%1#0"
+ ]
+ },
+ "3274": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3275": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3277": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "16"
+ ]
+ },
+ "3279": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%10#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%10#0"
+ ]
+ },
+ "3280": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%10#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%10#0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "3282": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"outstanding_principal\"",
+ "values%10#0"
+ ]
+ },
+ "3283": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3284": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3286": {
+ "op": "pushint 40",
+ "defined_out": [
+ "40",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "40"
+ ]
+ },
+ "3288": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%11#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%11#0"
+ ]
+ },
+ "3289": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%11#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%11#0",
+ "\"accrued_interest\""
+ ]
+ },
+ "3291": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"accrued_interest\"",
+ "values%11#0"
+ ]
+ },
+ "3292": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3293": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3295": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "32"
+ ]
+ },
+ "3296": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%12#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%12#0"
+ ]
+ },
+ "3297": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%12#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%12#0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "3299": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"nominal_interest_rate\"",
+ "values%12#0"
+ ]
+ },
+ "3300": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3301": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3303": {
+ "op": "pushint 24",
+ "defined_out": [
+ "24",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "24"
+ ]
+ },
+ "3305": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%13#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%13#0"
+ ]
+ },
+ "3306": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%13#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%13#0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "3308": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"interest_calculation_base\"",
+ "values%13#0"
+ ]
+ },
+ "3309": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3310": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3312": {
+ "op": "pushint 58",
+ "defined_out": [
+ "58",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "58"
+ ]
+ },
+ "3314": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%14#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%14#0"
+ ]
+ },
+ "3315": {
+ "op": "bytec 36 // \"rate_reset_spread\"",
+ "defined_out": [
+ "\"rate_reset_spread\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%14#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%14#0",
+ "\"rate_reset_spread\""
+ ]
+ },
+ "3317": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"rate_reset_spread\"",
+ "values%14#0"
+ ]
+ },
+ "3318": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3319": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3321": {
+ "op": "pushint 66",
+ "defined_out": [
+ "66",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "66"
+ ]
+ },
+ "3323": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%15#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%15#0"
+ ]
+ },
+ "3324": {
+ "op": "bytec 37 // \"rate_reset_multiplier\"",
+ "defined_out": [
+ "\"rate_reset_multiplier\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%15#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%15#0",
+ "\"rate_reset_multiplier\""
+ ]
+ },
+ "3326": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"rate_reset_multiplier\"",
+ "values%15#0"
+ ]
+ },
+ "3327": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3328": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3330": {
+ "op": "pushint 74",
+ "defined_out": [
+ "74",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "74"
+ ]
+ },
+ "3332": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%16#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%16#0"
+ ]
+ },
+ "3333": {
+ "op": "bytec 31 // \"rate_reset_floor\"",
+ "defined_out": [
+ "\"rate_reset_floor\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%16#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%16#0",
+ "\"rate_reset_floor\""
+ ]
+ },
+ "3335": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"rate_reset_floor\"",
+ "values%16#0"
+ ]
+ },
+ "3336": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3337": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3339": {
+ "op": "pushint 82",
+ "defined_out": [
+ "82",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "82"
+ ]
+ },
+ "3341": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%17#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%17#0"
+ ]
+ },
+ "3342": {
+ "op": "bytec 32 // \"rate_reset_cap\"",
+ "defined_out": [
+ "\"rate_reset_cap\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%17#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%17#0",
+ "\"rate_reset_cap\""
+ ]
+ },
+ "3344": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"rate_reset_cap\"",
+ "values%17#0"
+ ]
+ },
+ "3345": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3346": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3348": {
+ "op": "pushint 90",
+ "defined_out": [
+ "90",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "90"
+ ]
+ },
+ "3350": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%18#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%18#0"
+ ]
+ },
+ "3351": {
+ "op": "bytec 38 // \"rate_reset_next\"",
+ "defined_out": [
+ "\"rate_reset_next\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%18#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%18#0",
+ "\"rate_reset_next\""
+ ]
+ },
+ "3353": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"rate_reset_next\"",
+ "values%18#0"
+ ]
+ },
+ "3354": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3355": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3357": {
+ "op": "pushint 784",
+ "defined_out": [
+ "784",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "784"
+ ]
+ },
+ "3360": {
+ "op": "getbit",
+ "defined_out": [
+ "aggregate%get_bit%2#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "aggregate%get_bit%2#0"
+ ]
+ },
+ "3361": {
+ "op": "bytec 39 // \"has_rate_reset_floor\"",
+ "defined_out": [
+ "\"has_rate_reset_floor\"",
+ "aggregate%get_bit%2#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "aggregate%get_bit%2#0",
+ "\"has_rate_reset_floor\""
+ ]
+ },
+ "3363": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"has_rate_reset_floor\"",
+ "aggregate%get_bit%2#0"
+ ]
+ },
+ "3364": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3365": {
+ "op": "dig 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)"
+ ]
+ },
+ "3367": {
+ "op": "pushint 785",
+ "defined_out": [
+ "785",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "terms#0 (copy)",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0 (copy)",
+ "785"
+ ]
+ },
+ "3370": {
+ "op": "getbit",
+ "defined_out": [
+ "aggregate%get_bit%3#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "aggregate%get_bit%3#0"
+ ]
+ },
+ "3371": {
+ "op": "bytec 40 // \"has_rate_reset_cap\"",
+ "defined_out": [
+ "\"has_rate_reset_cap\"",
+ "aggregate%get_bit%3#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "aggregate%get_bit%3#0",
+ "\"has_rate_reset_cap\""
+ ]
+ },
+ "3373": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"has_rate_reset_cap\"",
+ "aggregate%get_bit%3#0"
+ ]
+ },
+ "3374": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "terms#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3375": {
+ "op": "uncover 3",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0"
+ ]
+ },
+ "3377": {
+ "op": "pushint 99",
+ "defined_out": [
+ "99",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "terms#0",
+ "99"
+ ]
+ },
+ "3379": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%21#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%21#0"
+ ]
+ },
+ "3380": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%21#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%21#0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "3382": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"fixed_point_scale\"",
+ "values%21#0"
+ ]
+ },
+ "3383": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3384": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3386": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "8"
+ ]
+ },
+ "3387": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%22#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%22#0"
+ ]
+ },
+ "3388": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%22#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%22#0",
+ "\"event_cursor\""
+ ]
+ },
+ "3389": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"event_cursor\"",
+ "values%22#0"
+ ]
+ },
+ "3390": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3391": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3393": {
+ "op": "pushint 56",
+ "defined_out": [
+ "56",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "56"
+ ]
+ },
+ "3395": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%23#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%23#0"
+ ]
+ },
+ "3396": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "defined_out": [
+ "\"cumulative_interest_index\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%23#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%23#0",
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "3398": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"cumulative_interest_index\"",
+ "values%23#0"
+ ]
+ },
+ "3399": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3400": {
+ "op": "dig 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)"
+ ]
+ },
+ "3402": {
+ "op": "pushint 64",
+ "defined_out": [
+ "64",
+ "day_count_convention#0",
+ "initial_state#0",
+ "initial_state#0 (copy)",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "initial_state#0 (copy)",
+ "64"
+ ]
+ },
+ "3404": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%24#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%24#0"
+ ]
+ },
+ "3405": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "defined_out": [
+ "\"cumulative_principal_index\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%24#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%24#0",
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "3407": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"cumulative_principal_index\"",
+ "values%24#0"
+ ]
+ },
+ "3408": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3409": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "defined_out": [
+ "\"reserved_interest\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"reserved_interest\""
+ ]
+ },
+ "3411": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"reserved_interest\"",
+ "0"
+ ]
+ },
+ "3412": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3413": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "defined_out": [
+ "\"reserved_principal\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"reserved_principal\""
+ ]
+ },
+ "3415": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "\"reserved_principal\"",
+ "0"
+ ]
+ },
+ "3416": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3417": {
+ "op": "dig 2",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%5#0 (copy)"
+ ]
+ },
+ "3419": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "tmp%3#1",
+ "values%0#2",
+ "values%5#0",
+ "values%5#0 (copy)",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "values%5#0 (copy)",
+ "tmp%3#1"
+ ]
+ },
+ "3421": {
+ "op": ">",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "tmp%4#1",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0",
+ "tmp%4#1"
+ ]
+ },
+ "3422": {
+ "error": "IED must be set in the future",
+ "op": "assert // IED must be set in the future",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "initial_state#0",
+ "values%6#0"
+ ]
+ },
+ "3423": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "values%6#0",
+ "initial_state#0"
+ ]
+ },
+ "3424": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "values%6#0",
+ "initial_state#0",
+ "0"
+ ]
+ },
+ "3425": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "values%0#2",
+ "values%27#0",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "values%6#0",
+ "values%27#0"
+ ]
+ },
+ "3426": {
+ "op": "dig 2",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "values%6#0",
+ "values%27#0",
+ "values%5#0 (copy)"
+ ]
+ },
+ "3428": {
+ "op": "<",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "tmp%5#1",
+ "values%0#2",
+ "values%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "values%6#0",
+ "tmp%5#1"
+ ]
+ },
+ "3429": {
+ "error": "IED must be set in the future",
+ "op": "assert // IED must be set in the future",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%5#0",
+ "values%6#0"
+ ]
+ },
+ "3430": {
+ "op": "<",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "terms#0",
+ "tmp%6#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%6#0"
+ ]
+ },
+ "3431": {
+ "error": "IED must be set in the future",
+ "op": "assert // IED must be set in the future",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3432": {
+ "op": "dig 2",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "prospectus#0"
+ ]
+ },
+ "3434": {
+ "op": "extract 0 32",
+ "defined_out": [
+ "aggregate%extract%23#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "aggregate%extract%23#0"
+ ]
+ },
+ "3437": {
+ "op": "bytec 42 // \"prospectus_hash\"",
+ "defined_out": [
+ "\"prospectus_hash\"",
+ "aggregate%extract%23#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "aggregate%extract%23#0",
+ "\"prospectus_hash\""
+ ]
+ },
+ "3439": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "\"prospectus_hash\"",
+ "aggregate%extract%23#0"
+ ]
+ },
+ "3440": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3441": {
+ "op": "dig 1",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "substring3%0#0"
+ ]
+ },
+ "3443": {
+ "op": "extract 2 0",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "values%0#2",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%1#0"
+ ]
+ },
+ "3446": {
+ "op": "bytec 43 // \"prospectus_url\"",
+ "defined_out": [
+ "\"prospectus_url\"",
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "values%0#2",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "values%1#0",
+ "\"prospectus_url\""
+ ]
+ },
+ "3448": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "\"prospectus_url\"",
+ "values%1#0"
+ ]
+ },
+ "3449": {
+ "op": "app_global_put",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3450": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%1#1",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%1#1"
+ ]
+ },
+ "3452": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "3453": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0",
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "3454": {
+ "op": "swap",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "3455": {
+ "op": "concat",
+ "defined_out": [
+ "day_count_convention#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "terms#0",
+ "tmp%5#0",
+ "values%0#2"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "tmp%5#0"
+ ]
+ },
+ "3456": {
+ "op": "log",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3457": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "1"
+ ]
+ },
+ "3458": {
+ "op": "return",
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3459": {
+ "block": "contract_config_bool_false@17",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "or_result%0#0"
+ ]
+ },
+ "3460": {
+ "op": "b contract_config_bool_merge@18"
+ },
+ "3463": {
+ "block": "contract_config_bool_false@8",
+ "stack_in": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "day_count_convention#0",
+ "values%0#2",
+ "terms#0",
+ "initial_state#0",
+ "prospectus#0",
+ "substring3%0#0",
+ "contract_type#0",
+ "or_result%0#0"
+ ]
+ },
+ "3464": {
+ "op": "b contract_config_bool_merge@9"
+ },
+ "3467": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.contract_schedule[routing]",
+ "params": {},
+ "block": "contract_schedule",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0"
+ ]
+ },
+ "3468": {
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0"
+ ]
+ },
+ "3470": {
+ "op": "dupn 2",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0"
+ ]
+ },
+ "3472": {
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "tmp%0#0"
+ ]
+ },
+ "3475": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "3476": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "3477": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "tmp%0#0",
+ "len%0#0",
+ "8"
+ ]
+ },
+ "3478": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "3479": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "tmp%0#0"
+ ]
+ },
+ "3480": {
+ "op": "btoi",
+ "defined_out": [
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3481": {
+ "op": "dup",
+ "defined_out": [
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3482": {
+ "op": "txna ApplicationArgs 2",
+ "defined_out": [
+ "schedule_page_index#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0"
+ ]
+ },
+ "3485": {
+ "op": "dup",
+ "defined_out": [
+ "schedule_page_index#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0",
+ "tmp%2#0 (copy)"
+ ]
+ },
+ "3486": {
+ "op": "len",
+ "defined_out": [
+ "len%1#0",
+ "schedule_page_index#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0",
+ "len%1#0"
+ ]
+ },
+ "3487": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "len%1#0",
+ "schedule_page_index#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0",
+ "len%1#0",
+ "1"
+ ]
+ },
+ "3488": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "schedule_page_index#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0",
+ "eq%1#0"
+ ]
+ },
+ "3489": {
+ "error": "invalid number of bytes for arc4.bool",
+ "op": "assert // invalid number of bytes for arc4.bool",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0"
+ ]
+ },
+ "3490": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "tmp%2#0",
+ "0"
+ ]
+ },
+ "3491": {
+ "op": "getbit",
+ "defined_out": [
+ "is_last_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0",
+ "is_last_page#0"
+ ]
+ },
+ "3492": {
+ "op": "swap",
+ "defined_out": [
+ "is_last_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3493": {
+ "op": "txna ApplicationArgs 3"
+ },
+ "3496": {
+ "op": "dup",
+ "defined_out": [
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "schedule_page#0"
+ ]
+ },
+ "3497": {
+ "op": "cover 2",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "schedule_page#0"
+ ]
+ },
+ "3499": {
+ "op": "dup",
+ "defined_out": [
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page#0 (copy)",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "schedule_page#0 (copy)"
+ ]
+ },
+ "3500": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "schedule_page#0 (copy)",
+ "0"
+ ]
+ },
+ "3501": {
+ "error": "invalid array length header",
+ "op": "extract_uint16 // on error: invalid array length header",
+ "defined_out": [
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0"
+ ]
+ },
+ "3502": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0",
+ "page_length#0"
+ ]
+ },
+ "3503": {
+ "op": "cover 3",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0"
+ ]
+ },
+ "3505": {
+ "op": "dup",
+ "defined_out": [
+ "is_last_page#0",
+ "page_length#0",
+ "page_length#0 (copy)",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0",
+ "page_length#0 (copy)"
+ ]
+ },
+ "3506": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "is_last_page#0",
+ "page_length#0",
+ "page_length#0 (copy)",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0",
+ "page_length#0 (copy)",
+ "65"
+ ]
+ },
+ "3508": {
+ "op": "*",
+ "defined_out": [
+ "is_last_page#0",
+ "mul%0#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0",
+ "mul%0#0"
+ ]
+ },
+ "3509": {
+ "op": "pushint 2",
+ "defined_out": [
+ "2",
+ "is_last_page#0",
+ "mul%0#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0",
+ "mul%0#0",
+ "2"
+ ]
+ },
+ "3511": {
+ "op": "+",
+ "defined_out": [
+ "add%0#0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "schedule_page#0",
+ "page_length#0",
+ "add%0#0"
+ ]
+ },
+ "3512": {
+ "op": "uncover 2",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "add%0#0",
+ "schedule_page#0"
+ ]
+ },
+ "3514": {
+ "op": "len",
+ "defined_out": [
+ "add%0#0",
+ "is_last_page#0",
+ "len%2#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "add%0#0",
+ "len%2#0"
+ ]
+ },
+ "3515": {
+ "op": "==",
+ "defined_out": [
+ "eq%2#0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "eq%2#0"
+ ]
+ },
+ "3516": {
+ "error": "invalid number of bytes for arc4.dynamic_array",
+ "op": "assert // invalid number of bytes for arc4.dynamic_array",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0"
+ ]
+ },
+ "3517": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "3520": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "0"
+ ]
+ },
+ "3521": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "3523": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "maybe_exists%0#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "contract_type#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3524": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "maybe_exists%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3525": {
+ "op": "cover 3",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "maybe_exists%0#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3527": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0"
+ ]
+ },
+ "3528": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "0"
+ ]
+ },
+ "3529": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "contract_type#0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "3530": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#1",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "maybe_value%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3531": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "maybe_value%0#1"
+ ]
+ },
+ "3532": {
+ "op": "!",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "tmp%0#2"
+ ]
+ },
+ "3533": {
+ "error": "D-ASA already configured",
+ "op": "assert // D-ASA already configured",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0"
+ ]
+ },
+ "3534": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "page_length#0 (copy)"
+ ]
+ },
+ "3535": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "contract_type#0",
+ "is_last_page#0",
+ "page_length#0",
+ "page_length#0 (copy)",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "page_length#0 (copy)",
+ "16"
+ ]
+ },
+ "3537": {
+ "op": "<=",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "tmp%2#1"
+ ]
+ },
+ "3538": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0"
+ ]
+ },
+ "3539": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "0"
+ ]
+ },
+ "3540": {
+ "op": "bytec 20 // \"initial_exchange_amount\"",
+ "defined_out": [
+ "\"initial_exchange_amount\"",
+ "0",
+ "contract_type#0",
+ "is_last_page#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "0",
+ "\"initial_exchange_amount\""
+ ]
+ },
+ "3542": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "3543": {
+ "error": "check self.initial_exchange_amount exists",
+ "op": "assert // check self.initial_exchange_amount exists",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "3544": {
+ "error": "D-ASA terms not configured",
+ "op": "assert // D-ASA terms not configured",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "schedule_page_index#0",
+ "page_length#0"
+ ]
+ },
+ "3545": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_length#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3546": {
+ "op": "pushint 16",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_length#0",
+ "schedule_page_index#0",
+ "16"
+ ]
+ },
+ "3548": {
+ "op": "*",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_length#0",
+ "page_cursor#0"
+ ]
+ },
+ "3549": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "page_length#0"
+ ]
+ },
+ "3550": {
+ "op": "pushint 100",
+ "defined_out": [
+ "100",
+ "contract_type#0",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "page_length#0",
+ "100"
+ ]
+ },
+ "3552": {
+ "op": "*",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%6#1"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "tmp%6#1"
+ ]
+ },
+ "3553": {
+ "op": "intc 4 // 1500",
+ "defined_out": [
+ "1500",
+ "contract_type#0",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%6#1"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "tmp%6#1",
+ "1500"
+ ]
+ },
+ "3555": {
+ "op": "+",
+ "defined_out": [
+ "contract_type#0",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%7#1"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "tmp%7#1"
+ ]
+ },
+ "3556": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "tmp%7#1",
+ "0"
+ ]
+ },
+ "3557": {
+ "callsub": "_puya_lib.util.ensure_budget",
+ "op": "callsub ensure_budget",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0"
+ ]
+ },
+ "3560": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "contract_type#0",
+ "index#0",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3561": {
+ "block": "contract_schedule_while_top@2",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0"
+ ]
+ },
+ "3562": {
+ "op": "dig 4",
+ "defined_out": [
+ "index#0",
+ "page_length#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "page_length#0"
+ ]
+ },
+ "3564": {
+ "op": "<",
+ "defined_out": [
+ "index#0",
+ "page_length#0",
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%8#0"
+ ]
+ },
+ "3565": {
+ "op": "bz contract_schedule_after_while@11",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3568": {
+ "op": "dig 4",
+ "defined_out": [
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "schedule_page#0"
+ ]
+ },
+ "3570": {
+ "op": "extract 2 0",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0"
+ ]
+ },
+ "3573": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%array_trimmed%0#0"
+ ]
+ },
+ "3574": {
+ "op": "bury 12",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0"
+ ]
+ },
+ "3576": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "index#0"
+ ]
+ },
+ "3578": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "index#0",
+ "index#0 (copy)",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "index#0 (copy)",
+ "index#0 (copy)"
+ ]
+ },
+ "3579": {
+ "op": "cover 2",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "index#0 (copy)"
+ ]
+ },
+ "3581": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "aggregate%array_trimmed%0#0",
+ "index#0",
+ "index#0 (copy)",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "index#0 (copy)",
+ "65"
+ ]
+ },
+ "3583": {
+ "op": "*",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%bytes_offset%0#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%bytes_offset%0#0"
+ ]
+ },
+ "3584": {
+ "op": "pushint 65",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%bytes_offset%0#0",
+ "65"
+ ]
+ },
+ "3586": {
+ "error": "index access is out of bounds",
+ "op": "extract3 // on error: index access is out of bounds",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%encoded_element%0#0"
+ ]
+ },
+ "3587": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "aggregate%encoded_element%0#0 (copy)",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%encoded_element%0#0",
+ "aggregate%encoded_element%0#0 (copy)"
+ ]
+ },
+ "3588": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "aggregate%encoded_element%0#0 (copy)",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%encoded_element%0#0",
+ "aggregate%encoded_element%0#0 (copy)",
+ "8"
+ ]
+ },
+ "3589": {
+ "op": "getbyte",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0"
+ ]
+ },
+ "3590": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "entry_event_type#0 (copy)"
+ ]
+ },
+ "3591": {
+ "op": "cover 2",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0"
+ ]
+ },
+ "3593": {
+ "op": "bury 13",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0"
+ ]
+ },
+ "3595": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "aggregate%encoded_element%0#0 (copy)"
+ ]
+ },
+ "3596": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "aggregate%encoded_element%0#0 (copy)",
+ "0"
+ ]
+ },
+ "3597": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0"
+ ]
+ },
+ "3598": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "values%0#0"
+ ]
+ },
+ "3599": {
+ "op": "bury 13",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0"
+ ]
+ },
+ "3601": {
+ "op": "dig 5",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "page_cursor#0"
+ ]
+ },
+ "3603": {
+ "op": "uncover 4",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3605": {
+ "op": "+",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "tmp%10#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "tmp%10#0"
+ ]
+ },
+ "3606": {
+ "op": "dig 1",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "tmp%10#0",
+ "values%0#0",
+ "values%0#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "tmp%10#0",
+ "values%0#0 (copy)"
+ ]
+ },
+ "3608": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "tmp%11#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "tmp%11#0"
+ ]
+ },
+ "3609": {
+ "error": "Invalid event id",
+ "op": "assert // Invalid event id",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0"
+ ]
+ },
+ "3610": {
+ "op": "dig 5",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "contract_type#0"
+ ]
+ },
+ "3612": {
+ "op": "uncover 3",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0",
+ "contract_type#0",
+ "entry_event_type#0"
+ ]
+ },
+ "3614": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._assert_event_allowed_for_contract_type",
+ "op": "callsub _assert_event_allowed_for_contract_type",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%encoded_element%0#0",
+ "values%0#0"
+ ]
+ },
+ "3617": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0",
+ "aggregate%encoded_element%0#0"
+ ]
+ },
+ "3618": {
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%encoded_element%0#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0",
+ "aggregate%encoded_element%0#0",
+ "9"
+ ]
+ },
+ "3620": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0",
+ "values%1#0"
+ ]
+ },
+ "3621": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0",
+ "values%1#0",
+ "values%1#0"
+ ]
+ },
+ "3622": {
+ "op": "bury 10",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0",
+ "values%1#0"
+ ]
+ },
+ "3624": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0"
+ ]
+ },
+ "3625": {
+ "op": "bz contract_schedule_after_if_else@8",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3628": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0"
+ ]
+ },
+ "3629": {
+ "op": "bz contract_schedule_else_body@6",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3632": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0"
+ ]
+ },
+ "3633": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "1"
+ ]
+ },
+ "3634": {
+ "op": "-",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "tmp%15#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%15#0"
+ ]
+ },
+ "3635": {
+ "op": "pushint 65",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%15#0",
+ "65"
+ ]
+ },
+ "3637": {
+ "op": "*",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "aggregate%bytes_offset%3#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%bytes_offset%3#0"
+ ]
+ },
+ "3638": {
+ "op": "dig 11",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%bytes_offset%3#0",
+ "aggregate%array_trimmed%0#0"
+ ]
+ },
+ "3640": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%bytes_offset%3#0"
+ ]
+ },
+ "3641": {
+ "op": "pushint 65",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%array_trimmed%0#0",
+ "aggregate%bytes_offset%3#0",
+ "65"
+ ]
+ },
+ "3643": {
+ "error": "index access is out of bounds",
+ "op": "extract3 // on error: index access is out of bounds",
+ "defined_out": [
+ "aggregate%array_trimmed%0#0",
+ "contract_type#0",
+ "entry_event_type#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0",
+ "previous_entry#0",
+ "schedule_page#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "previous_entry#0"
+ ]
+ },
+ "3644": {
+ "block": "contract_schedule_after_if_else@7",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "previous_entry#0"
+ ],
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "previous_entry#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "previous_entry#0",
+ "9"
+ ]
+ },
+ "3646": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "values%3#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%3#0"
+ ]
+ },
+ "3647": {
+ "op": "dig 8",
+ "defined_out": [
+ "values%1#0",
+ "values%3#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%3#0",
+ "values%1#0"
+ ]
+ },
+ "3649": {
+ "op": "<=",
+ "defined_out": [
+ "tmp%22#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%22#0"
+ ]
+ },
+ "3650": {
+ "error": "Time events must be sorted in strictly ascending order",
+ "op": "assert // Time events must be sorted in strictly ascending order",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3651": {
+ "block": "contract_schedule_after_if_else@8",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ],
+ "op": "dig 8",
+ "defined_out": [
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "values%0#0"
+ ]
+ },
+ "3653": {
+ "op": "bnz contract_schedule_after_if_else@10",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3656": {
+ "op": "dig 9",
+ "defined_out": [
+ "entry_event_type#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0"
+ ]
+ },
+ "3658": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "entry_event_type#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "entry_event_type#0",
+ "1"
+ ]
+ },
+ "3659": {
+ "op": "==",
+ "defined_out": [
+ "entry_event_type#0",
+ "tmp%24#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%24#0"
+ ]
+ },
+ "3660": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3661": {
+ "block": "contract_schedule_after_if_else@10",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0"
+ ]
+ },
+ "3662": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0",
+ "1"
+ ]
+ },
+ "3663": {
+ "op": "+",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "index#0"
+ ]
+ },
+ "3664": {
+ "op": "bury 1",
+ "defined_out": [
+ "index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3666": {
+ "op": "b contract_schedule_while_top@2"
+ },
+ "3669": {
+ "block": "contract_schedule_else_body@6",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ],
+ "op": "dig 6",
+ "defined_out": [
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3671": {
+ "op": "dup",
+ "defined_out": [
+ "schedule_page_index#0",
+ "schedule_page_index#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "schedule_page_index#0",
+ "schedule_page_index#0 (copy)"
+ ]
+ },
+ "3672": {
+ "error": "Invalid event id",
+ "op": "assert // Invalid event id",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3673": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "schedule_page_index#0",
+ "1"
+ ]
+ },
+ "3674": {
+ "op": "-",
+ "defined_out": [
+ "previous_page_index#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "previous_page_index#0"
+ ]
+ },
+ "3675": {
+ "op": "itob",
+ "defined_out": [
+ "encoded_value%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "encoded_value%0#0"
+ ]
+ },
+ "3676": {
+ "op": "bytec 24 // 0x5323",
+ "defined_out": [
+ "0x5323",
+ "encoded_value%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "encoded_value%0#0",
+ "0x5323"
+ ]
+ },
+ "3678": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "0x5323",
+ "encoded_value%0#0"
+ ]
+ },
+ "3679": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3680": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "3681": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%2#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "_%0#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "3682": {
+ "op": "bury 1",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "3684": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3685": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "3686": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "0"
+ ]
+ },
+ "3687": {
+ "op": "pushint 2",
+ "defined_out": [
+ "0",
+ "2",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "0",
+ "2"
+ ]
+ },
+ "3689": {
+ "op": "box_extract",
+ "defined_out": [
+ "box%box_extract%0#0",
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%box_extract%0#0"
+ ]
+ },
+ "3690": {
+ "op": "btoi",
+ "defined_out": [
+ "box%array_length%0#0",
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%array_length%0#0"
+ ]
+ },
+ "3691": {
+ "op": "dup",
+ "defined_out": [
+ "box%array_length%0#0",
+ "box%array_length%0#0 (copy)",
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%array_length%0#0",
+ "box%array_length%0#0 (copy)"
+ ]
+ },
+ "3692": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%array_length%0#0"
+ ]
+ },
+ "3693": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%array_length%0#0",
+ "1"
+ ]
+ },
+ "3694": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0",
+ "tmp%21#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "tmp%21#0"
+ ]
+ },
+ "3695": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0",
+ "tmp%21#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "tmp%21#0",
+ "65"
+ ]
+ },
+ "3697": {
+ "op": "*",
+ "defined_out": [
+ "box%element_offset%0#0",
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%element_offset%0#0"
+ ]
+ },
+ "3698": {
+ "op": "pushint 2",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%element_offset%0#0",
+ "2"
+ ]
+ },
+ "3700": {
+ "op": "+",
+ "defined_out": [
+ "box%offset%0#0",
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%offset%0#0"
+ ]
+ },
+ "3701": {
+ "op": "pushint 65",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box%offset%0#0",
+ "65"
+ ]
+ },
+ "3703": {
+ "op": "box_extract",
+ "defined_out": [
+ "previous_entry#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "previous_entry#0"
+ ]
+ },
+ "3704": {
+ "op": "b contract_schedule_after_if_else@7"
+ },
+ "3707": {
+ "block": "contract_schedule_after_while@11",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ],
+ "op": "dig 6",
+ "defined_out": [
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "schedule_page_index#0"
+ ]
+ },
+ "3709": {
+ "op": "itob",
+ "defined_out": [
+ "encoded_value%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "encoded_value%0#0"
+ ]
+ },
+ "3710": {
+ "op": "bytec 24 // 0x5323",
+ "defined_out": [
+ "0x5323",
+ "encoded_value%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "encoded_value%0#0",
+ "0x5323"
+ ]
+ },
+ "3712": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "0x5323",
+ "encoded_value%0#0"
+ ]
+ },
+ "3713": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3714": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "3715": {
+ "op": "box_del",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "schedule_page_index#0",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "{box_del}"
+ ]
+ },
+ "3716": {
+ "op": "pop",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3717": {
+ "op": "dig 5",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "box_prefixed_key%0#0",
+ "schedule_page#0"
+ ]
+ },
+ "3719": {
+ "op": "box_put",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3720": {
+ "op": "dig 5",
+ "defined_out": [
+ "is_last_page#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "is_last_page#0"
+ ]
+ },
+ "3722": {
+ "op": "bz contract_schedule_after_if_else@13",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3725": {
+ "op": "dig 1",
+ "defined_out": [
+ "is_last_page#0",
+ "page_cursor#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "page_cursor#0"
+ ]
+ },
+ "3727": {
+ "op": "dig 4",
+ "defined_out": [
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "page_cursor#0",
+ "page_length#0"
+ ]
+ },
+ "3729": {
+ "op": "+",
+ "defined_out": [
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%27#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%27#0"
+ ]
+ },
+ "3730": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0",
+ "tmp%27#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%27#0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "3731": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "\"schedule_entry_count\"",
+ "tmp%27#0"
+ ]
+ },
+ "3732": {
+ "op": "app_global_put",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3733": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "\"status\""
+ ]
+ },
+ "3734": {
+ "op": "pushint 50",
+ "defined_out": [
+ "\"status\"",
+ "50",
+ "is_last_page#0",
+ "page_cursor#0",
+ "page_length#0",
+ "schedule_page#0",
+ "schedule_page_index#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "\"status\"",
+ "50"
+ ]
+ },
+ "3736": {
+ "op": "app_global_put",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3737": {
+ "block": "contract_schedule_after_if_else@13",
+ "stack_in": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ],
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%0#1"
+ ]
+ },
+ "3739": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "3740": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "3741": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "3742": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "tmp%7#0"
+ ]
+ },
+ "3743": {
+ "op": "log",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3744": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0",
+ "1"
+ ]
+ },
+ "3745": {
+ "op": "return",
+ "stack_out": [
+ "aggregate%array_trimmed%0#0",
+ "entry_event_type#0",
+ "values%0#0",
+ "values%1#0",
+ "schedule_page_index#0",
+ "is_last_page#0",
+ "schedule_page#0",
+ "page_length#0",
+ "contract_type#0",
+ "page_cursor#0",
+ "index#0"
+ ]
+ },
+ "3746": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.contract_execute_ied[routing]",
+ "params": {},
+ "block": "contract_execute_ied",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "3747": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"status\""
+ ]
+ },
+ "3748": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3749": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "3750": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": []
+ },
+ "3751": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "3754": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "3757": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "3760": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "0"
+ ]
+ },
+ "3761": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "3762": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3763": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "3764": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "3765": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "3766": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "3767": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "3768": {
+ "op": "dig 1",
+ "defined_out": [
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "3770": {
+ "op": ">",
+ "defined_out": [
+ "maybe_value%0#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "tmp%0#1"
+ ]
+ },
+ "3771": {
+ "error": "Invalid event cursor",
+ "op": "assert // Invalid event cursor",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "3772": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0"
+ ]
+ },
+ "3775": {
+ "op": "dup",
+ "defined_out": [
+ "entry#0",
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3776": {
+ "op": "extract 8 1",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0"
+ ]
+ },
+ "3779": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%0#0 (copy)",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%0#0 (copy)"
+ ]
+ },
+ "3780": {
+ "op": "pushbytes 0x01",
+ "defined_out": [
+ "0x01",
+ "aggregate%extract%0#0",
+ "aggregate%extract%0#0 (copy)",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%0#0 (copy)",
+ "0x01"
+ ]
+ },
+ "3783": {
+ "op": "b==",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "entry#0",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "tmp%2#1"
+ ]
+ },
+ "3784": {
+ "error": "Invalid event type",
+ "op": "assert // Invalid event type",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0"
+ ]
+ },
+ "3785": {
+ "op": "dig 1",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3787": {
+ "op": "extract 0 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "3790": {
+ "op": "dig 2",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3792": {
+ "op": "extract 9 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0"
+ ]
+ },
+ "3795": {
+ "op": "dig 3",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3797": {
+ "op": "extract 17 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0"
+ ]
+ },
+ "3800": {
+ "op": "dig 4",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3802": {
+ "op": "extract 25 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0"
+ ]
+ },
+ "3805": {
+ "op": "dig 5",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3807": {
+ "op": "extract 33 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "3810": {
+ "op": "dig 6",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3812": {
+ "op": "extract 41 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0"
+ ]
+ },
+ "3815": {
+ "op": "dig 7",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3817": {
+ "op": "extract 49 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0"
+ ]
+ },
+ "3820": {
+ "op": "dig 8",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "3822": {
+ "op": "extract 57 8",
+ "defined_out": [
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0"
+ ]
+ },
+ "3825": {
+ "op": "uncover 7",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "3827": {
+ "op": "uncover 8",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%0#0"
+ ]
+ },
+ "3829": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%1#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "3830": {
+ "op": "uncover 7",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%1#0",
+ "aggregate%extract%2#0"
+ ]
+ },
+ "3832": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%2#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "3833": {
+ "op": "uncover 6",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%2#0",
+ "aggregate%extract%3#0"
+ ]
+ },
+ "3835": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%3#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "3836": {
+ "op": "uncover 5",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%3#0",
+ "aggregate%extract%4#0"
+ ]
+ },
+ "3838": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "3839": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0",
+ "0"
+ ]
+ },
+ "3840": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%4#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%4#0"
+ ]
+ },
+ "3841": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%5#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "3842": {
+ "op": "uncover 4",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%5#0",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "3844": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%6#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "3845": {
+ "op": "uncover 3",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%6#0",
+ "aggregate%extract%6#0"
+ ]
+ },
+ "3847": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%7#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "3848": {
+ "op": "uncover 2",
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%7#0",
+ "aggregate%extract%7#0"
+ ]
+ },
+ "3850": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%8#0",
+ "aggregate%head%8#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "3851": {
+ "op": "swap",
+ "stack_out": [
+ "entry#0",
+ "aggregate%head%8#0",
+ "aggregate%extract%8#0"
+ ]
+ },
+ "3852": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%9#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "aggregate%head%9#0"
+ ]
+ },
+ "3853": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._apply_non_cash_schedule_entry",
+ "op": "callsub _apply_non_cash_schedule_entry",
+ "defined_out": [
+ "_apply_non_cash_schedule_entry%1#0",
+ "entry#0"
+ ],
+ "stack_out": [
+ "entry#0",
+ "_apply_non_cash_schedule_entry%1#0"
+ ]
+ },
+ "3856": {
+ "op": "popn 2",
+ "stack_out": []
+ },
+ "3858": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "3860": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%9#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%9#0"
+ ]
+ },
+ "3861": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%9#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%9#0",
+ "0x151f7c75"
+ ]
+ },
+ "3862": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%9#0"
+ ]
+ },
+ "3863": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0"
+ ]
+ },
+ "3864": {
+ "op": "log",
+ "stack_out": []
+ },
+ "3865": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "3866": {
+ "op": "return",
+ "stack_out": []
+ },
+ "3867": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.apply_non_cash_event[routing]",
+ "params": {},
+ "block": "apply_non_cash_event",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0"
+ ]
+ },
+ "3868": {
+ "op": "dupn 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0"
+ ]
+ },
+ "3870": {
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0"
+ ]
+ },
+ "3872": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1"
+ ]
+ },
+ "3873": {
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "tmp%0#0"
+ ]
+ },
+ "3876": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "3877": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "3878": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "tmp%0#0",
+ "len%0#0",
+ "8"
+ ]
+ },
+ "3879": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "3880": {
+ "error": "invalid number of bytes for arc4.uint64",
+ "op": "assert // invalid number of bytes for arc4.uint64",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "tmp%0#0"
+ ]
+ },
+ "3881": {
+ "op": "btoi",
+ "defined_out": [
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0"
+ ]
+ },
+ "3882": {
+ "op": "txna ApplicationArgs 2"
+ },
+ "3885": {
+ "op": "dupn 2",
+ "defined_out": [
+ "event_id#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "3887": {
+ "op": "len",
+ "defined_out": [
+ "event_id#0",
+ "len%1#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "len%1#0"
+ ]
+ },
+ "3888": {
+ "op": "pushint 73",
+ "defined_out": [
+ "73",
+ "event_id#0",
+ "len%1#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "len%1#0",
+ "73"
+ ]
+ },
+ "3890": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "event_id#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "eq%1#0"
+ ]
+ },
+ "3891": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.ObservedEventRequest",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.ObservedEventRequest",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0"
+ ]
+ },
+ "3892": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "0"
+ ]
+ },
+ "3893": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "event_id#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "3894": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_id#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3895": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "3896": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0"
+ ]
+ },
+ "3897": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "3900": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "3903": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "event_id#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "payload#0",
+ "65"
+ ]
+ },
+ "3905": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "3906": {
+ "op": "dup",
+ "defined_out": [
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#0"
+ ]
+ },
+ "3907": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#0",
+ "4"
+ ]
+ },
+ "3909": {
+ "op": "&",
+ "defined_out": [
+ "event_id#0",
+ "payload#0",
+ "tmp%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%0#1"
+ ]
+ },
+ "3910": {
+ "op": "bz apply_non_cash_event_after_if_else@3",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "3913": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "3914": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "0",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "3916": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3917": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "3918": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "5"
+ ]
+ },
+ "3920": {
+ "op": "==",
+ "defined_out": [
+ "event_id#0",
+ "payload#0",
+ "tmp%0#3",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%0#3"
+ ]
+ },
+ "3921": {
+ "error": "Observed event required to execute this action",
+ "op": "assert // Observed event required to execute this action",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "3922": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "3925": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "3926": {
+ "op": "bytec 10 // \"contract_type\"",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "3928": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3929": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "3930": {
+ "op": "dup",
+ "defined_out": [
+ "event_id#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "3931": {
+ "op": "pushint 5",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "5"
+ ]
+ },
+ "3933": {
+ "op": "==",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "tmp%0#3"
+ ]
+ },
+ "3934": {
+ "error": "Observed event required to execute this action",
+ "op": "assert // Observed event required to execute this action",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "3935": {
+ "op": "dig 2",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0"
+ ]
+ },
+ "3937": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "3938": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "payload#0 (copy)",
+ "0"
+ ]
+ },
+ "3939": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1"
+ ]
+ },
+ "3940": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1",
+ "values%0#1"
+ ]
+ },
+ "3941": {
+ "op": "bury 7",
+ "defined_out": [
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1"
+ ]
+ },
+ "3943": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1",
+ "0"
+ ]
+ },
+ "3944": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "3945": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_id#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "maybe_value%0#1",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1",
+ "maybe_value%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "3946": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#1",
+ "maybe_value%0#1"
+ ]
+ },
+ "3947": {
+ "op": "==",
+ "defined_out": [
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "tmp%1#2",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "tmp%1#2"
+ ]
+ },
+ "3948": {
+ "error": "Invalid event id",
+ "op": "assert // Invalid event id",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0"
+ ]
+ },
+ "3949": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "3950": {
+ "op": "extract 8 1",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "aggregate%extract%2#0"
+ ]
+ },
+ "3953": {
+ "op": "bury 12",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0"
+ ]
+ },
+ "3955": {
+ "op": "intc_2 // 8",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "8"
+ ]
+ },
+ "3956": {
+ "op": "getbyte",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "tmp%2#3",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "tmp%2#3"
+ ]
+ },
+ "3957": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._assert_event_allowed_for_contract_type",
+ "op": "callsub _assert_event_allowed_for_contract_type",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "3960": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "3961": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "3962": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "event_id#1",
+ "maybe_exists%2#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_id#1",
+ "maybe_exists%2#0"
+ ]
+ },
+ "3963": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_id#1"
+ ]
+ },
+ "3964": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "event_id#1",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_id#1",
+ "16"
+ ]
+ },
+ "3966": {
+ "op": "/",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "page_index#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page_index#0"
+ ]
+ },
+ "3967": {
+ "op": "bytec 48 // 0x0000",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "event_id#0",
+ "page#0",
+ "page_index#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page_index#0",
+ "page#0"
+ ]
+ },
+ "3969": {
+ "op": "bury 7",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page_index#0"
+ ]
+ },
+ "3971": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "encoded_value%0#0",
+ "event_id#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "encoded_value%0#0"
+ ]
+ },
+ "3972": {
+ "op": "bytec 24 // 0x5323",
+ "defined_out": [
+ "0x5323",
+ "aggregate%extract%2#0",
+ "encoded_value%0#0",
+ "event_id#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "encoded_value%0#0",
+ "0x5323"
+ ]
+ },
+ "3974": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0x5323",
+ "encoded_value%0#0"
+ ]
+ },
+ "3975": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "event_id#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3976": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3977": {
+ "op": "bury 9",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "event_id#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3979": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "event_id#0",
+ "maybe_exists%3#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "_%0#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "3980": {
+ "op": "bury 1",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "3982": {
+ "op": "bz apply_non_cash_event_after_if_else@27",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "3985": {
+ "op": "dig 7",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "3987": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%1#0",
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "event_id#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "3988": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%box_get%1#0",
+ "page#0"
+ ]
+ },
+ "3989": {
+ "op": "bury 7",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "3991": {
+ "error": "check self.schedule_page entry exists",
+ "op": "assert // check self.schedule_page entry exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "3992": {
+ "block": "apply_non_cash_event_after_if_else@27",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "dig 5",
+ "defined_out": [
+ "page#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0"
+ ]
+ },
+ "3994": {
+ "op": "dup",
+ "defined_out": [
+ "page#0",
+ "page#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "page#0 (copy)"
+ ]
+ },
+ "3995": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "page#0",
+ "page#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "page#0 (copy)",
+ "0"
+ ]
+ },
+ "3996": {
+ "error": "invalid array length header",
+ "op": "extract_uint16 // on error: invalid array length header",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "3997": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)",
+ "page#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)"
+ ]
+ },
+ "3998": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)",
+ "page#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)",
+ "16"
+ ]
+ },
+ "4000": {
+ "op": "<",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0",
+ "tmp%5#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "tmp%5#2"
+ ]
+ },
+ "4001": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "4002": {
+ "op": "dig 3",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0"
+ ]
+ },
+ "4004": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4005": {
+ "op": "extract 9 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0"
+ ]
+ },
+ "4008": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4010": {
+ "op": "extract 17 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0"
+ ]
+ },
+ "4013": {
+ "op": "dig 2",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4015": {
+ "op": "extract 25 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "4018": {
+ "op": "dig 3",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4020": {
+ "op": "extract 41 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0"
+ ]
+ },
+ "4023": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4025": {
+ "op": "extract 49 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0"
+ ]
+ },
+ "4028": {
+ "op": "uncover 5",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "payload#0"
+ ]
+ },
+ "4030": {
+ "op": "extract 57 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0"
+ ]
+ },
+ "4033": {
+ "op": "dig 11",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "values%0#1"
+ ]
+ },
+ "4035": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%val_as_bytes%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4036": {
+ "op": "dig 18",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%val_as_bytes%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%extract%2#0"
+ ]
+ },
+ "4038": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%1#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%3#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "4039": {
+ "op": "uncover 6",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%1#0",
+ "aggregate%extract%3#0"
+ ]
+ },
+ "4041": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%2#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%4#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "4042": {
+ "op": "uncover 5",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%2#0",
+ "aggregate%extract%4#0"
+ ]
+ },
+ "4044": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%3#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "4045": {
+ "op": "uncover 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%3#0",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "4047": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "4048": {
+ "op": "uncover 3",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%4#0",
+ "aggregate%extract%6#0"
+ ]
+ },
+ "4050": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%5#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "4051": {
+ "op": "uncover 2",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%5#0",
+ "aggregate%extract%7#0"
+ ]
+ },
+ "4053": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%6#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%8#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "4054": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%6#0",
+ "aggregate%extract%8#0"
+ ]
+ },
+ "4055": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%7#0",
+ "page#0",
+ "payload#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "4056": {
+ "op": "dig 3",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%7#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%7#0",
+ "values%0#0"
+ ]
+ },
+ "4058": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%7#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%7#0"
+ ]
+ },
+ "4059": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%8#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "4060": {
+ "op": "uncover 2",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%8#0",
+ "page#0"
+ ]
+ },
+ "4062": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%array_length%0#0",
+ "page#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "4063": {
+ "error": "max array length exceeded",
+ "op": "concat // on error: max array length exceeded",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%array_length%0#0",
+ "concat%0#0"
+ ]
+ },
+ "4064": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "concat%0#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "4065": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%2#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "concat%0#0",
+ "aggregate%array_length%0#0",
+ "1"
+ ]
+ },
+ "4066": {
+ "op": "+",
+ "defined_out": [
+ "add%0#0",
+ "aggregate%extract%2#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "concat%0#0",
+ "add%0#0"
+ ]
+ },
+ "4067": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "as_bytes%0#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "concat%0#0",
+ "as_bytes%0#0"
+ ]
+ },
+ "4068": {
+ "op": "extract 6 2",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "as_u16_bytes%0#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "concat%0#0",
+ "as_u16_bytes%0#0"
+ ]
+ },
+ "4071": {
+ "op": "replace2 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0"
+ ]
+ },
+ "4073": {
+ "op": "dig 8",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4075": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "4076": {
+ "op": "box_del",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "box_prefixed_key%0#0",
+ "{box_del}"
+ ]
+ },
+ "4077": {
+ "op": "pop",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "page#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4078": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "box_prefixed_key%0#0",
+ "page#0"
+ ]
+ },
+ "4079": {
+ "op": "box_put",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4080": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "4081": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4082": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%4#0",
+ "maybe_value%3#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%3#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "4083": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "4084": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%3#0",
+ "1"
+ ]
+ },
+ "4085": {
+ "op": "+",
+ "defined_out": [
+ "aggregate%extract%2#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "tmp%8#0",
+ "values%0#0",
+ "values%0#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%8#0"
+ ]
+ },
+ "4086": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%8#0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4087": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "\"schedule_entry_count\"",
+ "tmp%8#0"
+ ]
+ },
+ "4088": {
+ "op": "app_global_put",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4089": {
+ "block": "apply_non_cash_event_after_if_else@3",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "4090": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "4091": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4092": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4093": {
+ "op": "dig 3",
+ "defined_out": [
+ "event_id#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "event_id#0"
+ ]
+ },
+ "4095": {
+ "op": "dup"
+ },
+ "4096": {
+ "op": "uncover 2",
+ "defined_out": [
+ "event_id#0",
+ "event_id#0 (copy)",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_id#0",
+ "event_id#0 (copy)",
+ "maybe_value%0#0"
+ ]
+ },
+ "4098": {
+ "op": "==",
+ "defined_out": [
+ "event_id#0",
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_id#0",
+ "tmp%3#1"
+ ]
+ },
+ "4099": {
+ "error": "Invalid event cursor",
+ "op": "assert // Invalid event cursor",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_id#0"
+ ]
+ },
+ "4100": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "entry#0",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0"
+ ]
+ },
+ "4103": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0",
+ "entry#0"
+ ]
+ },
+ "4104": {
+ "op": "bury 8",
+ "defined_out": [
+ "entry#0",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0"
+ ]
+ },
+ "4106": {
+ "op": "dup",
+ "defined_out": [
+ "entry#0",
+ "entry#0 (copy)",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "4107": {
+ "op": "extract 8 1",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0",
+ "aggregate%extract%9#0"
+ ]
+ },
+ "4110": {
+ "op": "bury 10",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0"
+ ]
+ },
+ "4112": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0",
+ "8"
+ ]
+ },
+ "4113": {
+ "op": "getbyte",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4114": {
+ "op": "dup",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "4115": {
+ "op": "bury 6",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4117": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "1"
+ ]
+ },
+ "4118": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%0#3"
+ ]
+ },
+ "4119": {
+ "op": "bnz apply_non_cash_event_bool_true@15",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4122": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4124": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "4"
+ ]
+ },
+ "4126": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0",
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%1#2"
+ ]
+ },
+ "4127": {
+ "op": "bnz apply_non_cash_event_bool_true@15",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4130": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4132": {
+ "op": "pushint 12",
+ "defined_out": [
+ "12",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "12"
+ ]
+ },
+ "4134": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0",
+ "tmp%2#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%2#2"
+ ]
+ },
+ "4135": {
+ "op": "bnz apply_non_cash_event_bool_true@15",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4138": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4140": {
+ "op": "pushint 11",
+ "defined_out": [
+ "11",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "11"
+ ]
+ },
+ "4142": {
+ "op": "==",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%3#1"
+ ]
+ },
+ "4143": {
+ "op": "bnz apply_non_cash_event_bool_true@15",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4146": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4148": {
+ "op": "pushint 18",
+ "defined_out": [
+ "18",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "18"
+ ]
+ },
+ "4150": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%4#1"
+ ]
+ },
+ "4151": {
+ "op": "bnz apply_non_cash_event_bool_true@15",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4154": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4156": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "5"
+ ]
+ },
+ "4158": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "entry#0",
+ "event_id#0",
+ "event_type#0",
+ "tmp%5#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%5#2"
+ ]
+ },
+ "4159": {
+ "op": "bz apply_non_cash_event_bool_false@16",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4162": {
+ "block": "apply_non_cash_event_bool_true@15",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "or_result%0#0"
+ ]
+ },
+ "4163": {
+ "error": "Invalid event type",
+ "block": "apply_non_cash_event_bool_merge@17",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "or_result%0#0"
+ ],
+ "op": "assert // Invalid event type",
+ "defined_out": [],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4164": {
+ "op": "dig 8",
+ "defined_out": [
+ "aggregate%extract%9#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%9#0"
+ ]
+ },
+ "4166": {
+ "op": "pushbytes 0x01",
+ "defined_out": [
+ "0x01",
+ "aggregate%extract%9#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%9#0",
+ "0x01"
+ ]
+ },
+ "4169": {
+ "op": "b!=",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%7#0"
+ ]
+ },
+ "4170": {
+ "error": "Invalid event type",
+ "op": "assert // Invalid event type",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4171": {
+ "op": "dig 4",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4173": {
+ "op": "pushint 12",
+ "defined_out": [
+ "12",
+ "aggregate%extract%9#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "12"
+ ]
+ },
+ "4175": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "event_type#0",
+ "tmp%0#3"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%0#3"
+ ]
+ },
+ "4176": {
+ "op": "bnz apply_non_cash_event_bool_true@21",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4179": {
+ "op": "dig 4",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0"
+ ]
+ },
+ "4181": {
+ "op": "pushint 11",
+ "defined_out": [
+ "11",
+ "aggregate%extract%9#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "event_type#0",
+ "11"
+ ]
+ },
+ "4183": {
+ "op": "==",
+ "defined_out": [
+ "aggregate%extract%9#0",
+ "event_type#0",
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%1#2"
+ ]
+ },
+ "4184": {
+ "op": "bz apply_non_cash_event_bool_false@22",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4187": {
+ "block": "apply_non_cash_event_bool_true@21",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "or_result%0#0"
+ ]
+ },
+ "4188": {
+ "block": "apply_non_cash_event_bool_merge@23",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "or_result%0#0"
+ ],
+ "op": "bz apply_non_cash_event_else_body@5",
+ "defined_out": [],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4191": {
+ "op": "bytec 25 // 0x523a4d4f4323",
+ "defined_out": [
+ "0x523a4d4f4323"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0x523a4d4f4323"
+ ]
+ },
+ "4193": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0x523a4d4f4323",
+ "tmp%0#2"
+ ]
+ },
+ "4195": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "tmp%1#2"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%1#2"
+ ]
+ },
+ "4198": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4199": {
+ "block": "apply_non_cash_event_after_if_else@6",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "dig 6",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0"
+ ]
+ },
+ "4201": {
+ "op": "dig 2",
+ "defined_out": [
+ "entry#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "entry#0",
+ "payload#0"
+ ]
+ },
+ "4203": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._apply_non_cash_schedule_entry",
+ "op": "callsub _apply_non_cash_schedule_entry"
+ },
+ "4206": {
+ "op": "popn 2",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4208": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "entry#0",
+ "payload#0",
+ "tmp%10#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%10#0"
+ ]
+ },
+ "4210": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%8#0",
+ "entry#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%val_as_bytes%8#0"
+ ]
+ },
+ "4211": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%8#0",
+ "entry#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%val_as_bytes%8#0",
+ "0x151f7c75"
+ ]
+ },
+ "4212": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%8#0"
+ ]
+ },
+ "4213": {
+ "op": "concat",
+ "defined_out": [
+ "entry#0",
+ "payload#0",
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "tmp%5#0"
+ ]
+ },
+ "4214": {
+ "op": "log",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4215": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "entry#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "1"
+ ]
+ },
+ "4216": {
+ "op": "return",
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4217": {
+ "block": "apply_non_cash_event_else_body@5",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4220": {
+ "op": "b apply_non_cash_event_after_if_else@6"
+ },
+ "4223": {
+ "block": "apply_non_cash_event_bool_false@22",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "or_result%0#0"
+ ]
+ },
+ "4224": {
+ "op": "b apply_non_cash_event_bool_merge@23"
+ },
+ "4227": {
+ "block": "apply_non_cash_event_bool_false@16",
+ "stack_in": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "aggregate%extract%2#0",
+ "aggregate%extract%9#0",
+ "box_prefixed_key%0#0",
+ "entry#0",
+ "page#0",
+ "event_type#0",
+ "values%0#1",
+ "event_id#0",
+ "payload#0",
+ "values%0#0",
+ "or_result%0#0"
+ ]
+ },
+ "4228": {
+ "op": "b apply_non_cash_event_bool_merge@17"
+ },
+ "4231": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.append_observed_cash_event[routing]",
+ "params": {},
+ "block": "append_observed_cash_event",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4232": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0"
+ ]
+ },
+ "4233": {
+ "op": "txna ApplicationArgs 1"
+ },
+ "4236": {
+ "op": "dupn 2",
+ "defined_out": [
+ "payload#0",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4238": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "len%0#0"
+ ]
+ },
+ "4239": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "len%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "len%0#0",
+ "65"
+ ]
+ },
+ "4241": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "eq%0#0"
+ ]
+ },
+ "4242": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.ObservedCashEventRequest",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.ObservedCashEventRequest",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0"
+ ]
+ },
+ "4243": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "0"
+ ]
+ },
+ "4244": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "4245": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4246": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4247": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0"
+ ]
+ },
+ "4248": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4251": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "4254": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "op": "callsub _assert_is_not_contract_suspended"
+ },
+ "4257": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "0"
+ ]
+ },
+ "4258": {
+ "op": "bytec_1 // \"status\"",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "4259": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4260": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4261": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "maybe_value%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "4263": {
+ "op": "==",
+ "defined_out": [
+ "payload#0",
+ "tmp%0#5"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "tmp%0#5"
+ ]
+ },
+ "4264": {
+ "op": "!",
+ "defined_out": [
+ "payload#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "tmp%1#0"
+ ]
+ },
+ "4265": {
+ "error": "IED not yet executed",
+ "op": "assert // IED not yet executed",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0"
+ ]
+ },
+ "4266": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "0"
+ ]
+ },
+ "4267": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "4269": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4270": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4271": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "maybe_value%0#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "5"
+ ]
+ },
+ "4273": {
+ "op": "==",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "tmp%0#5"
+ ]
+ },
+ "4274": {
+ "error": "Observed event required to execute this action",
+ "op": "assert // Observed event required to execute this action",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0"
+ ]
+ },
+ "4275": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4276": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "payload#0 (copy)",
+ "0"
+ ]
+ },
+ "4277": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4278": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0",
+ "values%0#0",
+ "values%0#0"
+ ]
+ },
+ "4279": {
+ "op": "cover 2",
+ "defined_out": [
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "values%0#0"
+ ]
+ },
+ "4281": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "4282": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "values%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4283": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4284": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4285": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "values%0#0"
+ ]
+ },
+ "4286": {
+ "op": "dig 1",
+ "defined_out": [
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "4288": {
+ "op": "==",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "tmp%1#0"
+ ]
+ },
+ "4289": {
+ "error": "Invalid event id",
+ "op": "assert // Invalid event id",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4290": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4292": {
+ "op": "extract 8 1",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "4295": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "4296": {
+ "op": "cover 3",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "4298": {
+ "op": "pushbytes 0x03",
+ "defined_out": [
+ "0x03",
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "aggregate%extract%1#0",
+ "0x03"
+ ]
+ },
+ "4301": {
+ "op": "b==",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "tmp%2#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "payload#0",
+ "maybe_value%0#0",
+ "tmp%2#1"
+ ]
+ },
+ "4302": {
+ "error": "Invalid event type",
+ "op": "assert // Invalid event type",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "payload#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4303": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0"
+ ]
+ },
+ "4304": {
+ "op": "pushint 57",
+ "defined_out": [
+ "57",
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "57"
+ ]
+ },
+ "4306": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "values%1#0"
+ ]
+ },
+ "4307": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "values%1#0",
+ "values%1#0"
+ ]
+ },
+ "4308": {
+ "op": "cover 2",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%0#0",
+ "values%1#0"
+ ]
+ },
+ "4310": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%0#0",
+ "values%1#0",
+ "1"
+ ]
+ },
+ "4311": {
+ "op": "&",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "maybe_value%0#0",
+ "payload#0",
+ "tmp%3#1",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%0#0",
+ "tmp%3#1"
+ ]
+ },
+ "4312": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "4313": {
+ "op": "bz append_observed_cash_event_after_if_else@3",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4316": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0"
+ ]
+ },
+ "4317": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4318": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "maybe_exists%2#0",
+ "maybe_value%2#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "4319": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "4320": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%2#0",
+ "1"
+ ]
+ },
+ "4321": {
+ "op": "-",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "payload#0",
+ "tmp%6#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "tmp%6#0"
+ ]
+ },
+ "4322": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "payload#0",
+ "previous_entry#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "previous_entry#0"
+ ]
+ },
+ "4325": {
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "aggregate%extract%1#0",
+ "payload#0",
+ "previous_entry#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "previous_entry#0",
+ "9"
+ ]
+ },
+ "4327": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "values%2#0"
+ ]
+ },
+ "4328": {
+ "op": "dig 4",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "values%2#0",
+ "payload#0"
+ ]
+ },
+ "4330": {
+ "op": "pushint 9",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "values%2#0",
+ "payload#0",
+ "9"
+ ]
+ },
+ "4332": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0",
+ "values%2#0",
+ "values%3#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "values%2#0",
+ "values%3#0"
+ ]
+ },
+ "4333": {
+ "op": "<=",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "payload#0",
+ "tmp%8#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "tmp%8#0"
+ ]
+ },
+ "4334": {
+ "error": "Time events must be sorted in strictly ascending order",
+ "op": "assert // Time events must be sorted in strictly ascending order",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4335": {
+ "block": "append_observed_cash_event_after_if_else@3",
+ "stack_in": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0"
+ ]
+ },
+ "4336": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4337": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_id#0",
+ "maybe_exists%3#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "event_id#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "4338": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "event_id#0"
+ ]
+ },
+ "4339": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "event_id#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "event_id#0",
+ "16"
+ ]
+ },
+ "4341": {
+ "op": "/",
+ "defined_out": [
+ "page_index#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page_index#0"
+ ]
+ },
+ "4342": {
+ "op": "bytec 48 // 0x0000",
+ "defined_out": [
+ "page#0",
+ "page_index#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page_index#0",
+ "page#0"
+ ]
+ },
+ "4344": {
+ "op": "bury 6",
+ "defined_out": [
+ "page#0",
+ "page_index#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page_index#0"
+ ]
+ },
+ "4346": {
+ "op": "itob",
+ "defined_out": [
+ "encoded_value%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "encoded_value%0#0"
+ ]
+ },
+ "4347": {
+ "op": "bytec 24 // 0x5323",
+ "defined_out": [
+ "0x5323",
+ "encoded_value%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "encoded_value%0#0",
+ "0x5323"
+ ]
+ },
+ "4349": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0x5323",
+ "encoded_value%0#0"
+ ]
+ },
+ "4350": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4351": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4352": {
+ "op": "bury 7",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4354": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%4#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "_%0#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "4355": {
+ "op": "bury 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "4357": {
+ "op": "bz append_observed_cash_event_after_if_else@5",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4360": {
+ "op": "dig 5",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4362": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "4363": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%box_get%1#0",
+ "page#0"
+ ]
+ },
+ "4364": {
+ "op": "bury 6",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "4366": {
+ "error": "check self.schedule_page entry exists",
+ "op": "assert // check self.schedule_page entry exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4367": {
+ "block": "append_observed_cash_event_after_if_else@5",
+ "stack_in": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ],
+ "op": "dig 4",
+ "defined_out": [
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0"
+ ]
+ },
+ "4369": {
+ "op": "dup",
+ "defined_out": [
+ "page#0",
+ "page#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "page#0 (copy)"
+ ]
+ },
+ "4370": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "page#0",
+ "page#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "page#0 (copy)",
+ "0"
+ ]
+ },
+ "4371": {
+ "error": "invalid array length header",
+ "op": "extract_uint16 // on error: invalid array length header",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "4372": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)"
+ ]
+ },
+ "4373": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)",
+ "page#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%array_length%0#0 (copy)",
+ "16"
+ ]
+ },
+ "4375": {
+ "op": "<",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0",
+ "tmp%11#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "tmp%11#0"
+ ]
+ },
+ "4376": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "4377": {
+ "op": "dig 5",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0"
+ ]
+ },
+ "4379": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "page#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4380": {
+ "op": "extract 9 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "4383": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4385": {
+ "op": "extract 17 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0"
+ ]
+ },
+ "4388": {
+ "op": "dig 2",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4390": {
+ "op": "extract 25 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0"
+ ]
+ },
+ "4393": {
+ "op": "dig 3",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4395": {
+ "op": "extract 33 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0"
+ ]
+ },
+ "4398": {
+ "op": "dig 4",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "4400": {
+ "op": "extract 41 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "payload#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0"
+ ]
+ },
+ "4403": {
+ "op": "uncover 5",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "payload#0"
+ ]
+ },
+ "4405": {
+ "op": "extract 49 8",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "page#0",
+ "payload#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0"
+ ]
+ },
+ "4408": {
+ "op": "dig 10",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "values%0#0"
+ ]
+ },
+ "4410": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%val_as_bytes%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4411": {
+ "op": "dig 10",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%val_as_bytes%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "4413": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%head%1#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%5#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "4414": {
+ "op": "uncover 6",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%1#0",
+ "aggregate%extract%5#0"
+ ]
+ },
+ "4416": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%head%2#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%6#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "4417": {
+ "op": "uncover 5",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%2#0",
+ "aggregate%extract%6#0"
+ ]
+ },
+ "4419": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%head%3#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%7#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "4420": {
+ "op": "uncover 4",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%3#0",
+ "aggregate%extract%7#0"
+ ]
+ },
+ "4422": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%head%4#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%8#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "4423": {
+ "op": "uncover 3",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%4#0",
+ "aggregate%extract%8#0"
+ ]
+ },
+ "4425": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%extract%9#0",
+ "aggregate%head%5#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%9#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "4426": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%5#0",
+ "aggregate%extract%9#0"
+ ]
+ },
+ "4428": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%6#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%10#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "4429": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%6#0",
+ "aggregate%extract%10#0"
+ ]
+ },
+ "4430": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%head%7#0",
+ "page#0",
+ "payload#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "4431": {
+ "op": "dig 3",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%head%7#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%7#0",
+ "values%1#0"
+ ]
+ },
+ "4433": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%7#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%7#0"
+ ]
+ },
+ "4434": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%head%8#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "4435": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%array_length%0#0",
+ "aggregate%head%8#0",
+ "page#0"
+ ]
+ },
+ "4437": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%array_length%0#0",
+ "page#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "4438": {
+ "error": "max array length exceeded",
+ "op": "concat // on error: max array length exceeded",
+ "defined_out": [
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%array_length%0#0",
+ "concat%0#0"
+ ]
+ },
+ "4439": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "concat%0#0",
+ "aggregate%array_length%0#0"
+ ]
+ },
+ "4440": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "aggregate%array_length%0#0",
+ "aggregate%extract%1#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "concat%0#0",
+ "aggregate%array_length%0#0",
+ "1"
+ ]
+ },
+ "4441": {
+ "op": "+",
+ "defined_out": [
+ "add%0#0",
+ "aggregate%extract%1#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "concat%0#0",
+ "add%0#0"
+ ]
+ },
+ "4442": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "as_bytes%0#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "concat%0#0",
+ "as_bytes%0#0"
+ ]
+ },
+ "4443": {
+ "op": "extract 6 2",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "as_u16_bytes%0#0",
+ "concat%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "concat%0#0",
+ "as_u16_bytes%0#0"
+ ]
+ },
+ "4446": {
+ "op": "replace2 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0"
+ ]
+ },
+ "4448": {
+ "op": "dig 6",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4450": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "4451": {
+ "op": "box_del",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "box_prefixed_key%0#0",
+ "{box_del}"
+ ]
+ },
+ "4452": {
+ "op": "pop",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "page#0",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4453": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "box_prefixed_key%0#0",
+ "page#0"
+ ]
+ },
+ "4454": {
+ "op": "box_put",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4455": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0"
+ ]
+ },
+ "4456": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4457": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%5#0",
+ "maybe_value%4#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%4#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "4458": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "4459": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "maybe_value%4#0",
+ "1"
+ ]
+ },
+ "4460": {
+ "op": "+",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "tmp%14#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "tmp%14#0"
+ ]
+ },
+ "4461": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "tmp%14#0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4462": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "\"schedule_entry_count\"",
+ "tmp%14#0"
+ ]
+ },
+ "4463": {
+ "op": "app_global_put",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4464": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "tmp%0#1",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "tmp%0#1"
+ ]
+ },
+ "4466": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%val_as_bytes%8#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%val_as_bytes%8#0"
+ ]
+ },
+ "4467": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%extract%1#0",
+ "aggregate%val_as_bytes%8#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "aggregate%val_as_bytes%8#0",
+ "0x151f7c75"
+ ]
+ },
+ "4468": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%8#0"
+ ]
+ },
+ "4469": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "tmp%3#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "tmp%3#0"
+ ]
+ },
+ "4470": {
+ "op": "log",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4471": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0",
+ "1"
+ ]
+ },
+ "4472": {
+ "op": "return",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "page#0",
+ "payload#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "values%1#0"
+ ]
+ },
+ "4473": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.contract_get_state[routing]",
+ "params": {},
+ "block": "contract_get_state",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "4474": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"status\""
+ ]
+ },
+ "4475": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4476": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "maybe_value%0#1"
+ ]
+ },
+ "4477": {
+ "op": "dup",
+ "defined_out": [
+ "maybe_value%0#1",
+ "maybe_value%0#1 (copy)"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "maybe_value%0#1 (copy)"
+ ]
+ },
+ "4478": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": [
+ "maybe_value%0#1"
+ ]
+ },
+ "4479": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "0"
+ ]
+ },
+ "4480": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "4482": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4483": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "maybe_value%0#0"
+ ]
+ },
+ "4484": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4485": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%0#0 (copy)",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "4486": {
+ "op": "bitlen",
+ "defined_out": [
+ "aggregate%bitlen%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%bitlen%0#0"
+ ]
+ },
+ "4487": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "aggregate%bitlen%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%bitlen%0#0",
+ "8"
+ ]
+ },
+ "4488": {
+ "op": "<=",
+ "defined_out": [
+ "aggregate%no_overflow%0#0",
+ "aggregate%val_as_bytes%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%no_overflow%0#0"
+ ]
+ },
+ "4489": {
+ "error": "overflow",
+ "op": "assert // overflow",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4490": {
+ "op": "extract 7 1",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0"
+ ]
+ },
+ "4493": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "0"
+ ]
+ },
+ "4494": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "0",
+ "\"total_units\""
+ ]
+ },
+ "4496": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%2#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "4497": {
+ "error": "check self.total_units exists",
+ "op": "assert // check self.total_units exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "4498": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "0"
+ ]
+ },
+ "4499": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "4501": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%3#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "4502": {
+ "error": "check self.reserved_units_total exists",
+ "op": "assert // check self.reserved_units_total exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "4503": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "0"
+ ]
+ },
+ "4504": {
+ "op": "bytec 20 // \"initial_exchange_amount\"",
+ "defined_out": [
+ "\"initial_exchange_amount\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "0",
+ "\"initial_exchange_amount\""
+ ]
+ },
+ "4506": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%4#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "4507": {
+ "error": "check self.initial_exchange_amount exists",
+ "op": "assert // check self.initial_exchange_amount exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "4508": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "0"
+ ]
+ },
+ "4509": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "4510": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%5#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "4511": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "4512": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "0"
+ ]
+ },
+ "4513": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4514": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%6#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_exists%6#0"
+ ]
+ },
+ "4515": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "4516": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "0"
+ ]
+ },
+ "4517": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "4519": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%7#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_exists%7#0"
+ ]
+ },
+ "4520": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0"
+ ]
+ },
+ "4521": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "0"
+ ]
+ },
+ "4522": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "4524": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%8#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_exists%8#0"
+ ]
+ },
+ "4525": {
+ "error": "check self.interest_calculation_base exists",
+ "op": "assert // check self.interest_calculation_base exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0"
+ ]
+ },
+ "4526": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "0"
+ ]
+ },
+ "4527": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "4529": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%9#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_exists%9#0"
+ ]
+ },
+ "4530": {
+ "error": "check self.nominal_interest_rate exists",
+ "op": "assert // check self.nominal_interest_rate exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ]
+ },
+ "4531": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "0"
+ ]
+ },
+ "4532": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "0",
+ "\"accrued_interest\""
+ ]
+ },
+ "4534": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%10#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_exists%10#0"
+ ]
+ },
+ "4535": {
+ "error": "check self.accrued_interest exists",
+ "op": "assert // check self.accrued_interest exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0"
+ ]
+ },
+ "4536": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "0"
+ ]
+ },
+ "4537": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "defined_out": [
+ "\"cumulative_interest_index\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "0",
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "4539": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%11#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_exists%11#0"
+ ]
+ },
+ "4540": {
+ "error": "check self.cumulative_interest_index exists",
+ "op": "assert // check self.cumulative_interest_index exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0"
+ ]
+ },
+ "4541": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "0"
+ ]
+ },
+ "4542": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "defined_out": [
+ "\"cumulative_principal_index\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "0",
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "4544": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%12#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_exists%12#0"
+ ]
+ },
+ "4545": {
+ "error": "check self.cumulative_principal_index exists",
+ "op": "assert // check self.cumulative_principal_index exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0"
+ ]
+ },
+ "4546": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "0"
+ ]
+ },
+ "4547": {
+ "op": "bytec 15 // \"reserved_interest\"",
+ "defined_out": [
+ "\"reserved_interest\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "0",
+ "\"reserved_interest\""
+ ]
+ },
+ "4549": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%13#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_exists%13#0"
+ ]
+ },
+ "4550": {
+ "error": "check self.reserved_interest exists",
+ "op": "assert // check self.reserved_interest exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0"
+ ]
+ },
+ "4551": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "0"
+ ]
+ },
+ "4552": {
+ "op": "bytec 12 // \"reserved_principal\"",
+ "defined_out": [
+ "\"reserved_principal\"",
+ "0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "0",
+ "\"reserved_principal\""
+ ]
+ },
+ "4554": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%14#0",
+ "maybe_value%0#1",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_exists%14#0"
+ ]
+ },
+ "4555": {
+ "error": "check self.reserved_principal exists",
+ "op": "assert // check self.reserved_principal exists",
+ "stack_out": [
+ "maybe_value%0#1",
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ]
+ },
+ "4556": {
+ "op": "uncover 14",
+ "stack_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%0#1"
+ ]
+ },
+ "4558": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "aggregate%val_as_bytes%1#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "4559": {
+ "op": "uncover 14",
+ "stack_out": [
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%uint8%0#0"
+ ]
+ },
+ "4561": {
+ "op": "swap",
+ "stack_out": [
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%uint8%0#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "4562": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "4563": {
+ "op": "uncover 13",
+ "stack_out": [
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%1#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "4565": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%2#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%2#0"
+ ]
+ },
+ "4566": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "4567": {
+ "op": "uncover 12",
+ "stack_out": [
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%2#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "4569": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%3#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%3#0"
+ ]
+ },
+ "4570": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%4#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "4571": {
+ "op": "uncover 11",
+ "stack_out": [
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%3#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "4573": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%4#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%4#0"
+ ]
+ },
+ "4574": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%4#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "4575": {
+ "op": "uncover 10",
+ "stack_out": [
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%4#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "4577": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%5#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%5#0"
+ ]
+ },
+ "4578": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%5#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%6#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "4579": {
+ "op": "uncover 9",
+ "stack_out": [
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%5#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "4581": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%5#0",
+ "aggregate%val_as_bytes%6#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%5#0",
+ "aggregate%val_as_bytes%6#0"
+ ]
+ },
+ "4582": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%6#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%7#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "4583": {
+ "op": "uncover 8",
+ "stack_out": [
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%6#0",
+ "maybe_value%7#0"
+ ]
+ },
+ "4585": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%7#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%7#0"
+ ]
+ },
+ "4586": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%7#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%8#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%8#0",
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "4587": {
+ "op": "uncover 7",
+ "stack_out": [
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%7#0",
+ "maybe_value%8#0"
+ ]
+ },
+ "4589": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%8#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%8#0"
+ ]
+ },
+ "4590": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%8#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "maybe_value%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "4591": {
+ "op": "uncover 6",
+ "stack_out": [
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%8#0",
+ "maybe_value%9#0"
+ ]
+ },
+ "4593": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%8#0",
+ "aggregate%val_as_bytes%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%8#0",
+ "aggregate%val_as_bytes%9#0"
+ ]
+ },
+ "4594": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%9#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%9#0"
+ ]
+ },
+ "4595": {
+ "op": "uncover 5",
+ "stack_out": [
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%9#0",
+ "maybe_value%10#0"
+ ]
+ },
+ "4597": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%9#0",
+ "aggregate%val_as_bytes%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%9#0",
+ "aggregate%val_as_bytes%10#0"
+ ]
+ },
+ "4598": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%10#0",
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%10#0"
+ ]
+ },
+ "4599": {
+ "op": "uncover 4",
+ "stack_out": [
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%10#0",
+ "maybe_value%11#0"
+ ]
+ },
+ "4601": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%10#0",
+ "aggregate%val_as_bytes%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%10#0",
+ "aggregate%val_as_bytes%11#0"
+ ]
+ },
+ "4602": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%11#0",
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%11#0"
+ ]
+ },
+ "4603": {
+ "op": "uncover 3",
+ "stack_out": [
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%11#0",
+ "maybe_value%12#0"
+ ]
+ },
+ "4605": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%11#0",
+ "aggregate%val_as_bytes%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%11#0",
+ "aggregate%val_as_bytes%12#0"
+ ]
+ },
+ "4606": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%12#0",
+ "maybe_value%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%13#0",
+ "maybe_value%14#0",
+ "aggregate%head%12#0"
+ ]
+ },
+ "4607": {
+ "op": "uncover 2",
+ "stack_out": [
+ "maybe_value%14#0",
+ "aggregate%head%12#0",
+ "maybe_value%13#0"
+ ]
+ },
+ "4609": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%12#0",
+ "aggregate%val_as_bytes%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%14#0",
+ "aggregate%head%12#0",
+ "aggregate%val_as_bytes%13#0"
+ ]
+ },
+ "4610": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%13#0",
+ "maybe_value%14#0"
+ ],
+ "stack_out": [
+ "maybe_value%14#0",
+ "aggregate%head%13#0"
+ ]
+ },
+ "4611": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%head%13#0",
+ "maybe_value%14#0"
+ ]
+ },
+ "4612": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%13#0",
+ "aggregate%val_as_bytes%14#0"
+ ],
+ "stack_out": [
+ "aggregate%head%13#0",
+ "aggregate%val_as_bytes%14#0"
+ ]
+ },
+ "4613": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%14#0"
+ ],
+ "stack_out": [
+ "aggregate%head%14#0"
+ ]
+ },
+ "4614": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%head%14#0"
+ ],
+ "stack_out": [
+ "aggregate%head%14#0",
+ "0x151f7c75"
+ ]
+ },
+ "4615": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%head%14#0"
+ ]
+ },
+ "4616": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "tmp%1#0"
+ ]
+ },
+ "4617": {
+ "op": "log",
+ "stack_out": []
+ },
+ "4618": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "4619": {
+ "op": "return",
+ "stack_out": []
+ },
+ "4620": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule.contract_get_next_due_event[routing]",
+ "params": {},
+ "block": "contract_get_next_due_event",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "4621": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"status\""
+ ]
+ },
+ "4622": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4623": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "4624": {
+ "error": "D-ASA not configured",
+ "op": "assert // D-ASA not configured",
+ "stack_out": []
+ },
+ "4625": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "0"
+ ]
+ },
+ "4626": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "4627": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4628": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "4629": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "4630": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "4631": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "4632": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "4633": {
+ "op": ">=",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "4634": {
+ "op": "bz contract_get_next_due_event_after_if_else@3",
+ "stack_out": []
+ },
+ "4637": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "0"
+ ]
+ },
+ "4638": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "4639": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%2#0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "4640": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "maybe_value%2#0"
+ ]
+ },
+ "4641": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4642": {
+ "op": "bytec 41 // 0x00",
+ "defined_out": [
+ "0x00",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x00"
+ ]
+ },
+ "4644": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%1#0"
+ ],
+ "stack_out": [
+ "aggregate%head%1#0"
+ ]
+ },
+ "4645": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "aggregate%head%1#0",
+ "0"
+ ]
+ },
+ "4646": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "4647": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "4648": {
+ "op": "dig 1",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%1#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ]
+ },
+ "4650": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "4651": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%2#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ]
+ },
+ "4653": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "4654": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ]
+ },
+ "4656": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "4657": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ]
+ },
+ "4659": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%5#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "4660": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%5#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ]
+ },
+ "4662": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "4663": {
+ "op": "dig 1",
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%1#0 (copy)"
+ ]
+ },
+ "4665": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%1#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "4666": {
+ "op": "swap",
+ "stack_out": [
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "4667": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "4668": {
+ "block": "contract_get_next_due_event_after_inlined_modules.actus_kernel.ActusKernelModule.contract_get_next_due_event@4",
+ "stack_in": [
+ "tmp%0#0"
+ ],
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "4669": {
+ "op": "swap",
+ "defined_out": [
+ "0x151f7c75",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "0x151f7c75",
+ "tmp%0#0"
+ ]
+ },
+ "4670": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "tmp%1#0"
+ ]
+ },
+ "4671": {
+ "op": "log",
+ "stack_out": []
+ },
+ "4672": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "4673": {
+ "op": "return",
+ "stack_out": []
+ },
+ "4674": {
+ "block": "contract_get_next_due_event_after_if_else@3",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "4675": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "4676": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%3#0",
+ "maybe_value%3#0"
+ ],
+ "stack_out": [
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "4677": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "maybe_value%3#0"
+ ]
+ },
+ "4678": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "4681": {
+ "op": "b contract_get_next_due_event_after_inlined_modules.actus_kernel.ActusKernelModule.contract_get_next_due_event@4"
+ },
+ "4684": {
+ "subroutine": "modules.rbac.RbacModule.contract_update[routing]",
+ "params": {},
+ "block": "contract_update",
+ "stack_in": [],
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4687": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "4688": {
+ "op": "return",
+ "stack_out": []
+ },
+ "4689": {
+ "subroutine": "modules.rbac.RbacModule.rbac_rotate_arranger[routing]",
+ "params": {},
+ "block": "rbac_rotate_arranger",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "new_arranger#0"
+ ],
+ "stack_out": [
+ "new_arranger#0"
+ ]
+ },
+ "4692": {
+ "op": "dup",
+ "defined_out": [
+ "new_arranger#0",
+ "new_arranger#0 (copy)"
+ ],
+ "stack_out": [
+ "new_arranger#0",
+ "new_arranger#0 (copy)"
+ ]
+ },
+ "4693": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "new_arranger#0"
+ ],
+ "stack_out": [
+ "new_arranger#0",
+ "len%0#0"
+ ]
+ },
+ "4694": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "len%0#0",
+ "new_arranger#0"
+ ],
+ "stack_out": [
+ "new_arranger#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "4695": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "new_arranger#0"
+ ],
+ "stack_out": [
+ "new_arranger#0",
+ "eq%0#0"
+ ]
+ },
+ "4696": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "new_arranger#0"
+ ]
+ },
+ "4697": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4700": {
+ "op": "bytec 18 // 0x523a41525223",
+ "defined_out": [
+ "0x523a41525223",
+ "new_arranger#0"
+ ],
+ "stack_out": [
+ "new_arranger#0",
+ "0x523a41525223"
+ ]
+ },
+ "4702": {
+ "op": "swap",
+ "stack_out": [
+ "0x523a41525223",
+ "new_arranger#0"
+ ]
+ },
+ "4703": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "4704": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "4706": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4707": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "4708": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4709": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "4710": {
+ "op": "log",
+ "stack_out": []
+ },
+ "4711": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "4712": {
+ "op": "return",
+ "stack_out": []
+ },
+ "4713": {
+ "subroutine": "modules.rbac.RbacModule.rbac_set_op_daemon[routing]",
+ "params": {},
+ "block": "rbac_set_op_daemon",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "address#0"
+ ],
+ "stack_out": [
+ "address#0"
+ ]
+ },
+ "4716": {
+ "op": "dup",
+ "defined_out": [
+ "address#0",
+ "address#0 (copy)"
+ ],
+ "stack_out": [
+ "address#0",
+ "address#0 (copy)"
+ ]
+ },
+ "4717": {
+ "op": "len",
+ "defined_out": [
+ "address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "len%0#0"
+ ]
+ },
+ "4718": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "4719": {
+ "op": "==",
+ "defined_out": [
+ "address#0",
+ "eq%0#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "eq%0#0"
+ ]
+ },
+ "4720": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "address#0"
+ ]
+ },
+ "4721": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4724": {
+ "op": "bytec 27 // 0x523a4f504423",
+ "defined_out": [
+ "0x523a4f504423",
+ "address#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "0x523a4f504423"
+ ]
+ },
+ "4726": {
+ "op": "swap",
+ "stack_out": [
+ "0x523a4f504423",
+ "address#0"
+ ]
+ },
+ "4727": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "4728": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "4730": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4731": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "4732": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4733": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "4734": {
+ "op": "log",
+ "stack_out": []
+ },
+ "4735": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "4736": {
+ "op": "return",
+ "stack_out": []
+ },
+ "4737": {
+ "subroutine": "modules.rbac.RbacModule.rbac_assign_role[routing]",
+ "params": {},
+ "block": "rbac_assign_role",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0"
+ ]
+ },
+ "4740": {
+ "op": "dup",
+ "defined_out": [
+ "role_id#0",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "role_id#0 (copy)"
+ ]
+ },
+ "4741": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "len%0#0"
+ ]
+ },
+ "4742": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "len%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "len%0#0",
+ "1"
+ ]
+ },
+ "4743": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "eq%0#0"
+ ]
+ },
+ "4744": {
+ "error": "invalid number of bytes for arc4.uint8",
+ "op": "assert // invalid number of bytes for arc4.uint8",
+ "stack_out": [
+ "role_id#0"
+ ]
+ },
+ "4745": {
+ "op": "txna ApplicationArgs 2"
+ },
+ "4748": {
+ "op": "dup",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "role_address#0",
+ "role_address#0"
+ ]
+ },
+ "4749": {
+ "op": "cover 2",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "role_address#0"
+ ]
+ },
+ "4751": {
+ "op": "len",
+ "defined_out": [
+ "len%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "len%1#0"
+ ]
+ },
+ "4752": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "len%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "len%1#0",
+ "32"
+ ]
+ },
+ "4753": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "eq%1#0"
+ ]
+ },
+ "4754": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "role_address#0",
+ "role_id#0"
+ ]
+ },
+ "4755": {
+ "op": "txna ApplicationArgs 3"
+ },
+ "4758": {
+ "op": "dup",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "validity#0",
+ "validity#0"
+ ]
+ },
+ "4759": {
+ "op": "cover 2",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#0",
+ "validity#0"
+ ]
+ },
+ "4761": {
+ "op": "len",
+ "defined_out": [
+ "len%2#0",
+ "role_address#0",
+ "role_id#0",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#0",
+ "len%2#0"
+ ]
+ },
+ "4762": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "len%2#0",
+ "role_address#0",
+ "role_id#0",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#0",
+ "len%2#0",
+ "16"
+ ]
+ },
+ "4764": {
+ "op": "==",
+ "defined_out": [
+ "eq%2#0",
+ "role_address#0",
+ "role_id#0",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#0",
+ "eq%2#0"
+ ]
+ },
+ "4765": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.RoleValidity",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.RoleValidity",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#0"
+ ]
+ },
+ "4766": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4769": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "4772": {
+ "op": "btoi",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4773": {
+ "op": "dupn 2",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1 (copy)",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "role_id#1 (copy)"
+ ]
+ },
+ "4775": {
+ "callsub": "modules.rbac.RbacModule._assert_valid_role",
+ "op": "callsub _assert_valid_role",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4778": {
+ "op": "pushint 20",
+ "defined_out": [
+ "20",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "20"
+ ]
+ },
+ "4780": {
+ "op": "==",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%0#2",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%0#2"
+ ]
+ },
+ "4781": {
+ "op": "bz rbac_assign_role_after_if_else@3",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4784": {
+ "op": "bytec 18 // 0x523a41525223",
+ "defined_out": [
+ "0x523a41525223",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a41525223"
+ ]
+ },
+ "4786": {
+ "op": "dig 3",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a41525223",
+ "role_address#0"
+ ]
+ },
+ "4788": {
+ "op": "app_global_put",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4789": {
+ "block": "rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14",
+ "stack_in": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ],
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%2#1"
+ ]
+ },
+ "4791": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4792": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "4793": {
+ "op": "swap",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4794": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%6#0"
+ ]
+ },
+ "4795": {
+ "op": "log",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4796": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "1"
+ ]
+ },
+ "4797": {
+ "op": "return",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4798": {
+ "block": "rbac_assign_role_after_if_else@3",
+ "stack_in": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4799": {
+ "op": "pushint 40",
+ "defined_out": [
+ "40",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "40"
+ ]
+ },
+ "4801": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%1#1"
+ ]
+ },
+ "4802": {
+ "op": "bz rbac_assign_role_after_if_else@5",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4805": {
+ "op": "bytec 23 // 0x523a4d4e4723",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a4d4e4723"
+ ]
+ },
+ "4807": {
+ "op": "dig 3",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a4d4e4723",
+ "role_address#0"
+ ]
+ },
+ "4809": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4810": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "4811": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%0#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4812": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4814": {
+ "op": "!",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "role_address#0",
+ "role_id#1",
+ "tmp%2#2"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "tmp%2#2"
+ ]
+ },
+ "4815": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4816": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "validity#0"
+ ]
+ },
+ "4818": {
+ "op": "box_put",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4819": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
+ },
+ "4822": {
+ "block": "rbac_assign_role_after_if_else@5",
+ "stack_in": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4823": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "50"
+ ]
+ },
+ "4825": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%3#0"
+ ]
+ },
+ "4826": {
+ "op": "bz rbac_assign_role_after_if_else@7",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4829": {
+ "op": "bytec 22 // 0x523a50594423",
+ "defined_out": [
+ "0x523a50594423",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a50594423"
+ ]
+ },
+ "4831": {
+ "op": "dig 3",
+ "defined_out": [
+ "0x523a50594423",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a50594423",
+ "role_address#0"
+ ]
+ },
+ "4833": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%2#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0"
+ ]
+ },
+ "4834": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%2#0",
+ "box_prefixed_key%2#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "box_prefixed_key%2#0 (copy)"
+ ]
+ },
+ "4835": {
+ "op": "box_len",
+ "defined_out": [
+ "_%1#0",
+ "box_prefixed_key%2#0",
+ "maybe_exists%1#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "_%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "4836": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "4838": {
+ "op": "!",
+ "defined_out": [
+ "box_prefixed_key%2#0",
+ "role_address#0",
+ "role_id#1",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "tmp%4#0"
+ ]
+ },
+ "4839": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0"
+ ]
+ },
+ "4840": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%2#0",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "validity#0"
+ ]
+ },
+ "4842": {
+ "op": "box_put",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4843": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
+ },
+ "4846": {
+ "block": "rbac_assign_role_after_if_else@7",
+ "stack_in": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4847": {
+ "op": "pushint 60",
+ "defined_out": [
+ "60",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "60"
+ ]
+ },
+ "4849": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%5#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%5#1"
+ ]
+ },
+ "4850": {
+ "op": "bz rbac_assign_role_after_if_else@9",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4853": {
+ "op": "bytec 26 // 0x523a54525323",
+ "defined_out": [
+ "0x523a54525323",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a54525323"
+ ]
+ },
+ "4855": {
+ "op": "dig 3",
+ "defined_out": [
+ "0x523a54525323",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a54525323",
+ "role_address#0"
+ ]
+ },
+ "4857": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%4#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0"
+ ]
+ },
+ "4858": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%4#0",
+ "box_prefixed_key%4#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "box_prefixed_key%4#0 (copy)"
+ ]
+ },
+ "4859": {
+ "op": "box_len",
+ "defined_out": [
+ "_%2#0",
+ "box_prefixed_key%4#0",
+ "maybe_exists%2#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "_%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "4860": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "4862": {
+ "op": "!",
+ "defined_out": [
+ "box_prefixed_key%4#0",
+ "role_address#0",
+ "role_id#1",
+ "tmp%6#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "tmp%6#1"
+ ]
+ },
+ "4863": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0"
+ ]
+ },
+ "4864": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%4#0",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "validity#0"
+ ]
+ },
+ "4866": {
+ "op": "box_put",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4867": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
+ },
+ "4870": {
+ "block": "rbac_assign_role_after_if_else@9",
+ "stack_in": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4871": {
+ "op": "pushint 70",
+ "defined_out": [
+ "70",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "70"
+ ]
+ },
+ "4873": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%7#0"
+ ]
+ },
+ "4874": {
+ "op": "bz rbac_assign_role_after_if_else@11",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4877": {
+ "op": "bytec 21 // 0x523a41555423",
+ "defined_out": [
+ "0x523a41555423",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a41555423"
+ ]
+ },
+ "4879": {
+ "op": "dig 3",
+ "defined_out": [
+ "0x523a41555423",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a41555423",
+ "role_address#0"
+ ]
+ },
+ "4881": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%6#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0"
+ ]
+ },
+ "4882": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%6#0",
+ "box_prefixed_key%6#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "box_prefixed_key%6#0 (copy)"
+ ]
+ },
+ "4883": {
+ "op": "box_len",
+ "defined_out": [
+ "_%3#0",
+ "box_prefixed_key%6#0",
+ "maybe_exists%3#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "_%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "4884": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "4886": {
+ "op": "!",
+ "defined_out": [
+ "box_prefixed_key%6#0",
+ "role_address#0",
+ "role_id#1",
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "tmp%8#0"
+ ]
+ },
+ "4887": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0"
+ ]
+ },
+ "4888": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%6#0",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "validity#0"
+ ]
+ },
+ "4890": {
+ "op": "box_put",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4891": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
+ },
+ "4894": {
+ "block": "rbac_assign_role_after_if_else@11",
+ "stack_in": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4895": {
+ "op": "pushint 80",
+ "defined_out": [
+ "80",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "role_id#1",
+ "80"
+ ]
+ },
+ "4897": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%9#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "tmp%9#0"
+ ]
+ },
+ "4898": {
+ "op": "bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4901": {
+ "op": "bytec 25 // 0x523a4d4f4323",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a4d4f4323"
+ ]
+ },
+ "4903": {
+ "op": "dig 3",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "0x523a4d4f4323",
+ "role_address#0"
+ ]
+ },
+ "4905": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%8#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0"
+ ]
+ },
+ "4906": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%8#0",
+ "box_prefixed_key%8#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "box_prefixed_key%8#0 (copy)"
+ ]
+ },
+ "4907": {
+ "op": "box_len",
+ "defined_out": [
+ "_%4#0",
+ "box_prefixed_key%8#0",
+ "maybe_exists%4#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "_%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "4908": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "4910": {
+ "op": "!",
+ "defined_out": [
+ "box_prefixed_key%8#0",
+ "role_address#0",
+ "role_id#1",
+ "tmp%10#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "tmp%10#0"
+ ]
+ },
+ "4911": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0"
+ ]
+ },
+ "4912": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%8#0",
+ "role_address#0",
+ "role_id#1",
+ "validity#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "validity#0"
+ ]
+ },
+ "4914": {
+ "op": "box_put",
+ "stack_out": [
+ "role_address#0",
+ "validity#0",
+ "role_id#1"
+ ]
+ },
+ "4915": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
+ },
+ "4918": {
+ "subroutine": "modules.rbac.RbacModule.rbac_revoke_role[routing]",
+ "params": {},
+ "block": "rbac_revoke_role",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0"
+ ]
+ },
+ "4921": {
+ "op": "dup",
+ "defined_out": [
+ "role_id#0",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "role_id#0 (copy)"
+ ]
+ },
+ "4922": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "len%0#0"
+ ]
+ },
+ "4923": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "len%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "len%0#0",
+ "1"
+ ]
+ },
+ "4924": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "eq%0#0"
+ ]
+ },
+ "4925": {
+ "error": "invalid number of bytes for arc4.uint8",
+ "op": "assert // invalid number of bytes for arc4.uint8",
+ "stack_out": [
+ "role_id#0"
+ ]
+ },
+ "4926": {
+ "op": "txna ApplicationArgs 2"
+ },
+ "4929": {
+ "op": "dup",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "role_address#0",
+ "role_address#0"
+ ]
+ },
+ "4930": {
+ "op": "cover 2",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "role_address#0"
+ ]
+ },
+ "4932": {
+ "op": "len",
+ "defined_out": [
+ "len%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "len%1#0"
+ ]
+ },
+ "4933": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "len%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "len%1#0",
+ "32"
+ ]
+ },
+ "4934": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "eq%1#0"
+ ]
+ },
+ "4935": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "role_address#0",
+ "role_id#0"
+ ]
+ },
+ "4936": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "4939": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "4942": {
+ "op": "btoi",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4943": {
+ "op": "dupn 2",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1 (copy)"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "role_id#1 (copy)"
+ ]
+ },
+ "4945": {
+ "callsub": "modules.rbac.RbacModule._assert_valid_role",
+ "op": "callsub _assert_valid_role",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4948": {
+ "op": "dup",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "role_id#1 (copy)"
+ ]
+ },
+ "4949": {
+ "op": "pushint 20",
+ "defined_out": [
+ "20",
+ "role_address#0",
+ "role_id#1",
+ "role_id#1 (copy)"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "role_id#1 (copy)",
+ "20"
+ ]
+ },
+ "4951": {
+ "op": "!=",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "tmp%0#2"
+ ]
+ },
+ "4952": {
+ "error": "Invalid role identifier",
+ "op": "assert // Invalid role identifier",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4953": {
+ "op": "pushint 40",
+ "defined_out": [
+ "40",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "40"
+ ]
+ },
+ "4955": {
+ "op": "==",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%1#1"
+ ]
+ },
+ "4956": {
+ "op": "bz rbac_revoke_role_after_if_else@3",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4959": {
+ "op": "bytec 23 // 0x523a4d4e4723",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a4d4e4723"
+ ]
+ },
+ "4961": {
+ "op": "dig 2",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a4d4e4723",
+ "role_address#0"
+ ]
+ },
+ "4963": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4964": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "4965": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%0#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4966": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "4968": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "4969": {
+ "op": "box_del",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ]
+ },
+ "4970": {
+ "op": "pop",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4971": {
+ "block": "rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
+ "stack_in": [
+ "role_address#0",
+ "role_id#1"
+ ],
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%2#1"
+ ]
+ },
+ "4973": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4974": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "4975": {
+ "op": "swap",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "4976": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%5#0"
+ ]
+ },
+ "4977": {
+ "op": "log",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4978": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "1"
+ ]
+ },
+ "4979": {
+ "op": "return",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4980": {
+ "block": "rbac_revoke_role_after_if_else@3",
+ "stack_in": [
+ "role_address#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "4981": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "50"
+ ]
+ },
+ "4983": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%2#2"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%2#2"
+ ]
+ },
+ "4984": {
+ "op": "bz rbac_revoke_role_after_if_else@5",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4987": {
+ "op": "bytec 22 // 0x523a50594423",
+ "defined_out": [
+ "0x523a50594423",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a50594423"
+ ]
+ },
+ "4989": {
+ "op": "dig 2",
+ "defined_out": [
+ "0x523a50594423",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a50594423",
+ "role_address#0"
+ ]
+ },
+ "4991": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%2#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%2#0"
+ ]
+ },
+ "4992": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%2#0",
+ "box_prefixed_key%2#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "box_prefixed_key%2#0 (copy)"
+ ]
+ },
+ "4993": {
+ "op": "box_len",
+ "defined_out": [
+ "_%1#0",
+ "box_prefixed_key%2#0",
+ "maybe_exists%1#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "_%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "4994": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%2#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "4996": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%2#0"
+ ]
+ },
+ "4997": {
+ "op": "box_del",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ]
+ },
+ "4998": {
+ "op": "pop",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "4999": {
+ "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
+ },
+ "5002": {
+ "block": "rbac_revoke_role_after_if_else@5",
+ "stack_in": [
+ "role_address#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "5003": {
+ "op": "pushint 60",
+ "defined_out": [
+ "60",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "60"
+ ]
+ },
+ "5005": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%3#0"
+ ]
+ },
+ "5006": {
+ "op": "bz rbac_revoke_role_after_if_else@7",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "5009": {
+ "op": "bytec 26 // 0x523a54525323",
+ "defined_out": [
+ "0x523a54525323",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a54525323"
+ ]
+ },
+ "5011": {
+ "op": "dig 2",
+ "defined_out": [
+ "0x523a54525323",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a54525323",
+ "role_address#0"
+ ]
+ },
+ "5013": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%4#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%4#0"
+ ]
+ },
+ "5014": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%4#0",
+ "box_prefixed_key%4#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "box_prefixed_key%4#0 (copy)"
+ ]
+ },
+ "5015": {
+ "op": "box_len",
+ "defined_out": [
+ "_%2#0",
+ "box_prefixed_key%4#0",
+ "maybe_exists%2#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "_%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "5016": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%4#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "5018": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%4#0"
+ ]
+ },
+ "5019": {
+ "op": "box_del",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ]
+ },
+ "5020": {
+ "op": "pop",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "5021": {
+ "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
+ },
+ "5024": {
+ "block": "rbac_revoke_role_after_if_else@7",
+ "stack_in": [
+ "role_address#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "5025": {
+ "op": "pushint 70",
+ "defined_out": [
+ "70",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "70"
+ ]
+ },
+ "5027": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%4#1"
+ ]
+ },
+ "5028": {
+ "op": "bz rbac_revoke_role_after_if_else@9",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "5031": {
+ "op": "bytec 21 // 0x523a41555423",
+ "defined_out": [
+ "0x523a41555423",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a41555423"
+ ]
+ },
+ "5033": {
+ "op": "dig 2",
+ "defined_out": [
+ "0x523a41555423",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a41555423",
+ "role_address#0"
+ ]
+ },
+ "5035": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%6#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%6#0"
+ ]
+ },
+ "5036": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%6#0",
+ "box_prefixed_key%6#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "box_prefixed_key%6#0 (copy)"
+ ]
+ },
+ "5037": {
+ "op": "box_len",
+ "defined_out": [
+ "_%3#0",
+ "box_prefixed_key%6#0",
+ "maybe_exists%3#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "_%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "5038": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%6#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "5040": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%6#0"
+ ]
+ },
+ "5041": {
+ "op": "box_del",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ]
+ },
+ "5042": {
+ "op": "pop",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "5043": {
+ "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
+ },
+ "5046": {
+ "block": "rbac_revoke_role_after_if_else@9",
+ "stack_in": [
+ "role_address#0",
+ "role_id#1"
+ ],
+ "op": "dup",
+ "defined_out": [
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1"
+ ]
+ },
+ "5047": {
+ "op": "pushint 80",
+ "defined_out": [
+ "80",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "role_id#1",
+ "80"
+ ]
+ },
+ "5049": {
+ "op": "==",
+ "defined_out": [
+ "role_id#1",
+ "tmp%5#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "tmp%5#1"
+ ]
+ },
+ "5050": {
+ "op": "bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "5053": {
+ "op": "bytec 25 // 0x523a4d4f4323",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a4d4f4323"
+ ]
+ },
+ "5055": {
+ "op": "dig 2",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "0x523a4d4f4323",
+ "role_address#0"
+ ]
+ },
+ "5057": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%8#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%8#0"
+ ]
+ },
+ "5058": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%8#0",
+ "box_prefixed_key%8#0 (copy)",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "box_prefixed_key%8#0 (copy)"
+ ]
+ },
+ "5059": {
+ "op": "box_len",
+ "defined_out": [
+ "_%4#0",
+ "box_prefixed_key%8#0",
+ "maybe_exists%4#0",
+ "role_address#0",
+ "role_id#1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "_%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "5060": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%8#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "5062": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "box_prefixed_key%8#0"
+ ]
+ },
+ "5063": {
+ "op": "box_del",
+ "defined_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#1",
+ "{box_del}"
+ ]
+ },
+ "5064": {
+ "op": "pop",
+ "stack_out": [
+ "role_address#0",
+ "role_id#1"
+ ]
+ },
+ "5065": {
+ "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
+ },
+ "5068": {
+ "subroutine": "modules.rbac.RbacModule.rbac_contract_suspension[routing]",
+ "params": {},
+ "block": "rbac_contract_suspension",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5071": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "5072": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "5073": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0",
+ "1"
+ ]
+ },
+ "5074": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "5075": {
+ "error": "invalid number of bytes for arc4.bool",
+ "op": "assert // invalid number of bytes for arc4.bool",
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5076": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "0"
+ ]
+ },
+ "5077": {
+ "op": "getbit",
+ "defined_out": [
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0"
+ ]
+ },
+ "5078": {
+ "op": "bytec 21 // 0x523a41555423",
+ "defined_out": [
+ "0x523a41555423",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "0x523a41555423"
+ ]
+ },
+ "5080": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a41555423",
+ "suspended#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "0x523a41555423",
+ "tmp%0#2"
+ ]
+ },
+ "5082": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "suspended#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "tmp%1#0"
+ ]
+ },
+ "5085": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "suspended#0"
+ ]
+ },
+ "5086": {
+ "op": "bytec 33 // \"contract_suspended\"",
+ "defined_out": [
+ "\"contract_suspended\"",
+ "suspended#0"
+ ],
+ "stack_out": [
+ "suspended#0",
+ "\"contract_suspended\""
+ ]
+ },
+ "5088": {
+ "op": "swap",
+ "stack_out": [
+ "\"contract_suspended\"",
+ "suspended#0"
+ ]
+ },
+ "5089": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "5090": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "5092": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5093": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "5094": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5095": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "5096": {
+ "op": "log",
+ "stack_out": []
+ },
+ "5097": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "1"
+ ]
+ },
+ "5098": {
+ "op": "return",
+ "stack_out": []
+ },
+ "5099": {
+ "subroutine": "modules.rbac.RbacModule.rbac_contract_default[routing]",
+ "params": {},
+ "block": "rbac_contract_default",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5102": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "5103": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "5104": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0",
+ "1"
+ ]
+ },
+ "5105": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "5106": {
+ "error": "invalid number of bytes for arc4.bool",
+ "op": "assert // invalid number of bytes for arc4.bool",
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5107": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "0"
+ ]
+ },
+ "5108": {
+ "op": "getbit",
+ "defined_out": [
+ "defaulted#0"
+ ],
+ "stack_out": [
+ "defaulted#0"
+ ]
+ },
+ "5109": {
+ "op": "bytec 26 // 0x523a54525323",
+ "defined_out": [
+ "0x523a54525323",
+ "defaulted#0"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "0x523a54525323"
+ ]
+ },
+ "5111": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a54525323",
+ "defaulted#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "0x523a54525323",
+ "tmp%0#2"
+ ]
+ },
+ "5113": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "defaulted#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "tmp%1#0"
+ ]
+ },
+ "5116": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "defaulted#0"
+ ]
+ },
+ "5117": {
+ "op": "bytec 34 // \"defaulted\"",
+ "defined_out": [
+ "\"defaulted\"",
+ "defaulted#0"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "\"defaulted\""
+ ]
+ },
+ "5119": {
+ "op": "swap",
+ "stack_out": [
+ "\"defaulted\"",
+ "defaulted#0"
+ ]
+ },
+ "5120": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "5121": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "5123": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5124": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "5125": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5126": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "5127": {
+ "op": "log",
+ "stack_out": []
+ },
+ "5128": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "1"
+ ]
+ },
+ "5129": {
+ "op": "return",
+ "stack_out": []
+ },
+ "5130": {
+ "subroutine": "modules.rbac.RbacModule.rbac_get_arranger[routing]",
+ "params": {},
+ "block": "rbac_get_arranger",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5131": {
+ "op": "bytec 18 // 0x523a41525223",
+ "defined_out": [
+ "0",
+ "0x523a41525223"
+ ],
+ "stack_out": [
+ "0",
+ "0x523a41525223"
+ ]
+ },
+ "5133": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5134": {
+ "error": "check self.arranger exists",
+ "op": "assert // check self.arranger exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "5135": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "5136": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "maybe_value%0#0"
+ ]
+ },
+ "5137": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0"
+ ]
+ },
+ "5138": {
+ "op": "log",
+ "stack_out": []
+ },
+ "5139": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "5140": {
+ "op": "return",
+ "stack_out": []
+ },
+ "5141": {
+ "subroutine": "modules.rbac.RbacModule.rbac_get_address_roles[routing]",
+ "params": {},
+ "block": "rbac_get_address_roles",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "address#0"
+ ],
+ "stack_out": [
+ "address#0"
+ ]
+ },
+ "5144": {
+ "op": "dup",
+ "defined_out": [
+ "address#0",
+ "address#0 (copy)"
+ ],
+ "stack_out": [
+ "address#0",
+ "address#0 (copy)"
+ ]
+ },
+ "5145": {
+ "op": "len",
+ "defined_out": [
+ "address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "len%0#0"
+ ]
+ },
+ "5146": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "address#0",
+ "len%0#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "len%0#0",
+ "32"
+ ]
+ },
+ "5147": {
+ "op": "==",
+ "defined_out": [
+ "address#0",
+ "eq%0#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "eq%0#0"
+ ]
+ },
+ "5148": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "address#0"
+ ]
+ },
+ "5149": {
+ "op": "bytec 23 // 0x523a4d4e4723",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "address#0"
+ ],
+ "stack_out": [
+ "address#0",
+ "0x523a4d4e4723"
+ ]
+ },
+ "5151": {
+ "op": "dig 1",
+ "stack_out": [
+ "address#0",
+ "0x523a4d4e4723",
+ "address#0 (copy)"
+ ]
+ },
+ "5153": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "address#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1"
+ ]
+ },
+ "5156": {
+ "op": "bytec 22 // 0x523a50594423",
+ "defined_out": [
+ "0x523a50594423",
+ "address#0",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "0x523a50594423"
+ ]
+ },
+ "5158": {
+ "op": "dig 2",
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "0x523a50594423",
+ "address#0 (copy)"
+ ]
+ },
+ "5160": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1"
+ ]
+ },
+ "5163": {
+ "op": "bytec 26 // 0x523a54525323",
+ "defined_out": [
+ "0x523a54525323",
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "0x523a54525323"
+ ]
+ },
+ "5165": {
+ "op": "dig 3",
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "0x523a54525323",
+ "address#0 (copy)"
+ ]
+ },
+ "5167": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1"
+ ]
+ },
+ "5170": {
+ "op": "bytec 21 // 0x523a41555423",
+ "defined_out": [
+ "0x523a41555423",
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "0x523a41555423"
+ ]
+ },
+ "5172": {
+ "op": "dig 4",
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "0x523a41555423",
+ "address#0 (copy)"
+ ]
+ },
+ "5174": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1"
+ ]
+ },
+ "5177": {
+ "op": "bytec 25 // 0x523a4d4f4323",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1"
+ ],
+ "stack_out": [
+ "address#0",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "0x523a4d4f4323"
+ ]
+ },
+ "5179": {
+ "op": "uncover 5",
+ "stack_out": [
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "0x523a4d4f4323",
+ "address#0"
+ ]
+ },
+ "5181": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ]
+ },
+ "5184": {
+ "op": "bytec 41 // 0x00",
+ "defined_out": [
+ "0x00",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "0x00"
+ ]
+ },
+ "5186": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "0x00",
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%0#1",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "0x00",
+ "0"
+ ]
+ },
+ "5187": {
+ "op": "uncover 6",
+ "stack_out": [
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "0x00",
+ "0",
+ "tmp%0#1"
+ ]
+ },
+ "5189": {
+ "op": "setbit",
+ "defined_out": [
+ "aggregate%encoded_bool%0#0",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%encoded_bool%0#0"
+ ]
+ },
+ "5190": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "aggregate%encoded_bool%0#0",
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%1#1",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%encoded_bool%0#0",
+ "1"
+ ]
+ },
+ "5191": {
+ "op": "uncover 5",
+ "stack_out": [
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%encoded_bool%0#0",
+ "1",
+ "tmp%1#1"
+ ]
+ },
+ "5193": {
+ "op": "setbit",
+ "defined_out": [
+ "aggregate%set_bit%0#0",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%set_bit%0#0"
+ ]
+ },
+ "5194": {
+ "op": "pushint 2",
+ "defined_out": [
+ "2",
+ "aggregate%set_bit%0#0",
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%2#1",
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%set_bit%0#0",
+ "2"
+ ]
+ },
+ "5196": {
+ "op": "uncover 4",
+ "stack_out": [
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%set_bit%0#0",
+ "2",
+ "tmp%2#1"
+ ]
+ },
+ "5198": {
+ "op": "setbit",
+ "defined_out": [
+ "aggregate%set_bit%1#0",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%set_bit%1#0"
+ ]
+ },
+ "5199": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "aggregate%set_bit%1#0",
+ "tmp%3#1",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%3#1",
+ "tmp%4#1",
+ "aggregate%set_bit%1#0",
+ "3"
+ ]
+ },
+ "5201": {
+ "op": "uncover 3",
+ "stack_out": [
+ "tmp%4#1",
+ "aggregate%set_bit%1#0",
+ "3",
+ "tmp%3#1"
+ ]
+ },
+ "5203": {
+ "op": "setbit",
+ "defined_out": [
+ "aggregate%set_bit%2#0",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%4#1",
+ "aggregate%set_bit%2#0"
+ ]
+ },
+ "5204": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "aggregate%set_bit%2#0",
+ "tmp%4#1"
+ ],
+ "stack_out": [
+ "tmp%4#1",
+ "aggregate%set_bit%2#0",
+ "4"
+ ]
+ },
+ "5206": {
+ "op": "uncover 2",
+ "stack_out": [
+ "aggregate%set_bit%2#0",
+ "4",
+ "tmp%4#1"
+ ]
+ },
+ "5208": {
+ "op": "setbit",
+ "defined_out": [
+ "aggregate%set_bit%3#0"
+ ],
+ "stack_out": [
+ "aggregate%set_bit%3#0"
+ ]
+ },
+ "5209": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%set_bit%3#0"
+ ],
+ "stack_out": [
+ "aggregate%set_bit%3#0",
+ "0x151f7c75"
+ ]
+ },
+ "5210": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%set_bit%3#0"
+ ]
+ },
+ "5211": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "tmp%8#0"
+ ]
+ },
+ "5212": {
+ "op": "log",
+ "stack_out": []
+ },
+ "5213": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "1"
+ ]
+ },
+ "5214": {
+ "op": "return",
+ "stack_out": []
+ },
+ "5215": {
+ "subroutine": "modules.rbac.RbacModule.rbac_get_role_validity[routing]",
+ "params": {},
+ "block": "rbac_get_role_validity",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0"
+ ]
+ },
+ "5218": {
+ "op": "dup",
+ "defined_out": [
+ "role_id#0",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "role_id#0 (copy)"
+ ]
+ },
+ "5219": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "len%0#0"
+ ]
+ },
+ "5220": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "len%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "len%0#0",
+ "1"
+ ]
+ },
+ "5221": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "eq%0#0"
+ ]
+ },
+ "5222": {
+ "error": "invalid number of bytes for arc4.uint8",
+ "op": "assert // invalid number of bytes for arc4.uint8",
+ "stack_out": [
+ "role_id#0"
+ ]
+ },
+ "5223": {
+ "op": "txna ApplicationArgs 2"
+ },
+ "5226": {
+ "op": "dup",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_id#0",
+ "role_address#0",
+ "role_address#0"
+ ]
+ },
+ "5227": {
+ "op": "cover 2",
+ "defined_out": [
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "role_address#0"
+ ]
+ },
+ "5229": {
+ "op": "len",
+ "defined_out": [
+ "len%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "len%1#0"
+ ]
+ },
+ "5230": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "len%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "len%1#0",
+ "32"
+ ]
+ },
+ "5231": {
+ "op": "==",
+ "defined_out": [
+ "eq%1#0",
+ "role_address#0",
+ "role_id#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role_id#0",
+ "eq%1#0"
+ ]
+ },
+ "5232": {
+ "error": "invalid number of bytes for arc4.static_array",
+ "op": "assert // invalid number of bytes for arc4.static_array",
+ "stack_out": [
+ "role_address#0",
+ "role_id#0"
+ ]
+ },
+ "5233": {
+ "op": "btoi",
+ "defined_out": [
+ "role#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role#0"
+ ]
+ },
+ "5234": {
+ "op": "dup",
+ "defined_out": [
+ "role#0",
+ "role#0 (copy)",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role#0",
+ "role#0 (copy)"
+ ]
+ },
+ "5235": {
+ "callsub": "modules.rbac.RbacModule._assert_valid_role",
+ "op": "callsub _assert_valid_role",
+ "stack_out": [
+ "role_address#0",
+ "role#0"
+ ]
+ },
+ "5238": {
+ "op": "pushints 20 40 50 60 70 80",
+ "defined_out": [
+ "20",
+ "40",
+ "50",
+ "60",
+ "70",
+ "80",
+ "role#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "role#0",
+ "20",
+ "40",
+ "50",
+ "60",
+ "70",
+ "80"
+ ]
+ },
+ "5246": {
+ "op": "uncover 6",
+ "stack_out": [
+ "role_address#0",
+ "20",
+ "40",
+ "50",
+ "60",
+ "70",
+ "80",
+ "role#0"
+ ]
+ },
+ "5248": {
+ "op": "match rbac_get_role_validity_switch_case_0@2 rbac_get_role_validity_switch_case_1@3 rbac_get_role_validity_switch_case_2@4 rbac_get_role_validity_switch_case_3@5 rbac_get_role_validity_switch_case_4@6 rbac_get_role_validity_switch_case_5@7",
+ "stack_out": [
+ "role_address#0"
+ ]
+ },
+ "5262": {
+ "error": "Invalid role identifier",
+ "op": "err // Invalid role identifier"
+ },
+ "5263": {
+ "block": "rbac_get_role_validity_switch_case_5@7",
+ "stack_in": [
+ "role_address#0"
+ ],
+ "op": "bytec 25 // 0x523a4d4f4323",
+ "defined_out": [
+ "0x523a4d4f4323"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a4d4f4323"
+ ]
+ },
+ "5265": {
+ "op": "dig 1",
+ "defined_out": [
+ "0x523a4d4f4323",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a4d4f4323",
+ "role_address#0"
+ ]
+ },
+ "5267": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5268": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5269": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5270": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5272": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5273": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%8#0",
+ "aggregate%box_get%9#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "aggregate%box_get%8#0",
+ "aggregate%box_get%9#0"
+ ]
+ },
+ "5274": {
+ "op": "pop",
+ "defined_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ]
+ },
+ "5275": {
+ "block": "rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9",
+ "stack_in": [
+ "role_address#0",
+ "tmp%3#0"
+ ],
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0",
+ "0x151f7c75"
+ ]
+ },
+ "5276": {
+ "op": "swap",
+ "defined_out": [
+ "0x151f7c75",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x151f7c75",
+ "tmp%3#0"
+ ]
+ },
+ "5277": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%4#0"
+ ]
+ },
+ "5278": {
+ "op": "log",
+ "stack_out": [
+ "role_address#0"
+ ]
+ },
+ "5279": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "1"
+ ]
+ },
+ "5280": {
+ "op": "return",
+ "stack_out": [
+ "role_address#0"
+ ]
+ },
+ "5281": {
+ "block": "rbac_get_role_validity_switch_case_4@6",
+ "stack_in": [
+ "role_address#0"
+ ],
+ "op": "bytec 21 // 0x523a41555423",
+ "defined_out": [
+ "0x523a41555423"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a41555423"
+ ]
+ },
+ "5283": {
+ "op": "dig 1",
+ "defined_out": [
+ "0x523a41555423",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a41555423",
+ "role_address#0"
+ ]
+ },
+ "5285": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5286": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5287": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5288": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5290": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5291": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%6#0",
+ "aggregate%box_get%7#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "aggregate%box_get%6#0",
+ "aggregate%box_get%7#0"
+ ]
+ },
+ "5292": {
+ "op": "pop",
+ "defined_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ]
+ },
+ "5293": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
+ },
+ "5296": {
+ "block": "rbac_get_role_validity_switch_case_3@5",
+ "stack_in": [
+ "role_address#0"
+ ],
+ "op": "bytec 26 // 0x523a54525323",
+ "defined_out": [
+ "0x523a54525323"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a54525323"
+ ]
+ },
+ "5298": {
+ "op": "dig 1",
+ "defined_out": [
+ "0x523a54525323",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a54525323",
+ "role_address#0"
+ ]
+ },
+ "5300": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5301": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5302": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5303": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5305": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5306": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%4#0",
+ "aggregate%box_get%5#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "aggregate%box_get%4#0",
+ "aggregate%box_get%5#0"
+ ]
+ },
+ "5307": {
+ "op": "pop",
+ "defined_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ]
+ },
+ "5308": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
+ },
+ "5311": {
+ "block": "rbac_get_role_validity_switch_case_2@4",
+ "stack_in": [
+ "role_address#0"
+ ],
+ "op": "bytec 22 // 0x523a50594423",
+ "defined_out": [
+ "0x523a50594423"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a50594423"
+ ]
+ },
+ "5313": {
+ "op": "dig 1",
+ "defined_out": [
+ "0x523a50594423",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a50594423",
+ "role_address#0"
+ ]
+ },
+ "5315": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5316": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5317": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5318": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5320": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5321": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0"
+ ]
+ },
+ "5322": {
+ "op": "pop",
+ "defined_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ]
+ },
+ "5323": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
+ },
+ "5326": {
+ "block": "rbac_get_role_validity_switch_case_1@3",
+ "stack_in": [
+ "role_address#0"
+ ],
+ "op": "bytec 23 // 0x523a4d4e4723",
+ "defined_out": [
+ "0x523a4d4e4723"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a4d4e4723"
+ ]
+ },
+ "5328": {
+ "op": "dig 1",
+ "defined_out": [
+ "0x523a4d4e4723",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0x523a4d4e4723",
+ "role_address#0"
+ ]
+ },
+ "5330": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5331": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5332": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5333": {
+ "op": "bury 1",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5335": {
+ "error": "Invalid account role address",
+ "op": "assert // Invalid account role address",
+ "stack_out": [
+ "role_address#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5336": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "5337": {
+ "op": "pop",
+ "defined_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ]
+ },
+ "5338": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
+ },
+ "5341": {
+ "block": "rbac_get_role_validity_switch_case_0@2",
+ "stack_in": [
+ "role_address#0"
+ ],
+ "op": "pushbytes 0x00000000000000000000000000000000",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "tmp%3#0"
+ ]
+ },
+ "5359": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
+ },
+ "5362": {
+ "subroutine": "modules.accounting.AccountingModule._assert_is_not_account_suspended",
+ "params": {
+ "holding_address#0": "bytes"
+ },
+ "block": "_assert_is_not_account_suspended",
+ "stack_in": [],
+ "op": "proto 1 0"
+ },
+ "5365": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123"
+ ],
+ "stack_out": [
+ "0x4123"
+ ]
+ },
+ "5367": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "0x4123",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "5369": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "5370": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ],
+ "stack_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "5371": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "5372": {
+ "op": "pushint 384",
+ "defined_out": [
+ "384",
+ "aggregate%box_get%0#0"
+ ],
+ "stack_out": [
+ "aggregate%box_get%0#0",
+ "384"
+ ]
+ },
+ "5375": {
+ "op": "getbit",
+ "defined_out": [
+ "aggregate%get_bit%0#0"
+ ],
+ "stack_out": [
+ "aggregate%get_bit%0#0"
+ ]
+ },
+ "5376": {
+ "op": "!",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5377": {
+ "error": "Suspended operations",
+ "op": "assert // Suspended operations",
+ "stack_out": []
+ },
+ "5378": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5379": {
+ "subroutine": "modules.accounting.AccountingModule._settle_position",
+ "params": {
+ "holding_address#0": "bytes"
+ },
+ "block": "_settle_position",
+ "stack_in": [],
+ "op": "proto 1 2"
+ },
+ "5382": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123"
+ ],
+ "stack_out": [
+ "0x4123"
+ ]
+ },
+ "5384": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "0x4123",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "5386": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5387": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5388": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5389": {
+ "op": "bury 1",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5391": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5392": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1 (copy)"
+ ]
+ },
+ "5393": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "5394": {
+ "op": "pop",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0"
+ ]
+ },
+ "5395": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "0"
+ ]
+ },
+ "5396": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "defined_out": [
+ "\"cumulative_interest_index\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "0",
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "5398": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5399": {
+ "error": "check self.cumulative_interest_index exists",
+ "op": "assert // check self.cumulative_interest_index exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "5400": {
+ "op": "dig 1",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "maybe_value%0#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5402": {
+ "op": "pushint 57",
+ "defined_out": [
+ "57",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "maybe_value%0#0",
+ "position#0 (copy)",
+ "57"
+ ]
+ },
+ "5404": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "position#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "maybe_value%0#0",
+ "values%0#0"
+ ]
+ },
+ "5405": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0"
+ ]
+ },
+ "5406": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "0"
+ ]
+ },
+ "5407": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "defined_out": [
+ "\"cumulative_principal_index\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "0",
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "5409": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5410": {
+ "error": "check self.cumulative_principal_index exists",
+ "op": "assert // check self.cumulative_principal_index exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "5411": {
+ "op": "dig 2",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "maybe_value%1#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5413": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "maybe_value%1#0",
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "maybe_value%1#0",
+ "position#0 (copy)",
+ "65"
+ ]
+ },
+ "5415": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "maybe_value%1#0",
+ "position#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "maybe_value%1#0",
+ "values%1#0"
+ ]
+ },
+ "5416": {
+ "op": "-",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "position#0",
+ "principal_delta#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0"
+ ]
+ },
+ "5417": {
+ "op": "dig 2",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5419": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "position#0",
+ "position#0 (copy)",
+ "principal_delta#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "position#0 (copy)",
+ "32"
+ ]
+ },
+ "5420": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "values%2#0"
+ ]
+ },
+ "5421": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "values%2#0",
+ "0"
+ ]
+ },
+ "5422": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "values%2#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "5424": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "maybe_exists%2#0",
+ "maybe_value%2#0",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "values%2#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "5425": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "interest_delta#0",
+ "principal_delta#0",
+ "values%2#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "5426": {
+ "op": "uncover 3",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "maybe_value%2#0",
+ "interest_delta#0"
+ ]
+ },
+ "5428": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "interest_delta#0",
+ "maybe_value%2#0",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "values%2#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "maybe_value%2#0",
+ "interest_delta#0",
+ "values%2#0 (copy)"
+ ]
+ },
+ "5430": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "interest_delta#0",
+ "values%2#0 (copy)",
+ "maybe_value%2#0"
+ ]
+ },
+ "5432": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "claimable_interest#0"
+ ]
+ },
+ "5435": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "claimable_interest#0",
+ "0"
+ ]
+ },
+ "5436": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "claimable_interest#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "5438": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "maybe_exists%3#0",
+ "maybe_value%3#0",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "claimable_interest#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "5439": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "principal_delta#0",
+ "values%2#0",
+ "claimable_interest#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "5440": {
+ "op": "uncover 3",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "values%2#0",
+ "claimable_interest#0",
+ "maybe_value%3#0",
+ "principal_delta#0"
+ ]
+ },
+ "5442": {
+ "op": "uncover 3",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "maybe_value%3#0",
+ "principal_delta#0",
+ "values%2#0"
+ ]
+ },
+ "5444": {
+ "op": "uncover 2",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "principal_delta#0",
+ "values%2#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "5446": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0"
+ ]
+ },
+ "5449": {
+ "op": "dig 2",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5451": {
+ "op": "pushint 73",
+ "defined_out": [
+ "73",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0 (copy)",
+ "73"
+ ]
+ },
+ "5453": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "values%4#0"
+ ]
+ },
+ "5454": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_interest#0 (copy)",
+ "claimable_principal#0",
+ "position#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "values%4#0",
+ "claimable_interest#0 (copy)"
+ ]
+ },
+ "5456": {
+ "op": "+",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "tmp%4#0"
+ ]
+ },
+ "5457": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "position#0",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5458": {
+ "op": "uncover 3",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "aggregate%val_as_bytes%0#0",
+ "position#0"
+ ]
+ },
+ "5460": {
+ "op": "swap",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5461": {
+ "op": "replace2 73",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ]
+ },
+ "5463": {
+ "op": "dup",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5464": {
+ "op": "pushint 81",
+ "defined_out": [
+ "81",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "position#0 (copy)",
+ "81"
+ ]
+ },
+ "5466": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "values%5#0"
+ ]
+ },
+ "5467": {
+ "op": "dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "claimable_principal#0 (copy)",
+ "position#0",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "values%5#0",
+ "claimable_principal#0 (copy)"
+ ]
+ },
+ "5469": {
+ "op": "+",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "tmp%5#0"
+ ]
+ },
+ "5470": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%1#0",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "5471": {
+ "op": "replace2 81",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ]
+ },
+ "5473": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "0"
+ ]
+ },
+ "5474": {
+ "op": "bytec 16 // \"cumulative_interest_index\"",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "0",
+ "\"cumulative_interest_index\""
+ ]
+ },
+ "5476": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "maybe_exists%4#0",
+ "maybe_value%4#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "5477": {
+ "error": "check self.cumulative_interest_index exists",
+ "op": "assert // check self.cumulative_interest_index exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "5478": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%2#0",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "aggregate%val_as_bytes%2#0"
+ ]
+ },
+ "5479": {
+ "op": "replace2 57",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ]
+ },
+ "5481": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "0"
+ ]
+ },
+ "5482": {
+ "op": "bytec 17 // \"cumulative_principal_index\"",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "0",
+ "\"cumulative_principal_index\""
+ ]
+ },
+ "5484": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "maybe_exists%5#0",
+ "maybe_value%5#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "5485": {
+ "error": "check self.cumulative_principal_index exists",
+ "op": "assert // check self.cumulative_principal_index exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "5486": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%3#0",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "aggregate%val_as_bytes%3#0"
+ ]
+ },
+ "5487": {
+ "op": "replace2 65",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ]
+ },
+ "5489": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "0"
+ ]
+ },
+ "5490": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "5491": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "maybe_exists%6#0",
+ "maybe_value%6#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "maybe_value%6#0",
+ "maybe_exists%6#0"
+ ]
+ },
+ "5492": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "5493": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%4#0",
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "aggregate%val_as_bytes%4#0"
+ ]
+ },
+ "5494": {
+ "op": "replace2 49",
+ "stack_out": [
+ "box_prefixed_key%0#1",
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0"
+ ]
+ },
+ "5496": {
+ "op": "uncover 3",
+ "stack_out": [
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "position#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5498": {
+ "op": "swap",
+ "stack_out": [
+ "claimable_interest#0",
+ "claimable_principal#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ]
+ },
+ "5499": {
+ "op": "box_put",
+ "stack_out": [
+ "claimable_interest#0",
+ "claimable_principal#0"
+ ]
+ },
+ "5500": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5501": {
+ "subroutine": "modules.accounting.AccountingModule._ensure_units_activated",
+ "params": {
+ "holding_address#0": "bytes"
+ },
+ "block": "_ensure_units_activated",
+ "stack_in": [],
+ "op": "proto 1 0"
+ },
+ "5504": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "position#0"
+ ]
+ },
+ "5505": {
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "position#0",
+ "activated_units#0"
+ ]
+ },
+ "5507": {
+ "op": "bytec 8 // 0x4123",
+ "defined_out": [
+ "0x4123"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "0x4123"
+ ]
+ },
+ "5509": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "0x4123",
+ "holding_address#0 (copy)"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "0x4123",
+ "holding_address#0 (copy)"
+ ]
+ },
+ "5511": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5512": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5513": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5514": {
+ "op": "bury 1",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5516": {
+ "error": "Invalid account holding address",
+ "op": "assert // Invalid account holding address",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5517": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "0"
+ ]
+ },
+ "5518": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "0",
+ "\"status\""
+ ]
+ },
+ "5519": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5520": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0"
+ ]
+ },
+ "5521": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "5523": {
+ "op": "==",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "tmp%0#1"
+ ]
+ },
+ "5524": {
+ "op": "bz _ensure_units_activated_after_if_else@2",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5527": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5528": {
+ "block": "_ensure_units_activated_after_if_else@2",
+ "stack_in": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ],
+ "op": "frame_dig 2",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5530": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "5531": {
+ "op": "swap",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%1#0",
+ "position#0"
+ ]
+ },
+ "5532": {
+ "op": "dup",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%1#0",
+ "position#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5533": {
+ "op": "cover 2",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "aggregate%box_get%1#0",
+ "position#0"
+ ]
+ },
+ "5535": {
+ "op": "frame_bury 0",
+ "defined_out": [
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "5537": {
+ "error": "check self.account entry exists",
+ "op": "assert // check self.account entry exists",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ]
+ },
+ "5538": {
+ "op": "pushint 40",
+ "defined_out": [
+ "40",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "40"
+ ]
+ },
+ "5540": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0"
+ ]
+ },
+ "5541": {
+ "op": "dup",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "activated_units#0"
+ ]
+ },
+ "5542": {
+ "op": "frame_bury 1",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0"
+ ]
+ },
+ "5544": {
+ "op": "bnz _ensure_units_activated_after_if_else@4",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5547": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5548": {
+ "block": "_ensure_units_activated_after_if_else@4",
+ "stack_in": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ],
+ "op": "frame_dig 0",
+ "defined_out": [
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ]
+ },
+ "5550": {
+ "op": "dup",
+ "defined_out": [
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "position#0 (copy)"
+ ]
+ },
+ "5551": {
+ "op": "intc_3 // 32",
+ "defined_out": [
+ "32",
+ "position#0",
+ "position#0 (copy)"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "position#0 (copy)",
+ "32"
+ ]
+ },
+ "5552": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "position#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "values%2#0"
+ ]
+ },
+ "5553": {
+ "op": "frame_dig 1",
+ "defined_out": [
+ "activated_units#0",
+ "position#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "values%2#0",
+ "activated_units#0"
+ ]
+ },
+ "5555": {
+ "op": "dup",
+ "defined_out": [
+ "activated_units#0",
+ "activated_units#0 (copy)",
+ "position#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "values%2#0",
+ "activated_units#0 (copy)",
+ "activated_units#0 (copy)"
+ ]
+ },
+ "5556": {
+ "op": "cover 3",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0",
+ "values%2#0",
+ "activated_units#0 (copy)"
+ ]
+ },
+ "5558": {
+ "op": "+",
+ "defined_out": [
+ "activated_units#0",
+ "position#0",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0",
+ "tmp%2#0"
+ ]
+ },
+ "5559": {
+ "op": "itob",
+ "defined_out": [
+ "activated_units#0",
+ "aggregate%val_as_bytes%0#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "5560": {
+ "op": "replace2 32",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0"
+ ]
+ },
+ "5562": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "activated_units#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0",
+ "0"
+ ]
+ },
+ "5563": {
+ "op": "itob",
+ "defined_out": [
+ "activated_units#0",
+ "aggregate%val_as_bytes%1#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "5564": {
+ "op": "replace2 40",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0"
+ ]
+ },
+ "5566": {
+ "op": "frame_dig 2",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "position#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5568": {
+ "op": "swap",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ]
+ },
+ "5569": {
+ "op": "box_put",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0"
+ ]
+ },
+ "5570": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "0"
+ ]
+ },
+ "5571": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "5573": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5574": {
+ "error": "check self.reserved_units_total exists",
+ "op": "assert // check self.reserved_units_total exists",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "5575": {
+ "op": "dup",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "position#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "5576": {
+ "op": "dig 2",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "activated_units#0 (copy)"
+ ]
+ },
+ "5578": {
+ "op": ">=",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "position#0",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "maybe_value%0#0",
+ "tmp%3#0"
+ ]
+ },
+ "5579": {
+ "error": "Insufficient remaining D-ASA units",
+ "op": "assert // Insufficient remaining D-ASA units",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "activated_units#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "5580": {
+ "op": "swap",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "maybe_value%0#0",
+ "activated_units#0"
+ ]
+ },
+ "5581": {
+ "op": "-",
+ "defined_out": [
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "position#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "tmp%4#0"
+ ]
+ },
+ "5582": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "tmp%4#0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "5584": {
+ "op": "swap",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1",
+ "\"reserved_units_total\"",
+ "tmp%4#0"
+ ]
+ },
+ "5585": {
+ "op": "app_global_put",
+ "stack_out": [
+ "position#0",
+ "activated_units#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "5586": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5587": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "params": {
+ "multiplicand#0": "uint64",
+ "multiplier#0": "uint64",
+ "divisor#0": "uint64"
+ },
+ "block": "_scaled_mul_div",
+ "stack_in": [],
+ "op": "proto 3 1"
+ },
+ "5590": {
+ "op": "frame_dig -3",
+ "defined_out": [
+ "multiplicand#0 (copy)"
+ ],
+ "stack_out": [
+ "multiplicand#0 (copy)"
+ ]
+ },
+ "5592": {
+ "op": "bz _scaled_mul_div_if_body@2",
+ "stack_out": []
+ },
+ "5595": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "multiplier#0 (copy)"
+ ],
+ "stack_out": [
+ "multiplier#0 (copy)"
+ ]
+ },
+ "5597": {
+ "op": "bnz _scaled_mul_div_after_if_else@3",
+ "stack_out": []
+ },
+ "5600": {
+ "block": "_scaled_mul_div_if_body@2",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5601": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5602": {
+ "block": "_scaled_mul_div_after_if_else@3",
+ "stack_in": [],
+ "op": "frame_dig -3",
+ "defined_out": [
+ "multiplicand#0 (copy)"
+ ],
+ "stack_out": [
+ "multiplicand#0 (copy)"
+ ]
+ },
+ "5604": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "multiplicand#0 (copy)",
+ "multiplier#0 (copy)"
+ ],
+ "stack_out": [
+ "multiplicand#0 (copy)",
+ "multiplier#0 (copy)"
+ ]
+ },
+ "5606": {
+ "op": "mulw",
+ "defined_out": [
+ "high#0",
+ "low#0"
+ ],
+ "stack_out": [
+ "high#0",
+ "low#0"
+ ]
+ },
+ "5607": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "divisor#0 (copy)",
+ "high#0",
+ "low#0"
+ ],
+ "stack_out": [
+ "high#0",
+ "low#0",
+ "divisor#0 (copy)"
+ ]
+ },
+ "5609": {
+ "op": "divw",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "5610": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5611": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._amount_to_index_delta",
+ "params": {
+ "amount#0": "uint64"
+ },
+ "block": "_amount_to_index_delta",
+ "stack_in": [],
+ "op": "proto 1 1"
+ },
+ "5614": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "amount#0 (copy)"
+ ],
+ "stack_out": [
+ "amount#0 (copy)"
+ ]
+ },
+ "5616": {
+ "op": "bnz _amount_to_index_delta_after_if_else@2",
+ "stack_out": []
+ },
+ "5619": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5620": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5621": {
+ "block": "_amount_to_index_delta_after_if_else@2",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5622": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"total_units\""
+ ]
+ },
+ "5624": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5625": {
+ "error": "check self.total_units exists",
+ "op": "assert // check self.total_units exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "5626": {
+ "op": "dup",
+ "defined_out": [
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "5627": {
+ "error": "No D-ASA units",
+ "op": "assert // No D-ASA units",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "5628": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "5629": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "5631": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5632": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "5633": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "amount#0 (copy)",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "amount#0 (copy)"
+ ]
+ },
+ "5635": {
+ "op": "swap",
+ "stack_out": [
+ "maybe_value%0#0",
+ "amount#0 (copy)",
+ "maybe_value%1#0"
+ ]
+ },
+ "5636": {
+ "op": "uncover 2",
+ "stack_out": [
+ "amount#0 (copy)",
+ "maybe_value%1#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "5638": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0"
+ ]
+ },
+ "5641": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5642": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._index_delta_to_amount",
+ "params": {
+ "index_delta#0": "uint64"
+ },
+ "block": "_index_delta_to_amount",
+ "stack_in": [],
+ "op": "proto 1 1"
+ },
+ "5645": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "index_delta#0 (copy)"
+ ],
+ "stack_out": [
+ "index_delta#0 (copy)"
+ ]
+ },
+ "5647": {
+ "op": "bnz _index_delta_to_amount_after_if_else@2",
+ "stack_out": []
+ },
+ "5650": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5651": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5652": {
+ "block": "_index_delta_to_amount_after_if_else@2",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5653": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"total_units\""
+ ]
+ },
+ "5655": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5656": {
+ "error": "check self.total_units exists",
+ "op": "assert // check self.total_units exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "5657": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "5658": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "5660": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5661": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "5662": {
+ "op": "frame_dig -1"
+ },
+ "5664": {
+ "op": "swap",
+ "defined_out": [
+ "index_delta#0 (copy)",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "index_delta#0 (copy)",
+ "maybe_value%1#0"
+ ]
+ },
+ "5665": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "tmp%1#0"
+ ]
+ },
+ "5668": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5669": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "params": {
+ "event_id#0": "uint64"
+ },
+ "block": "_get_schedule_entry",
+ "stack_in": [],
+ "op": "proto 1 1"
+ },
+ "5672": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5673": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "5674": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5675": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "5676": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_id#0 (copy)",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "event_id#0 (copy)"
+ ]
+ },
+ "5678": {
+ "op": ">",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5679": {
+ "error": "Invalid event id",
+ "op": "assert // Invalid event id",
+ "stack_out": []
+ },
+ "5680": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_id#0 (copy)"
+ ]
+ },
+ "5682": {
+ "op": "pushint 16",
+ "defined_out": [
+ "16",
+ "event_id#0 (copy)"
+ ],
+ "stack_out": [
+ "event_id#0 (copy)",
+ "16"
+ ]
+ },
+ "5684": {
+ "op": "/",
+ "defined_out": [
+ "page_index#0"
+ ],
+ "stack_out": [
+ "page_index#0"
+ ]
+ },
+ "5685": {
+ "op": "itob",
+ "defined_out": [
+ "encoded_value%0#0"
+ ],
+ "stack_out": [
+ "encoded_value%0#0"
+ ]
+ },
+ "5686": {
+ "op": "bytec 24 // 0x5323",
+ "defined_out": [
+ "0x5323",
+ "encoded_value%0#0"
+ ],
+ "stack_out": [
+ "encoded_value%0#0",
+ "0x5323"
+ ]
+ },
+ "5688": {
+ "op": "swap",
+ "stack_out": [
+ "0x5323",
+ "encoded_value%0#0"
+ ]
+ },
+ "5689": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "5690": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "5691": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#0",
+ "maybe_exists%1#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "_%0#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5692": {
+ "op": "bury 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5694": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "box_prefixed_key%0#0"
+ ]
+ },
+ "5695": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "event_id#0 (copy)"
+ ]
+ },
+ "5697": {
+ "op": "pushint 16",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "event_id#0 (copy)",
+ "16"
+ ]
+ },
+ "5699": {
+ "op": "%",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "offset#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0"
+ ]
+ },
+ "5700": {
+ "op": "dig 1",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "box_prefixed_key%0#0 (copy)"
+ ]
+ },
+ "5702": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "box_prefixed_key%0#0 (copy)",
+ "0"
+ ]
+ },
+ "5703": {
+ "op": "pushint 2",
+ "defined_out": [
+ "0",
+ "2",
+ "box_prefixed_key%0#0",
+ "box_prefixed_key%0#0 (copy)",
+ "offset#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "box_prefixed_key%0#0 (copy)",
+ "0",
+ "2"
+ ]
+ },
+ "5705": {
+ "op": "box_extract",
+ "defined_out": [
+ "box%box_extract%0#0",
+ "box_prefixed_key%0#0",
+ "offset#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "box%box_extract%0#0"
+ ]
+ },
+ "5706": {
+ "op": "btoi",
+ "defined_out": [
+ "box%array_length%0#0",
+ "box_prefixed_key%0#0",
+ "offset#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "box%array_length%0#0"
+ ]
+ },
+ "5707": {
+ "op": "dig 1",
+ "defined_out": [
+ "box%array_length%0#0",
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "offset#0 (copy)"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "box%array_length%0#0",
+ "offset#0 (copy)"
+ ]
+ },
+ "5709": {
+ "op": ">",
+ "defined_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "tmp%4#0"
+ ]
+ },
+ "5710": {
+ "error": "Invalid schedule page",
+ "op": "assert // Invalid schedule page",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0"
+ ]
+ },
+ "5711": {
+ "op": "pushint 65",
+ "defined_out": [
+ "65",
+ "box_prefixed_key%0#0",
+ "offset#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "offset#0",
+ "65"
+ ]
+ },
+ "5713": {
+ "op": "*",
+ "defined_out": [
+ "box%element_offset%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "box%element_offset%0#0"
+ ]
+ },
+ "5714": {
+ "op": "pushint 2",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "box%element_offset%0#0",
+ "2"
+ ]
+ },
+ "5716": {
+ "op": "+",
+ "defined_out": [
+ "box%offset%0#0",
+ "box_prefixed_key%0#0"
+ ],
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "box%offset%0#0"
+ ]
+ },
+ "5717": {
+ "op": "pushint 65",
+ "stack_out": [
+ "box_prefixed_key%0#0",
+ "box%offset%0#0",
+ "65"
+ ]
+ },
+ "5719": {
+ "op": "box_extract",
+ "defined_out": [
+ "box%box_extract%1#0"
+ ],
+ "stack_out": [
+ "box%box_extract%1#0"
+ ]
+ },
+ "5720": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5721": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._assert_event_allowed_for_contract_type",
+ "params": {
+ "contract_type#0": "uint64",
+ "event_type#0": "uint64"
+ },
+ "block": "_assert_event_allowed_for_contract_type",
+ "stack_in": [],
+ "op": "proto 2 0"
+ },
+ "5724": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5726": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "1"
+ ]
+ },
+ "5727": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5728": {
+ "op": "bnz _assert_event_allowed_for_contract_type_if_body@6",
+ "stack_out": []
+ },
+ "5731": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5733": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "8"
+ ]
+ },
+ "5734": {
+ "op": "==",
+ "defined_out": [
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "tmp%1#0"
+ ]
+ },
+ "5735": {
+ "op": "bnz _assert_event_allowed_for_contract_type_if_body@6",
+ "stack_out": []
+ },
+ "5738": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5740": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "19"
+ ]
+ },
+ "5742": {
+ "op": "==",
+ "defined_out": [
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0"
+ ]
+ },
+ "5743": {
+ "op": "bnz _assert_event_allowed_for_contract_type_if_body@6",
+ "stack_out": []
+ },
+ "5746": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5748": {
+ "op": "pushint 12",
+ "defined_out": [
+ "12",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "12"
+ ]
+ },
+ "5750": {
+ "op": "==",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%3#0"
+ ]
+ },
+ "5751": {
+ "op": "bnz _assert_event_allowed_for_contract_type_if_body@6",
+ "stack_out": []
+ },
+ "5754": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5756": {
+ "op": "pushint 11",
+ "defined_out": [
+ "11",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "11"
+ ]
+ },
+ "5758": {
+ "op": "==",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "5759": {
+ "op": "bz _assert_event_allowed_for_contract_type_after_if_else@7",
+ "stack_out": []
+ },
+ "5762": {
+ "block": "_assert_event_allowed_for_contract_type_if_body@6",
+ "stack_in": [],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5763": {
+ "error": "Invalid ACTUS configuration",
+ "block": "_assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "stack_in": [
+ "tmp%0#0"
+ ],
+ "op": "assert // Invalid ACTUS configuration",
+ "defined_out": [],
+ "stack_out": []
+ },
+ "5764": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5765": {
+ "block": "_assert_event_allowed_for_contract_type_after_if_else@7",
+ "stack_in": [],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)"
+ ]
+ },
+ "5767": {
+ "op": "bnz _assert_event_allowed_for_contract_type_after_if_else@9",
+ "stack_out": []
+ },
+ "5770": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5771": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34"
+ },
+ "5774": {
+ "block": "_assert_event_allowed_for_contract_type_after_if_else@9",
+ "stack_in": [],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)"
+ ]
+ },
+ "5776": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)",
+ "3"
+ ]
+ },
+ "5778": {
+ "op": "==",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "5779": {
+ "op": "bnz _assert_event_allowed_for_contract_type_if_body@11",
+ "stack_out": []
+ },
+ "5782": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "contract_type#0 (copy)"
+ ]
+ },
+ "5784": {
+ "op": "pushint 2",
+ "defined_out": [
+ "2",
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)",
+ "2"
+ ]
+ },
+ "5786": {
+ "op": "==",
+ "defined_out": [
+ "tmp%7#0"
+ ],
+ "stack_out": [
+ "tmp%7#0"
+ ]
+ },
+ "5787": {
+ "op": "bz _assert_event_allowed_for_contract_type_after_if_else@16",
+ "stack_out": []
+ },
+ "5790": {
+ "block": "_assert_event_allowed_for_contract_type_if_body@11",
+ "stack_in": [],
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5792": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "3"
+ ]
+ },
+ "5794": {
+ "op": "==",
+ "defined_out": [
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "tmp%8#0"
+ ]
+ },
+ "5795": {
+ "op": "bnz _assert_event_allowed_for_contract_type_bool_true@13",
+ "stack_out": []
+ },
+ "5798": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5800": {
+ "op": "pushint 18",
+ "defined_out": [
+ "18",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "18"
+ ]
+ },
+ "5802": {
+ "op": "==",
+ "defined_out": [
+ "tmp%9#0"
+ ],
+ "stack_out": [
+ "tmp%9#0"
+ ]
+ },
+ "5803": {
+ "op": "bz _assert_event_allowed_for_contract_type_bool_false@14",
+ "stack_out": []
+ },
+ "5806": {
+ "block": "_assert_event_allowed_for_contract_type_bool_true@13",
+ "stack_in": [],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "or_result%0#0"
+ ]
+ },
+ "5807": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5810": {
+ "block": "_assert_event_allowed_for_contract_type_bool_false@14",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "or_result%0#0"
+ ]
+ },
+ "5811": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5814": {
+ "block": "_assert_event_allowed_for_contract_type_after_if_else@16",
+ "stack_in": [],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)"
+ ]
+ },
+ "5816": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)",
+ "1"
+ ]
+ },
+ "5817": {
+ "op": "==",
+ "defined_out": [
+ "tmp%10#0"
+ ],
+ "stack_out": [
+ "tmp%10#0"
+ ]
+ },
+ "5818": {
+ "op": "bz _assert_event_allowed_for_contract_type_after_if_else@23",
+ "stack_out": []
+ },
+ "5821": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5823": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "3"
+ ]
+ },
+ "5825": {
+ "op": "==",
+ "defined_out": [
+ "tmp%11#0"
+ ],
+ "stack_out": [
+ "tmp%11#0"
+ ]
+ },
+ "5826": {
+ "op": "bnz _assert_event_allowed_for_contract_type_bool_true@20",
+ "stack_out": []
+ },
+ "5829": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5831": {
+ "op": "pushint 18",
+ "defined_out": [
+ "18",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "18"
+ ]
+ },
+ "5833": {
+ "op": "==",
+ "defined_out": [
+ "tmp%12#0"
+ ],
+ "stack_out": [
+ "tmp%12#0"
+ ]
+ },
+ "5834": {
+ "op": "bnz _assert_event_allowed_for_contract_type_bool_true@20",
+ "stack_out": []
+ },
+ "5837": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5839": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "5"
+ ]
+ },
+ "5841": {
+ "op": "==",
+ "defined_out": [
+ "tmp%13#0"
+ ],
+ "stack_out": [
+ "tmp%13#0"
+ ]
+ },
+ "5842": {
+ "op": "bz _assert_event_allowed_for_contract_type_bool_false@21",
+ "stack_out": []
+ },
+ "5845": {
+ "block": "_assert_event_allowed_for_contract_type_bool_true@20",
+ "stack_in": [],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%1#0"
+ ],
+ "stack_out": [
+ "or_result%1#0"
+ ]
+ },
+ "5846": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5849": {
+ "block": "_assert_event_allowed_for_contract_type_bool_false@21",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%1#0"
+ ],
+ "stack_out": [
+ "or_result%1#0"
+ ]
+ },
+ "5850": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5853": {
+ "block": "_assert_event_allowed_for_contract_type_after_if_else@23",
+ "stack_in": [],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)"
+ ]
+ },
+ "5855": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)",
+ "4"
+ ]
+ },
+ "5857": {
+ "op": "==",
+ "defined_out": [
+ "tmp%14#0"
+ ],
+ "stack_out": [
+ "tmp%14#0"
+ ]
+ },
+ "5858": {
+ "op": "bz _assert_event_allowed_for_contract_type_after_if_else@31",
+ "stack_out": []
+ },
+ "5861": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5863": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "3"
+ ]
+ },
+ "5865": {
+ "op": "==",
+ "defined_out": [
+ "tmp%15#0"
+ ],
+ "stack_out": [
+ "tmp%15#0"
+ ]
+ },
+ "5866": {
+ "op": "bnz _assert_event_allowed_for_contract_type_bool_true@28",
+ "stack_out": []
+ },
+ "5869": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5871": {
+ "op": "pushint 4",
+ "stack_out": [
+ "event_type#0 (copy)",
+ "4"
+ ]
+ },
+ "5873": {
+ "op": "==",
+ "defined_out": [
+ "tmp%16#0"
+ ],
+ "stack_out": [
+ "tmp%16#0"
+ ]
+ },
+ "5874": {
+ "op": "bnz _assert_event_allowed_for_contract_type_bool_true@28",
+ "stack_out": []
+ },
+ "5877": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5879": {
+ "op": "pushint 18",
+ "defined_out": [
+ "18",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "18"
+ ]
+ },
+ "5881": {
+ "op": "==",
+ "defined_out": [
+ "tmp%17#0"
+ ],
+ "stack_out": [
+ "tmp%17#0"
+ ]
+ },
+ "5882": {
+ "op": "bnz _assert_event_allowed_for_contract_type_bool_true@28",
+ "stack_out": []
+ },
+ "5885": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5887": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "5"
+ ]
+ },
+ "5889": {
+ "op": "==",
+ "defined_out": [
+ "tmp%18#0"
+ ],
+ "stack_out": [
+ "tmp%18#0"
+ ]
+ },
+ "5890": {
+ "op": "bz _assert_event_allowed_for_contract_type_bool_false@29",
+ "stack_out": []
+ },
+ "5893": {
+ "block": "_assert_event_allowed_for_contract_type_bool_true@28",
+ "stack_in": [],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%2#0"
+ ],
+ "stack_out": [
+ "or_result%2#0"
+ ]
+ },
+ "5894": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5897": {
+ "block": "_assert_event_allowed_for_contract_type_bool_false@29",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%2#0"
+ ],
+ "stack_out": [
+ "or_result%2#0"
+ ]
+ },
+ "5898": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5901": {
+ "block": "_assert_event_allowed_for_contract_type_after_if_else@31",
+ "stack_in": [],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)"
+ ]
+ },
+ "5903": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "contract_type#0 (copy)"
+ ],
+ "stack_out": [
+ "contract_type#0 (copy)",
+ "5"
+ ]
+ },
+ "5905": {
+ "op": "==",
+ "defined_out": [
+ "tmp%19#0"
+ ],
+ "stack_out": [
+ "tmp%19#0"
+ ]
+ },
+ "5906": {
+ "op": "bz _assert_event_allowed_for_contract_type_after_if_else@33",
+ "stack_out": []
+ },
+ "5909": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)"
+ ]
+ },
+ "5911": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "event_type#0 (copy)"
+ ],
+ "stack_out": [
+ "event_type#0 (copy)",
+ "3"
+ ]
+ },
+ "5913": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5914": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34"
+ },
+ "5917": {
+ "block": "_assert_event_allowed_for_contract_type_after_if_else@33",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5918": {
+ "op": "b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34"
+ },
+ "5921": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._is_dynamic_annuity",
+ "params": {},
+ "block": "_is_dynamic_annuity",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5922": {
+ "op": "bytec 10 // \"contract_type\"",
+ "defined_out": [
+ "\"contract_type\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"contract_type\""
+ ]
+ },
+ "5924": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5925": {
+ "error": "check self.contract_type exists",
+ "op": "assert // check self.contract_type exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "5926": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "1"
+ ]
+ },
+ "5927": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "5928": {
+ "op": "bz _is_dynamic_annuity_bool_false@3",
+ "stack_out": []
+ },
+ "5931": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "0"
+ ]
+ },
+ "5932": {
+ "op": "bytec 35 // \"dynamic_principal_redemption\"",
+ "defined_out": [
+ "\"dynamic_principal_redemption\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"dynamic_principal_redemption\""
+ ]
+ },
+ "5934": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5935": {
+ "error": "check self.dynamic_principal_redemption exists",
+ "op": "assert // check self.dynamic_principal_redemption exists",
+ "stack_out": [
+ "maybe_value%1#0"
+ ]
+ },
+ "5936": {
+ "op": "bz _is_dynamic_annuity_bool_false@3",
+ "stack_out": []
+ },
+ "5939": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "and_result%0#0"
+ ],
+ "stack_out": [
+ "and_result%0#0"
+ ]
+ },
+ "5940": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5941": {
+ "block": "_is_dynamic_annuity_bool_false@3",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "and_result%0#0"
+ ],
+ "stack_out": [
+ "and_result%0#0"
+ ]
+ },
+ "5942": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5943": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._entry_interest_segment",
+ "params": {
+ "entry#0": "bytes"
+ },
+ "block": "_entry_interest_segment",
+ "stack_in": [],
+ "op": "proto 1 2"
+ },
+ "5946": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0 (copy)"
+ ]
+ },
+ "5948": {
+ "op": "pushint 17",
+ "defined_out": [
+ "17",
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "entry#0 (copy)",
+ "17"
+ ]
+ },
+ "5950": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0"
+ ]
+ },
+ "5951": {
+ "op": "dup",
+ "defined_out": [
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "values%0#0"
+ ]
+ },
+ "5952": {
+ "op": "bz _entry_interest_segment_if_body@3",
+ "stack_out": [
+ "values%0#0"
+ ]
+ },
+ "5955": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "values%0#0",
+ "0"
+ ]
+ },
+ "5956": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "5958": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "5959": {
+ "error": "check self.nominal_interest_rate exists",
+ "op": "assert // check self.nominal_interest_rate exists",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "5960": {
+ "op": "bz _entry_interest_segment_if_body@3",
+ "stack_out": [
+ "values%0#0"
+ ]
+ },
+ "5963": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "values%0#0",
+ "0"
+ ]
+ },
+ "5964": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "5966": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "5967": {
+ "error": "check self.interest_calculation_base exists",
+ "op": "assert // check self.interest_calculation_base exists",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "5968": {
+ "op": "bnz _entry_interest_segment_after_if_else@4",
+ "stack_out": [
+ "values%0#0"
+ ]
+ },
+ "5971": {
+ "block": "_entry_interest_segment_if_body@3",
+ "stack_in": [
+ "values%0#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "0"
+ ]
+ },
+ "5972": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "0",
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "0",
+ "entry#0 (copy)"
+ ]
+ },
+ "5974": {
+ "op": "uncover 2"
+ },
+ "5976": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "5977": {
+ "block": "_entry_interest_segment_after_if_else@4",
+ "stack_in": [
+ "values%0#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "0"
+ ]
+ },
+ "5978": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "5980": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%2#0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "5981": {
+ "error": "check self.interest_calculation_base exists",
+ "op": "assert // check self.interest_calculation_base exists",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "5982": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "0"
+ ]
+ },
+ "5983": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "5985": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%3#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "5986": {
+ "error": "check self.nominal_interest_rate exists",
+ "op": "assert // check self.nominal_interest_rate exists",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "5987": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "0"
+ ]
+ },
+ "5988": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0",
+ "maybe_value%2#0",
+ "maybe_value%3#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "5990": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%4#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "5991": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "values%0#0",
+ "maybe_value%2#0",
+ "maybe_value%3#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "5992": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "accrued#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "accrued#0"
+ ]
+ },
+ "5995": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "values%0#0",
+ "accrued#0",
+ "0"
+ ]
+ },
+ "5996": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "stack_out": [
+ "values%0#0",
+ "accrued#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "5998": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "accrued#0",
+ "maybe_exists%5#0",
+ "maybe_value%5#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "accrued#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "5999": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "values%0#0",
+ "accrued#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "6000": {
+ "op": "frame_dig 0"
+ },
+ "6002": {
+ "op": "swap",
+ "defined_out": [
+ "accrued#0",
+ "maybe_value%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "accrued#0",
+ "values%0#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "6003": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "tmp%4#0"
+ ]
+ },
+ "6006": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "entry#0 (copy)",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "values%0#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6008": {
+ "op": "uncover 2"
+ },
+ "6010": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6011": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._discount_annuity_factor",
+ "params": {
+ "discount_factor#0": "uint64",
+ "redemption_factor#0": "uint64"
+ },
+ "block": "_discount_annuity_factor",
+ "stack_in": [],
+ "op": "proto 2 1"
+ },
+ "6014": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "redemption_factor#0 (copy)"
+ ],
+ "stack_out": [
+ "redemption_factor#0 (copy)"
+ ]
+ },
+ "6016": {
+ "op": "bnz _discount_annuity_factor_after_if_else@2",
+ "stack_out": []
+ },
+ "6019": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "discount_factor#0 (copy)"
+ ],
+ "stack_out": [
+ "discount_factor#0 (copy)"
+ ]
+ },
+ "6021": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6022": {
+ "block": "_discount_annuity_factor_after_if_else@2",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "6023": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "6025": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6026": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "6027": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "6028": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "6030": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "6031": {
+ "error": "check self.nominal_interest_rate exists",
+ "op": "assert // check self.nominal_interest_rate exists",
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "6032": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "redemption_factor#0 (copy)"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "redemption_factor#0 (copy)"
+ ]
+ },
+ "6034": {
+ "op": "dig 2",
+ "defined_out": [
+ "maybe_value%0#0",
+ "maybe_value%0#0 (copy)",
+ "maybe_value%1#0",
+ "redemption_factor#0 (copy)"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_value%1#0",
+ "redemption_factor#0 (copy)",
+ "maybe_value%0#0 (copy)"
+ ]
+ },
+ "6036": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "maybe_value%0#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "tmp%1#0"
+ ]
+ },
+ "6039": {
+ "op": "+",
+ "defined_out": [
+ "period_rate#0"
+ ],
+ "stack_out": [
+ "period_rate#0"
+ ]
+ },
+ "6040": {
+ "op": "dup",
+ "defined_out": [
+ "period_rate#0",
+ "period_rate#0 (copy)"
+ ],
+ "stack_out": [
+ "period_rate#0",
+ "period_rate#0 (copy)"
+ ]
+ },
+ "6041": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "period_rate#0"
+ ]
+ },
+ "6042": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "period_rate#0",
+ "0"
+ ]
+ },
+ "6043": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "stack_out": [
+ "period_rate#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "6045": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%3#0",
+ "maybe_value%3#0",
+ "period_rate#0"
+ ],
+ "stack_out": [
+ "period_rate#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "6046": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "period_rate#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "6047": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "discount_factor#0 (copy)",
+ "maybe_value%3#0",
+ "period_rate#0"
+ ],
+ "stack_out": [
+ "period_rate#0",
+ "maybe_value%3#0",
+ "discount_factor#0 (copy)"
+ ]
+ },
+ "6049": {
+ "op": "swap",
+ "stack_out": [
+ "period_rate#0",
+ "discount_factor#0 (copy)",
+ "maybe_value%3#0"
+ ]
+ },
+ "6050": {
+ "op": "uncover 2",
+ "stack_out": [
+ "discount_factor#0 (copy)",
+ "maybe_value%3#0",
+ "period_rate#0"
+ ]
+ },
+ "6052": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "6055": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6056": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._apply_non_cash_schedule_entry",
+ "params": {
+ "entry#0": "bytes",
+ "payload#0": "bytes"
+ },
+ "block": "_apply_non_cash_schedule_entry",
+ "stack_in": [],
+ "op": "proto 2 2"
+ },
+ "6059": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0"
+ ]
+ },
+ "6060": {
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0"
+ ]
+ },
+ "6062": {
+ "op": "dupn 8",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0"
+ ]
+ },
+ "6064": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6066": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "entry#0 (copy)",
+ "0"
+ ]
+ },
+ "6067": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%0#0"
+ ]
+ },
+ "6068": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%0#0",
+ "0"
+ ]
+ },
+ "6069": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%0#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "6070": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6071": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6072": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "tmp%0#0"
+ ]
+ },
+ "6073": {
+ "error": "Invalid event cursor",
+ "op": "assert // Invalid event cursor",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0"
+ ]
+ },
+ "6074": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6076": {
+ "op": "pushint 9",
+ "defined_out": [
+ "9",
+ "entry#0 (copy)",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "entry#0 (copy)",
+ "9"
+ ]
+ },
+ "6078": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%1#0"
+ ]
+ },
+ "6079": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%1#0",
+ "values%0#0",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "values%1#0",
+ "tmp%1#0"
+ ]
+ },
+ "6081": {
+ "op": "<=",
+ "defined_out": [
+ "tmp%2#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "tmp%2#0"
+ ]
+ },
+ "6082": {
+ "error": "No due cashflow to pay",
+ "op": "assert // No due cashflow to pay",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0"
+ ]
+ },
+ "6083": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6085": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "entry#0 (copy)",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "entry#0 (copy)",
+ "8"
+ ]
+ },
+ "6086": {
+ "op": "getbyte",
+ "defined_out": [
+ "event_type#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0"
+ ]
+ },
+ "6087": {
+ "op": "dup",
+ "defined_out": [
+ "event_type#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "6088": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "event_type#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "event_type#0",
+ "1"
+ ]
+ },
+ "6089": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6090": {
+ "op": "dup",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%4#0"
+ ]
+ },
+ "6091": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@6",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6094": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6095": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "6096": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6097": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6098": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "event_type#0",
+ "maybe_value%0#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "6100": {
+ "op": "==",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%0#0"
+ ]
+ },
+ "6101": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6102": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6103": {
+ "op": "bytec 11 // \"reserved_units_total\"",
+ "defined_out": [
+ "\"reserved_units_total\"",
+ "0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"reserved_units_total\""
+ ]
+ },
+ "6105": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "6106": {
+ "error": "check self.reserved_units_total exists",
+ "op": "assert // check self.reserved_units_total exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "6107": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "0"
+ ]
+ },
+ "6108": {
+ "op": "bytec 13 // \"total_units\"",
+ "defined_out": [
+ "\"total_units\"",
+ "0",
+ "event_type#0",
+ "maybe_value%1#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "0",
+ "\"total_units\""
+ ]
+ },
+ "6110": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%2#0",
+ "maybe_value%1#0",
+ "maybe_value%2#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "6111": {
+ "error": "check self.total_units exists",
+ "op": "assert // check self.total_units exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "6112": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%6#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%6#0"
+ ]
+ },
+ "6113": {
+ "error": "Primary distribution is not complete",
+ "op": "assert // Primary distribution is not complete",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6114": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6116": {
+ "op": "pushint 49",
+ "defined_out": [
+ "49",
+ "entry#0 (copy)",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "49"
+ ]
+ },
+ "6118": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%2#0"
+ ]
+ },
+ "6119": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%2#0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "6121": {
+ "op": "dig 1",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%2#0",
+ "values%2#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%2#0",
+ "\"outstanding_principal\"",
+ "values%2#0 (copy)"
+ ]
+ },
+ "6123": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%2#0"
+ ]
+ },
+ "6124": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%2#0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "6126": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"interest_calculation_base\"",
+ "values%2#0"
+ ]
+ },
+ "6127": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6128": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6130": {
+ "op": "pushint 33",
+ "defined_out": [
+ "33",
+ "entry#0 (copy)",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "33"
+ ]
+ },
+ "6132": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%4#0"
+ ]
+ },
+ "6133": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%4#0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "6135": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\"",
+ "values%4#0"
+ ]
+ },
+ "6136": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6137": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"accrued_interest\""
+ ]
+ },
+ "6139": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"accrued_interest\"",
+ "0"
+ ]
+ },
+ "6140": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6141": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6143": {
+ "op": "pushint 41",
+ "defined_out": [
+ "41",
+ "entry#0 (copy)",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "41"
+ ]
+ },
+ "6145": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%5#0"
+ ]
+ },
+ "6146": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%5#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%5#0",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "6148": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"next_principal_redemption\"",
+ "values%5#0"
+ ]
+ },
+ "6149": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6150": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6151": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "6152": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%3#0",
+ "maybe_value%3#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "6153": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "6154": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%3#0",
+ "1"
+ ]
+ },
+ "6155": {
+ "op": "+",
+ "defined_out": [
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%7#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%7#0"
+ ]
+ },
+ "6156": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%7#0",
+ "\"event_cursor\""
+ ]
+ },
+ "6157": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"event_cursor\"",
+ "tmp%7#0"
+ ]
+ },
+ "6158": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6159": {
+ "op": "bytec_1 // \"status\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"status\""
+ ]
+ },
+ "6160": {
+ "op": "pushint 100",
+ "defined_out": [
+ "\"status\"",
+ "100",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"status\"",
+ "100"
+ ]
+ },
+ "6162": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6163": {
+ "op": "frame_dig 11",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%4#0"
+ ]
+ },
+ "6165": {
+ "error": "Not IED event",
+ "op": "assert // Not IED event",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6166": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6167": {
+ "op": "bytec 20 // \"initial_exchange_amount\"",
+ "defined_out": [
+ "\"initial_exchange_amount\"",
+ "0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"initial_exchange_amount\""
+ ]
+ },
+ "6169": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6170": {
+ "error": "check self.initial_exchange_amount exists",
+ "op": "assert // check self.initial_exchange_amount exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6171": {
+ "op": "frame_dig -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6173": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "maybe_value%0#0"
+ ]
+ },
+ "6174": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "maybe_value%0#0",
+ "0"
+ ]
+ },
+ "6175": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._emit_execution_event",
+ "op": "callsub _emit_execution_event",
+ "defined_out": [
+ "entry#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0"
+ ]
+ },
+ "6178": {
+ "op": "dup"
+ },
+ "6179": {
+ "op": "frame_bury -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6181": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "entry#0 (copy)",
+ "event_type#0",
+ "payload#0 (copy)",
+ "tmp%4#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "payload#0 (copy)"
+ ]
+ },
+ "6183": {
+ "op": "frame_bury 1"
+ },
+ "6185": {
+ "op": "frame_bury 0"
+ },
+ "6187": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6188": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@6",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6189": {
+ "op": "bytec_1 // \"status\"",
+ "defined_out": [
+ "\"status\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"status\""
+ ]
+ },
+ "6190": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6191": {
+ "error": "check self.status exists",
+ "op": "assert // check self.status exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6192": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "50"
+ ]
+ },
+ "6194": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%0#0"
+ ]
+ },
+ "6195": {
+ "op": "!",
+ "defined_out": [
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%1#1"
+ ]
+ },
+ "6196": {
+ "error": "IED not yet executed",
+ "op": "assert // IED not yet executed",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6197": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6198": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"accrued_interest\""
+ ]
+ },
+ "6200": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%4#0",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "6201": {
+ "error": "check self.accrued_interest exists",
+ "op": "assert // check self.accrued_interest exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "6202": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6204": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._entry_interest_segment",
+ "op": "callsub _entry_interest_segment",
+ "defined_out": [
+ "_entry_interest_segment%0#0",
+ "entry#0",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0",
+ "_entry_interest_segment%0#0",
+ "entry#0"
+ ]
+ },
+ "6207": {
+ "op": "frame_bury -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0",
+ "_entry_interest_segment%0#0"
+ ]
+ },
+ "6209": {
+ "op": "+",
+ "defined_out": [
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%8#0"
+ ]
+ },
+ "6210": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%8#0",
+ "\"accrued_interest\""
+ ]
+ },
+ "6212": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"accrued_interest\"",
+ "tmp%8#0"
+ ]
+ },
+ "6213": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6214": {
+ "op": "frame_dig 10",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0"
+ ]
+ },
+ "6216": {
+ "op": "pushint 12",
+ "defined_out": [
+ "12",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0",
+ "12"
+ ]
+ },
+ "6218": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%9#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%9#0"
+ ]
+ },
+ "6219": {
+ "op": "bz _apply_non_cash_schedule_entry_else_body@10",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6222": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "event_type#0",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "payload#0 (copy)"
+ ]
+ },
+ "6224": {
+ "op": "pushint 33",
+ "defined_out": [
+ "33",
+ "event_type#0",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "payload#0 (copy)",
+ "33"
+ ]
+ },
+ "6226": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_type#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0"
+ ]
+ },
+ "6227": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "0"
+ ]
+ },
+ "6228": {
+ "op": "bytec 37 // \"rate_reset_multiplier\"",
+ "defined_out": [
+ "\"rate_reset_multiplier\"",
+ "0",
+ "event_type#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "0",
+ "\"rate_reset_multiplier\""
+ ]
+ },
+ "6230": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%5#0",
+ "maybe_value%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "6231": {
+ "error": "check self.rate_reset_multiplier exists",
+ "op": "assert // check self.rate_reset_multiplier exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "6232": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "maybe_value%5#0",
+ "0"
+ ]
+ },
+ "6233": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0",
+ "event_type#0",
+ "maybe_value%5#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "maybe_value%5#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "6235": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%6#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "values%6#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0",
+ "maybe_exists%6#0"
+ ]
+ },
+ "6236": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%6#0",
+ "maybe_value%5#0",
+ "maybe_value%6#0"
+ ]
+ },
+ "6237": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "event_type#0",
+ "observed_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "observed_rate#0"
+ ]
+ },
+ "6240": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "observed_rate#0",
+ "0"
+ ]
+ },
+ "6241": {
+ "op": "bytec 36 // \"rate_reset_spread\"",
+ "defined_out": [
+ "\"rate_reset_spread\"",
+ "0",
+ "event_type#0",
+ "observed_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "observed_rate#0",
+ "0",
+ "\"rate_reset_spread\""
+ ]
+ },
+ "6243": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%7#0",
+ "maybe_value%7#0",
+ "observed_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "observed_rate#0",
+ "maybe_value%7#0",
+ "maybe_exists%7#0"
+ ]
+ },
+ "6244": {
+ "error": "check self.rate_reset_spread exists",
+ "op": "assert // check self.rate_reset_spread exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "observed_rate#0",
+ "maybe_value%7#0"
+ ]
+ },
+ "6245": {
+ "op": "+",
+ "defined_out": [
+ "event_type#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "rate#0"
+ ]
+ },
+ "6246": {
+ "op": "frame_bury 6",
+ "defined_out": [
+ "event_type#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6248": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6249": {
+ "op": "bytec 39 // \"has_rate_reset_floor\"",
+ "defined_out": [
+ "\"has_rate_reset_floor\"",
+ "0",
+ "event_type#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"has_rate_reset_floor\""
+ ]
+ },
+ "6251": {
+ "op": "app_global_get_ex",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6252": {
+ "error": "check self.has_rate_reset_floor exists",
+ "op": "assert // check self.has_rate_reset_floor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6253": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@55",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6256": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6257": {
+ "op": "bytec 31 // \"rate_reset_floor\"",
+ "defined_out": [
+ "\"rate_reset_floor\"",
+ "0",
+ "event_type#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"rate_reset_floor\""
+ ]
+ },
+ "6259": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%1#0",
+ "maybe_value%1#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "6260": {
+ "error": "check self.rate_reset_floor exists",
+ "op": "assert // check self.rate_reset_floor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "6261": {
+ "op": "frame_dig 6",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "rate#0"
+ ]
+ },
+ "6263": {
+ "op": ">",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%0#0"
+ ]
+ },
+ "6264": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@55",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6267": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6268": {
+ "op": "bytec 31 // \"rate_reset_floor\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"rate_reset_floor\""
+ ]
+ },
+ "6270": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%2#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "rate#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "6271": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%2#0",
+ "rate#0"
+ ]
+ },
+ "6272": {
+ "op": "frame_bury 6",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "6274": {
+ "error": "check self.rate_reset_floor exists",
+ "op": "assert // check self.rate_reset_floor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6275": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@55",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6276": {
+ "op": "bytec 40 // \"has_rate_reset_cap\"",
+ "defined_out": [
+ "\"has_rate_reset_cap\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"has_rate_reset_cap\""
+ ]
+ },
+ "6278": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%3#0",
+ "maybe_value%3#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%3#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "6279": {
+ "error": "check self.has_rate_reset_cap exists",
+ "op": "assert // check self.has_rate_reset_cap exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%3#0"
+ ]
+ },
+ "6280": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@58",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6283": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6284": {
+ "op": "bytec 32 // \"rate_reset_cap\"",
+ "defined_out": [
+ "\"rate_reset_cap\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"rate_reset_cap\""
+ ]
+ },
+ "6286": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%4#0",
+ "maybe_value%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "6287": {
+ "error": "check self.rate_reset_cap exists",
+ "op": "assert // check self.rate_reset_cap exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "6288": {
+ "op": "frame_dig 6",
+ "defined_out": [
+ "maybe_value%4#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%4#0",
+ "rate#0"
+ ]
+ },
+ "6290": {
+ "op": "<",
+ "defined_out": [
+ "rate#0",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%1#1"
+ ]
+ },
+ "6291": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@58",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6294": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6295": {
+ "op": "bytec 32 // \"rate_reset_cap\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"rate_reset_cap\""
+ ]
+ },
+ "6297": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%5#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "rate#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "6298": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%5#0",
+ "rate#0"
+ ]
+ },
+ "6299": {
+ "op": "frame_bury 6",
+ "defined_out": [
+ "maybe_exists%5#0",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "6301": {
+ "error": "check self.rate_reset_cap exists",
+ "op": "assert // check self.rate_reset_cap exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6302": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@58",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\""
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "6304": {
+ "op": "frame_dig 6",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\"",
+ "rate#0"
+ ]
+ },
+ "6306": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6307": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@18",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig 10",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0"
+ ]
+ },
+ "6309": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0",
+ "4"
+ ]
+ },
+ "6311": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%16#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%16#0"
+ ]
+ },
+ "6312": {
+ "op": "bz _apply_non_cash_schedule_entry_else_body@20",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6315": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6317": {
+ "op": "pushint 49",
+ "defined_out": [
+ "49",
+ "entry#0 (copy)",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "49"
+ ]
+ },
+ "6319": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_type#0",
+ "values%10#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%10#0"
+ ]
+ },
+ "6320": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "event_type#0",
+ "values%10#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%10#0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "6322": {
+ "op": "dig 1",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "event_type#0",
+ "values%10#0",
+ "values%10#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%10#0",
+ "\"outstanding_principal\"",
+ "values%10#0 (copy)"
+ ]
+ },
+ "6324": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%10#0"
+ ]
+ },
+ "6325": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "event_type#0",
+ "values%10#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%10#0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "6327": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"interest_calculation_base\"",
+ "values%10#0"
+ ]
+ },
+ "6328": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6329": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@23",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "callsub": "modules.actus_kernel.ActusKernelModule._is_dynamic_annuity",
+ "op": "callsub _is_dynamic_annuity",
+ "defined_out": [
+ "tmp%18#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%18#0"
+ ]
+ },
+ "6332": {
+ "op": "bz _apply_non_cash_schedule_entry_else_body@29",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6335": {
+ "op": "frame_dig 10",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0"
+ ]
+ },
+ "6337": {
+ "op": "pushint 5",
+ "defined_out": [
+ "5",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0",
+ "5"
+ ]
+ },
+ "6339": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%19#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%19#0"
+ ]
+ },
+ "6340": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@30",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6343": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6344": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "6345": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%10#0",
+ "maybe_value%10#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%10#0",
+ "maybe_exists%10#0"
+ ]
+ },
+ "6346": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%10#0"
+ ]
+ },
+ "6347": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%10#0",
+ "0"
+ ]
+ },
+ "6348": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0",
+ "event_type#0",
+ "maybe_value%10#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%10#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "6349": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%11#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0",
+ "maybe_exists%11#0"
+ ]
+ },
+ "6350": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%10#0",
+ "maybe_value%11#0"
+ ]
+ },
+ "6351": {
+ "op": "-",
+ "defined_out": [
+ "event_type#0",
+ "tmp%20#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%20#0"
+ ]
+ },
+ "6352": {
+ "op": "pushint 100",
+ "defined_out": [
+ "100",
+ "event_type#0",
+ "tmp%20#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%20#0",
+ "100"
+ ]
+ },
+ "6354": {
+ "op": "*",
+ "defined_out": [
+ "event_type#0",
+ "tmp%21#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%21#0"
+ ]
+ },
+ "6355": {
+ "op": "intc 4 // 1500",
+ "defined_out": [
+ "1500",
+ "event_type#0",
+ "tmp%21#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%21#0",
+ "1500"
+ ]
+ },
+ "6357": {
+ "op": "+",
+ "defined_out": [
+ "event_type#0",
+ "tmp%22#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%22#0"
+ ]
+ },
+ "6358": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%22#0",
+ "0"
+ ]
+ },
+ "6359": {
+ "callsub": "_puya_lib.util.ensure_budget",
+ "op": "callsub ensure_budget",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6362": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6363": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "6365": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "discount_factor#0",
+ "event_type#0",
+ "maybe_exists%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6366": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%0#0",
+ "discount_factor#0"
+ ]
+ },
+ "6367": {
+ "op": "frame_bury 2",
+ "defined_out": [
+ "discount_factor#0",
+ "event_type#0",
+ "maybe_exists%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6369": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6370": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "denominator#0"
+ ]
+ },
+ "6371": {
+ "op": "frame_bury 1",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6373": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "event_type#0",
+ "skip_first_redemption#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "skip_first_redemption#0"
+ ]
+ },
+ "6374": {
+ "op": "frame_bury 7",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "event_type#0",
+ "skip_first_redemption#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6376": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "entry#0 (copy)",
+ "event_type#0",
+ "skip_first_redemption#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6378": {
+ "op": "pushint 25",
+ "defined_out": [
+ "25",
+ "denominator#0",
+ "discount_factor#0",
+ "entry#0 (copy)",
+ "event_type#0",
+ "skip_first_redemption#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "25"
+ ]
+ },
+ "6380": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "event_type#0",
+ "skip_first_redemption#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ]
+ },
+ "6381": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0",
+ "values%0#0"
+ ]
+ },
+ "6382": {
+ "op": "frame_bury 8",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "event_type#0",
+ "skip_first_redemption#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%0#0"
+ ]
+ },
+ "6384": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@35",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6387": {
+ "op": "frame_dig 2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0"
+ ]
+ },
+ "6389": {
+ "op": "frame_dig 8",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "values%0#0"
+ ]
+ },
+ "6391": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._discount_annuity_factor",
+ "op": "callsub _discount_annuity_factor",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0"
+ ]
+ },
+ "6394": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "discount_factor#0"
+ ]
+ },
+ "6395": {
+ "op": "frame_bury 2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0"
+ ]
+ },
+ "6397": {
+ "op": "intc_1 // 1",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "skip_first_redemption#0"
+ ]
+ },
+ "6398": {
+ "op": "frame_bury 7",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "denominator#0"
+ ]
+ },
+ "6400": {
+ "op": "frame_bury 1",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6402": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@35",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6403": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "6404": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%1#0",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "maybe_exists%1#0"
+ ]
+ },
+ "6405": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0"
+ ]
+ },
+ "6406": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "maybe_value%1#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%1#0",
+ "1"
+ ]
+ },
+ "6407": {
+ "op": "+",
+ "defined_out": [
+ "future_event_id#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_id#0"
+ ]
+ },
+ "6408": {
+ "op": "frame_bury 3",
+ "defined_out": [
+ "future_event_id#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6410": {
+ "block": "_apply_non_cash_schedule_entry_while_top@36",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6411": {
+ "op": "bytec_3 // \"schedule_entry_count\"",
+ "defined_out": [
+ "\"schedule_entry_count\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"schedule_entry_count\""
+ ]
+ },
+ "6412": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%2#0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%2#0",
+ "maybe_exists%2#0"
+ ]
+ },
+ "6413": {
+ "error": "check self.schedule_entry_count exists",
+ "op": "assert // check self.schedule_entry_count exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%2#0"
+ ]
+ },
+ "6414": {
+ "op": "frame_dig 3",
+ "defined_out": [
+ "future_event_id#0",
+ "maybe_value%2#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%2#0",
+ "future_event_id#0"
+ ]
+ },
+ "6416": {
+ "op": ">",
+ "defined_out": [
+ "future_event_id#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%4#0"
+ ]
+ },
+ "6417": {
+ "op": "bz _apply_non_cash_schedule_entry_after_while@48",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6420": {
+ "op": "frame_dig 3",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_id#0"
+ ]
+ },
+ "6422": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._get_schedule_entry",
+ "op": "callsub _get_schedule_entry",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0"
+ ]
+ },
+ "6425": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0",
+ "future_entry#0"
+ ]
+ },
+ "6426": {
+ "op": "frame_bury 0",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0"
+ ]
+ },
+ "6428": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "future_entry#0",
+ "future_event_id#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0",
+ "8"
+ ]
+ },
+ "6429": {
+ "op": "getbyte",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_type#0"
+ ]
+ },
+ "6430": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_type#0",
+ "future_event_type#0"
+ ]
+ },
+ "6431": {
+ "op": "frame_bury 4",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_type#0"
+ ]
+ },
+ "6433": {
+ "op": "pushint 3",
+ "defined_out": [
+ "3",
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_type#0",
+ "3"
+ ]
+ },
+ "6435": {
+ "op": "==",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0",
+ "tmp%7#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%7#1"
+ ]
+ },
+ "6436": {
+ "op": "bnz _apply_non_cash_schedule_entry_bool_true@40",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6439": {
+ "op": "frame_dig 4",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_type#0"
+ ]
+ },
+ "6441": {
+ "op": "pushint 19",
+ "defined_out": [
+ "19",
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_type#0",
+ "19"
+ ]
+ },
+ "6443": {
+ "op": "==",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0",
+ "tmp%8#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%8#1"
+ ]
+ },
+ "6444": {
+ "op": "bz _apply_non_cash_schedule_entry_bool_false@41",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6447": {
+ "op": "frame_dig 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0"
+ ]
+ },
+ "6449": {
+ "op": "pushint 25",
+ "defined_out": [
+ "25",
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0",
+ "25"
+ ]
+ },
+ "6451": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "future_entry#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "tmp%4#0",
+ "values%2#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%2#0"
+ ]
+ },
+ "6452": {
+ "op": "bz _apply_non_cash_schedule_entry_bool_false@41",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6455": {
+ "block": "_apply_non_cash_schedule_entry_bool_true@40",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "is_redemption_event#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "is_redemption_event#0"
+ ]
+ },
+ "6456": {
+ "block": "_apply_non_cash_schedule_entry_bool_merge@42",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "is_redemption_event#0"
+ ],
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@47",
+ "defined_out": [],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6459": {
+ "op": "frame_dig 7",
+ "defined_out": [
+ "skip_first_redemption#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "skip_first_redemption#0"
+ ]
+ },
+ "6461": {
+ "op": "bz _apply_non_cash_schedule_entry_else_body@45",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6464": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "skip_first_redemption#0"
+ ]
+ },
+ "6465": {
+ "op": "frame_bury 7",
+ "defined_out": [
+ "skip_first_redemption#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6467": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@47",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig 3",
+ "defined_out": [
+ "future_event_id#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_id#0"
+ ]
+ },
+ "6469": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "future_event_id#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_id#0",
+ "1"
+ ]
+ },
+ "6470": {
+ "op": "+",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_event_id#0"
+ ]
+ },
+ "6471": {
+ "op": "frame_bury 3",
+ "defined_out": [
+ "future_event_id#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6473": {
+ "op": "b _apply_non_cash_schedule_entry_while_top@36"
+ },
+ "6476": {
+ "block": "_apply_non_cash_schedule_entry_else_body@45",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig 0",
+ "defined_out": [
+ "future_entry#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0"
+ ]
+ },
+ "6478": {
+ "op": "pushint 25",
+ "defined_out": [
+ "25",
+ "future_entry#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "future_entry#0",
+ "25"
+ ]
+ },
+ "6480": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "future_entry#0",
+ "values%3#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%3#1"
+ ]
+ },
+ "6481": {
+ "op": "frame_dig 2",
+ "defined_out": [
+ "discount_factor#0",
+ "future_entry#0",
+ "values%3#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%3#1",
+ "discount_factor#0"
+ ]
+ },
+ "6483": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "values%3#1"
+ ]
+ },
+ "6484": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._discount_annuity_factor",
+ "op": "callsub _discount_annuity_factor",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0"
+ ]
+ },
+ "6487": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "discount_factor#0"
+ ]
+ },
+ "6488": {
+ "op": "frame_bury 2",
+ "defined_out": [
+ "discount_factor#0",
+ "future_entry#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0"
+ ]
+ },
+ "6490": {
+ "op": "frame_dig 1",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "future_entry#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "discount_factor#0",
+ "denominator#0"
+ ]
+ },
+ "6492": {
+ "op": "+",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "denominator#0"
+ ]
+ },
+ "6493": {
+ "op": "frame_bury 1",
+ "defined_out": [
+ "denominator#0",
+ "discount_factor#0",
+ "future_entry#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6495": {
+ "op": "b _apply_non_cash_schedule_entry_after_if_else@47"
+ },
+ "6498": {
+ "block": "_apply_non_cash_schedule_entry_bool_false@41",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "is_redemption_event#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "is_redemption_event#0"
+ ]
+ },
+ "6499": {
+ "op": "b _apply_non_cash_schedule_entry_bool_merge@42"
+ },
+ "6502": {
+ "block": "_apply_non_cash_schedule_entry_after_while@48",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig 1",
+ "defined_out": [
+ "denominator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "denominator#0"
+ ]
+ },
+ "6504": {
+ "error": "Invalid ACTUS configuration",
+ "op": "assert // Invalid ACTUS configuration",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6505": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "denominator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6506": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "denominator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "6508": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "denominator#0",
+ "maybe_exists%3#0",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "maybe_exists%3#0"
+ ]
+ },
+ "6509": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0"
+ ]
+ },
+ "6510": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "denominator#0",
+ "entry#0 (copy)",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6512": {
+ "op": "pushint 57",
+ "defined_out": [
+ "57",
+ "denominator#0",
+ "entry#0 (copy)",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "entry#0 (copy)",
+ "57"
+ ]
+ },
+ "6514": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "denominator#0",
+ "numerator#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "values%4#0"
+ ]
+ },
+ "6515": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "denominator#0",
+ "numerator#0",
+ "values%4#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "values%4#0",
+ "8"
+ ]
+ },
+ "6516": {
+ "op": "&",
+ "defined_out": [
+ "denominator#0",
+ "numerator#0",
+ "tmp%14#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "tmp%14#1"
+ ]
+ },
+ "6517": {
+ "op": "bnz _apply_non_cash_schedule_entry_after_if_else@50",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0"
+ ]
+ },
+ "6520": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "0"
+ ]
+ },
+ "6521": {
+ "op": "bytec 6 // \"accrued_interest\"",
+ "defined_out": [
+ "\"accrued_interest\"",
+ "0",
+ "denominator#0",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "0",
+ "\"accrued_interest\""
+ ]
+ },
+ "6523": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "denominator#0",
+ "maybe_exists%4#0",
+ "maybe_value%4#0",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "maybe_value%4#0",
+ "maybe_exists%4#0"
+ ]
+ },
+ "6524": {
+ "error": "check self.accrued_interest exists",
+ "op": "assert // check self.accrued_interest exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "maybe_value%4#0"
+ ]
+ },
+ "6525": {
+ "op": "+",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0"
+ ]
+ },
+ "6526": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@50",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "0"
+ ]
+ },
+ "6527": {
+ "op": "bytec 5 // \"fixed_point_scale\"",
+ "defined_out": [
+ "\"fixed_point_scale\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "0",
+ "\"fixed_point_scale\""
+ ]
+ },
+ "6529": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%5#0",
+ "maybe_value%5#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "maybe_value%5#0",
+ "maybe_exists%5#0"
+ ]
+ },
+ "6530": {
+ "error": "check self.fixed_point_scale exists",
+ "op": "assert // check self.fixed_point_scale exists",
+ "defined_out": [
+ "maybe_value%5#0",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "maybe_value%5#0"
+ ]
+ },
+ "6531": {
+ "op": "frame_dig 1",
+ "defined_out": [
+ "denominator#0",
+ "maybe_value%5#0",
+ "numerator#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "numerator#0",
+ "maybe_value%5#0",
+ "denominator#0"
+ ]
+ },
+ "6533": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._scaled_mul_div",
+ "op": "callsub _scaled_mul_div",
+ "defined_out": [
+ "denominator#0",
+ "tmp%17#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%17#1"
+ ]
+ },
+ "6536": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "denominator#0",
+ "tmp%17#1"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%17#1",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "6538": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"next_principal_redemption\"",
+ "tmp%17#1"
+ ]
+ },
+ "6539": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6540": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@30",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6541": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "defined_out": [
+ "\"event_cursor\"",
+ "0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"event_cursor\""
+ ]
+ },
+ "6542": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%12#0",
+ "maybe_value%12#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%12#0",
+ "maybe_exists%12#0"
+ ]
+ },
+ "6543": {
+ "error": "check self.event_cursor exists",
+ "op": "assert // check self.event_cursor exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%12#0"
+ ]
+ },
+ "6544": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "maybe_value%12#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%12#0",
+ "1"
+ ]
+ },
+ "6545": {
+ "op": "+",
+ "defined_out": [
+ "tmp%23#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%23#0"
+ ]
+ },
+ "6546": {
+ "op": "bytec_2 // \"event_cursor\"",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%23#0",
+ "\"event_cursor\""
+ ]
+ },
+ "6547": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"event_cursor\"",
+ "tmp%23#0"
+ ]
+ },
+ "6548": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6549": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6551": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "0"
+ ]
+ },
+ "6552": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "0",
+ "0"
+ ]
+ },
+ "6553": {
+ "callsub": "modules.actus_kernel.ActusKernelModule._emit_execution_event",
+ "op": "callsub _emit_execution_event",
+ "defined_out": [
+ "entry#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0"
+ ]
+ },
+ "6556": {
+ "op": "dup"
+ },
+ "6557": {
+ "op": "frame_bury -2",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6559": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "entry#0 (copy)",
+ "payload#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "payload#0 (copy)"
+ ]
+ },
+ "6561": {
+ "op": "frame_bury 1"
+ },
+ "6563": {
+ "op": "frame_bury 0"
+ },
+ "6565": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6566": {
+ "block": "_apply_non_cash_schedule_entry_else_body@29",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6568": {
+ "op": "pushint 41",
+ "defined_out": [
+ "41",
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "41"
+ ]
+ },
+ "6570": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "values%12#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%12#0"
+ ]
+ },
+ "6571": {
+ "op": "bytec 14 // \"next_principal_redemption\"",
+ "defined_out": [
+ "\"next_principal_redemption\"",
+ "values%12#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%12#0",
+ "\"next_principal_redemption\""
+ ]
+ },
+ "6573": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"next_principal_redemption\"",
+ "values%12#0"
+ ]
+ },
+ "6574": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6575": {
+ "op": "b _apply_non_cash_schedule_entry_after_if_else@30"
+ },
+ "6578": {
+ "block": "_apply_non_cash_schedule_entry_else_body@20",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig 10",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0"
+ ]
+ },
+ "6580": {
+ "op": "pushint 18",
+ "defined_out": [
+ "18",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0",
+ "18"
+ ]
+ },
+ "6582": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%17#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%17#0"
+ ]
+ },
+ "6583": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@23",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6586": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6587": {
+ "op": "bytec 4 // \"outstanding_principal\"",
+ "defined_out": [
+ "\"outstanding_principal\"",
+ "0",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"outstanding_principal\""
+ ]
+ },
+ "6589": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%9#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%9#0",
+ "maybe_exists%9#0"
+ ]
+ },
+ "6590": {
+ "error": "check self.outstanding_principal exists",
+ "op": "assert // check self.outstanding_principal exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%9#0"
+ ]
+ },
+ "6591": {
+ "op": "bytec 7 // \"interest_calculation_base\"",
+ "defined_out": [
+ "\"interest_calculation_base\"",
+ "event_type#0",
+ "maybe_value%9#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_value%9#0",
+ "\"interest_calculation_base\""
+ ]
+ },
+ "6593": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"interest_calculation_base\"",
+ "maybe_value%9#0"
+ ]
+ },
+ "6594": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6595": {
+ "op": "b _apply_non_cash_schedule_entry_after_if_else@23"
+ },
+ "6598": {
+ "block": "_apply_non_cash_schedule_entry_else_body@10",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig 10",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0"
+ ]
+ },
+ "6600": {
+ "op": "pushint 11",
+ "defined_out": [
+ "11",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "event_type#0",
+ "11"
+ ]
+ },
+ "6602": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%13#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "tmp%13#0"
+ ]
+ },
+ "6603": {
+ "op": "bz _apply_non_cash_schedule_entry_else_body@14",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6606": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6608": {
+ "op": "pushint 33",
+ "defined_out": [
+ "33",
+ "entry#0 (copy)",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "33"
+ ]
+ },
+ "6610": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "event_type#0",
+ "next_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "next_rate#0"
+ ]
+ },
+ "6611": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "next_rate#0",
+ "next_rate#0"
+ ]
+ },
+ "6612": {
+ "op": "frame_bury 5",
+ "defined_out": [
+ "event_type#0",
+ "next_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "next_rate#0"
+ ]
+ },
+ "6614": {
+ "op": "bnz _apply_non_cash_schedule_entry_after_if_else@13",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6617": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0"
+ ]
+ },
+ "6618": {
+ "op": "bytec 38 // \"rate_reset_next\"",
+ "defined_out": [
+ "\"rate_reset_next\"",
+ "0",
+ "event_type#0",
+ "next_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "0",
+ "\"rate_reset_next\""
+ ]
+ },
+ "6620": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "event_type#0",
+ "maybe_exists%8#0",
+ "next_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "next_rate#0",
+ "maybe_exists%8#0"
+ ]
+ },
+ "6621": {
+ "op": "swap",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%8#0",
+ "next_rate#0"
+ ]
+ },
+ "6622": {
+ "op": "frame_bury 5",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "maybe_exists%8#0"
+ ]
+ },
+ "6624": {
+ "error": "check self.rate_reset_next exists",
+ "op": "assert // check self.rate_reset_next exists",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6625": {
+ "block": "_apply_non_cash_schedule_entry_after_if_else@13",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\""
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "6627": {
+ "op": "frame_dig 5",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "next_rate#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\"",
+ "next_rate#0"
+ ]
+ },
+ "6629": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6630": {
+ "op": "b _apply_non_cash_schedule_entry_after_if_else@18"
+ },
+ "6633": {
+ "block": "_apply_non_cash_schedule_entry_else_body@14",
+ "stack_in": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ],
+ "op": "frame_dig -2",
+ "defined_out": [
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6635": {
+ "op": "pushint 33",
+ "defined_out": [
+ "33",
+ "entry#0 (copy)"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "entry#0 (copy)",
+ "33"
+ ]
+ },
+ "6637": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "values%8#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%8#0"
+ ]
+ },
+ "6638": {
+ "op": "dup",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%8#0",
+ "values%8#0"
+ ]
+ },
+ "6639": {
+ "op": "frame_bury 9",
+ "defined_out": [
+ "values%8#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "values%8#0"
+ ]
+ },
+ "6641": {
+ "op": "bz _apply_non_cash_schedule_entry_after_if_else@18",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6644": {
+ "op": "bytec 9 // \"nominal_interest_rate\"",
+ "defined_out": [
+ "\"nominal_interest_rate\"",
+ "values%8#0"
+ ],
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\""
+ ]
+ },
+ "6646": {
+ "op": "frame_dig 9",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0",
+ "\"nominal_interest_rate\"",
+ "values%8#0"
+ ]
+ },
+ "6648": {
+ "op": "app_global_put",
+ "stack_out": [
+ "future_entry#0",
+ "denominator#0",
+ "discount_factor#0",
+ "future_event_id#0",
+ "future_event_type#0",
+ "next_rate#0",
+ "rate#0",
+ "skip_first_redemption#0",
+ "values%0#0",
+ "values%8#0",
+ "event_type#0",
+ "tmp%4#0"
+ ]
+ },
+ "6649": {
+ "op": "b _apply_non_cash_schedule_entry_after_if_else@18"
+ },
+ "6652": {
+ "subroutine": "modules.actus_kernel.ActusKernelModule._emit_execution_event",
+ "params": {
+ "entry#0": "bytes",
+ "payoff#0": "uint64",
+ "settled_amount#0": "uint64"
+ },
+ "block": "_emit_execution_event",
+ "stack_in": [],
+ "op": "proto 3 1"
+ },
+ "6655": {
+ "op": "global CurrentApplicationID"
+ },
+ "6657": {
+ "op": "frame_dig -3"
+ },
+ "6659": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "entry#0 (copy)",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "entry#0 (copy)",
+ "0"
+ ]
+ },
+ "6660": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "tmp%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0"
+ ]
+ },
+ "6661": {
+ "op": "frame_dig -3",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6663": {
+ "op": "extract 8 1",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "tmp%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "6666": {
+ "op": "frame_dig -3",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6668": {
+ "op": "extract 9 8",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0"
+ ]
+ },
+ "6671": {
+ "op": "global LatestTimestamp"
+ },
+ "6673": {
+ "op": "frame_dig -3"
+ },
+ "6675": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "entry#0 (copy)",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "entry#0 (copy)",
+ "8"
+ ]
+ },
+ "6676": {
+ "op": "getbyte",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "event_type#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ]
+ },
+ "6677": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "event_type#0",
+ "payoff#0 (copy)",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "payoff#0 (copy)"
+ ]
+ },
+ "6679": {
+ "op": "bnz _emit_execution_event_after_if_else@3",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ]
+ },
+ "6682": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "event_type#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%3#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%3#0"
+ ]
+ },
+ "6683": {
+ "block": "_emit_execution_event_after_inlined_modules.actus_kernel.ActusKernelModule._payoff_sign@7",
+ "stack_in": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%3#0"
+ ],
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "6684": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%val_as_bytes%0#0 (copy)"
+ ]
+ },
+ "6685": {
+ "op": "bitlen",
+ "defined_out": [
+ "aggregate%bitlen%0#0",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%bitlen%0#0"
+ ]
+ },
+ "6686": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "aggregate%bitlen%0#0",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%bitlen%0#0",
+ "8"
+ ]
+ },
+ "6687": {
+ "op": "<=",
+ "defined_out": [
+ "aggregate%no_overflow%0#0",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%val_as_bytes%0#0",
+ "aggregate%no_overflow%0#0"
+ ]
+ },
+ "6688": {
+ "error": "overflow",
+ "op": "assert // overflow",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "6689": {
+ "op": "extract 7 1",
+ "defined_out": [
+ "aggregate%uint8%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0"
+ ]
+ },
+ "6692": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "aggregate%uint8%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "0"
+ ]
+ },
+ "6693": {
+ "op": "bytec 19 // \"settlement_asset_id\"",
+ "defined_out": [
+ "\"settlement_asset_id\"",
+ "0",
+ "aggregate%uint8%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "0",
+ "\"settlement_asset_id\""
+ ]
+ },
+ "6695": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6696": {
+ "error": "check self.settlement_asset_id exists",
+ "op": "assert // check self.settlement_asset_id exists",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6697": {
+ "op": "frame_dig 1",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0"
+ ]
+ },
+ "6699": {
+ "op": "dup",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "values%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "values%0#0 (copy)"
+ ]
+ },
+ "6700": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "values%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "values%0#0 (copy)",
+ "1"
+ ]
+ },
+ "6701": {
+ "op": "+",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "tmp%5#0"
+ ]
+ },
+ "6702": {
+ "op": "frame_dig 0",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "tmp%5#0",
+ "tmp%0#0"
+ ]
+ },
+ "6704": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "aggregate%val_as_bytes%1#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "values%0#0",
+ "tmp%5#0",
+ "aggregate%val_as_bytes%1#0"
+ ]
+ },
+ "6705": {
+ "op": "uncover 2",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%val_as_bytes%1#0",
+ "values%0#0"
+ ]
+ },
+ "6707": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%uint8%0#0",
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%val_as_bytes%2#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%val_as_bytes%1#0",
+ "aggregate%val_as_bytes%2#0"
+ ]
+ },
+ "6708": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%head%1#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%1#0"
+ ]
+ },
+ "6709": {
+ "op": "frame_dig 2",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%head%1#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%1#0",
+ "aggregate%extract%1#0"
+ ]
+ },
+ "6711": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%head%2#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%2#0"
+ ]
+ },
+ "6712": {
+ "op": "frame_dig 3",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%2#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%2#0",
+ "aggregate%extract%2#0"
+ ]
+ },
+ "6714": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%3#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%3#0"
+ ]
+ },
+ "6715": {
+ "op": "frame_dig 4",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%3#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%3#0",
+ "tmp%1#0"
+ ]
+ },
+ "6717": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%3#0",
+ "aggregate%uint8%0#0",
+ "aggregate%val_as_bytes%4#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%3#0",
+ "aggregate%val_as_bytes%4#0"
+ ]
+ },
+ "6718": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%4#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%4#0"
+ ]
+ },
+ "6719": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%4#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "payoff#0 (copy)",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%4#0",
+ "payoff#0 (copy)"
+ ]
+ },
+ "6721": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%4#0",
+ "aggregate%uint8%0#0",
+ "aggregate%val_as_bytes%5#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%4#0",
+ "aggregate%val_as_bytes%5#0"
+ ]
+ },
+ "6722": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%5#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%uint8%0#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%5#0"
+ ]
+ },
+ "6723": {
+ "op": "uncover 3",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%5#0",
+ "aggregate%uint8%0#0"
+ ]
+ },
+ "6725": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%6#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%6#0"
+ ]
+ },
+ "6726": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%6#0",
+ "maybe_value%0#0",
+ "settled_amount#0 (copy)",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%6#0",
+ "settled_amount#0 (copy)"
+ ]
+ },
+ "6728": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%6#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%6#0",
+ "aggregate%val_as_bytes%6#0"
+ ]
+ },
+ "6729": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%7#0",
+ "maybe_value%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "maybe_value%0#0",
+ "tmp%5#0",
+ "aggregate%head%7#0"
+ ]
+ },
+ "6730": {
+ "op": "uncover 2",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%5#0",
+ "aggregate%head%7#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6732": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%7#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%5#0",
+ "aggregate%head%7#0",
+ "aggregate%val_as_bytes%7#0"
+ ]
+ },
+ "6733": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%8#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "tmp%5#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%5#0",
+ "aggregate%head%8#0"
+ ]
+ },
+ "6734": {
+ "op": "swap",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%head%8#0",
+ "tmp%5#0"
+ ]
+ },
+ "6735": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%8#0",
+ "aggregate%val_as_bytes%8#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%head%8#0",
+ "aggregate%val_as_bytes%8#0"
+ ]
+ },
+ "6736": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%9#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%head%9#0"
+ ]
+ },
+ "6737": {
+ "op": "pushbytes 0x9a332b95 // method \"ExecutionEvent(uint64,uint64,uint8,uint64,uint64,uint64,uint8,uint64,uint64,uint64)\"",
+ "defined_out": [
+ "Method(ExecutionEvent(uint64,uint64,uint8,uint64,uint64,uint64,uint8,uint64,uint64,uint64))",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "aggregate%head%9#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "aggregate%head%9#0",
+ "Method(ExecutionEvent(uint64,uint64,uint8,uint64,uint64,uint64,uint8,uint64,uint64,uint64))"
+ ]
+ },
+ "6743": {
+ "op": "swap",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "Method(ExecutionEvent(uint64,uint64,uint8,uint64,uint64,uint64,uint8,uint64,uint64,uint64))",
+ "aggregate%head%9#0"
+ ]
+ },
+ "6744": {
+ "op": "concat",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "event%0#0",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "event%0#0"
+ ]
+ },
+ "6745": {
+ "op": "log",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ]
+ },
+ "6746": {
+ "op": "frame_dig -3",
+ "defined_out": [
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "entry#0 (copy)",
+ "tmp%0#0",
+ "tmp%1#0",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "entry#0 (copy)"
+ ]
+ },
+ "6748": {
+ "op": "frame_bury 0"
+ },
+ "6750": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6751": {
+ "block": "_emit_execution_event_after_if_else@3",
+ "stack_in": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ],
+ "op": "frame_dig 5",
+ "defined_out": [
+ "event_type#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "6753": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "1",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "event_type#0",
+ "1"
+ ]
+ },
+ "6754": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%1#1"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%1#1"
+ ]
+ },
+ "6755": {
+ "op": "bnz _emit_execution_event_if_body@5",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ]
+ },
+ "6758": {
+ "op": "frame_dig 5",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "event_type#0"
+ ]
+ },
+ "6760": {
+ "op": "pushint 4",
+ "defined_out": [
+ "4",
+ "event_type#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "event_type#0",
+ "4"
+ ]
+ },
+ "6762": {
+ "op": "==",
+ "defined_out": [
+ "event_type#0",
+ "tmp%2#1"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%2#1"
+ ]
+ },
+ "6763": {
+ "op": "bz _emit_execution_event_after_if_else@6",
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ]
+ },
+ "6766": {
+ "block": "_emit_execution_event_if_body@5",
+ "stack_in": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%3#0"
+ ]
+ },
+ "6767": {
+ "op": "b _emit_execution_event_after_inlined_modules.actus_kernel.ActusKernelModule._payoff_sign@7"
+ },
+ "6770": {
+ "block": "_emit_execution_event_after_if_else@6",
+ "stack_in": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0"
+ ],
+ "op": "pushint 255",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "values%0#0",
+ "aggregate%extract%1#0",
+ "aggregate%extract%2#0",
+ "tmp%1#0",
+ "event_type#0",
+ "tmp%3#0"
+ ]
+ },
+ "6773": {
+ "op": "b _emit_execution_event_after_inlined_modules.actus_kernel.ActusKernelModule._payoff_sign@7"
+ },
+ "6776": {
+ "subroutine": "modules.rbac.RbacModule._role_is_active",
+ "params": {
+ "role_map#0": "bytes",
+ "role_address#0": "bytes"
+ },
+ "block": "_role_is_active",
+ "stack_in": [],
+ "op": "proto 2 1"
+ },
+ "6779": {
+ "op": "pushbytes \"\"",
+ "stack_out": [
+ "awst_tmp%0#0"
+ ]
+ },
+ "6781": {
+ "op": "frame_dig -2",
+ "defined_out": [
+ "role_map#0 (copy)"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "role_map#0 (copy)"
+ ]
+ },
+ "6783": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "role_address#0 (copy)",
+ "role_map#0 (copy)"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "role_map#0 (copy)",
+ "role_address#0 (copy)"
+ ]
+ },
+ "6785": {
+ "op": "concat",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6786": {
+ "op": "dup",
+ "defined_out": [
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6787": {
+ "op": "box_len",
+ "defined_out": [
+ "_%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "_%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6788": {
+ "op": "bury 1",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6790": {
+ "op": "bz _role_is_active_bool_false@4",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6793": {
+ "op": "frame_dig 1",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6795": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%0#0",
+ "aggregate%box_get%1#0"
+ ]
+ },
+ "6796": {
+ "error": "check BoxMap entry exists",
+ "op": "assert // check BoxMap entry exists",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%0#0"
+ ]
+ },
+ "6797": {
+ "op": "intc_0 // 0",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%0#0",
+ "0"
+ ]
+ },
+ "6798": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "box_prefixed_key%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%0#0"
+ ]
+ },
+ "6799": {
+ "op": "global LatestTimestamp"
+ },
+ "6801": {
+ "op": "dup",
+ "defined_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%0#0",
+ "awst_tmp%0#0",
+ "awst_tmp%0#0"
+ ]
+ },
+ "6802": {
+ "op": "frame_bury 0",
+ "defined_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%0#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%0#0",
+ "awst_tmp%0#0"
+ ]
+ },
+ "6804": {
+ "op": "<=",
+ "defined_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "tmp%1#0"
+ ]
+ },
+ "6805": {
+ "op": "bz _role_is_active_bool_false@4",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6808": {
+ "op": "frame_dig 1",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6810": {
+ "op": "box_get",
+ "defined_out": [
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0",
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%2#0",
+ "aggregate%box_get%3#0"
+ ]
+ },
+ "6811": {
+ "error": "check BoxMap entry exists",
+ "op": "assert // check BoxMap entry exists",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%2#0"
+ ]
+ },
+ "6812": {
+ "op": "intc_2 // 8",
+ "defined_out": [
+ "8",
+ "aggregate%box_get%2#0",
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "aggregate%box_get%2#0",
+ "8"
+ ]
+ },
+ "6813": {
+ "op": "extract_uint64",
+ "defined_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%1#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%1#0"
+ ]
+ },
+ "6814": {
+ "op": "frame_dig 0",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "values%1#0",
+ "awst_tmp%0#0"
+ ]
+ },
+ "6816": {
+ "op": ">=",
+ "defined_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "tmp%2#0"
+ ]
+ },
+ "6817": {
+ "op": "bz _role_is_active_bool_false@4",
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ]
+ },
+ "6820": {
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "and_result%0#0",
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "and_result%0#0"
+ ]
+ },
+ "6821": {
+ "block": "_role_is_active_bool_merge@5",
+ "stack_in": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "and_result%0#0"
+ ],
+ "op": "frame_bury 0",
+ "defined_out": [
+ "and_result%0#0"
+ ]
+ },
+ "6823": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6824": {
+ "block": "_role_is_active_bool_false@4",
+ "stack_in": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1"
+ ],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "and_result%0#0"
+ ],
+ "stack_out": [
+ "awst_tmp%0#0",
+ "box_prefixed_key%0#1",
+ "and_result%0#0"
+ ]
+ },
+ "6825": {
+ "op": "b _role_is_active_bool_merge@5"
+ },
+ "6828": {
+ "subroutine": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "params": {},
+ "block": "_assert_caller_is_arranger",
+ "stack_in": [],
+ "op": "txn Sender",
+ "defined_out": [
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0"
+ ]
+ },
+ "6830": {
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0"
+ ]
+ },
+ "6831": {
+ "op": "bytec 18 // 0x523a41525223",
+ "defined_out": [
+ "0",
+ "0x523a41525223",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "0",
+ "0x523a41525223"
+ ]
+ },
+ "6833": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0",
+ "role_address#0"
+ ],
+ "stack_out": [
+ "role_address#0",
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6834": {
+ "error": "check self.arranger exists",
+ "op": "assert // check self.arranger exists",
+ "stack_out": [
+ "role_address#0",
+ "maybe_value%0#0"
+ ]
+ },
+ "6835": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "6836": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": []
+ },
+ "6837": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6838": {
+ "subroutine": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "params": {},
+ "block": "_assert_is_not_contract_defaulted",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "6839": {
+ "op": "bytec 34 // \"defaulted\"",
+ "defined_out": [
+ "\"defaulted\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"defaulted\""
+ ]
+ },
+ "6841": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6842": {
+ "error": "check self.defaulted exists",
+ "op": "assert // check self.defaulted exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "6843": {
+ "op": "!",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "6844": {
+ "error": "Defaulted",
+ "op": "assert // Defaulted",
+ "stack_out": []
+ },
+ "6845": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6846": {
+ "subroutine": "modules.rbac.RbacModule._assert_is_not_contract_suspended",
+ "params": {},
+ "block": "_assert_is_not_contract_suspended",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "0"
+ ],
+ "stack_out": [
+ "0"
+ ]
+ },
+ "6847": {
+ "op": "bytec 33 // \"contract_suspended\"",
+ "defined_out": [
+ "\"contract_suspended\"",
+ "0"
+ ],
+ "stack_out": [
+ "0",
+ "\"contract_suspended\""
+ ]
+ },
+ "6849": {
+ "op": "app_global_get_ex",
+ "defined_out": [
+ "maybe_exists%0#0",
+ "maybe_value%0#0"
+ ],
+ "stack_out": [
+ "maybe_value%0#0",
+ "maybe_exists%0#0"
+ ]
+ },
+ "6850": {
+ "error": "check self.contract_suspended exists",
+ "op": "assert // check self.contract_suspended exists",
+ "stack_out": [
+ "maybe_value%0#0"
+ ]
+ },
+ "6851": {
+ "op": "!",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "6852": {
+ "error": "Suspended operations",
+ "op": "assert // Suspended operations",
+ "stack_out": []
+ },
+ "6853": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6854": {
+ "subroutine": "modules.rbac.RbacModule._assert_valid_role",
+ "params": {
+ "role_id#0": "uint64"
+ },
+ "block": "_assert_valid_role",
+ "stack_in": [],
+ "op": "proto 1 0"
+ },
+ "6857": {
+ "op": "frame_dig -1",
+ "defined_out": [
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6859": {
+ "op": "pushint 20",
+ "defined_out": [
+ "20",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "20"
+ ]
+ },
+ "6861": {
+ "op": "==",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "6862": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "6865": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6867": {
+ "op": "pushint 25",
+ "defined_out": [
+ "25",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "25"
+ ]
+ },
+ "6869": {
+ "op": "==",
+ "defined_out": [
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "tmp%1#0"
+ ]
+ },
+ "6870": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "6873": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6875": {
+ "op": "pushint 40",
+ "defined_out": [
+ "40",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "40"
+ ]
+ },
+ "6877": {
+ "op": "==",
+ "defined_out": [
+ "tmp%2#0"
+ ],
+ "stack_out": [
+ "tmp%2#0"
+ ]
+ },
+ "6878": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "6881": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6883": {
+ "op": "pushint 50",
+ "defined_out": [
+ "50",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "50"
+ ]
+ },
+ "6885": {
+ "op": "==",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%3#0"
+ ]
+ },
+ "6886": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "6889": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6891": {
+ "op": "pushint 60",
+ "defined_out": [
+ "60",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "60"
+ ]
+ },
+ "6893": {
+ "op": "==",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "6894": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "6897": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6899": {
+ "op": "pushint 70",
+ "defined_out": [
+ "70",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "70"
+ ]
+ },
+ "6901": {
+ "op": "==",
+ "defined_out": [
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "tmp%5#0"
+ ]
+ },
+ "6902": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "6905": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "6907": {
+ "op": "pushint 80",
+ "defined_out": [
+ "80",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "80"
+ ]
+ },
+ "6909": {
+ "op": "==",
+ "defined_out": [
+ "tmp%6#0"
+ ],
+ "stack_out": [
+ "tmp%6#0"
+ ]
+ },
+ "6910": {
+ "op": "bz _assert_valid_role_bool_false@8",
+ "stack_out": []
+ },
+ "6913": {
+ "block": "_assert_valid_role_bool_true@7",
+ "stack_in": [],
+ "op": "intc_1 // 1",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "or_result%0#0"
+ ]
+ },
+ "6914": {
+ "error": "Invalid role identifier",
+ "block": "_assert_valid_role_bool_merge@9",
+ "stack_in": [
+ "or_result%0#0"
+ ],
+ "op": "assert // Invalid role identifier",
+ "defined_out": [],
+ "stack_out": []
+ },
+ "6915": {
+ "retsub": true,
+ "op": "retsub"
+ },
+ "6916": {
+ "block": "_assert_valid_role_bool_false@8",
+ "stack_in": [],
+ "op": "intc_0 // 0",
+ "defined_out": [
+ "or_result%0#0"
+ ],
+ "stack_out": [
+ "or_result%0#0"
+ ]
+ },
+ "6917": {
+ "op": "b _assert_valid_role_bool_merge@9"
+ }
+ }
+}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/d_asa/DASA.approval.teal b/smart_contracts/artifacts/d_asa/DASA.approval.teal
new file mode 100644
index 00000000..7f811ea6
--- /dev/null
+++ b/smart_contracts/artifacts/d_asa/DASA.approval.teal
@@ -0,0 +1,7142 @@
+#pragma version 12
+#pragma typetrack false
+
+// algopy.arc4.ARC4Contract.approval_program() -> uint64:
+main:
+ intcblock 0 1 8 32 1500
+ bytecblock 0x151f7c75 "status" "event_cursor" "schedule_entry_count" "outstanding_principal" "fixed_point_scale" "accrued_interest" "interest_calculation_base" 0x4123 "nominal_interest_rate" "contract_type" "reserved_units_total" "reserved_principal" "total_units" "next_principal_redemption" "reserved_interest" "cumulative_interest_index" "cumulative_principal_index" 0x523a41525223 "settlement_asset_id" "initial_exchange_amount" 0x523a41555423 0x523a50594423 0x523a4d4e4723 0x5323 0x523a4d4f4323 0x523a54525323 0x523a4f504423 "initial_exchange_date" "transfer_opening_date" "transfer_closure_date" "rate_reset_floor" "rate_reset_cap" "contract_suspended" "defaulted" "dynamic_principal_redemption" "rate_reset_spread" "rate_reset_multiplier" "rate_reset_next" "has_rate_reset_floor" "has_rate_reset_cap" 0x00 "prospectus_hash" "prospectus_url" "denomination_asset_id" "maturity_date" "day_count_convention" 0x068101 0x0000
+ txn ApplicationID
+ bnz main_after_if_else@2
+ // modules/rbac.py:28-29
+ // # RBAC Roles
+ // self.arranger = GlobalState(Account(), key=cst.PREFIX_ID_ARRANGER)
+ bytec 18 // 0x523a41525223
+ global ZeroAddress
+ app_global_put
+ // modules/rbac.py:30
+ // self.op_daemon = GlobalState(Account(), key=cst.PREFIX_ID_OP_DAEMON)
+ bytec 27 // 0x523a4f504423
+ global ZeroAddress
+ app_global_put
+ // modules/rbac.py:47-48
+ // # Contract Governance
+ // self.contract_suspended = False
+ bytec 33 // "contract_suspended"
+ intc_0 // 0
+ app_global_put
+ // modules/rbac.py:50-51
+ // # Contract Performance
+ // self.defaulted = False
+ bytec 34 // "defaulted"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:56-57
+ // # Contract
+ // self.status = UInt64(enums.STATUS_INACTIVE)
+ bytec_1 // "status"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:58
+ // self.contract_type = UInt64()
+ bytec 10 // "contract_type"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:60-61
+ // # Prospectus (Informational)
+ // self.prospectus_hash = Bytes()
+ bytec 42 // "prospectus_hash"
+ pushbytes 0x
+ app_global_put
+ // modules/actus_kernel.py:62
+ // self.prospectus_url = String()
+ bytec 43 // "prospectus_url"
+ pushbytes ""
+ app_global_put
+ // modules/actus_kernel.py:64-65
+ // # Denomination
+ // self.denomination_asset_id = Asset()
+ bytec 44 // "denomination_asset_id"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:66
+ // self.settlement_asset_id = Asset()
+ bytec 19 // "settlement_asset_id"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:68-69
+ // # Time
+ // self.initial_exchange_date = typ.TimeStamp()
+ bytec 28 // "initial_exchange_date"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:70
+ // self.maturity_date = typ.TimeStamp()
+ bytec 45 // "maturity_date"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:71
+ // self.transfer_opening_date = typ.TimeStamp()
+ bytec 29 // "transfer_opening_date"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:72
+ // self.transfer_closure_date = typ.TimeStamp()
+ bytec 30 // "transfer_closure_date"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:74-75
+ // # Day Count Convention
+ // self.day_count_convention = UInt64()
+ bytec 46 // "day_count_convention"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:77-78
+ // # Units
+ // self.total_units = UInt64()
+ bytec 13 // "total_units"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:79
+ // self.reserved_units_total = UInt64()
+ bytec 11 // "reserved_units_total"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:81-82
+ // # Principal
+ // self.initial_exchange_amount = UInt64()
+ bytec 20 // "initial_exchange_amount"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:83
+ // self.outstanding_principal = UInt64()
+ bytec 4 // "outstanding_principal"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:84
+ // self.next_principal_redemption = UInt64()
+ bytec 14 // "next_principal_redemption"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:85
+ // self.dynamic_principal_redemption = False
+ bytec 35 // "dynamic_principal_redemption"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:87-88
+ // # Interest
+ // self.interest_calculation_base = UInt64()
+ bytec 7 // "interest_calculation_base"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:89
+ // self.accrued_interest = UInt64()
+ bytec 6 // "accrued_interest"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:91-92
+ // # Interest Rates
+ // self.nominal_interest_rate = UInt64()
+ bytec 9 // "nominal_interest_rate"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:93
+ // self.rate_reset_spread = UInt64()
+ bytec 36 // "rate_reset_spread"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:94
+ // self.rate_reset_multiplier = UInt64()
+ bytec 37 // "rate_reset_multiplier"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:95
+ // self.rate_reset_floor = UInt64()
+ bytec 31 // "rate_reset_floor"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:96
+ // self.rate_reset_cap = UInt64()
+ bytec 32 // "rate_reset_cap"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:97
+ // self.rate_reset_next = UInt64()
+ bytec 38 // "rate_reset_next"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:98
+ // self.has_rate_reset_floor = False
+ bytec 39 // "has_rate_reset_floor"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:99
+ // self.has_rate_reset_cap = False
+ bytec 40 // "has_rate_reset_cap"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:101-102
+ // # Primary Distribution
+ // self.reserved_principal = UInt64()
+ bytec 12 // "reserved_principal"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:103
+ // self.reserved_interest = UInt64()
+ bytec 15 // "reserved_interest"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:105-106
+ // # Cumulative Per-Unit Fixed-Point Indexes
+ // self.cumulative_interest_index = UInt64()
+ bytec 16 // "cumulative_interest_index"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:107
+ // self.cumulative_principal_index = UInt64()
+ bytec 17 // "cumulative_principal_index"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:115
+ // self.event_cursor = UInt64()
+ bytec_2 // "event_cursor"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:116
+ // self.schedule_entry_count = UInt64()
+ bytec_3 // "schedule_entry_count"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:118-119
+ // # Scaling
+ // self.fixed_point_scale = UInt64()
+ bytec 5 // "fixed_point_scale"
+ intc_0 // 0
+ app_global_put
+ // smart_contracts/d_asa/contract.py:23
+ // assert Txn.global_num_byte_slice == cfg.GLOBAL_BYTES, err.WRONG_GLOBAL_BYTES
+ txn GlobalNumByteSlice
+ pushint 10
+ ==
+ assert // Wrong Global Bytes allocation
+ // smart_contracts/d_asa/contract.py:24
+ // assert Txn.global_num_uint == cfg.GLOBAL_UINTS, err.WRONG_GLOBAL_UINTS
+ txn GlobalNumUint
+ pushint 54
+ ==
+ assert // Wrong Global UInts allocation
+ // smart_contracts/d_asa/contract.py:25
+ // assert Txn.local_num_byte_slice == cfg.LOCAL_BYTES, err.WRONG_LOCAL_BYTES
+ txn LocalNumByteSlice
+ !
+ assert // Wrong Local Bytes allocation
+ // smart_contracts/d_asa/contract.py:26
+ // assert Txn.local_num_uint == cfg.LOCAL_UINTS, err.WRONG_LOCAL_UINTS
+ txn LocalNumUint
+ !
+ assert // Wrong Local UInts allocation
+
+main_after_if_else@2:
+ // smart_contracts/d_asa/contract.py:8-18
+ // class DASA(
+ // PaymentAgent,
+ // TransferAgent,
+ // state_totals=StateTotals(
+ // global_bytes=cfg.GLOBAL_BYTES,
+ // global_uints=cfg.GLOBAL_UINTS,
+ // local_bytes=cfg.LOCAL_BYTES,
+ // local_uints=cfg.LOCAL_UINTS,
+ // ),
+ // avm_version=12,
+ // ):
+ pushbytes 0x914f04eb // method "contract_update()void"
+ txna ApplicationArgs 0
+ match main_contract_update_route@4
+
+main_switch_case_next@5:
+ // smart_contracts/d_asa/contract.py:8-18
+ // class DASA(
+ // PaymentAgent,
+ // TransferAgent,
+ // state_totals=StateTotals(
+ // global_bytes=cfg.GLOBAL_BYTES,
+ // global_uints=cfg.GLOBAL_UINTS,
+ // local_bytes=cfg.LOCAL_BYTES,
+ // local_uints=cfg.LOCAL_UINTS,
+ // ),
+ // avm_version=12,
+ // ):
+ txn OnCompletion
+ !
+ assert
+ txn ApplicationID
+ bz main_create_NoOp@33
+ pushbytess 0xb44618c8 0xe7832529 0x94388723 0x6c85e3ee 0xbdd1a944 0x7c0f1812 0x14fc10ef 0x74a7297f 0x09d4fe14 0x9a9bfa85 0x85eed33d 0xab2c0fc4 0xd9f225ac 0x9883505a 0x8ea6e74c 0x02af557a 0x82f71b2d 0xef04f5d3 0xdf343550 0x3dbe80bd 0x1e3e48e7 0x39241fa3 0x010c8299 0x7406acd2 0x1a72a2ee // method "fund_due_cashflows(uint64)(uint64,uint64,uint64,uint64,uint64)", method "claim_due_cashflows(address,byte[])(uint64,uint64,uint64,uint64,byte[])", method "transfer_set_schedule(uint64,uint64)uint64", method "primary_distribution(address,uint64)uint64", method "transfer(address,address,uint64)uint64", method "account_suspension(address,bool)uint64", method "account_open(address,address)uint64", method "account_update_payment_address(address,address)uint64", method "account_get_position(address)(address,uint64,uint64,bool,uint64,uint64,uint64,uint64,uint64)", method "contract_config((uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint64,uint64,uint64,uint64,uint64,bool,bool,bool,uint64),(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64),(byte[32],string))uint64", method "contract_schedule(uint64,bool,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)[])uint64", method "contract_execute_ied()uint64", method "apply_non_cash_event(uint64,(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64", method "append_observed_cash_event((uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64))uint64", method "contract_get_state()(uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)", method "contract_get_next_due_event()(uint64,uint8,uint64,uint64,uint64,uint64,uint64,uint64,uint64)", method "rbac_rotate_arranger(address)uint64", method "rbac_set_op_daemon(address)uint64", method "rbac_assign_role(uint8,address,(uint64,uint64))uint64", method "rbac_revoke_role(uint8,address)uint64", method "rbac_contract_suspension(bool)uint64", method "rbac_contract_default(bool)uint64", method "rbac_get_arranger()address", method "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", method "rbac_get_role_validity(uint8,address)(uint64,uint64)"
+ txna ApplicationArgs 0
+ match fund_due_cashflows claim_due_cashflows transfer_set_schedule primary_distribution transfer account_suspension account_open account_update_payment_address account_get_position contract_config contract_schedule contract_execute_ied apply_non_cash_event append_observed_cash_event contract_get_state contract_get_next_due_event rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_contract_suspension rbac_contract_default rbac_get_arranger rbac_get_address_roles rbac_get_role_validity
+ err
+
+main_create_NoOp@33:
+ // smart_contracts/d_asa/contract.py:8-18
+ // class DASA(
+ // PaymentAgent,
+ // TransferAgent,
+ // state_totals=StateTotals(
+ // global_bytes=cfg.GLOBAL_BYTES,
+ // global_uints=cfg.GLOBAL_UINTS,
+ // local_bytes=cfg.LOCAL_BYTES,
+ // local_uints=cfg.LOCAL_UINTS,
+ // ),
+ // avm_version=12,
+ // ):
+ pushbytes 0x956d7156 // method "contract_create(address)uint64"
+ txna ApplicationArgs 0
+ match contract_create
+ err
+
+main_contract_update_route@4:
+ // modules/rbac.py:150
+ // @arc4.abimethod(allow_actions=["UpdateApplication"])
+ txn OnCompletion
+ pushint 4 // UpdateApplication
+ ==
+ txn ApplicationID
+ &&
+ assert
+ b contract_update
+
+
+// _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void:
+ensure_budget:
+ proto 2 0
+ frame_dig -2
+ pushint 10
+ +
+
+ensure_budget_while_top@1:
+ frame_dig 0
+ global OpcodeBudget
+ >
+ bz ensure_budget_after_while@6
+ itxn_begin
+ pushint 6 // appl
+ itxn_field TypeEnum
+ pushint 5 // DeleteApplication
+ itxn_field OnCompletion
+ bytec 47 // 0x068101
+ itxn_field ApprovalProgram
+ bytec 47 // 0x068101
+ itxn_field ClearStateProgram
+ frame_dig -1
+ switch ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4
+
+ensure_budget_switch_case_next@5:
+ itxn_submit
+ b ensure_budget_while_top@1
+
+ensure_budget_switch_case_1@4:
+ global MinTxnFee
+ itxn_field Fee
+ b ensure_budget_switch_case_next@5
+
+ensure_budget_switch_case_0@3:
+ intc_0 // 0
+ itxn_field Fee
+ b ensure_budget_switch_case_next@5
+
+ensure_budget_after_while@6:
+ retsub
+
+
+// modules.payment_agent.PaymentAgent.fund_due_cashflows[routing]() -> void:
+fund_due_cashflows:
+ intc_0 // 0
+ pushbytes ""
+ dupn 13
+ // modules/payment_agent.py:47
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/payment_agent.py:68
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/payment_agent.py:69
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/payment_agent.py:70
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/actus_kernel.py:147
+ // assert not self._status_is_pending_ied(), err.PENDING_IED
+ !
+ assert // IED not yet executed
+ // modules/payment_agent.py:72
+ // if self._is_dynamic_annuity():
+ callsub _is_dynamic_annuity
+ bz fund_due_cashflows_after_if_else@3
+ // modules/payment_agent.py:76-77
+ // + max_event_count
+ // * UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_PER_EVENT_BUDGET)
+ dup
+ // modules/payment_agent.py:77
+ // * UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_PER_EVENT_BUDGET)
+ pushint 100
+ // modules/payment_agent.py:76-77
+ // + max_event_count
+ // * UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_PER_EVENT_BUDGET)
+ *
+ // modules/payment_agent.py:75
+ // UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_BASE_BUDGET)
+ intc 4 // 1500
+ // modules/payment_agent.py:75-77
+ // UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_BASE_BUDGET)
+ // + max_event_count
+ // * UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_PER_EVENT_BUDGET)
+ +
+ // modules/payment_agent.py:73-79
+ // ensure_budget(
+ // required_budget=(
+ // UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_BASE_BUDGET)
+ // + max_event_count
+ // * UInt64(cst.OP_UP_FUND_DUE_CASHFLOWS_PER_EVENT_BUDGET)
+ // ),
+ // )
+ intc_0 // 0
+ callsub ensure_budget
+
+fund_due_cashflows_after_if_else@3:
+ // modules/payment_agent.py:81
+ // processed_events = UInt64(0)
+ intc_0 // 0
+ bury 5
+ // modules/payment_agent.py:82
+ // funded_interest = UInt64(0)
+ intc_0 // 0
+ bury 14
+ // modules/payment_agent.py:83
+ // funded_principal = UInt64(0)
+ intc_0 // 0
+ bury 13
+
+fund_due_cashflows_while_top@4:
+ // modules/payment_agent.py:86
+ // processed_events < max_event_count
+ dig 4
+ dig 1
+ <
+ // modules/payment_agent.py:86-87
+ // processed_events < max_event_count
+ // and self.event_cursor < self.schedule_entry_count
+ bz fund_due_cashflows_after_while@11
+ // modules/payment_agent.py:87
+ // and self.event_cursor < self.schedule_entry_count
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ <
+ // modules/payment_agent.py:86-87
+ // processed_events < max_event_count
+ // and self.event_cursor < self.schedule_entry_count
+ bz fund_due_cashflows_after_while@11
+ // modules/payment_agent.py:89
+ // entry = self._get_schedule_entry(self.event_cursor)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ callsub _get_schedule_entry
+ dup
+ bury 17
+ // modules/payment_agent.py:90
+ // if entry.scheduled_time > Global.latest_timestamp:
+ pushint 9
+ extract_uint64
+ dup
+ bury 3
+ global LatestTimestamp
+ >
+ bnz fund_due_cashflows_after_while@11
+ // modules/payment_agent.py:92
+ // if not self._event_is_cash(entry.event_type.as_uint64()):
+ dig 15
+ intc_2 // 8
+ getbyte
+ dup
+ bury 16
+ // modules/actus_kernel.py:351
+ // UInt64(enums.EVT_IP),
+ intc_2 // 8
+ // modules/actus_kernel.py:350-354
+ // return event_type in (
+ // UInt64(enums.EVT_IP),
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_MD),
+ // )
+ ==
+ dup
+ bury 4
+ bnz fund_due_cashflows_bool_true@52
+ dig 14
+ // modules/actus_kernel.py:352
+ // UInt64(enums.EVT_PR),
+ pushint 3
+ // modules/actus_kernel.py:350-354
+ // return event_type in (
+ // UInt64(enums.EVT_IP),
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_MD),
+ // )
+ ==
+ bnz fund_due_cashflows_bool_true@52
+ dig 14
+ // modules/actus_kernel.py:353
+ // UInt64(enums.EVT_MD),
+ pushint 19
+ // modules/actus_kernel.py:350-354
+ // return event_type in (
+ // UInt64(enums.EVT_IP),
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_MD),
+ // )
+ ==
+ bz fund_due_cashflows_bool_false@53
+
+fund_due_cashflows_bool_true@52:
+ intc_1 // 1
+
+fund_due_cashflows_bool_merge@54:
+ // modules/payment_agent.py:92
+ // if not self._event_is_cash(entry.event_type.as_uint64()):
+ bz fund_due_cashflows_after_while@11
+ // modules/actus_kernel.py:548
+ // assert entry.event_id == self.event_cursor, err.INVALID_EVENT_CURSOR
+ dig 15
+ intc_0 // 0
+ extract_uint64
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ ==
+ assert // Invalid event cursor
+ // modules/actus_kernel.py:549
+ // assert entry.scheduled_time <= Global.latest_timestamp, err.NO_DUE_CASHFLOW
+ dig 1
+ global LatestTimestamp
+ <=
+ assert // No due cashflow to pay
+ // modules/actus_kernel.py:413
+ // if event_type not in (UInt64(enums.EVT_IP), UInt64(enums.EVT_MD)):
+ dig 2
+ bnz fund_due_cashflows_after_if_else@15
+ dig 14
+ pushint 19
+ ==
+ bnz fund_due_cashflows_after_if_else@15
+ // modules/actus_kernel.py:414
+ // return UInt64(0)
+ intc_0 // 0
+ bury 11
+
+fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_interest_amount@16:
+ // modules/actus_kernel.py:426
+ // event_type = entry.event_type.as_uint64()
+ dig 15
+ intc_2 // 8
+ getbyte
+ dup
+ bury 16
+ // modules/actus_kernel.py:427
+ // if event_type not in (UInt64(enums.EVT_PR), UInt64(enums.EVT_MD)):
+ pushint 3
+ ==
+ bnz fund_due_cashflows_after_if_else@19
+ dig 14
+ pushint 19
+ ==
+ bnz fund_due_cashflows_after_if_else@19
+ // modules/actus_kernel.py:428
+ // return UInt64(0)
+ intc_0 // 0
+ bury 6
+
+fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28:
+ // modules/actus_kernel.py:553
+ // next_outstanding_principal = entry.next_outstanding_principal
+ dig 15
+ pushint 49
+ extract_uint64
+ bury 8
+ // modules/actus_kernel.py:556
+ // if self._is_dynamic_annuity():
+ callsub _is_dynamic_annuity
+ bnz fund_due_cashflows_if_body@29
+ dig 7
+ bury 9
+
+fund_due_cashflows_after_if_else@38:
+ // modules/actus_kernel.py:572-574
+ // # Funding uses per-unit cumulative indices so each holder can settle
+ // # independently from its current unit balance.
+ // interest_index_delta = self._amount_to_index_delta(interest_amount_due)
+ dig 10
+ callsub _amount_to_index_delta
+ // modules/actus_kernel.py:575
+ // principal_index_delta = self._amount_to_index_delta(principal_amount_due)
+ dig 6
+ callsub _amount_to_index_delta
+ // modules/actus_kernel.py:576
+ // interest_amount = self._index_delta_to_amount(interest_index_delta)
+ dig 1
+ callsub _index_delta_to_amount
+ dup
+ cover 2
+ bury 15
+ // modules/actus_kernel.py:577
+ // principal_amount = self._index_delta_to_amount(principal_index_delta)
+ dup
+ callsub _index_delta_to_amount
+ dup
+ bury 11
+ // modules/actus_kernel.py:578
+ // required_amount = interest_amount + principal_amount
+ dig 2
+ dig 1
+ +
+ dup
+ bury 9
+ // modules/actus_kernel.py:734
+ // balance = self.settlement_asset_id.balance(Global.current_application_address)
+ global CurrentApplicationAddress
+ intc_0 // 0
+ bytec 19 // "settlement_asset_id"
+ app_global_get_ex
+ assert // check self.settlement_asset_id exists
+ asset_holding_get AssetBalance
+ assert // account opted into asset
+ // modules/actus_kernel.py:456
+ // return self.reserved_interest + self.reserved_principal
+ intc_0 // 0
+ bytec 15 // "reserved_interest"
+ app_global_get_ex
+ assert // check self.reserved_interest exists
+ intc_0 // 0
+ bytec 12 // "reserved_principal"
+ app_global_get_ex
+ assert // check self.reserved_principal exists
+ dig 1
+ +
+ // modules/actus_kernel.py:736
+ // assert balance >= reserved_total, err.NOT_ENOUGH_FUNDS
+ dig 2
+ dig 1
+ >=
+ assert // Not enough funds for the payment
+ // modules/actus_kernel.py:737
+ // return balance - reserved_total
+ uncover 2
+ swap
+ -
+ // modules/actus_kernel.py:580
+ // self._available_settlement_funds() >= required_amount
+ uncover 2
+ >=
+ // modules/actus_kernel.py:579-581
+ // assert (
+ // self._available_settlement_funds() >= required_amount
+ // ), err.NOT_ENOUGH_FUNDS
+ assert // Not enough funds for the payment
+ // modules/actus_kernel.py:583
+ // self.reserved_interest += interest_amount
+ uncover 3
+ +
+ bytec 15 // "reserved_interest"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:584
+ // self.reserved_principal += principal_amount
+ intc_0 // 0
+ bytec 12 // "reserved_principal"
+ app_global_get_ex
+ assert // check self.reserved_principal exists
+ +
+ bytec 12 // "reserved_principal"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:585
+ // self.cumulative_interest_index += interest_index_delta
+ intc_0 // 0
+ bytec 16 // "cumulative_interest_index"
+ app_global_get_ex
+ assert // check self.cumulative_interest_index exists
+ uncover 2
+ +
+ bytec 16 // "cumulative_interest_index"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:586
+ // self.cumulative_principal_index += principal_index_delta
+ intc_0 // 0
+ bytec 17 // "cumulative_principal_index"
+ app_global_get_ex
+ assert // check self.cumulative_principal_index exists
+ +
+ bytec 17 // "cumulative_principal_index"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:587
+ // if entry.event_type.as_uint64() == UInt64(enums.EVT_PR):
+ dig 15
+ intc_2 // 8
+ getbyte
+ pushint 3
+ ==
+ bz fund_due_cashflows_else_body@40
+ // modules/actus_kernel.py:588-589
+ // # For PR, the period interest stays accrued until a later IP or MD.
+ // self.accrued_interest += self._entry_interest_segment(entry)
+ intc_0 // 0
+ bytec 6 // "accrued_interest"
+ app_global_get_ex
+ assert // check self.accrued_interest exists
+ dig 16
+ callsub _entry_interest_segment
+ bury 18
+ +
+ bytec 6 // "accrued_interest"
+ swap
+ app_global_put
+
+fund_due_cashflows_after_if_else@41:
+ // modules/actus_kernel.py:592
+ // if not self._is_dynamic_annuity() or entry.event_type.as_uint64() == UInt64(
+ callsub _is_dynamic_annuity
+ bz fund_due_cashflows_if_body@43
+ dig 15
+ intc_2 // 8
+ getbyte
+ // modules/actus_kernel.py:592-594
+ // if not self._is_dynamic_annuity() or entry.event_type.as_uint64() == UInt64(
+ // enums.EVT_MD
+ // ):
+ pushint 19
+ ==
+ bz fund_due_cashflows_after_if_else@44
+
+fund_due_cashflows_if_body@43:
+ // modules/actus_kernel.py:595
+ // self.next_principal_redemption = entry.next_principal_redemption
+ dig 15
+ pushint 41
+ extract_uint64
+ bytec 14 // "next_principal_redemption"
+ swap
+ app_global_put
+
+fund_due_cashflows_after_if_else@44:
+ // modules/actus_kernel.py:596
+ // self.outstanding_principal = next_outstanding_principal
+ bytec 4 // "outstanding_principal"
+ dig 8
+ app_global_put
+ // modules/actus_kernel.py:597
+ // self.interest_calculation_base = next_interest_base
+ bytec 7 // "interest_calculation_base"
+ dig 9
+ app_global_put
+ // modules/actus_kernel.py:598
+ // self.event_cursor += UInt64(1)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_1 // 1
+ +
+ bytec_2 // "event_cursor"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:600
+ // if entry.event_type == arc4.UInt8(
+ dig 15
+ extract 8 1
+ // modules/actus_kernel.py:600-602
+ // if entry.event_type == arc4.UInt8(
+ // enums.EVT_MD
+ // ) and self.outstanding_principal == UInt64(0):
+ pushbytes 0x13
+ b==
+ bz fund_due_cashflows_after_if_else@47
+ // modules/actus_kernel.py:602
+ // ) and self.outstanding_principal == UInt64(0):
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ // modules/actus_kernel.py:600-602
+ // if entry.event_type == arc4.UInt8(
+ // enums.EVT_MD
+ // ) and self.outstanding_principal == UInt64(0):
+ bnz fund_due_cashflows_after_if_else@47
+ // modules/actus_kernel.py:603
+ // self.status = UInt64(enums.STATUS_ENDED)
+ bytec_1 // "status"
+ pushint 200
+ app_global_put
+ // modules/actus_kernel.py:604
+ // self.interest_calculation_base = UInt64(0)
+ bytec 7 // "interest_calculation_base"
+ intc_0 // 0
+ app_global_put
+
+fund_due_cashflows_after_if_else@47:
+ // modules/actus_kernel.py:606-610
+ // self._emit_execution_event(
+ // entry=entry,
+ // payoff=interest_amount + principal_amount,
+ // settled_amount=interest_amount + principal_amount,
+ // )
+ dig 15
+ dig 4
+ dup
+ callsub _emit_execution_event
+ pop
+ // modules/payment_agent.py:96
+ // funded_interest += interest_amount
+ dig 13
+ dig 12
+ +
+ bury 14
+ // modules/payment_agent.py:97
+ // funded_principal += principal_amount
+ dig 12
+ dig 7
+ +
+ bury 13
+ // modules/payment_agent.py:98
+ // processed_events += UInt64(1)
+ dig 4
+ intc_1 // 1
+ +
+ bury 5
+ b fund_due_cashflows_while_top@4
+
+fund_due_cashflows_else_body@40:
+ // modules/actus_kernel.py:591
+ // self.accrued_interest = UInt64(0)
+ bytec 6 // "accrued_interest"
+ intc_0 // 0
+ app_global_put
+ b fund_due_cashflows_after_if_else@41
+
+fund_due_cashflows_if_body@29:
+ // modules/actus_kernel.py:557
+ // event_type = entry.event_type.as_uint64()
+ dig 15
+ intc_2 // 8
+ getbyte
+ dup
+ bury 16
+ // modules/actus_kernel.py:558-560
+ // # Dynamic annuities derive next state from the payment decomposition,
+ // # not only from the precomputed `next_*` fields.
+ // if event_type == UInt64(enums.EVT_PR):
+ pushint 3
+ ==
+ bz fund_due_cashflows_else_body@31
+ // modules/actus_kernel.py:562
+ // self.outstanding_principal - principal_amount_due
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ dig 6
+ -
+ dup
+ bury 9
+ bury 9
+ b fund_due_cashflows_after_if_else@38
+
+fund_due_cashflows_else_body@31:
+ // modules/actus_kernel.py:565
+ // elif event_type == UInt64(enums.EVT_IP):
+ dig 14
+ intc_2 // 8
+ ==
+ bz fund_due_cashflows_else_body@33
+ // modules/actus_kernel.py:566
+ // next_outstanding_principal = self.outstanding_principal
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ swap
+ bury 9
+ assert // check self.outstanding_principal exists
+ // modules/actus_kernel.py:567
+ // next_interest_base = self.interest_calculation_base
+ intc_0 // 0
+ bytec 7 // "interest_calculation_base"
+ app_global_get_ex
+ swap
+ bury 10
+ assert // check self.interest_calculation_base exists
+ b fund_due_cashflows_after_if_else@38
+
+fund_due_cashflows_else_body@33:
+ // modules/actus_kernel.py:568
+ // elif event_type == UInt64(enums.EVT_MD):
+ dig 14
+ pushint 19
+ ==
+ bnz fund_due_cashflows_if_body@34
+ dig 7
+ bury 9
+ b fund_due_cashflows_after_if_else@38
+
+fund_due_cashflows_if_body@34:
+ // modules/actus_kernel.py:569
+ // next_outstanding_principal = UInt64(0)
+ intc_0 // 0
+ bury 8
+ // modules/actus_kernel.py:570
+ // next_interest_base = UInt64(0)
+ intc_0 // 0
+ bury 9
+ b fund_due_cashflows_after_if_else@38
+
+fund_due_cashflows_after_if_else@19:
+ // modules/actus_kernel.py:429
+ // if self._is_dynamic_annuity():
+ callsub _is_dynamic_annuity
+ bz fund_due_cashflows_after_if_else@27
+ // modules/actus_kernel.py:430
+ // if event_type == UInt64(enums.EVT_MD):
+ dig 14
+ pushint 19
+ ==
+ bz fund_due_cashflows_after_if_else@22
+ // modules/actus_kernel.py:431
+ // return self.outstanding_principal
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ bury 6
+ // modules/actus_kernel.py:552
+ // principal_amount_due = self._entry_principal_amount(entry)
+ b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28
+
+fund_due_cashflows_after_if_else@22:
+ // modules/actus_kernel.py:432
+ // interest_due = self.accrued_interest + self._entry_interest_segment(entry)
+ intc_0 // 0
+ bytec 6 // "accrued_interest"
+ app_global_get_ex
+ assert // check self.accrued_interest exists
+ dig 16
+ callsub _entry_interest_segment
+ bury 18
+ +
+ dup
+ bury 11
+ // modules/actus_kernel.py:433
+ // if self.next_principal_redemption <= interest_due:
+ intc_0 // 0
+ bytec 14 // "next_principal_redemption"
+ app_global_get_ex
+ assert // check self.next_principal_redemption exists
+ >=
+ bz fund_due_cashflows_after_if_else@24
+ // modules/actus_kernel.py:434
+ // return UInt64(0)
+ intc_0 // 0
+ bury 6
+ // modules/actus_kernel.py:552
+ // principal_amount_due = self._entry_principal_amount(entry)
+ b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28
+
+fund_due_cashflows_after_if_else@24:
+ // modules/actus_kernel.py:435
+ // principal_amount = self.next_principal_redemption - interest_due
+ intc_0 // 0
+ bytec 14 // "next_principal_redemption"
+ app_global_get_ex
+ assert // check self.next_principal_redemption exists
+ dig 10
+ -
+ dup
+ bury 8
+ // modules/actus_kernel.py:436
+ // if principal_amount > self.outstanding_principal:
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ >
+ bz fund_due_cashflows_after_if_else@26
+ // modules/actus_kernel.py:437
+ // return self.outstanding_principal
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ bury 6
+ // modules/actus_kernel.py:552
+ // principal_amount_due = self._entry_principal_amount(entry)
+ b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28
+
+fund_due_cashflows_after_if_else@26:
+ dig 6
+ bury 6
+ // modules/actus_kernel.py:552
+ // principal_amount_due = self._entry_principal_amount(entry)
+ b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28
+
+fund_due_cashflows_after_if_else@27:
+ // modules/actus_kernel.py:440
+ // entry.next_outstanding_principal <= self.outstanding_principal
+ dig 15
+ pushint 49
+ extract_uint64
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ dup2
+ <=
+ // modules/actus_kernel.py:439-441
+ // assert (
+ // entry.next_outstanding_principal <= self.outstanding_principal
+ // ), err.INVALID_ACTUS_CONFIG
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:442
+ // return self.outstanding_principal - entry.next_outstanding_principal
+ swap
+ -
+ bury 6
+ // modules/actus_kernel.py:552
+ // principal_amount_due = self._entry_principal_amount(entry)
+ b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_principal_amount@28
+
+fund_due_cashflows_after_if_else@15:
+ // modules/actus_kernel.py:415
+ // return self.accrued_interest + self._entry_interest_segment(entry)
+ intc_0 // 0
+ bytec 6 // "accrued_interest"
+ app_global_get_ex
+ assert // check self.accrued_interest exists
+ dig 16
+ callsub _entry_interest_segment
+ bury 18
+ +
+ bury 11
+ // modules/actus_kernel.py:551
+ // interest_amount_due = self._entry_interest_amount(entry)
+ b fund_due_cashflows_after_inlined_modules.actus_kernel.ActusKernelModule._entry_interest_amount@16
+
+fund_due_cashflows_after_while@11:
+ // modules/payment_agent.py:100
+ // assert processed_events > UInt64(0), err.NO_DUE_CASHFLOW
+ dig 4
+ dup
+ assert // No due cashflow to pay
+ // modules/payment_agent.py:104
+ // total_funded=funded_interest + funded_principal,
+ dig 14
+ dup
+ dig 15
+ dup
+ cover 3
+ +
+ // modules/payment_agent.py:106
+ // timestamp=Global.latest_timestamp,
+ global LatestTimestamp
+ // modules/payment_agent.py:101-107
+ // return typ.CashFundingResult(
+ // funded_interest=funded_interest,
+ // funded_principal=funded_principal,
+ // total_funded=funded_interest + funded_principal,
+ // processed_events=processed_events,
+ // timestamp=Global.latest_timestamp,
+ // )
+ uncover 2
+ itob
+ uncover 3
+ itob
+ concat
+ uncover 2
+ itob
+ concat
+ uncover 2
+ itob
+ concat
+ swap
+ itob
+ concat
+ // modules/payment_agent.py:47
+ // @arc4.abimethod
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+fund_due_cashflows_bool_false@53:
+ intc_0 // 0
+ b fund_due_cashflows_bool_merge@54
+
+
+// modules.payment_agent.PaymentAgent.claim_due_cashflows[routing]() -> void:
+claim_due_cashflows:
+ pushbytes ""
+ dupn 2
+ // modules/payment_agent.py:109
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dupn 2
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 2
+ dup
+ intc_0 // 0
+ extract_uint16 // on error: invalid array length header
+ pushint 2
+ +
+ dig 1
+ len
+ ==
+ assert // invalid number of bytes for arc4.dynamic_array
+ extract 2 0
+ swap
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ swap
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/payment_agent.py:15
+ // if self.op_daemon.value != Global.zero_address:
+ intc_0 // 0
+ bytec 27 // 0x523a4f504423
+ app_global_get_ex
+ assert // check self.op_daemon exists
+ global ZeroAddress
+ !=
+ bz claim_due_cashflows_after_if_else@17
+ // modules/payment_agent.py:17
+ // Txn.sender == self.op_daemon.value
+ txn Sender
+ intc_0 // 0
+ bytec 27 // 0x523a4f504423
+ app_global_get_ex
+ assert // check self.op_daemon exists
+ ==
+ // modules/payment_agent.py:17-19
+ // Txn.sender == self.op_daemon.value
+ // or Txn.sender == holding_address
+ // or Txn.sender == self.account[holding_address].payment_address
+ bnz claim_due_cashflows_bool_true@14
+ // modules/payment_agent.py:18
+ // or Txn.sender == holding_address
+ txn Sender
+ dig 3
+ ==
+ // modules/payment_agent.py:17-19
+ // Txn.sender == self.op_daemon.value
+ // or Txn.sender == holding_address
+ // or Txn.sender == self.account[holding_address].payment_address
+ bnz claim_due_cashflows_bool_true@14
+ // modules/payment_agent.py:19
+ // or Txn.sender == self.account[holding_address].payment_address
+ txn Sender
+ dig 1
+ box_get
+ assert // check self.account entry exists
+ extract 0 32
+ ==
+ // modules/payment_agent.py:17-19
+ // Txn.sender == self.op_daemon.value
+ // or Txn.sender == holding_address
+ // or Txn.sender == self.account[holding_address].payment_address
+ bz claim_due_cashflows_bool_false@15
+
+claim_due_cashflows_bool_true@14:
+ intc_1 // 1
+
+claim_due_cashflows_bool_merge@16:
+ // modules/payment_agent.py:16-20
+ // assert (
+ // Txn.sender == self.op_daemon.value
+ // or Txn.sender == holding_address
+ // or Txn.sender == self.account[holding_address].payment_address
+ // ), err.UNAUTHORIZED
+ assert // Not authorized
+
+claim_due_cashflows_after_if_else@17:
+ // modules/payment_agent.py:139
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/payment_agent.py:140
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/actus_kernel.py:147
+ // assert not self._status_is_pending_ied(), err.PENDING_IED
+ !
+ assert // IED not yet executed
+ // modules/payment_agent.py:143
+ // self._ensure_units_activated(holding_address)
+ dig 2
+ dup
+ callsub _ensure_units_activated
+ // modules/payment_agent.py:144
+ // self._settle_position(holding_address)
+ callsub _settle_position
+ popn 2
+ // modules/accounting.py:117
+ // self.account[holding_address].claimable_interest
+ dup
+ box_get
+ assert // check self.account entry exists
+ dup
+ pushint 73
+ extract_uint64
+ dup
+ cover 2
+ bury 8
+ // modules/accounting.py:118
+ // + self.account[holding_address].claimable_principal
+ dup
+ pushint 81
+ extract_uint64
+ dup
+ bury 8
+ // modules/accounting.py:117-118
+ // self.account[holding_address].claimable_interest
+ // + self.account[holding_address].claimable_principal
+ uncover 2
+ +
+ dup
+ bury 6
+ // modules/payment_agent.py:146
+ // assert total_amount > UInt64(0), err.NO_DUE_CASHFLOW
+ assert // No due cashflow to pay
+ // modules/payment_agent.py:25
+ // self.account[holding_address].payment_address.is_opted_in(
+ extract 0 32
+ // modules/payment_agent.py:26
+ // self.settlement_asset_id
+ intc_0 // 0
+ bytec 19 // "settlement_asset_id"
+ app_global_get_ex
+ assert // check self.settlement_asset_id exists
+ // modules/payment_agent.py:25-27
+ // self.account[holding_address].payment_address.is_opted_in(
+ // self.settlement_asset_id
+ // )
+ asset_holding_get AssetBalance
+ bury 1
+ // modules/payment_agent.py:25-28
+ // self.account[holding_address].payment_address.is_opted_in(
+ // self.settlement_asset_id
+ // )
+ // and not self.account[holding_address].suspended
+ bz claim_due_cashflows_bool_false@24
+ // modules/payment_agent.py:28
+ // and not self.account[holding_address].suspended
+ dup
+ box_get
+ assert // check self.account entry exists
+ pushint 384
+ getbit
+ bnz claim_due_cashflows_bool_false@24
+ intc_1 // 1
+
+claim_due_cashflows_bool_merge@25:
+ // modules/payment_agent.py:151
+ // if self._is_payment_executable(holding_address):
+ bz claim_due_cashflows_after_if_else@3
+ // modules/payment_agent.py:34
+ // self.settlement_asset_id.balance(Global.current_application_address)
+ global CurrentApplicationAddress
+ intc_0 // 0
+ bytec 19 // "settlement_asset_id"
+ app_global_get_ex
+ assert // check self.settlement_asset_id exists
+ swap
+ dig 1
+ asset_holding_get AssetBalance
+ assert // account opted into asset
+ // modules/payment_agent.py:34-35
+ // self.settlement_asset_id.balance(Global.current_application_address)
+ // >= payment_amount
+ dig 5
+ dup
+ cover 2
+ >=
+ // modules/payment_agent.py:33-36
+ // assert (
+ // self.settlement_asset_id.balance(Global.current_application_address)
+ // >= payment_amount
+ // ), err.NOT_ENOUGH_FUNDS
+ assert // Not enough funds for the payment
+ // modules/payment_agent.py:153
+ // self._pay(self.account[holding_address].payment_address, total_amount)
+ dig 2
+ dup
+ cover 3
+ box_get
+ assert // check self.account entry exists
+ dup
+ extract 0 32
+ // modules/payment_agent.py:40-45
+ // itxn.AssetTransfer(
+ // xfer_asset=self.settlement_asset_id,
+ // asset_receiver=receiver,
+ // asset_amount=amount,
+ // fee=Global.min_txn_fee,
+ // ).submit()
+ itxn_begin
+ // modules/payment_agent.py:44
+ // fee=Global.min_txn_fee,
+ global MinTxnFee
+ uncover 3
+ itxn_field AssetAmount
+ swap
+ itxn_field AssetReceiver
+ uncover 2
+ itxn_field XferAsset
+ // modules/payment_agent.py:40
+ // itxn.AssetTransfer(
+ pushint 4 // axfer
+ itxn_field TypeEnum
+ itxn_field Fee
+ // modules/payment_agent.py:40-45
+ // itxn.AssetTransfer(
+ // xfer_asset=self.settlement_asset_id,
+ // asset_receiver=receiver,
+ // asset_amount=amount,
+ // fee=Global.min_txn_fee,
+ // ).submit()
+ itxn_submit
+ // modules/accounting.py:125-126
+ // # Get the claimable amounts before reset
+ // interest_amount = position.claimable_interest
+ dup
+ pushint 73
+ extract_uint64
+ dup
+ cover 2
+ bury 9
+ // modules/accounting.py:127
+ // principal_amount = position.claimable_principal
+ dup
+ pushint 81
+ extract_uint64
+ dup
+ cover 3
+ bury 9
+ // modules/accounting.py:129-130
+ // # Reset the position's claimable amounts
+ // position.claimable_interest = UInt64(0)
+ intc_0 // 0
+ itob
+ swap
+ dig 1
+ replace2 73
+ // modules/accounting.py:131
+ // position.claimable_principal = UInt64(0)
+ swap
+ replace2 81
+ // modules/accounting.py:132
+ // self.account[holding_address] = position.copy()
+ uncover 3
+ swap
+ box_put
+ // modules/accounting.py:134
+ // assert self.reserved_interest >= interest_amount, err.NOT_ENOUGH_FUNDS
+ intc_0 // 0
+ bytec 15 // "reserved_interest"
+ app_global_get_ex
+ assert // check self.reserved_interest exists
+ dup
+ dig 2
+ >=
+ assert // Not enough funds for the payment
+ // modules/accounting.py:135
+ // assert self.reserved_principal >= principal_amount, err.NOT_ENOUGH_FUNDS
+ intc_0 // 0
+ bytec 12 // "reserved_principal"
+ app_global_get_ex
+ assert // check self.reserved_principal exists
+ dig 3
+ >=
+ assert // Not enough funds for the payment
+ // modules/accounting.py:137-138
+ // # Update the global reserved interest and principal amounts
+ // self.reserved_interest -= interest_amount
+ swap
+ -
+ bytec 15 // "reserved_interest"
+ swap
+ app_global_put
+ // modules/accounting.py:139
+ // self.reserved_principal -= principal_amount
+ intc_0 // 0
+ bytec 12 // "reserved_principal"
+ app_global_get_ex
+ assert // check self.reserved_principal exists
+ swap
+ -
+ bytec 12 // "reserved_principal"
+ swap
+ app_global_put
+
+claim_due_cashflows_after_if_else@3:
+ // modules/payment_agent.py:159
+ // total_amount=interest_amount + principal_amount,
+ dig 5
+ dup
+ dig 6
+ dup
+ cover 3
+ +
+ // modules/payment_agent.py:160
+ // timestamp=Global.latest_timestamp,
+ global LatestTimestamp
+ // modules/payment_agent.py:156-162
+ // return typ.CashClaimResult(
+ // interest_amount=interest_amount,
+ // principal_amount=principal_amount,
+ // total_amount=interest_amount + principal_amount,
+ // timestamp=Global.latest_timestamp,
+ // context=payment_info,
+ // )
+ uncover 2
+ itob
+ uncover 3
+ itob
+ concat
+ uncover 2
+ itob
+ concat
+ swap
+ itob
+ concat
+ dig 2
+ dup
+ len
+ itob
+ extract 6 2
+ swap
+ concat
+ swap
+ pushbytes 0x0022
+ concat
+ swap
+ concat
+ // modules/payment_agent.py:109
+ // @arc4.abimethod
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+claim_due_cashflows_bool_false@24:
+ intc_0 // 0
+ b claim_due_cashflows_bool_merge@25
+
+claim_due_cashflows_bool_false@15:
+ intc_0 // 0
+ b claim_due_cashflows_bool_merge@16
+
+
+// modules.transfer_agent.TransferAgent.transfer_set_schedule[routing]() -> void:
+transfer_set_schedule:
+ // modules/transfer_agent.py:22
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ // modules/transfer_agent.py:40
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/transfer_agent.py:41
+ // assert open_date < closure_date, err.INVALID_SORTING
+ dup2
+ <
+ assert // Time events must be sorted in strictly ascending order
+ // modules/transfer_agent.py:43
+ // self.transfer_opening_date = open_date
+ bytec 29 // "transfer_opening_date"
+ uncover 2
+ app_global_put
+ // modules/transfer_agent.py:44
+ // self.transfer_closure_date = closure_date
+ bytec 30 // "transfer_closure_date"
+ swap
+ app_global_put
+ // modules/transfer_agent.py:45
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/transfer_agent.py:22
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.transfer_agent.TransferAgent.primary_distribution[routing]() -> void:
+primary_distribution:
+ // modules/transfer_agent.py:47
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ dup
+ cover 2
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/rbac.py:73
+ // assert self._role_is_active(self.primary_dealer, Txn.sender), err.UNAUTHORIZED
+ bytec 22 // 0x523a50594423
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+ // modules/transfer_agent.py:76
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/transfer_agent.py:77
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/transfer_agent.py:78
+ // assert self._status_is_pending_ied(), err.PRIMARY_DISTRIBUTION_CLOSED
+ assert // Primary distribution is closed
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ dig 2
+ concat
+ dup
+ cover 3
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/transfer_agent.py:80
+ // self._assert_is_not_account_suspended(holding_address)
+ swap
+ callsub _assert_is_not_account_suspended
+ // modules/transfer_agent.py:81
+ // assert units > UInt64(0), err.ZERO_UNITS
+ dup
+ assert // Can not distribute zero units
+ // modules/transfer_agent.py:83
+ // self.reserved_units_total + units <= self.total_units
+ intc_0 // 0
+ bytec 11 // "reserved_units_total"
+ app_global_get_ex
+ assert // check self.reserved_units_total exists
+ +
+ intc_0 // 0
+ bytec 13 // "total_units"
+ app_global_get_ex
+ assert // check self.total_units exists
+ <=
+ // modules/transfer_agent.py:82-84
+ // assert (
+ // self.reserved_units_total + units <= self.total_units
+ // ), err.OVER_DISTRIBUTION
+ assert // Insufficient remaining D-ASA units
+ // modules/transfer_agent.py:85
+ // if self.initial_exchange_date:
+ intc_0 // 0
+ bytec 28 // "initial_exchange_date"
+ app_global_get_ex
+ assert // check self.initial_exchange_date exists
+ bz primary_distribution_after_if_else@3
+ // modules/transfer_agent.py:87
+ // Global.latest_timestamp <= self.initial_exchange_date
+ global LatestTimestamp
+ intc_0 // 0
+ bytec 28 // "initial_exchange_date"
+ app_global_get_ex
+ assert // check self.initial_exchange_date exists
+ <=
+ // modules/transfer_agent.py:86-88
+ // assert (
+ // Global.latest_timestamp <= self.initial_exchange_date
+ // ), err.PRIMARY_DISTRIBUTION_CLOSED
+ assert // Primary distribution is closed
+
+primary_distribution_after_if_else@3:
+ // modules/accounting.py:148
+ // self.account[holding_address].reserved_units += units
+ dupn 2
+ box_get
+ assert // check self.account entry exists
+ pushint 40
+ extract_uint64
+ dig 3
+ dup
+ cover 3
+ +
+ itob
+ pushint 40
+ swap
+ box_replace
+ // modules/transfer_agent.py:91
+ // self.reserved_units_total += units
+ intc_0 // 0
+ bytec 11 // "reserved_units_total"
+ app_global_get_ex
+ assert // check self.reserved_units_total exists
+ +
+ bytec 11 // "reserved_units_total"
+ dig 1
+ app_global_put
+ // modules/transfer_agent.py:92
+ // return self.total_units - self.reserved_units_total
+ intc_0 // 0
+ bytec 13 // "total_units"
+ app_global_get_ex
+ assert // check self.total_units exists
+ swap
+ -
+ // modules/transfer_agent.py:47
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.transfer_agent.TransferAgent.transfer[routing]() -> void:
+transfer:
+ intc_0 // 0
+ dup
+ // modules/transfer_agent.py:94
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 3
+ dupn 2
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/transfer_agent.py:130
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/transfer_agent.py:131
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/actus_kernel.py:147
+ // assert not self._status_is_pending_ied(), err.PENDING_IED
+ !
+ assert // IED not yet executed
+ // modules/transfer_agent.py:13
+ // if self.transfer_opening_date:
+ intc_0 // 0
+ bytec 29 // "transfer_opening_date"
+ app_global_get_ex
+ assert // check self.transfer_opening_date exists
+ bz transfer_after_if_else@3
+ // modules/transfer_agent.py:15
+ // self.transfer_opening_date <= Global.latest_timestamp
+ intc_0 // 0
+ bytec 29 // "transfer_opening_date"
+ app_global_get_ex
+ assert // check self.transfer_opening_date exists
+ global LatestTimestamp
+ <=
+ // modules/transfer_agent.py:14-16
+ // assert (
+ // self.transfer_opening_date <= Global.latest_timestamp
+ // ), err.CLOSED_TRANSFER
+ assert // Transfer is closed
+
+transfer_after_if_else@3:
+ // modules/transfer_agent.py:17
+ // if self.transfer_closure_date:
+ intc_0 // 0
+ bytec 30 // "transfer_closure_date"
+ app_global_get_ex
+ assert // check self.transfer_closure_date exists
+ bz transfer_after_if_else@5
+ // modules/transfer_agent.py:19
+ // Global.latest_timestamp < self.transfer_closure_date
+ global LatestTimestamp
+ intc_0 // 0
+ bytec 30 // "transfer_closure_date"
+ app_global_get_ex
+ assert // check self.transfer_closure_date exists
+ <
+ // modules/transfer_agent.py:18-20
+ // assert (
+ // Global.latest_timestamp < self.transfer_closure_date
+ // ), err.CLOSED_TRANSFER
+ assert // Transfer is closed
+
+transfer_after_if_else@5:
+ // modules/transfer_agent.py:135
+ // assert Txn.sender == sender_holding_address, err.UNAUTHORIZED
+ txn Sender
+ dig 4
+ dup
+ cover 2
+ ==
+ assert // Not authorized
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ dig 1
+ concat
+ dup
+ bury 8
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ bytec 8 // 0x4123
+ dig 5
+ dup
+ cover 2
+ concat
+ dup
+ bury 9
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/transfer_agent.py:138
+ // self._assert_is_not_account_suspended(sender_holding_address)
+ dig 2
+ callsub _assert_is_not_account_suspended
+ // modules/transfer_agent.py:139
+ // self._assert_is_not_account_suspended(receiver_holding_address)
+ dup
+ callsub _assert_is_not_account_suspended
+ // modules/transfer_agent.py:140
+ // assert sender_holding_address != receiver_holding_address, err.SELF_TRANSFER
+ uncover 2
+ !=
+ assert // Sender and receiver must be different
+ // modules/transfer_agent.py:141
+ // assert units > UInt64(0), err.NULL_TRANSFER
+ dig 1
+ dup
+ assert // Transfer units must be greater than zero
+ // modules/transfer_agent.py:142
+ // assert units <= self.account[sender_holding_address].units, err.OVER_TRANSFER
+ swap
+ box_get
+ assert // check self.account entry exists
+ intc_3 // 32
+ extract_uint64
+ <=
+ assert // Insufficient sender units to transfer
+ // modules/actus_kernel.py:763
+ // if self.event_cursor >= self.schedule_entry_count:
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ >=
+ bnz transfer_after_inlined_modules.actus_kernel.ActusKernelModule._assert_no_due_event_pending@10
+ // modules/actus_kernel.py:765
+ // next_entry = self._get_schedule_entry(self.event_cursor)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ callsub _get_schedule_entry
+ // modules/actus_kernel.py:767
+ // next_entry.scheduled_time > Global.latest_timestamp
+ pushint 9
+ extract_uint64
+ global LatestTimestamp
+ >
+ // modules/actus_kernel.py:766-768
+ // assert (
+ // next_entry.scheduled_time > Global.latest_timestamp
+ // ), err.PENDING_ACTUS_EVENT
+ assert // ACTUS event not yet executed
+
+transfer_after_inlined_modules.actus_kernel.ActusKernelModule._assert_no_due_event_pending@10:
+ // modules/transfer_agent.py:145
+ // self._ensure_units_activated(sender_holding_address)
+ dig 3
+ dup
+ callsub _ensure_units_activated
+ // modules/transfer_agent.py:146
+ // self._ensure_units_activated(receiver_holding_address)
+ dig 3
+ dup
+ cover 2
+ callsub _ensure_units_activated
+ // modules/transfer_agent.py:147
+ // self._settle_position(sender_holding_address)
+ callsub _settle_position
+ popn 2
+ // modules/transfer_agent.py:148
+ // self._settle_position(receiver_holding_address)
+ callsub _settle_position
+ popn 2
+ // modules/accounting.py:152
+ // assert units <= self.account[holding_address].units, err.OVER_TRANSFER
+ dig 5
+ dup
+ box_get
+ assert // check self.account entry exists
+ intc_3 // 32
+ extract_uint64
+ dig 2
+ dup
+ cover 2
+ dig 1
+ <=
+ assert // Insufficient sender units to transfer
+ // modules/accounting.py:153
+ // self.account[holding_address].units -= units
+ dig 1
+ -
+ itob
+ uncover 2
+ intc_3 // 32
+ uncover 2
+ box_replace
+ // modules/accounting.py:144
+ // self.account[holding_address].units += units
+ dig 5
+ dup
+ box_get
+ assert // check self.account entry exists
+ intc_3 // 32
+ extract_uint64
+ uncover 2
+ +
+ itob
+ intc_3 // 32
+ swap
+ box_replace
+ // modules/transfer_agent.py:94
+ // @arc4.abimethod
+ bytec_0 // 0x151f7c75
+ dig 2
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.accounting.AccountingModule.account_suspension[routing]() -> void:
+account_suspension:
+ // modules/accounting.py:165
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.bool
+ intc_0 // 0
+ getbit
+ // modules/rbac.py:79
+ // assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
+ bytec 21 // 0x523a41555423
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ uncover 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/accounting.py:185
+ // self.account[holding_address].suspended = suspended
+ dup
+ pushint 48
+ intc_1 // 1
+ box_extract
+ intc_0 // 0
+ uncover 3
+ setbit
+ pushint 48
+ swap
+ box_replace
+ // modules/accounting.py:186
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/accounting.py:165
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.accounting.AccountingModule.account_open[routing]() -> void:
+account_open:
+ // modules/accounting.py:188
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/rbac.py:70
+ // assert self._role_is_active(self.account_manager, Txn.sender), err.UNAUTHORIZED
+ bytec 23 // 0x523a4d4e4723
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+ // modules/actus_kernel.py:139
+ // return self.status == UInt64(enums.STATUS_ENDED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 200
+ ==
+ // modules/accounting.py:210
+ // assert not self._status_is_ended(), err.UNAUTHORIZED
+ !
+ assert // Not authorized
+ // modules/accounting.py:211
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/accounting.py:212
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/accounting.py:213
+ // assert holding_address not in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ uncover 2
+ concat
+ dup
+ box_len
+ bury 1
+ !
+ assert // Invalid account holding address
+ // modules/accounting.py:34
+ // units=UInt64(0),
+ intc_0 // 0
+ // modules/accounting.py:32-42
+ // return typ.AccountPosition(
+ // payment_address=payment_address,
+ // units=UInt64(0),
+ // reserved_units=UInt64(0),
+ // suspended=False,
+ // settled_cursor=UInt64(0),
+ // interest_checkpoint=UInt64(0),
+ // principal_checkpoint=UInt64(0),
+ // claimable_interest=UInt64(0),
+ // claimable_principal=UInt64(0),
+ // )
+ itob
+ uncover 2
+ dig 1
+ concat
+ dig 1
+ concat
+ bytec 41 // 0x00
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ swap
+ concat
+ // modules/accounting.py:214
+ // self.account[holding_address] = self._new_account_position(payment_address)
+ box_put
+ // modules/accounting.py:215
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/accounting.py:188
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.accounting.AccountingModule.account_update_payment_address[routing]() -> void:
+account_update_payment_address:
+ // modules/accounting.py:217
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ dig 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/accounting.py:238
+ // assert Txn.sender == holding_address, err.UNAUTHORIZED
+ txn Sender
+ uncover 3
+ ==
+ assert // Not authorized
+ // modules/accounting.py:239
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/accounting.py:240
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/accounting.py:241
+ // self.account[holding_address].payment_address = payment_address
+ intc_0 // 0
+ uncover 2
+ box_replace
+ // modules/accounting.py:242
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/accounting.py:217
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.accounting.AccountingModule.account_get_position[routing]() -> void:
+account_get_position:
+ // modules/accounting.py:244
+ // @arc4.abimethod(readonly=True)
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ swap
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/accounting.py:259
+ // return self.account[holding_address]
+ box_get
+ pop
+ // modules/accounting.py:244
+ // @arc4.abimethod(readonly=True)
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.actus_kernel.ActusKernelModule.contract_create[routing]() -> void:
+contract_create:
+ // modules/actus_kernel.py:1019
+ // @arc4.abimethod(create="require")
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/actus_kernel.py:1033
+ // self.arranger.value = arranger
+ bytec 18 // 0x523a41525223
+ swap
+ app_global_put
+ // modules/actus_kernel.py:1034
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/actus_kernel.py:1019
+ // @arc4.abimethod(create="require")
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.actus_kernel.ActusKernelModule.contract_config[routing]() -> void:
+contract_config:
+ pushbytes ""
+ dup
+ // modules/actus_kernel.py:1036
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dupn 2
+ len
+ pushint 107
+ ==
+ assert // invalid number of bytes for smart_contracts.abi_types.NormalizedActusTerms
+ txna ApplicationArgs 2
+ dup
+ cover 2
+ len
+ pushint 72
+ ==
+ assert // invalid number of bytes for smart_contracts.abi_types.InitialKernelState
+ txna ApplicationArgs 3
+ dup
+ cover 2
+ dup
+ len
+ dig 1
+ intc_3 // 32
+ extract_uint16 // on error: invalid tuple encoding
+ dup
+ pushint 34
+ ==
+ assert // invalid tail pointer at index 1 of (uint8[32],(len+utf8[]))
+ uncover 2
+ swap
+ dig 2
+ substring3
+ dup
+ cover 3
+ intc_0 // 0
+ extract_uint16 // on error: invalid array length header
+ pushint 36
+ +
+ ==
+ assert // invalid number of bytes for smart_contracts.abi_types.Prospectus
+ // modules/actus_kernel.py:1066
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/actus_kernel.py:1068-1069
+ // # Configure Contract
+ // self.contract_type = terms.contract_type.as_uint64()
+ intc_0 // 0
+ getbyte
+ dup
+ bytec 10 // "contract_type"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:218-225
+ // return contract_type in (
+ // UInt64(enums.CT_PAM),
+ // UInt64(enums.CT_ANN),
+ // UInt64(enums.CT_NAM),
+ // UInt64(enums.CT_LAM),
+ // UInt64(enums.CT_LAX),
+ // UInt64(enums.CT_CLM),
+ // )
+ bz contract_config_bool_true@7
+ dup
+ // modules/actus_kernel.py:220
+ // UInt64(enums.CT_ANN),
+ intc_1 // 1
+ // modules/actus_kernel.py:218-225
+ // return contract_type in (
+ // UInt64(enums.CT_PAM),
+ // UInt64(enums.CT_ANN),
+ // UInt64(enums.CT_NAM),
+ // UInt64(enums.CT_LAM),
+ // UInt64(enums.CT_LAX),
+ // UInt64(enums.CT_CLM),
+ // )
+ ==
+ bnz contract_config_bool_true@7
+ dup
+ // modules/actus_kernel.py:221
+ // UInt64(enums.CT_NAM),
+ pushint 2
+ // modules/actus_kernel.py:218-225
+ // return contract_type in (
+ // UInt64(enums.CT_PAM),
+ // UInt64(enums.CT_ANN),
+ // UInt64(enums.CT_NAM),
+ // UInt64(enums.CT_LAM),
+ // UInt64(enums.CT_LAX),
+ // UInt64(enums.CT_CLM),
+ // )
+ ==
+ bnz contract_config_bool_true@7
+ dup
+ // modules/actus_kernel.py:222
+ // UInt64(enums.CT_LAM),
+ pushint 3
+ // modules/actus_kernel.py:218-225
+ // return contract_type in (
+ // UInt64(enums.CT_PAM),
+ // UInt64(enums.CT_ANN),
+ // UInt64(enums.CT_NAM),
+ // UInt64(enums.CT_LAM),
+ // UInt64(enums.CT_LAX),
+ // UInt64(enums.CT_CLM),
+ // )
+ ==
+ bnz contract_config_bool_true@7
+ dup
+ // modules/actus_kernel.py:223
+ // UInt64(enums.CT_LAX),
+ pushint 4
+ // modules/actus_kernel.py:218-225
+ // return contract_type in (
+ // UInt64(enums.CT_PAM),
+ // UInt64(enums.CT_ANN),
+ // UInt64(enums.CT_NAM),
+ // UInt64(enums.CT_LAM),
+ // UInt64(enums.CT_LAX),
+ // UInt64(enums.CT_CLM),
+ // )
+ ==
+ bnz contract_config_bool_true@7
+ dup
+ // modules/actus_kernel.py:224
+ // UInt64(enums.CT_CLM),
+ pushint 5
+ // modules/actus_kernel.py:218-225
+ // return contract_type in (
+ // UInt64(enums.CT_PAM),
+ // UInt64(enums.CT_ANN),
+ // UInt64(enums.CT_NAM),
+ // UInt64(enums.CT_LAM),
+ // UInt64(enums.CT_LAX),
+ // UInt64(enums.CT_CLM),
+ // )
+ ==
+ bz contract_config_bool_false@8
+
+contract_config_bool_true@7:
+ intc_1 // 1
+
+contract_config_bool_merge@9:
+ // modules/actus_kernel.py:229
+ // assert self._is_supported_contract_type(contract_type), err.INVALID_ACTUS_CONFIG
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:1071
+ // self._store_contract_config(self.contract_type, terms, initial_state)
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ swap
+ bury 2
+ assert // check self.contract_type exists
+ // modules/actus_kernel.py:325
+ // assert terms.initial_exchange_amount > UInt64(0), err.INVALID_ACTUS_CONFIG
+ dig 4
+ dup
+ pushint 33
+ extract_uint64
+ dup
+ bury 8
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:327
+ // terms.day_count_convention.as_uint64()
+ pushint 57
+ getbyte
+ dup
+ bury 8
+ // modules/actus_kernel.py:297-303
+ // return day_count_convention in (
+ // UInt64(enums.DCC_AA),
+ // UInt64(enums.DCC_A360),
+ // UInt64(enums.DCC_A365),
+ // UInt64(enums.DCC_30E360ISDA),
+ // UInt64(enums.DCC_30E360),
+ // )
+ bz contract_config_bool_true@16
+ dig 6
+ // modules/actus_kernel.py:299
+ // UInt64(enums.DCC_A360),
+ intc_1 // 1
+ // modules/actus_kernel.py:297-303
+ // return day_count_convention in (
+ // UInt64(enums.DCC_AA),
+ // UInt64(enums.DCC_A360),
+ // UInt64(enums.DCC_A365),
+ // UInt64(enums.DCC_30E360ISDA),
+ // UInt64(enums.DCC_30E360),
+ // )
+ ==
+ bnz contract_config_bool_true@16
+ dig 6
+ // modules/actus_kernel.py:300
+ // UInt64(enums.DCC_A365),
+ pushint 2
+ // modules/actus_kernel.py:297-303
+ // return day_count_convention in (
+ // UInt64(enums.DCC_AA),
+ // UInt64(enums.DCC_A360),
+ // UInt64(enums.DCC_A365),
+ // UInt64(enums.DCC_30E360ISDA),
+ // UInt64(enums.DCC_30E360),
+ // )
+ ==
+ bnz contract_config_bool_true@16
+ dig 6
+ // modules/actus_kernel.py:301
+ // UInt64(enums.DCC_30E360ISDA),
+ pushint 3
+ // modules/actus_kernel.py:297-303
+ // return day_count_convention in (
+ // UInt64(enums.DCC_AA),
+ // UInt64(enums.DCC_A360),
+ // UInt64(enums.DCC_A365),
+ // UInt64(enums.DCC_30E360ISDA),
+ // UInt64(enums.DCC_30E360),
+ // )
+ ==
+ bnz contract_config_bool_true@16
+ dig 6
+ // modules/actus_kernel.py:302
+ // UInt64(enums.DCC_30E360),
+ pushint 4
+ // modules/actus_kernel.py:297-303
+ // return day_count_convention in (
+ // UInt64(enums.DCC_AA),
+ // UInt64(enums.DCC_A360),
+ // UInt64(enums.DCC_A365),
+ // UInt64(enums.DCC_30E360ISDA),
+ // UInt64(enums.DCC_30E360),
+ // )
+ ==
+ bz contract_config_bool_false@17
+
+contract_config_bool_true@16:
+ intc_1 // 1
+
+contract_config_bool_merge@18:
+ // modules/actus_kernel.py:309-311
+ // assert self._is_supported_day_count_convention(
+ // day_count_convention
+ // ), err.INVALID_DAY_COUNT_CONVENTION
+ assert // Invalid day-count convention ID
+ // modules/actus_kernel.py:329
+ // if contract_type != UInt64(enums.CT_ANN):
+ dup
+ intc_1 // 1
+ !=
+ bz contract_config_after_if_else@20
+ // modules/actus_kernel.py:330
+ // assert not terms.dynamic_principal_redemption, err.INVALID_ACTUS_CONFIG
+ dig 4
+ pushint 786
+ getbit
+ !
+ assert // Invalid ACTUS configuration
+
+contract_config_after_if_else@20:
+ // modules/actus_kernel.py:807
+ // assert self.status == UInt64(enums.STATUS_INACTIVE), err.ALREADY_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ !
+ assert // D-ASA already configured
+ // modules/actus_kernel.py:808
+ // assert self.initial_exchange_amount == UInt64(0), err.ALREADY_CONFIGURED
+ intc_0 // 0
+ bytec 20 // "initial_exchange_amount"
+ app_global_get_ex
+ assert // check self.initial_exchange_amount exists
+ !
+ assert // D-ASA already configured
+ // modules/actus_kernel.py:810-811
+ // # Set Denomination Asset
+ // self._assert_denomination_asset(terms.denomination_asset_id)
+ dig 4
+ dup
+ intc_1 // 1
+ extract_uint64
+ // modules/actus_kernel.py:775-776
+ // # The reference implementation has on-chain denomination with ASA
+ // _creator, exists = op.AssetParamsGet.asset_creator(denomination_asset_id)
+ dup
+ asset_params_get AssetCreator
+ bury 1
+ // modules/actus_kernel.py:777
+ // assert exists, err.INVALID_DENOMINATION
+ assert // Denomination asset is not properly set
+ // modules/actus_kernel.py:780
+ // self.denomination_asset_id = denomination_asset_id
+ bytec 44 // "denomination_asset_id"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:814-815
+ // # Set Settlement Asset
+ // self._assert_settlement_asset(terms.settlement_asset_id)
+ dig 1
+ pushint 9
+ extract_uint64
+ // modules/actus_kernel.py:785
+ // settlement_asset_id == self.denomination_asset_id
+ dup
+ uncover 2
+ ==
+ // modules/actus_kernel.py:783-786
+ // # The reference implementation settlement asset is the denomination asset
+ // assert (
+ // settlement_asset_id == self.denomination_asset_id
+ // ), err.INVALID_SETTLEMENT_ASSET
+ assert // Different settlement asset not supported, must be equal to denomination asset
+ // modules/actus_kernel.py:789
+ // self.settlement_asset_id = settlement_asset_id
+ bytec 19 // "settlement_asset_id"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:790-796
+ // # The reference implementation has on-chain settlement with ASA
+ // itxn.AssetTransfer(
+ // xfer_asset=self.settlement_asset_id,
+ // asset_receiver=Global.current_application_address,
+ // asset_amount=0,
+ // fee=Global.min_txn_fee,
+ // ).submit()
+ itxn_begin
+ // modules/actus_kernel.py:795
+ // fee=Global.min_txn_fee,
+ global MinTxnFee
+ // modules/actus_kernel.py:793
+ // asset_receiver=Global.current_application_address,
+ global CurrentApplicationAddress
+ // modules/actus_kernel.py:794
+ // asset_amount=0,
+ intc_0 // 0
+ itxn_field AssetAmount
+ itxn_field AssetReceiver
+ swap
+ itxn_field XferAsset
+ // modules/actus_kernel.py:790-791
+ // # The reference implementation has on-chain settlement with ASA
+ // itxn.AssetTransfer(
+ pushint 4 // axfer
+ itxn_field TypeEnum
+ itxn_field Fee
+ // modules/actus_kernel.py:790-796
+ // # The reference implementation has on-chain settlement with ASA
+ // itxn.AssetTransfer(
+ // xfer_asset=self.settlement_asset_id,
+ // asset_receiver=Global.current_application_address,
+ // asset_amount=0,
+ // fee=Global.min_txn_fee,
+ // ).submit()
+ itxn_submit
+ // modules/actus_kernel.py:818-819
+ // # Units
+ // self.total_units = terms.total_units
+ dup
+ pushint 17
+ extract_uint64
+ bytec 13 // "total_units"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:820
+ // self.reserved_units_total = UInt64(0)
+ bytec 11 // "reserved_units_total"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:822-823
+ // # Day-Count Conventions
+ // self.day_count_convention = terms.day_count_convention.as_uint64()
+ bytec 46 // "day_count_convention"
+ dig 8
+ app_global_put
+ // modules/actus_kernel.py:825-826
+ // # Time
+ // self.initial_exchange_date = terms.initial_exchange_date
+ dup
+ pushint 41
+ extract_uint64
+ bytec 28 // "initial_exchange_date"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:827
+ // self.maturity_date = terms.maturity_date
+ dig 1
+ pushint 49
+ extract_uint64
+ bytec 45 // "maturity_date"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:828
+ // self.next_principal_redemption = initial_state.next_principal_redemption
+ dig 6
+ dup
+ cover 2
+ pushint 48
+ extract_uint64
+ bytec 14 // "next_principal_redemption"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:830-831
+ // # Principal
+ // self.initial_exchange_amount = terms.initial_exchange_amount
+ bytec 20 // "initial_exchange_amount"
+ dig 10
+ app_global_put
+ // modules/actus_kernel.py:832
+ // self.dynamic_principal_redemption = terms.dynamic_principal_redemption
+ dig 3
+ pushint 786
+ getbit
+ bytec 35 // "dynamic_principal_redemption"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:833
+ // self.outstanding_principal = initial_state.outstanding_principal
+ dig 1
+ pushint 16
+ extract_uint64
+ bytec 4 // "outstanding_principal"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:835-836
+ // # Interest
+ // self.accrued_interest = initial_state.accrued_interest
+ dig 1
+ pushint 40
+ extract_uint64
+ bytec 6 // "accrued_interest"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:838-839
+ // # Interest Rate
+ // self.nominal_interest_rate = initial_state.nominal_interest_rate
+ dig 1
+ intc_3 // 32
+ extract_uint64
+ bytec 9 // "nominal_interest_rate"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:840
+ // self.interest_calculation_base = initial_state.interest_calculation_base
+ dig 1
+ pushint 24
+ extract_uint64
+ bytec 7 // "interest_calculation_base"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:841
+ // self.rate_reset_spread = terms.rate_reset_spread
+ dig 3
+ pushint 58
+ extract_uint64
+ bytec 36 // "rate_reset_spread"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:842
+ // self.rate_reset_multiplier = terms.rate_reset_multiplier
+ dig 3
+ pushint 66
+ extract_uint64
+ bytec 37 // "rate_reset_multiplier"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:843
+ // self.rate_reset_floor = terms.rate_reset_floor
+ dig 3
+ pushint 74
+ extract_uint64
+ bytec 31 // "rate_reset_floor"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:844
+ // self.rate_reset_cap = terms.rate_reset_cap
+ dig 3
+ pushint 82
+ extract_uint64
+ bytec 32 // "rate_reset_cap"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:845
+ // self.rate_reset_next = terms.rate_reset_next
+ dig 3
+ pushint 90
+ extract_uint64
+ bytec 38 // "rate_reset_next"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:846
+ // self.has_rate_reset_floor = terms.has_rate_reset_floor
+ dig 3
+ pushint 784
+ getbit
+ bytec 39 // "has_rate_reset_floor"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:847
+ // self.has_rate_reset_cap = terms.has_rate_reset_cap
+ dig 3
+ pushint 785
+ getbit
+ bytec 40 // "has_rate_reset_cap"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:849-850
+ // # Scaling
+ // self.fixed_point_scale = terms.fixed_point_scale
+ uncover 3
+ pushint 99
+ extract_uint64
+ bytec 5 // "fixed_point_scale"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:852-853
+ // # Schedule Processing
+ // self.event_cursor = initial_state.event_cursor
+ dig 1
+ intc_2 // 8
+ extract_uint64
+ bytec_2 // "event_cursor"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:855-856
+ // # Per-Unit Fixed-Point Indexes
+ // self.cumulative_interest_index = initial_state.cumulative_interest_index
+ dig 1
+ pushint 56
+ extract_uint64
+ bytec 16 // "cumulative_interest_index"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:857
+ // self.cumulative_principal_index = initial_state.cumulative_principal_index
+ dig 1
+ pushint 64
+ extract_uint64
+ bytec 17 // "cumulative_principal_index"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:859-860
+ // # Reserved Amount (for executed cashflows)
+ // self.reserved_interest = UInt64(0)
+ bytec 15 // "reserved_interest"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:861
+ // self.reserved_principal = UInt64(0)
+ bytec 12 // "reserved_principal"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:863
+ // assert terms.initial_exchange_date > Global.latest_timestamp, err.INVALID_IED
+ dig 2
+ global LatestTimestamp
+ >
+ assert // IED must be set in the future
+ // modules/actus_kernel.py:864
+ // assert terms.initial_exchange_date > initial_state.status_date, err.INVALID_IED
+ swap
+ intc_0 // 0
+ extract_uint64
+ dig 2
+ <
+ assert // IED must be set in the future
+ // modules/actus_kernel.py:865
+ // assert terms.initial_exchange_date < terms.maturity_date, err.INVALID_IED
+ <
+ assert // IED must be set in the future
+ // modules/actus_kernel.py:1073-1074
+ // # Notarize prospectus (optional)
+ // self.prospectus_hash = prospectus.hash.bytes
+ dig 2
+ extract 0 32
+ bytec 42 // "prospectus_hash"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:1075
+ // self.prospectus_url = prospectus.url
+ dig 1
+ extract 2 0
+ bytec 43 // "prospectus_url"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:1076
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/actus_kernel.py:1036
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+contract_config_bool_false@17:
+ intc_0 // 0
+ b contract_config_bool_merge@18
+
+contract_config_bool_false@8:
+ intc_0 // 0
+ b contract_config_bool_merge@9
+
+
+// modules.actus_kernel.ActusKernelModule.contract_schedule[routing]() -> void:
+contract_schedule:
+ intc_0 // 0
+ pushbytes ""
+ dupn 2
+ // modules/actus_kernel.py:1078
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ dup
+ txna ApplicationArgs 2
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.bool
+ intc_0 // 0
+ getbit
+ swap
+ txna ApplicationArgs 3
+ dup
+ cover 2
+ dup
+ intc_0 // 0
+ extract_uint16 // on error: invalid array length header
+ dup
+ cover 3
+ dup
+ pushint 65
+ *
+ pushint 2
+ +
+ uncover 2
+ len
+ ==
+ assert // invalid number of bytes for arc4.dynamic_array
+ // modules/actus_kernel.py:1110
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/actus_kernel.py:1113
+ // contract_type=self.contract_type,
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ swap
+ cover 3
+ assert // check self.contract_type exists
+ // modules/actus_kernel.py:881
+ // assert self.status == UInt64(enums.STATUS_INACTIVE), err.ALREADY_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ !
+ assert // D-ASA already configured
+ // modules/actus_kernel.py:882-884
+ // assert schedule_page.length <= UInt64(
+ // cst.SCHEDULE_PAGE_SIZE
+ // ), err.INVALID_SCHEDULE_PAGE
+ dup
+ pushint 16
+ <=
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:885
+ // assert self.initial_exchange_amount > UInt64(0), err.TERMS_NOT_CONFIGURED
+ intc_0 // 0
+ bytec 20 // "initial_exchange_amount"
+ app_global_get_ex
+ assert // check self.initial_exchange_amount exists
+ assert // D-ASA terms not configured
+ // modules/actus_kernel.py:887
+ // page_cursor = schedule_page_index * UInt64(cst.SCHEDULE_PAGE_SIZE)
+ swap
+ pushint 16
+ *
+ swap
+ // modules/actus_kernel.py:894
+ // + page_length * UInt64(cst.OP_UP_CONTRACT_CONFIG_PER_ENTRY_BUDGET)
+ pushint 100
+ *
+ // modules/actus_kernel.py:893
+ // UInt64(cst.OP_UP_CONTRACT_CONFIG_BASE_BUDGET)
+ intc 4 // 1500
+ // modules/actus_kernel.py:893-894
+ // UInt64(cst.OP_UP_CONTRACT_CONFIG_BASE_BUDGET)
+ // + page_length * UInt64(cst.OP_UP_CONTRACT_CONFIG_PER_ENTRY_BUDGET)
+ +
+ // modules/actus_kernel.py:889-896
+ // # Validation cost grows with page length, so configuration explicitly
+ // # buys extra opcode budget for larger uploads.
+ // ensure_budget(
+ // required_budget=(
+ // UInt64(cst.OP_UP_CONTRACT_CONFIG_BASE_BUDGET)
+ // + page_length * UInt64(cst.OP_UP_CONTRACT_CONFIG_PER_ENTRY_BUDGET)
+ // ),
+ // )
+ intc_0 // 0
+ callsub ensure_budget
+ // modules/actus_kernel.py:897
+ // index = UInt64(0)
+ intc_0 // 0
+
+contract_schedule_while_top@2:
+ // modules/actus_kernel.py:898
+ // while index < page_length:
+ dup
+ dig 4
+ <
+ bz contract_schedule_after_while@11
+ // modules/actus_kernel.py:899-900
+ // entry = schedule_page[index].copy()
+ // entry_event_type = entry.event_type.as_uint64()
+ dig 4
+ extract 2 0
+ dup
+ bury 12
+ dig 1
+ dup
+ cover 2
+ pushint 65
+ *
+ pushint 65
+ extract3 // on error: index access is out of bounds
+ // modules/actus_kernel.py:900
+ // entry_event_type = entry.event_type.as_uint64()
+ dup
+ // modules/actus_kernel.py:899-900
+ // entry = schedule_page[index].copy()
+ // entry_event_type = entry.event_type.as_uint64()
+ intc_2 // 8
+ // modules/actus_kernel.py:900
+ // entry_event_type = entry.event_type.as_uint64()
+ getbyte
+ dup
+ cover 2
+ bury 13
+ // modules/actus_kernel.py:901
+ // assert entry.event_id == page_cursor + index, err.INVALID_EVENT_ID
+ dup
+ intc_0 // 0
+ extract_uint64
+ dup
+ bury 13
+ dig 5
+ uncover 4
+ +
+ dig 1
+ ==
+ assert // Invalid event id
+ // modules/actus_kernel.py:902-904
+ // self._assert_event_allowed_for_contract_type(
+ // contract_type, entry_event_type
+ // )
+ dig 5
+ uncover 3
+ callsub _assert_event_allowed_for_contract_type
+ // modules/actus_kernel.py:905
+ // assert entry.scheduled_time > UInt64(0), err.INVALID_ACTUS_CONFIG
+ swap
+ pushint 9
+ extract_uint64
+ dup
+ bury 10
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:906
+ // if entry.event_id > UInt64(0):
+ bz contract_schedule_after_if_else@8
+ // modules/actus_kernel.py:907
+ // if index > UInt64(0):
+ dup
+ bz contract_schedule_else_body@6
+ // modules/actus_kernel.py:908
+ // previous_entry = schedule_page[index - UInt64(1)].copy()
+ dup
+ intc_1 // 1
+ -
+ pushint 65
+ *
+ dig 11
+ swap
+ pushint 65
+ extract3 // on error: index access is out of bounds
+
+contract_schedule_after_if_else@7:
+ // modules/actus_kernel.py:923
+ // previous_entry.scheduled_time <= entry.scheduled_time
+ pushint 9
+ extract_uint64
+ dig 8
+ <=
+ // modules/actus_kernel.py:922-924
+ // assert (
+ // previous_entry.scheduled_time <= entry.scheduled_time
+ // ), err.INVALID_SORTING
+ assert // Time events must be sorted in strictly ascending order
+
+contract_schedule_after_if_else@8:
+ // modules/actus_kernel.py:925
+ // if entry.event_id == UInt64(0):
+ dig 8
+ bnz contract_schedule_after_if_else@10
+ // modules/actus_kernel.py:926-928
+ // assert entry_event_type == UInt64(
+ // enums.EVT_IED
+ // ), err.INVALID_ACTUS_CONFIG
+ dig 9
+ intc_1 // 1
+ ==
+ assert // Invalid ACTUS configuration
+
+contract_schedule_after_if_else@10:
+ // modules/actus_kernel.py:929
+ // index += UInt64(1)
+ dup
+ intc_1 // 1
+ +
+ bury 1
+ b contract_schedule_while_top@2
+
+contract_schedule_else_body@6:
+ // modules/actus_kernel.py:910-912
+ // # The first entry of a page must still be ordered after the
+ // # last entry of the previous page.
+ // assert schedule_page_index > UInt64(0), err.INVALID_EVENT_ID
+ dig 6
+ dup
+ assert // Invalid event id
+ // modules/actus_kernel.py:913
+ // previous_page_index = schedule_page_index - UInt64(1)
+ intc_1 // 1
+ -
+ // modules/actus_kernel.py:915
+ // previous_page_index in self.schedule_page
+ itob
+ bytec 24 // 0x5323
+ swap
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/actus_kernel.py:914-916
+ // assert (
+ // previous_page_index in self.schedule_page
+ // ), err.INVALID_SCHEDULE_PAGE
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:917-918
+ // previous_page = self.schedule_page[previous_page_index].copy()
+ // assert previous_page.length > UInt64(0), err.INVALID_SCHEDULE_PAGE
+ dup
+ intc_0 // 0
+ pushint 2
+ box_extract
+ btoi
+ // modules/actus_kernel.py:918
+ // assert previous_page.length > UInt64(0), err.INVALID_SCHEDULE_PAGE
+ dup
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:920
+ // previous_page.length - UInt64(1)
+ intc_1 // 1
+ -
+ // modules/actus_kernel.py:919-921
+ // previous_entry = previous_page[
+ // previous_page.length - UInt64(1)
+ // ].copy()
+ pushint 65
+ *
+ pushint 2
+ +
+ pushint 65
+ box_extract
+ b contract_schedule_after_if_else@7
+
+contract_schedule_after_while@11:
+ // modules/actus_kernel.py:200
+ // self.schedule_page[page_index] = schedule_page.copy()
+ dig 6
+ itob
+ bytec 24 // 0x5323
+ swap
+ concat
+ dup
+ box_del
+ pop
+ dig 5
+ box_put
+ // modules/actus_kernel.py:932
+ // if is_last_page:
+ dig 5
+ bz contract_schedule_after_if_else@13
+ // modules/actus_kernel.py:934
+ // schedule_page_index * UInt64(cst.SCHEDULE_PAGE_SIZE) + page_length
+ dig 1
+ dig 4
+ +
+ // modules/actus_kernel.py:933
+ // self.schedule_entry_count = (
+ bytec_3 // "schedule_entry_count"
+ // modules/actus_kernel.py:933-935
+ // self.schedule_entry_count = (
+ // schedule_page_index * UInt64(cst.SCHEDULE_PAGE_SIZE) + page_length
+ // )
+ swap
+ app_global_put
+ // modules/actus_kernel.py:936
+ // self.status = UInt64(enums.STATUS_PENDING_IED)
+ bytec_1 // "status"
+ pushint 50
+ app_global_put
+
+contract_schedule_after_if_else@13:
+ // modules/actus_kernel.py:1118
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/actus_kernel.py:1078
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.actus_kernel.ActusKernelModule.contract_execute_ied[routing]() -> void:
+contract_execute_ied:
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/actus_kernel.py:1143
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/actus_kernel.py:1144
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/actus_kernel.py:1145
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:1147
+ // assert self.event_cursor < self.schedule_entry_count, err.INVALID_EVENT_CURSOR
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ dig 1
+ >
+ assert // Invalid event cursor
+ // modules/actus_kernel.py:1148
+ // entry = self._get_schedule_entry(self.event_cursor)
+ callsub _get_schedule_entry
+ // modules/actus_kernel.py:1149
+ // assert entry.event_type == arc4.UInt8(enums.EVT_IED), err.INVALID_EVENT_TYPE
+ dup
+ extract 8 1
+ dup
+ pushbytes 0x01
+ b==
+ assert // Invalid event type
+ // modules/actus_kernel.py:1153
+ // event_id=entry.event_id,
+ dig 1
+ extract 0 8
+ // modules/actus_kernel.py:1155
+ // scheduled_time=entry.scheduled_time,
+ dig 2
+ extract 9 8
+ // modules/actus_kernel.py:1156
+ // accrual_factor=entry.accrual_factor,
+ dig 3
+ extract 17 8
+ // modules/actus_kernel.py:1157
+ // redemption_accrual_factor=entry.redemption_accrual_factor,
+ dig 4
+ extract 25 8
+ // modules/actus_kernel.py:1159
+ // next_nominal_interest_rate=entry.next_nominal_interest_rate,
+ dig 5
+ extract 33 8
+ // modules/actus_kernel.py:1160
+ // next_principal_redemption=entry.next_principal_redemption,
+ dig 6
+ extract 41 8
+ // modules/actus_kernel.py:1161
+ // next_outstanding_principal=entry.next_outstanding_principal,
+ dig 7
+ extract 49 8
+ // modules/actus_kernel.py:1162
+ // flags=entry.flags,
+ dig 8
+ extract 57 8
+ // modules/actus_kernel.py:1152-1163
+ // typ.ObservedEventRequest(
+ // event_id=entry.event_id,
+ // event_type=entry.event_type,
+ // scheduled_time=entry.scheduled_time,
+ // accrual_factor=entry.accrual_factor,
+ // redemption_accrual_factor=entry.redemption_accrual_factor,
+ // observed_rate=UInt64(0),
+ // next_nominal_interest_rate=entry.next_nominal_interest_rate,
+ // next_principal_redemption=entry.next_principal_redemption,
+ // next_outstanding_principal=entry.next_outstanding_principal,
+ // flags=entry.flags,
+ // ),
+ uncover 7
+ uncover 8
+ concat
+ uncover 7
+ concat
+ uncover 6
+ concat
+ uncover 5
+ concat
+ // modules/actus_kernel.py:1158
+ // observed_rate=UInt64(0),
+ intc_0 // 0
+ // modules/actus_kernel.py:1152-1163
+ // typ.ObservedEventRequest(
+ // event_id=entry.event_id,
+ // event_type=entry.event_type,
+ // scheduled_time=entry.scheduled_time,
+ // accrual_factor=entry.accrual_factor,
+ // redemption_accrual_factor=entry.redemption_accrual_factor,
+ // observed_rate=UInt64(0),
+ // next_nominal_interest_rate=entry.next_nominal_interest_rate,
+ // next_principal_redemption=entry.next_principal_redemption,
+ // next_outstanding_principal=entry.next_outstanding_principal,
+ // flags=entry.flags,
+ // ),
+ itob
+ concat
+ uncover 4
+ concat
+ uncover 3
+ concat
+ uncover 2
+ concat
+ swap
+ concat
+ // modules/actus_kernel.py:1150-1164
+ // self._apply_non_cash_schedule_entry(
+ // entry,
+ // typ.ObservedEventRequest(
+ // event_id=entry.event_id,
+ // event_type=entry.event_type,
+ // scheduled_time=entry.scheduled_time,
+ // accrual_factor=entry.accrual_factor,
+ // redemption_accrual_factor=entry.redemption_accrual_factor,
+ // observed_rate=UInt64(0),
+ // next_nominal_interest_rate=entry.next_nominal_interest_rate,
+ // next_principal_redemption=entry.next_principal_redemption,
+ // next_outstanding_principal=entry.next_outstanding_principal,
+ // flags=entry.flags,
+ // ),
+ // )
+ callsub _apply_non_cash_schedule_entry
+ popn 2
+ // modules/actus_kernel.py:1165
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/actus_kernel.py:1120
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.actus_kernel.ActusKernelModule.apply_non_cash_event[routing]() -> void:
+apply_non_cash_event:
+ intc_0 // 0
+ dupn 4
+ pushbytes ""
+ dup
+ // modules/actus_kernel.py:1167
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_2 // 8
+ ==
+ assert // invalid number of bytes for arc4.uint64
+ btoi
+ txna ApplicationArgs 2
+ dupn 2
+ len
+ pushint 73
+ ==
+ assert // invalid number of bytes for smart_contracts.abi_types.ObservedEventRequest
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/actus_kernel.py:1204
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/actus_kernel.py:1205
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:1207
+ // if payload.flags & UInt64(enums.FLAG_OBSERVED_EVENT):
+ pushint 65
+ extract_uint64
+ dup
+ pushint 4
+ &
+ bz apply_non_cash_event_after_if_else@3
+ // modules/actus_kernel.py:233
+ // return self.contract_type == UInt64(enums.CT_CLM)
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ assert // check self.contract_type exists
+ pushint 5
+ ==
+ // modules/actus_kernel.py:1208
+ // assert self._supports_observed_events(), err.OBSERVED_EVENT_REQUIRED
+ assert // Observed event required to execute this action
+ // modules/actus_kernel.py:1209
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/actus_kernel.py:233
+ // return self.contract_type == UInt64(enums.CT_CLM)
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ assert // check self.contract_type exists
+ dup
+ pushint 5
+ ==
+ // modules/actus_kernel.py:945
+ // assert self._supports_observed_events(), err.OBSERVED_EVENT_REQUIRED
+ assert // Observed event required to execute this action
+ // modules/actus_kernel.py:946
+ // assert payload.event_id == self.schedule_entry_count, err.INVALID_EVENT_ID
+ dig 2
+ dup
+ intc_0 // 0
+ extract_uint64
+ dup
+ bury 7
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ ==
+ assert // Invalid event id
+ // modules/actus_kernel.py:948
+ // self.contract_type, payload.event_type.as_uint64()
+ dup
+ extract 8 1
+ bury 12
+ intc_2 // 8
+ getbyte
+ // modules/actus_kernel.py:947-949
+ // self._assert_event_allowed_for_contract_type(
+ // self.contract_type, payload.event_type.as_uint64()
+ // )
+ callsub _assert_event_allowed_for_contract_type
+ // modules/actus_kernel.py:951
+ // page_index = self._schedule_page_index(self.schedule_entry_count)
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ // modules/actus_kernel.py:190
+ // return event_id // UInt64(cst.SCHEDULE_PAGE_SIZE)
+ pushint 16
+ /
+ // modules/actus_kernel.py:952
+ // page = typ.ExecutionSchedulePage()
+ bytec 48 // 0x0000
+ bury 7
+ // modules/actus_kernel.py:953
+ // if page_index in self.schedule_page:
+ itob
+ bytec 24 // 0x5323
+ swap
+ concat
+ dup
+ bury 9
+ box_len
+ bury 1
+ bz apply_non_cash_event_after_if_else@27
+ // modules/actus_kernel.py:954
+ // page = self.schedule_page[page_index].copy()
+ dig 7
+ box_get
+ swap
+ bury 7
+ assert // check self.schedule_page entry exists
+
+apply_non_cash_event_after_if_else@27:
+ // modules/actus_kernel.py:955
+ // assert page.length < UInt64(cst.SCHEDULE_PAGE_SIZE), err.INVALID_SCHEDULE_PAGE
+ dig 5
+ dup
+ intc_0 // 0
+ extract_uint16 // on error: invalid array length header
+ dup
+ pushint 16
+ <
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:960
+ // scheduled_time=payload.scheduled_time,
+ dig 3
+ dup
+ extract 9 8
+ // modules/actus_kernel.py:961
+ // accrual_factor=payload.accrual_factor,
+ dig 1
+ extract 17 8
+ // modules/actus_kernel.py:962
+ // redemption_accrual_factor=payload.redemption_accrual_factor,
+ dig 2
+ extract 25 8
+ // modules/actus_kernel.py:963
+ // next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ dig 3
+ extract 41 8
+ // modules/actus_kernel.py:964
+ // next_principal_redemption=payload.next_principal_redemption,
+ dig 4
+ extract 49 8
+ // modules/actus_kernel.py:965
+ // next_outstanding_principal=payload.next_outstanding_principal,
+ uncover 5
+ extract 57 8
+ // modules/actus_kernel.py:957-967
+ // typ.ExecutionScheduleEntry(
+ // event_id=payload.event_id,
+ // event_type=payload.event_type,
+ // scheduled_time=payload.scheduled_time,
+ // accrual_factor=payload.accrual_factor,
+ // redemption_accrual_factor=payload.redemption_accrual_factor,
+ // next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ // next_principal_redemption=payload.next_principal_redemption,
+ // next_outstanding_principal=payload.next_outstanding_principal,
+ // flags=payload.flags,
+ // )
+ dig 11
+ itob
+ dig 18
+ concat
+ uncover 6
+ concat
+ uncover 5
+ concat
+ uncover 4
+ concat
+ uncover 3
+ concat
+ uncover 2
+ concat
+ swap
+ concat
+ dig 3
+ itob
+ concat
+ // modules/actus_kernel.py:956-968
+ // page.append(
+ // typ.ExecutionScheduleEntry(
+ // event_id=payload.event_id,
+ // event_type=payload.event_type,
+ // scheduled_time=payload.scheduled_time,
+ // accrual_factor=payload.accrual_factor,
+ // redemption_accrual_factor=payload.redemption_accrual_factor,
+ // next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ // next_principal_redemption=payload.next_principal_redemption,
+ // next_outstanding_principal=payload.next_outstanding_principal,
+ // flags=payload.flags,
+ // )
+ // )
+ uncover 2
+ swap
+ concat // on error: max array length exceeded
+ swap
+ intc_1 // 1
+ +
+ itob
+ extract 6 2
+ replace2 0
+ // modules/actus_kernel.py:969
+ // self.schedule_page[page_index] = page.copy()
+ dig 8
+ dup
+ box_del
+ pop
+ swap
+ box_put
+ // modules/actus_kernel.py:970
+ // self.schedule_entry_count += UInt64(1)
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ intc_1 // 1
+ +
+ bytec_3 // "schedule_entry_count"
+ swap
+ app_global_put
+
+apply_non_cash_event_after_if_else@3:
+ // modules/actus_kernel.py:1212
+ // assert event_id == self.event_cursor, err.INVALID_EVENT_CURSOR
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ dig 3
+ dup
+ uncover 2
+ ==
+ assert // Invalid event cursor
+ // modules/actus_kernel.py:1213
+ // entry = self._get_schedule_entry(event_id)
+ callsub _get_schedule_entry
+ dup
+ bury 8
+ // modules/actus_kernel.py:1215
+ // entry.event_type.as_uint64()
+ dup
+ extract 8 1
+ bury 10
+ intc_2 // 8
+ getbyte
+ dup
+ bury 6
+ // modules/actus_kernel.py:364
+ // UInt64(enums.EVT_IED),
+ intc_1 // 1
+ // modules/actus_kernel.py:363-370
+ // return event_type in (
+ // UInt64(enums.EVT_IED),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_RR),
+ // UInt64(enums.EVT_RRF),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz apply_non_cash_event_bool_true@15
+ dig 4
+ // modules/actus_kernel.py:365
+ // UInt64(enums.EVT_PI),
+ pushint 4
+ // modules/actus_kernel.py:363-370
+ // return event_type in (
+ // UInt64(enums.EVT_IED),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_RR),
+ // UInt64(enums.EVT_RRF),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz apply_non_cash_event_bool_true@15
+ dig 4
+ // modules/actus_kernel.py:366
+ // UInt64(enums.EVT_RR),
+ pushint 12
+ // modules/actus_kernel.py:363-370
+ // return event_type in (
+ // UInt64(enums.EVT_IED),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_RR),
+ // UInt64(enums.EVT_RRF),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz apply_non_cash_event_bool_true@15
+ dig 4
+ // modules/actus_kernel.py:367
+ // UInt64(enums.EVT_RRF),
+ pushint 11
+ // modules/actus_kernel.py:363-370
+ // return event_type in (
+ // UInt64(enums.EVT_IED),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_RR),
+ // UInt64(enums.EVT_RRF),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz apply_non_cash_event_bool_true@15
+ dig 4
+ // modules/actus_kernel.py:368
+ // UInt64(enums.EVT_IPCB),
+ pushint 18
+ // modules/actus_kernel.py:363-370
+ // return event_type in (
+ // UInt64(enums.EVT_IED),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_RR),
+ // UInt64(enums.EVT_RRF),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz apply_non_cash_event_bool_true@15
+ dig 4
+ // modules/actus_kernel.py:369
+ // UInt64(enums.EVT_PRF),
+ pushint 5
+ // modules/actus_kernel.py:363-370
+ // return event_type in (
+ // UInt64(enums.EVT_IED),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_RR),
+ // UInt64(enums.EVT_RRF),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bz apply_non_cash_event_bool_false@16
+
+apply_non_cash_event_bool_true@15:
+ intc_1 // 1
+
+apply_non_cash_event_bool_merge@17:
+ // modules/actus_kernel.py:1214-1216
+ // assert self._event_is_non_cash(
+ // entry.event_type.as_uint64()
+ // ), err.INVALID_EVENT_TYPE
+ assert // Invalid event type
+ // modules/actus_kernel.py:1217
+ // assert entry.event_type != arc4.UInt8(enums.EVT_IED), err.INVALID_EVENT_TYPE
+ dig 8
+ pushbytes 0x01
+ b!=
+ assert // Invalid event type
+ // modules/actus_kernel.py:374
+ // return event_type in (UInt64(enums.EVT_RR), UInt64(enums.EVT_RRF))
+ dig 4
+ pushint 12
+ ==
+ bnz apply_non_cash_event_bool_true@21
+ dig 4
+ pushint 11
+ ==
+ bz apply_non_cash_event_bool_false@22
+
+apply_non_cash_event_bool_true@21:
+ intc_1 // 1
+
+apply_non_cash_event_bool_merge@23:
+ // modules/actus_kernel.py:1218
+ // if self._event_is_rate_reset(entry.event_type.as_uint64()):
+ bz apply_non_cash_event_else_body@5
+ // modules/rbac.py:82
+ // assert self._role_is_active(self.observer, Txn.sender), err.UNAUTHORIZED
+ bytec 25 // 0x523a4d4f4323
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+
+apply_non_cash_event_after_if_else@6:
+ // modules/actus_kernel.py:1222
+ // self._apply_non_cash_schedule_entry(entry, payload)
+ dig 6
+ dig 2
+ callsub _apply_non_cash_schedule_entry
+ popn 2
+ // modules/actus_kernel.py:1223
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/actus_kernel.py:1167
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+apply_non_cash_event_else_body@5:
+ // modules/actus_kernel.py:1221
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ b apply_non_cash_event_after_if_else@6
+
+apply_non_cash_event_bool_false@22:
+ intc_0 // 0
+ b apply_non_cash_event_bool_merge@23
+
+apply_non_cash_event_bool_false@16:
+ intc_0 // 0
+ b apply_non_cash_event_bool_merge@17
+
+
+// modules.actus_kernel.ActusKernelModule.append_observed_cash_event[routing]() -> void:
+append_observed_cash_event:
+ intc_0 // 0
+ dup
+ // modules/actus_kernel.py:1225
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dupn 2
+ len
+ pushint 65
+ ==
+ assert // invalid number of bytes for smart_contracts.abi_types.ObservedCashEventRequest
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/actus_kernel.py:1254
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/actus_kernel.py:1255
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/actus_kernel.py:1256
+ // self._assert_is_not_contract_suspended()
+ callsub _assert_is_not_contract_suspended
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/actus_kernel.py:147
+ // assert not self._status_is_pending_ied(), err.PENDING_IED
+ !
+ assert // IED not yet executed
+ // modules/actus_kernel.py:233
+ // return self.contract_type == UInt64(enums.CT_CLM)
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ assert // check self.contract_type exists
+ pushint 5
+ ==
+ // modules/actus_kernel.py:981
+ // assert self._supports_observed_events(), err.OBSERVED_EVENT_REQUIRED
+ assert // Observed event required to execute this action
+ // modules/actus_kernel.py:982
+ // assert payload.event_id == self.schedule_entry_count, err.INVALID_EVENT_ID
+ dup
+ intc_0 // 0
+ extract_uint64
+ dup
+ cover 2
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ swap
+ dig 1
+ ==
+ assert // Invalid event id
+ // modules/actus_kernel.py:983
+ // assert payload.event_type == arc4.UInt8(enums.EVT_PR), err.INVALID_EVENT_TYPE
+ dig 1
+ extract 8 1
+ dup
+ cover 3
+ pushbytes 0x03
+ b==
+ assert // Invalid event type
+ // modules/actus_kernel.py:984
+ // assert payload.flags & UInt64(enums.FLAG_CASH_EVENT), err.INVALID_ACTUS_CONFIG
+ swap
+ pushint 57
+ extract_uint64
+ dup
+ cover 2
+ intc_1 // 1
+ &
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:986
+ // if self.schedule_entry_count > UInt64(0):
+ bz append_observed_cash_event_after_if_else@3
+ // modules/actus_kernel.py:988
+ // self.schedule_entry_count - UInt64(1)
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ intc_1 // 1
+ -
+ // modules/actus_kernel.py:987-989
+ // previous_entry = self._get_schedule_entry(
+ // self.schedule_entry_count - UInt64(1)
+ // )
+ callsub _get_schedule_entry
+ // modules/actus_kernel.py:991
+ // previous_entry.scheduled_time <= payload.scheduled_time
+ pushint 9
+ extract_uint64
+ dig 4
+ pushint 9
+ extract_uint64
+ <=
+ // modules/actus_kernel.py:990-992
+ // assert (
+ // previous_entry.scheduled_time <= payload.scheduled_time
+ // ), err.INVALID_SORTING
+ assert // Time events must be sorted in strictly ascending order
+
+append_observed_cash_event_after_if_else@3:
+ // modules/actus_kernel.py:994
+ // page_index = self._schedule_page_index(self.schedule_entry_count)
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ // modules/actus_kernel.py:190
+ // return event_id // UInt64(cst.SCHEDULE_PAGE_SIZE)
+ pushint 16
+ /
+ // modules/actus_kernel.py:995
+ // page = typ.ExecutionSchedulePage()
+ bytec 48 // 0x0000
+ bury 6
+ // modules/actus_kernel.py:996
+ // if page_index in self.schedule_page:
+ itob
+ bytec 24 // 0x5323
+ swap
+ concat
+ dup
+ bury 7
+ box_len
+ bury 1
+ bz append_observed_cash_event_after_if_else@5
+ // modules/actus_kernel.py:997
+ // page = self.schedule_page[page_index].copy()
+ dig 5
+ box_get
+ swap
+ bury 6
+ assert // check self.schedule_page entry exists
+
+append_observed_cash_event_after_if_else@5:
+ // modules/actus_kernel.py:998
+ // assert page.length < UInt64(cst.SCHEDULE_PAGE_SIZE), err.INVALID_SCHEDULE_PAGE
+ dig 4
+ dup
+ intc_0 // 0
+ extract_uint16 // on error: invalid array length header
+ dup
+ pushint 16
+ <
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:1003
+ // scheduled_time=payload.scheduled_time,
+ dig 5
+ dup
+ extract 9 8
+ // modules/actus_kernel.py:1004
+ // accrual_factor=payload.accrual_factor,
+ dig 1
+ extract 17 8
+ // modules/actus_kernel.py:1005
+ // redemption_accrual_factor=payload.redemption_accrual_factor,
+ dig 2
+ extract 25 8
+ // modules/actus_kernel.py:1006
+ // next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ dig 3
+ extract 33 8
+ // modules/actus_kernel.py:1007
+ // next_principal_redemption=payload.next_principal_redemption,
+ dig 4
+ extract 41 8
+ // modules/actus_kernel.py:1008
+ // next_outstanding_principal=payload.next_outstanding_principal,
+ uncover 5
+ extract 49 8
+ // modules/actus_kernel.py:1000-1010
+ // typ.ExecutionScheduleEntry(
+ // event_id=payload.event_id,
+ // event_type=payload.event_type,
+ // scheduled_time=payload.scheduled_time,
+ // accrual_factor=payload.accrual_factor,
+ // redemption_accrual_factor=payload.redemption_accrual_factor,
+ // next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ // next_principal_redemption=payload.next_principal_redemption,
+ // next_outstanding_principal=payload.next_outstanding_principal,
+ // flags=payload.flags,
+ // )
+ dig 10
+ itob
+ dig 10
+ concat
+ uncover 6
+ concat
+ uncover 5
+ concat
+ uncover 4
+ concat
+ uncover 3
+ concat
+ uncover 2
+ concat
+ swap
+ concat
+ dig 3
+ itob
+ concat
+ // modules/actus_kernel.py:999-1011
+ // page.append(
+ // typ.ExecutionScheduleEntry(
+ // event_id=payload.event_id,
+ // event_type=payload.event_type,
+ // scheduled_time=payload.scheduled_time,
+ // accrual_factor=payload.accrual_factor,
+ // redemption_accrual_factor=payload.redemption_accrual_factor,
+ // next_nominal_interest_rate=payload.next_nominal_interest_rate,
+ // next_principal_redemption=payload.next_principal_redemption,
+ // next_outstanding_principal=payload.next_outstanding_principal,
+ // flags=payload.flags,
+ // )
+ // )
+ uncover 2
+ swap
+ concat // on error: max array length exceeded
+ swap
+ intc_1 // 1
+ +
+ itob
+ extract 6 2
+ replace2 0
+ // modules/actus_kernel.py:1012
+ // self.schedule_page[page_index] = page.copy()
+ dig 6
+ dup
+ box_del
+ pop
+ swap
+ box_put
+ // modules/actus_kernel.py:1013
+ // self.schedule_entry_count += UInt64(1)
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ intc_1 // 1
+ +
+ bytec_3 // "schedule_entry_count"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:1260
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/actus_kernel.py:1225
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.actus_kernel.ActusKernelModule.contract_get_state[routing]() -> void:
+contract_get_state:
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ dup
+ assert // D-ASA not configured
+ // modules/actus_kernel.py:1275
+ // contract_type=arc4.UInt8(self.contract_type),
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ assert // check self.contract_type exists
+ itob
+ dup
+ bitlen
+ intc_2 // 8
+ <=
+ assert // overflow
+ extract 7 1
+ // modules/actus_kernel.py:1277
+ // total_units=self.total_units,
+ intc_0 // 0
+ bytec 13 // "total_units"
+ app_global_get_ex
+ assert // check self.total_units exists
+ // modules/actus_kernel.py:1278
+ // reserved_units_total=self.reserved_units_total,
+ intc_0 // 0
+ bytec 11 // "reserved_units_total"
+ app_global_get_ex
+ assert // check self.reserved_units_total exists
+ // modules/actus_kernel.py:1279
+ // initial_exchange_amount=self.initial_exchange_amount,
+ intc_0 // 0
+ bytec 20 // "initial_exchange_amount"
+ app_global_get_ex
+ assert // check self.initial_exchange_amount exists
+ // modules/actus_kernel.py:1280
+ // event_cursor=self.event_cursor,
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ // modules/actus_kernel.py:1281
+ // schedule_entry_count=self.schedule_entry_count,
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ // modules/actus_kernel.py:1282
+ // outstanding_principal=self.outstanding_principal,
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ // modules/actus_kernel.py:1283
+ // interest_calculation_base=self.interest_calculation_base,
+ intc_0 // 0
+ bytec 7 // "interest_calculation_base"
+ app_global_get_ex
+ assert // check self.interest_calculation_base exists
+ // modules/actus_kernel.py:1284
+ // nominal_interest_rate=self.nominal_interest_rate,
+ intc_0 // 0
+ bytec 9 // "nominal_interest_rate"
+ app_global_get_ex
+ assert // check self.nominal_interest_rate exists
+ // modules/actus_kernel.py:1285
+ // accrued_interest=self.accrued_interest,
+ intc_0 // 0
+ bytec 6 // "accrued_interest"
+ app_global_get_ex
+ assert // check self.accrued_interest exists
+ // modules/actus_kernel.py:1286
+ // cumulative_interest_index=self.cumulative_interest_index,
+ intc_0 // 0
+ bytec 16 // "cumulative_interest_index"
+ app_global_get_ex
+ assert // check self.cumulative_interest_index exists
+ // modules/actus_kernel.py:1287
+ // cumulative_principal_index=self.cumulative_principal_index,
+ intc_0 // 0
+ bytec 17 // "cumulative_principal_index"
+ app_global_get_ex
+ assert // check self.cumulative_principal_index exists
+ // modules/actus_kernel.py:1288
+ // reserved_interest=self.reserved_interest,
+ intc_0 // 0
+ bytec 15 // "reserved_interest"
+ app_global_get_ex
+ assert // check self.reserved_interest exists
+ // modules/actus_kernel.py:1289
+ // reserved_principal=self.reserved_principal,
+ intc_0 // 0
+ bytec 12 // "reserved_principal"
+ app_global_get_ex
+ assert // check self.reserved_principal exists
+ // modules/actus_kernel.py:1274-1290
+ // return typ.KernelState(
+ // contract_type=arc4.UInt8(self.contract_type),
+ // status=self.status,
+ // total_units=self.total_units,
+ // reserved_units_total=self.reserved_units_total,
+ // initial_exchange_amount=self.initial_exchange_amount,
+ // event_cursor=self.event_cursor,
+ // schedule_entry_count=self.schedule_entry_count,
+ // outstanding_principal=self.outstanding_principal,
+ // interest_calculation_base=self.interest_calculation_base,
+ // nominal_interest_rate=self.nominal_interest_rate,
+ // accrued_interest=self.accrued_interest,
+ // cumulative_interest_index=self.cumulative_interest_index,
+ // cumulative_principal_index=self.cumulative_principal_index,
+ // reserved_interest=self.reserved_interest,
+ // reserved_principal=self.reserved_principal,
+ // )
+ uncover 14
+ itob
+ uncover 14
+ swap
+ concat
+ uncover 13
+ itob
+ concat
+ uncover 12
+ itob
+ concat
+ uncover 11
+ itob
+ concat
+ uncover 10
+ itob
+ concat
+ uncover 9
+ itob
+ concat
+ uncover 8
+ itob
+ concat
+ uncover 7
+ itob
+ concat
+ uncover 6
+ itob
+ concat
+ uncover 5
+ itob
+ concat
+ uncover 4
+ itob
+ concat
+ uncover 3
+ itob
+ concat
+ uncover 2
+ itob
+ concat
+ swap
+ itob
+ concat
+ // modules/actus_kernel.py:1262
+ // @arc4.abimethod(readonly=True)
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.actus_kernel.ActusKernelModule.contract_get_next_due_event[routing]() -> void:
+contract_get_next_due_event:
+ // modules/actus_kernel.py:143
+ // assert self.status != UInt64(enums.STATUS_INACTIVE), err.NOT_CONFIGURED
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ assert // D-ASA not configured
+ // modules/actus_kernel.py:1304
+ // if self.event_cursor >= self.schedule_entry_count:
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ >=
+ bz contract_get_next_due_event_after_if_else@3
+ // modules/actus_kernel.py:1306
+ // event_id=self.event_cursor,
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ // modules/actus_kernel.py:1305-1315
+ // return typ.ExecutionScheduleEntry(
+ // event_id=self.event_cursor,
+ // event_type=arc4.UInt8(0),
+ // scheduled_time=UInt64(0),
+ // accrual_factor=UInt64(0),
+ // redemption_accrual_factor=UInt64(0),
+ // next_nominal_interest_rate=UInt64(0),
+ // next_principal_redemption=UInt64(0),
+ // next_outstanding_principal=UInt64(0),
+ // flags=UInt64(0),
+ // )
+ itob
+ // modules/actus_kernel.py:1307
+ // event_type=arc4.UInt8(0),
+ bytec 41 // 0x00
+ // modules/actus_kernel.py:1305-1315
+ // return typ.ExecutionScheduleEntry(
+ // event_id=self.event_cursor,
+ // event_type=arc4.UInt8(0),
+ // scheduled_time=UInt64(0),
+ // accrual_factor=UInt64(0),
+ // redemption_accrual_factor=UInt64(0),
+ // next_nominal_interest_rate=UInt64(0),
+ // next_principal_redemption=UInt64(0),
+ // next_outstanding_principal=UInt64(0),
+ // flags=UInt64(0),
+ // )
+ concat
+ // modules/actus_kernel.py:1308
+ // scheduled_time=UInt64(0),
+ intc_0 // 0
+ // modules/actus_kernel.py:1305-1315
+ // return typ.ExecutionScheduleEntry(
+ // event_id=self.event_cursor,
+ // event_type=arc4.UInt8(0),
+ // scheduled_time=UInt64(0),
+ // accrual_factor=UInt64(0),
+ // redemption_accrual_factor=UInt64(0),
+ // next_nominal_interest_rate=UInt64(0),
+ // next_principal_redemption=UInt64(0),
+ // next_outstanding_principal=UInt64(0),
+ // flags=UInt64(0),
+ // )
+ itob
+ swap
+ dig 1
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ dig 1
+ concat
+ swap
+ concat
+
+contract_get_next_due_event_after_inlined_modules.actus_kernel.ActusKernelModule.contract_get_next_due_event@4:
+ // modules/actus_kernel.py:1292
+ // @arc4.abimethod(readonly=True)
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+contract_get_next_due_event_after_if_else@3:
+ // modules/actus_kernel.py:1316
+ // return self._get_schedule_entry(self.event_cursor)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ callsub _get_schedule_entry
+ // modules/actus_kernel.py:1292
+ // @arc4.abimethod(readonly=True)
+ b contract_get_next_due_event_after_inlined_modules.actus_kernel.ActusKernelModule.contract_get_next_due_event@4
+
+
+// modules.rbac.RbacModule.contract_update[routing]() -> void:
+contract_update:
+ // modules/rbac.py:161-164
+ // # The reference implementation grants the update permissions to the Arranger.
+ // # ⚠️ WARNING: Application updates must be executed VERY carefully, as they
+ // # might introduce breaking changes.
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:150
+ // @arc4.abimethod(allow_actions=["UpdateApplication"])
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_rotate_arranger[routing]() -> void:
+rbac_rotate_arranger:
+ // modules/rbac.py:166
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/rbac.py:180
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:181
+ // self.arranger.value = new_arranger
+ bytec 18 // 0x523a41525223
+ swap
+ app_global_put
+ // modules/rbac.py:182
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:166
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_set_op_daemon[routing]() -> void:
+rbac_set_op_daemon:
+ // modules/rbac.py:184
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/rbac.py:198
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:199
+ // self.op_daemon.value = address
+ bytec 27 // 0x523a4f504423
+ swap
+ app_global_put
+ // modules/rbac.py:200
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:184
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_assign_role[routing]() -> void:
+rbac_assign_role:
+ // modules/rbac.py:202
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.uint8
+ txna ApplicationArgs 2
+ dup
+ cover 2
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ txna ApplicationArgs 3
+ dup
+ cover 2
+ len
+ pushint 16
+ ==
+ assert // invalid number of bytes for smart_contracts.abi_types.RoleValidity
+ // modules/rbac.py:224
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:225
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/rbac.py:226
+ // self._assert_valid_role(role_id.as_uint64())
+ btoi
+ dupn 2
+ callsub _assert_valid_role
+ // modules/rbac.py:104
+ // if role_id == UInt64(enums.ROLE_ARRANGER):
+ pushint 20
+ ==
+ bz rbac_assign_role_after_if_else@3
+ // modules/rbac.py:105
+ // self.arranger.value = role_address
+ bytec 18 // 0x523a41525223
+ dig 3
+ app_global_put
+
+rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14:
+ // modules/rbac.py:228
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:202
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+rbac_assign_role_after_if_else@3:
+ // modules/rbac.py:108
+ // if role_id == UInt64(enums.ROLE_ACCOUNT_MANAGER):
+ dup
+ pushint 40
+ ==
+ bz rbac_assign_role_after_if_else@5
+ // modules/rbac.py:109
+ // assert role_address not in self.account_manager, err.INVALID_ROLE_ADDRESS
+ bytec 23 // 0x523a4d4e4723
+ dig 3
+ concat
+ dup
+ box_len
+ bury 1
+ !
+ assert // Invalid account role address
+ // modules/rbac.py:110
+ // self.account_manager[role_address] = validity.copy()
+ dig 2
+ box_put
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+
+rbac_assign_role_after_if_else@5:
+ // modules/rbac.py:112
+ // if role_id == UInt64(enums.ROLE_PRIMARY_DEALER):
+ dup
+ pushint 50
+ ==
+ bz rbac_assign_role_after_if_else@7
+ // modules/rbac.py:113
+ // assert role_address not in self.primary_dealer, err.INVALID_ROLE_ADDRESS
+ bytec 22 // 0x523a50594423
+ dig 3
+ concat
+ dup
+ box_len
+ bury 1
+ !
+ assert // Invalid account role address
+ // modules/rbac.py:114
+ // self.primary_dealer[role_address] = validity.copy()
+ dig 2
+ box_put
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+
+rbac_assign_role_after_if_else@7:
+ // modules/rbac.py:116
+ // if role_id == UInt64(enums.ROLE_TRUSTEE):
+ dup
+ pushint 60
+ ==
+ bz rbac_assign_role_after_if_else@9
+ // modules/rbac.py:117
+ // assert role_address not in self.trustee, err.INVALID_ROLE_ADDRESS
+ bytec 26 // 0x523a54525323
+ dig 3
+ concat
+ dup
+ box_len
+ bury 1
+ !
+ assert // Invalid account role address
+ // modules/rbac.py:118
+ // self.trustee[role_address] = validity.copy()
+ dig 2
+ box_put
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+
+rbac_assign_role_after_if_else@9:
+ // modules/rbac.py:120
+ // if role_id == UInt64(enums.ROLE_AUTHORITY):
+ dup
+ pushint 70
+ ==
+ bz rbac_assign_role_after_if_else@11
+ // modules/rbac.py:121
+ // assert role_address not in self.authority, err.INVALID_ROLE_ADDRESS
+ bytec 21 // 0x523a41555423
+ dig 3
+ concat
+ dup
+ box_len
+ bury 1
+ !
+ assert // Invalid account role address
+ // modules/rbac.py:122
+ // self.authority[role_address] = validity.copy()
+ dig 2
+ box_put
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+
+rbac_assign_role_after_if_else@11:
+ // modules/rbac.py:124
+ // if role_id == UInt64(enums.ROLE_OBSERVER):
+ dup
+ pushint 80
+ ==
+ bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+ // modules/rbac.py:125
+ // assert role_address not in self.observer, err.INVALID_ROLE_ADDRESS
+ bytec 25 // 0x523a4d4f4323
+ dig 3
+ concat
+ dup
+ box_len
+ bury 1
+ !
+ assert // Invalid account role address
+ // modules/rbac.py:126
+ // self.observer[role_address] = validity.copy()
+ dig 2
+ box_put
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+
+
+// modules.rbac.RbacModule.rbac_revoke_role[routing]() -> void:
+rbac_revoke_role:
+ // modules/rbac.py:230
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.uint8
+ txna ApplicationArgs 2
+ dup
+ cover 2
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/rbac.py:249
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:250
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/rbac.py:251
+ // self._assert_valid_role(role_id.as_uint64())
+ btoi
+ dupn 2
+ callsub _assert_valid_role
+ // modules/rbac.py:129
+ // assert role_id != UInt64(enums.ROLE_ARRANGER), err.INVALID_ROLE
+ dup
+ pushint 20
+ !=
+ assert // Invalid role identifier
+ // modules/rbac.py:130
+ // if role_id == UInt64(enums.ROLE_ACCOUNT_MANAGER):
+ pushint 40
+ ==
+ bz rbac_revoke_role_after_if_else@3
+ // modules/rbac.py:131
+ // assert role_address in self.account_manager, err.INVALID_ROLE_ADDRESS
+ bytec 23 // 0x523a4d4e4723
+ dig 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account role address
+ // modules/rbac.py:132
+ // del self.account_manager[role_address]
+ box_del
+ pop
+
+rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12:
+ // modules/rbac.py:253
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:230
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+rbac_revoke_role_after_if_else@3:
+ // modules/rbac.py:134
+ // if role_id == UInt64(enums.ROLE_PRIMARY_DEALER):
+ dup
+ pushint 50
+ ==
+ bz rbac_revoke_role_after_if_else@5
+ // modules/rbac.py:135
+ // assert role_address in self.primary_dealer, err.INVALID_ROLE_ADDRESS
+ bytec 22 // 0x523a50594423
+ dig 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account role address
+ // modules/rbac.py:136
+ // del self.primary_dealer[role_address]
+ box_del
+ pop
+ // modules/rbac.py:252
+ // self._delete_role(role_id.as_uint64(), role_address)
+ b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
+
+rbac_revoke_role_after_if_else@5:
+ // modules/rbac.py:138
+ // if role_id == UInt64(enums.ROLE_TRUSTEE):
+ dup
+ pushint 60
+ ==
+ bz rbac_revoke_role_after_if_else@7
+ // modules/rbac.py:139
+ // assert role_address in self.trustee, err.INVALID_ROLE_ADDRESS
+ bytec 26 // 0x523a54525323
+ dig 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account role address
+ // modules/rbac.py:140
+ // del self.trustee[role_address]
+ box_del
+ pop
+ // modules/rbac.py:252
+ // self._delete_role(role_id.as_uint64(), role_address)
+ b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
+
+rbac_revoke_role_after_if_else@7:
+ // modules/rbac.py:142
+ // if role_id == UInt64(enums.ROLE_AUTHORITY):
+ dup
+ pushint 70
+ ==
+ bz rbac_revoke_role_after_if_else@9
+ // modules/rbac.py:143
+ // assert role_address in self.authority, err.INVALID_ROLE_ADDRESS
+ bytec 21 // 0x523a41555423
+ dig 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account role address
+ // modules/rbac.py:144
+ // del self.authority[role_address]
+ box_del
+ pop
+ // modules/rbac.py:252
+ // self._delete_role(role_id.as_uint64(), role_address)
+ b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
+
+rbac_revoke_role_after_if_else@9:
+ // modules/rbac.py:146
+ // if role_id == UInt64(enums.ROLE_OBSERVER):
+ dup
+ pushint 80
+ ==
+ bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
+ // modules/rbac.py:147
+ // assert role_address in self.observer, err.INVALID_ROLE_ADDRESS
+ bytec 25 // 0x523a4d4f4323
+ dig 2
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account role address
+ // modules/rbac.py:148
+ // del self.observer[role_address]
+ box_del
+ pop
+ b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
+
+
+// modules.rbac.RbacModule.rbac_contract_suspension[routing]() -> void:
+rbac_contract_suspension:
+ // modules/rbac.py:255
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.bool
+ intc_0 // 0
+ getbit
+ // modules/rbac.py:79
+ // assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
+ bytec 21 // 0x523a41555423
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+ // modules/rbac.py:271
+ // self.contract_suspended = suspended
+ bytec 33 // "contract_suspended"
+ swap
+ app_global_put
+ // modules/rbac.py:272
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:255
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_contract_default[routing]() -> void:
+rbac_contract_default:
+ // modules/rbac.py:274
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.bool
+ intc_0 // 0
+ getbit
+ // modules/rbac.py:76
+ // assert self._role_is_active(self.trustee, Txn.sender), err.UNAUTHORIZED
+ bytec 26 // 0x523a54525323
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+ // modules/rbac.py:287
+ // self.defaulted = defaulted
+ bytec 34 // "defaulted"
+ swap
+ app_global_put
+ // modules/rbac.py:288
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:274
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_get_arranger[routing]() -> void:
+rbac_get_arranger:
+ // modules/rbac.py:301
+ // return self.arranger.value
+ intc_0 // 0
+ bytec 18 // 0x523a41525223
+ app_global_get_ex
+ assert // check self.arranger exists
+ // modules/rbac.py:290
+ // @arc4.abimethod(readonly=True)
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_get_address_roles[routing]() -> void:
+rbac_get_address_roles:
+ // modules/rbac.py:303
+ // @arc4.abimethod(readonly=True)
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/rbac.py:321
+ // self._role_is_active(self.account_manager, address),
+ bytec 23 // 0x523a4d4e4723
+ dig 1
+ callsub _role_is_active
+ // modules/rbac.py:322
+ // self._role_is_active(self.primary_dealer, address),
+ bytec 22 // 0x523a50594423
+ dig 2
+ callsub _role_is_active
+ // modules/rbac.py:323
+ // self._role_is_active(self.trustee, address),
+ bytec 26 // 0x523a54525323
+ dig 3
+ callsub _role_is_active
+ // modules/rbac.py:324
+ // self._role_is_active(self.authority, address),
+ bytec 21 // 0x523a41555423
+ dig 4
+ callsub _role_is_active
+ // modules/rbac.py:325
+ // self._role_is_active(self.observer, address),
+ bytec 25 // 0x523a4d4f4323
+ uncover 5
+ callsub _role_is_active
+ // modules/rbac.py:303
+ // @arc4.abimethod(readonly=True)
+ bytec 41 // 0x00
+ intc_0 // 0
+ uncover 6
+ setbit
+ intc_1 // 1
+ uncover 5
+ setbit
+ pushint 2
+ uncover 4
+ setbit
+ pushint 3
+ uncover 3
+ setbit
+ pushint 4
+ uncover 2
+ setbit
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_get_role_validity[routing]() -> void:
+rbac_get_role_validity:
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_1 // 1
+ ==
+ assert // invalid number of bytes for arc4.uint8
+ txna ApplicationArgs 2
+ dup
+ cover 2
+ len
+ intc_3 // 32
+ ==
+ assert // invalid number of bytes for arc4.static_array
+ // modules/rbac.py:346
+ // role = role_id.as_uint64()
+ btoi
+ // modules/rbac.py:347
+ // self._assert_valid_role(role)
+ dup
+ callsub _assert_valid_role
+ // modules/rbac.py:349
+ // case UInt64(enums.ROLE_ARRANGER):
+ pushints 20 40 50 60 70 80
+ // modules/rbac.py:348-379
+ // match role:
+ // case UInt64(enums.ROLE_ARRANGER):
+ // return typ.RoleValidity(
+ // role_validity_start=UInt64(0), role_validity_end=UInt64(0)
+ // )
+ // case UInt64(enums.ROLE_ACCOUNT_MANAGER):
+ // assert self._has_role(
+ // self.account_manager, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ // return self.account_manager[role_address]
+ // case UInt64(enums.ROLE_PRIMARY_DEALER):
+ // assert self._has_role(
+ // self.primary_dealer, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ // return self.primary_dealer[role_address]
+ // case UInt64(enums.ROLE_TRUSTEE):
+ // assert self._has_role(
+ // self.trustee, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ // return self.trustee[role_address]
+ // case UInt64(enums.ROLE_AUTHORITY):
+ // assert self._has_role(
+ // self.authority, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ // return self.authority[role_address]
+ // case UInt64(enums.ROLE_OBSERVER):
+ // assert self._has_role(
+ // self.observer, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ // return self.observer[role_address]
+ // case _:
+ // op.err(err.INVALID_ROLE)
+ uncover 6
+ match rbac_get_role_validity_switch_case_0@2 rbac_get_role_validity_switch_case_1@3 rbac_get_role_validity_switch_case_2@4 rbac_get_role_validity_switch_case_3@5 rbac_get_role_validity_switch_case_4@6 rbac_get_role_validity_switch_case_5@7
+ // modules/rbac.py:379
+ // op.err(err.INVALID_ROLE)
+ err // Invalid role identifier
+
+rbac_get_role_validity_switch_case_5@7:
+ // modules/rbac.py:375
+ // self.observer, role_address
+ bytec 25 // 0x523a4d4f4323
+ // modules/rbac.py:57
+ // return role_address in role_map
+ dig 1
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/rbac.py:374-376
+ // assert self._has_role(
+ // self.observer, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ assert // Invalid account role address
+ // modules/rbac.py:377
+ // return self.observer[role_address]
+ box_get
+ pop
+
+rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9:
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_1 // 1
+ return
+
+rbac_get_role_validity_switch_case_4@6:
+ // modules/rbac.py:370
+ // self.authority, role_address
+ bytec 21 // 0x523a41555423
+ // modules/rbac.py:57
+ // return role_address in role_map
+ dig 1
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/rbac.py:369-371
+ // assert self._has_role(
+ // self.authority, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ assert // Invalid account role address
+ // modules/rbac.py:372
+ // return self.authority[role_address]
+ box_get
+ pop
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
+
+rbac_get_role_validity_switch_case_3@5:
+ // modules/rbac.py:365
+ // self.trustee, role_address
+ bytec 26 // 0x523a54525323
+ // modules/rbac.py:57
+ // return role_address in role_map
+ dig 1
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/rbac.py:364-366
+ // assert self._has_role(
+ // self.trustee, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ assert // Invalid account role address
+ // modules/rbac.py:367
+ // return self.trustee[role_address]
+ box_get
+ pop
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
+
+rbac_get_role_validity_switch_case_2@4:
+ // modules/rbac.py:360
+ // self.primary_dealer, role_address
+ bytec 22 // 0x523a50594423
+ // modules/rbac.py:57
+ // return role_address in role_map
+ dig 1
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/rbac.py:359-361
+ // assert self._has_role(
+ // self.primary_dealer, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ assert // Invalid account role address
+ // modules/rbac.py:362
+ // return self.primary_dealer[role_address]
+ box_get
+ pop
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
+
+rbac_get_role_validity_switch_case_1@3:
+ // modules/rbac.py:355
+ // self.account_manager, role_address
+ bytec 23 // 0x523a4d4e4723
+ // modules/rbac.py:57
+ // return role_address in role_map
+ dig 1
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/rbac.py:354-356
+ // assert self._has_role(
+ // self.account_manager, role_address
+ // ), err.INVALID_ROLE_ADDRESS
+ assert // Invalid account role address
+ // modules/rbac.py:357
+ // return self.account_manager[role_address]
+ box_get
+ pop
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
+
+rbac_get_role_validity_switch_case_0@2:
+ // modules/rbac.py:350-352
+ // return typ.RoleValidity(
+ // role_validity_start=UInt64(0), role_validity_end=UInt64(0)
+ // )
+ pushbytes 0x00000000000000000000000000000000
+ // modules/rbac.py:328
+ // @arc4.abimethod(readonly=True)
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
+
+
+// modules.accounting.AccountingModule._assert_is_not_account_suspended(holding_address: bytes) -> void:
+_assert_is_not_account_suspended:
+ // modules/accounting.py:26
+ // def _assert_is_not_account_suspended(self, holding_address: Account) -> None:
+ proto 1 0
+ // modules/accounting.py:28
+ // assert not self.account[holding_address].suspended, err.SUSPENDED
+ bytec 8 // 0x4123
+ frame_dig -1
+ concat
+ box_get
+ assert // check self.account entry exists
+ pushint 384
+ getbit
+ !
+ assert // Suspended operations
+ retsub
+
+
+// modules.accounting.AccountingModule._settle_position(holding_address: bytes) -> uint64, uint64:
+_settle_position:
+ // modules/accounting.py:44
+ // def _settle_position(self, holding_address: Account) -> tuple[UInt64, UInt64]:
+ proto 1 2
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ frame_dig -1
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/accounting.py:61
+ // position = self.account[holding_address].copy()
+ dup
+ box_get
+ pop
+ // modules/accounting.py:63-65
+ // # Compute the incremental per-unit fixed-point interest and principal accrued
+ // # since this account's last checkpoint.
+ // interest_delta = self.cumulative_interest_index - position.interest_checkpoint
+ intc_0 // 0
+ bytec 16 // "cumulative_interest_index"
+ app_global_get_ex
+ assert // check self.cumulative_interest_index exists
+ dig 1
+ pushint 57
+ extract_uint64
+ -
+ // modules/accounting.py:67
+ // self.cumulative_principal_index - position.principal_checkpoint
+ intc_0 // 0
+ bytec 17 // "cumulative_principal_index"
+ app_global_get_ex
+ assert // check self.cumulative_principal_index exists
+ dig 2
+ pushint 65
+ extract_uint64
+ -
+ // modules/accounting.py:73
+ // interest_delta, position.units, self.fixed_point_scale
+ dig 2
+ intc_3 // 32
+ extract_uint64
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/accounting.py:70-74
+ // # Convert the per-unit fixed-point deltas into absolute claimable amounts
+ // # using the account's active units.
+ // claimable_interest = self._scaled_mul_div(
+ // interest_delta, position.units, self.fixed_point_scale
+ // )
+ uncover 3
+ dig 2
+ uncover 2
+ callsub _scaled_mul_div
+ // modules/accounting.py:76
+ // principal_delta, position.units, self.fixed_point_scale
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/accounting.py:75-77
+ // claimable_principal = self._scaled_mul_div(
+ // principal_delta, position.units, self.fixed_point_scale
+ // )
+ uncover 3
+ uncover 3
+ uncover 2
+ callsub _scaled_mul_div
+ // modules/accounting.py:79-81
+ // # Accrue the claimable amounts to the account position and make them available
+ // # for withdrawal.
+ // position.claimable_interest += claimable_interest
+ dig 2
+ pushint 73
+ extract_uint64
+ dig 2
+ +
+ itob
+ uncover 3
+ swap
+ replace2 73
+ // modules/accounting.py:82
+ // position.claimable_principal += claimable_principal
+ dup
+ pushint 81
+ extract_uint64
+ dig 2
+ +
+ itob
+ replace2 81
+ // modules/accounting.py:84-86
+ // # Advance the account's per-unit fixed-point checkpoints to the current global
+ // # per-unit fixed-point global indices.
+ // position.interest_checkpoint = self.cumulative_interest_index
+ intc_0 // 0
+ bytec 16 // "cumulative_interest_index"
+ app_global_get_ex
+ assert // check self.cumulative_interest_index exists
+ itob
+ replace2 57
+ // modules/accounting.py:87
+ // position.principal_checkpoint = self.cumulative_principal_index
+ intc_0 // 0
+ bytec 17 // "cumulative_principal_index"
+ app_global_get_ex
+ assert // check self.cumulative_principal_index exists
+ itob
+ replace2 65
+ // modules/accounting.py:89-90
+ // # Advance the account's event cursor to the current global event cursor.
+ // position.settled_cursor = self.event_cursor
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ itob
+ replace2 49
+ // modules/accounting.py:92-94
+ // # Update the account position and return the newly accrued claimable amounts
+ // # added to the total position's claimable amounts.
+ // self.account[holding_address] = position.copy()
+ uncover 3
+ swap
+ box_put
+ // modules/accounting.py:95
+ // return claimable_interest, claimable_principal
+ retsub
+
+
+// modules.accounting.AccountingModule._ensure_units_activated(holding_address: bytes) -> void:
+_ensure_units_activated:
+ // modules/accounting.py:97
+ // def _ensure_units_activated(self, holding_address: Account) -> None:
+ proto 1 0
+ intc_0 // 0
+ pushbytes ""
+ // modules/accounting.py:24
+ // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
+ bytec 8 // 0x4123
+ frame_dig -1
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid account holding address
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/accounting.py:100
+ // if self._status_is_pending_ied():
+ bz _ensure_units_activated_after_if_else@2
+ // modules/accounting.py:101
+ // return
+ retsub
+
+_ensure_units_activated_after_if_else@2:
+ // modules/accounting.py:103
+ // position = self.account[holding_address].copy()
+ frame_dig 2
+ box_get
+ swap
+ dup
+ cover 2
+ frame_bury 0
+ assert // check self.account entry exists
+ // modules/accounting.py:104
+ // if position.reserved_units == UInt64(0):
+ pushint 40
+ extract_uint64
+ dup
+ frame_bury 1
+ bnz _ensure_units_activated_after_if_else@4
+ // modules/accounting.py:105
+ // return
+ retsub
+
+_ensure_units_activated_after_if_else@4:
+ // modules/accounting.py:108
+ // position.units += activated_units
+ frame_dig 0
+ dup
+ intc_3 // 32
+ extract_uint64
+ frame_dig 1
+ dup
+ cover 3
+ +
+ itob
+ replace2 32
+ // modules/accounting.py:109
+ // position.reserved_units = UInt64(0)
+ intc_0 // 0
+ itob
+ replace2 40
+ // modules/accounting.py:110
+ // self.account[holding_address] = position.copy()
+ frame_dig 2
+ swap
+ box_put
+ // modules/accounting.py:111
+ // assert self.reserved_units_total >= activated_units, err.OVER_DISTRIBUTION
+ intc_0 // 0
+ bytec 11 // "reserved_units_total"
+ app_global_get_ex
+ assert // check self.reserved_units_total exists
+ dup
+ dig 2
+ >=
+ assert // Insufficient remaining D-ASA units
+ // modules/accounting.py:112
+ // self.reserved_units_total -= activated_units
+ swap
+ -
+ bytec 11 // "reserved_units_total"
+ swap
+ app_global_put
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._scaled_mul_div(multiplicand: uint64, multiplier: uint64, divisor: uint64) -> uint64:
+_scaled_mul_div:
+ // modules/actus_kernel.py:153-155
+ // def _scaled_mul_div(
+ // self, multiplicand: UInt64, multiplier: UInt64, divisor: UInt64
+ // ) -> UInt64:
+ proto 3 1
+ // modules/actus_kernel.py:157
+ // if multiplicand == UInt64(0) or multiplier == UInt64(0):
+ frame_dig -3
+ bz _scaled_mul_div_if_body@2
+ frame_dig -2
+ bnz _scaled_mul_div_after_if_else@3
+
+_scaled_mul_div_if_body@2:
+ // modules/actus_kernel.py:158
+ // return UInt64(0)
+ intc_0 // 0
+ retsub
+
+_scaled_mul_div_after_if_else@3:
+ // modules/actus_kernel.py:159
+ // high, low = op.mulw(multiplicand, multiplier)
+ frame_dig -3
+ frame_dig -2
+ mulw
+ // modules/actus_kernel.py:160
+ // return op.divw(high, low, divisor)
+ frame_dig -1
+ divw
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._amount_to_index_delta(amount: uint64) -> uint64:
+_amount_to_index_delta:
+ // modules/actus_kernel.py:162
+ // def _amount_to_index_delta(self, amount: UInt64) -> UInt64:
+ proto 1 1
+ // modules/actus_kernel.py:164
+ // if amount == UInt64(0):
+ frame_dig -1
+ bnz _amount_to_index_delta_after_if_else@2
+ // modules/actus_kernel.py:165
+ // return UInt64(0)
+ intc_0 // 0
+ retsub
+
+_amount_to_index_delta_after_if_else@2:
+ // modules/actus_kernel.py:166
+ // assert self.total_units > UInt64(0), err.NO_UNITS
+ intc_0 // 0
+ bytec 13 // "total_units"
+ app_global_get_ex
+ assert // check self.total_units exists
+ dup
+ assert // No D-ASA units
+ // modules/actus_kernel.py:167
+ // return self._scaled_mul_div(amount, self.fixed_point_scale, self.total_units)
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ frame_dig -1
+ swap
+ uncover 2
+ callsub _scaled_mul_div
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._index_delta_to_amount(index_delta: uint64) -> uint64:
+_index_delta_to_amount:
+ // modules/actus_kernel.py:169
+ // def _index_delta_to_amount(self, index_delta: UInt64) -> UInt64:
+ proto 1 1
+ // modules/actus_kernel.py:176
+ // if index_delta == UInt64(0):
+ frame_dig -1
+ bnz _index_delta_to_amount_after_if_else@2
+ // modules/actus_kernel.py:177
+ // return UInt64(0)
+ intc_0 // 0
+ retsub
+
+_index_delta_to_amount_after_if_else@2:
+ // modules/actus_kernel.py:179
+ // self.total_units,
+ intc_0 // 0
+ bytec 13 // "total_units"
+ app_global_get_ex
+ assert // check self.total_units exists
+ // modules/actus_kernel.py:181
+ // self.fixed_point_scale,
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:178-182
+ // return self._scaled_mul_div(
+ // self.total_units,
+ // index_delta,
+ // self.fixed_point_scale,
+ // )
+ frame_dig -1
+ swap
+ callsub _scaled_mul_div
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._get_schedule_entry(event_id: uint64) -> bytes:
+_get_schedule_entry:
+ // modules/actus_kernel.py:202
+ // def _get_schedule_entry(self, event_id: UInt64) -> typ.ExecutionScheduleEntry:
+ proto 1 1
+ // modules/actus_kernel.py:204
+ // assert event_id < self.schedule_entry_count, err.INVALID_EVENT_ID
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ frame_dig -1
+ >
+ assert // Invalid event id
+ // modules/actus_kernel.py:190
+ // return event_id // UInt64(cst.SCHEDULE_PAGE_SIZE)
+ frame_dig -1
+ pushint 16
+ /
+ // modules/actus_kernel.py:206
+ // assert page_index in self.schedule_page, err.INVALID_SCHEDULE_PAGE
+ itob
+ bytec 24 // 0x5323
+ swap
+ concat
+ dup
+ box_len
+ bury 1
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:194
+ // return event_id % UInt64(cst.SCHEDULE_PAGE_SIZE)
+ frame_dig -1
+ pushint 16
+ %
+ // modules/actus_kernel.py:209
+ // assert offset < page.length, err.INVALID_SCHEDULE_PAGE
+ dig 1
+ intc_0 // 0
+ pushint 2
+ box_extract
+ btoi
+ dig 1
+ >
+ assert // Invalid schedule page
+ // modules/actus_kernel.py:210
+ // return page[offset].copy()
+ pushint 65
+ *
+ pushint 2
+ +
+ pushint 65
+ box_extract
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._assert_event_allowed_for_contract_type(contract_type: uint64, event_type: uint64) -> void:
+_assert_event_allowed_for_contract_type:
+ // modules/actus_kernel.py:313-315
+ // def _assert_event_allowed_for_contract_type(
+ // self, contract_type: UInt64, event_type: UInt64
+ // ) -> None:
+ proto 2 0
+ // modules/actus_kernel.py:254-255
+ // # Check common events first
+ // if event_type in common_events:
+ frame_dig -1
+ // modules/actus_kernel.py:247
+ // UInt64(enums.EVT_IED),
+ intc_1 // 1
+ // modules/actus_kernel.py:254-255
+ // # Check common events first
+ // if event_type in common_events:
+ ==
+ bnz _assert_event_allowed_for_contract_type_if_body@6
+ frame_dig -1
+ // modules/actus_kernel.py:248
+ // UInt64(enums.EVT_IP),
+ intc_2 // 8
+ // modules/actus_kernel.py:254-255
+ // # Check common events first
+ // if event_type in common_events:
+ ==
+ bnz _assert_event_allowed_for_contract_type_if_body@6
+ frame_dig -1
+ // modules/actus_kernel.py:249
+ // UInt64(enums.EVT_MD),
+ pushint 19
+ // modules/actus_kernel.py:254-255
+ // # Check common events first
+ // if event_type in common_events:
+ ==
+ bnz _assert_event_allowed_for_contract_type_if_body@6
+ frame_dig -1
+ // modules/actus_kernel.py:250
+ // UInt64(enums.EVT_RR),
+ pushint 12
+ // modules/actus_kernel.py:254-255
+ // # Check common events first
+ // if event_type in common_events:
+ ==
+ bnz _assert_event_allowed_for_contract_type_if_body@6
+ frame_dig -1
+ // modules/actus_kernel.py:251
+ // UInt64(enums.EVT_RRF),
+ pushint 11
+ // modules/actus_kernel.py:254-255
+ // # Check common events first
+ // if event_type in common_events:
+ ==
+ bz _assert_event_allowed_for_contract_type_after_if_else@7
+
+_assert_event_allowed_for_contract_type_if_body@6:
+ // modules/actus_kernel.py:256
+ // return True
+ intc_1 // 1
+
+_assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34:
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ assert // Invalid ACTUS configuration
+ retsub
+
+_assert_event_allowed_for_contract_type_after_if_else@7:
+ // modules/actus_kernel.py:258-259
+ // # Contract-specific additional events
+ // if contract_type == UInt64(enums.CT_PAM):
+ frame_dig -2
+ bnz _assert_event_allowed_for_contract_type_after_if_else@9
+ // modules/actus_kernel.py:260-261
+ // # PAM only supports common events
+ // return False
+ intc_0 // 0
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_after_if_else@9:
+ // modules/actus_kernel.py:263
+ // if contract_type == UInt64(enums.CT_LAM) or contract_type == UInt64(
+ frame_dig -2
+ pushint 3
+ ==
+ // modules/actus_kernel.py:263-265
+ // if contract_type == UInt64(enums.CT_LAM) or contract_type == UInt64(
+ // enums.CT_NAM
+ // ):
+ bnz _assert_event_allowed_for_contract_type_if_body@11
+ frame_dig -2
+ pushint 2
+ ==
+ bz _assert_event_allowed_for_contract_type_after_if_else@16
+
+_assert_event_allowed_for_contract_type_if_body@11:
+ // modules/actus_kernel.py:266-270
+ // # LAM/NAM add: PR, IPCB
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // )
+ frame_dig -1
+ // modules/actus_kernel.py:268
+ // UInt64(enums.EVT_PR),
+ pushint 3
+ // modules/actus_kernel.py:266-270
+ // # LAM/NAM add: PR, IPCB
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // )
+ ==
+ bnz _assert_event_allowed_for_contract_type_bool_true@13
+ frame_dig -1
+ // modules/actus_kernel.py:269
+ // UInt64(enums.EVT_IPCB),
+ pushint 18
+ // modules/actus_kernel.py:266-270
+ // # LAM/NAM add: PR, IPCB
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // )
+ ==
+ bz _assert_event_allowed_for_contract_type_bool_false@14
+
+_assert_event_allowed_for_contract_type_bool_true@13:
+ intc_1 // 1
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_bool_false@14:
+ intc_0 // 0
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_after_if_else@16:
+ // modules/actus_kernel.py:272
+ // if contract_type == UInt64(enums.CT_ANN):
+ frame_dig -2
+ intc_1 // 1
+ ==
+ bz _assert_event_allowed_for_contract_type_after_if_else@23
+ // modules/actus_kernel.py:273-278
+ // # ANN adds: PR, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ frame_dig -1
+ // modules/actus_kernel.py:275
+ // UInt64(enums.EVT_PR),
+ pushint 3
+ // modules/actus_kernel.py:273-278
+ // # ANN adds: PR, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz _assert_event_allowed_for_contract_type_bool_true@20
+ frame_dig -1
+ // modules/actus_kernel.py:276
+ // UInt64(enums.EVT_IPCB),
+ pushint 18
+ // modules/actus_kernel.py:273-278
+ // # ANN adds: PR, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz _assert_event_allowed_for_contract_type_bool_true@20
+ frame_dig -1
+ // modules/actus_kernel.py:277
+ // UInt64(enums.EVT_PRF),
+ pushint 5
+ // modules/actus_kernel.py:273-278
+ // # ANN adds: PR, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bz _assert_event_allowed_for_contract_type_bool_false@21
+
+_assert_event_allowed_for_contract_type_bool_true@20:
+ intc_1 // 1
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_bool_false@21:
+ intc_0 // 0
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_after_if_else@23:
+ // modules/actus_kernel.py:280
+ // if contract_type == UInt64(enums.CT_LAX):
+ frame_dig -2
+ pushint 4
+ ==
+ bz _assert_event_allowed_for_contract_type_after_if_else@31
+ // modules/actus_kernel.py:281-287
+ // # LAX adds: PR, PI, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ frame_dig -1
+ // modules/actus_kernel.py:283
+ // UInt64(enums.EVT_PR),
+ pushint 3
+ // modules/actus_kernel.py:281-287
+ // # LAX adds: PR, PI, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz _assert_event_allowed_for_contract_type_bool_true@28
+ frame_dig -1
+ // modules/actus_kernel.py:284
+ // UInt64(enums.EVT_PI),
+ pushint 4
+ // modules/actus_kernel.py:281-287
+ // # LAX adds: PR, PI, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz _assert_event_allowed_for_contract_type_bool_true@28
+ frame_dig -1
+ // modules/actus_kernel.py:285
+ // UInt64(enums.EVT_IPCB),
+ pushint 18
+ // modules/actus_kernel.py:281-287
+ // # LAX adds: PR, PI, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bnz _assert_event_allowed_for_contract_type_bool_true@28
+ frame_dig -1
+ // modules/actus_kernel.py:286
+ // UInt64(enums.EVT_PRF),
+ pushint 5
+ // modules/actus_kernel.py:281-287
+ // # LAX adds: PR, PI, IPCB, PRF
+ // return event_type in (
+ // UInt64(enums.EVT_PR),
+ // UInt64(enums.EVT_PI),
+ // UInt64(enums.EVT_IPCB),
+ // UInt64(enums.EVT_PRF),
+ // )
+ ==
+ bz _assert_event_allowed_for_contract_type_bool_false@29
+
+_assert_event_allowed_for_contract_type_bool_true@28:
+ intc_1 // 1
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_bool_false@29:
+ intc_0 // 0
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_after_if_else@31:
+ // modules/actus_kernel.py:289
+ // if contract_type == UInt64(enums.CT_CLM):
+ frame_dig -2
+ pushint 5
+ ==
+ bz _assert_event_allowed_for_contract_type_after_if_else@33
+ // modules/actus_kernel.py:290-291
+ // # CLM adds: PR
+ // return event_type == UInt64(enums.EVT_PR)
+ frame_dig -1
+ pushint 3
+ ==
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+_assert_event_allowed_for_contract_type_after_if_else@33:
+ // modules/actus_kernel.py:293
+ // return False
+ intc_0 // 0
+ // modules/actus_kernel.py:317-319
+ // assert self._event_allowed_for_contract_type(
+ // contract_type, event_type
+ // ), err.INVALID_ACTUS_CONFIG
+ b _assert_event_allowed_for_contract_type_after_inlined_modules.actus_kernel.ActusKernelModule._event_allowed_for_contract_type@34
+
+
+// modules.actus_kernel.ActusKernelModule._is_dynamic_annuity() -> uint64:
+_is_dynamic_annuity:
+ // modules/actus_kernel.py:335
+ // self.contract_type == UInt64(enums.CT_ANN)
+ intc_0 // 0
+ bytec 10 // "contract_type"
+ app_global_get_ex
+ assert // check self.contract_type exists
+ intc_1 // 1
+ ==
+ // modules/actus_kernel.py:335-336
+ // self.contract_type == UInt64(enums.CT_ANN)
+ // and self.dynamic_principal_redemption
+ bz _is_dynamic_annuity_bool_false@3
+ // modules/actus_kernel.py:336
+ // and self.dynamic_principal_redemption
+ intc_0 // 0
+ bytec 35 // "dynamic_principal_redemption"
+ app_global_get_ex
+ assert // check self.dynamic_principal_redemption exists
+ // modules/actus_kernel.py:335-336
+ // self.contract_type == UInt64(enums.CT_ANN)
+ // and self.dynamic_principal_redemption
+ bz _is_dynamic_annuity_bool_false@3
+ intc_1 // 1
+ // modules/actus_kernel.py:334-337
+ // return (
+ // self.contract_type == UInt64(enums.CT_ANN)
+ // and self.dynamic_principal_redemption
+ // )
+ retsub
+
+_is_dynamic_annuity_bool_false@3:
+ intc_0 // 0
+ // modules/actus_kernel.py:334-337
+ // return (
+ // self.contract_type == UInt64(enums.CT_ANN)
+ // and self.dynamic_principal_redemption
+ // )
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._entry_interest_segment(entry: bytes) -> uint64, bytes:
+_entry_interest_segment:
+ // modules/actus_kernel.py:380
+ // def _entry_interest_segment(self, entry: typ.ExecutionScheduleEntry) -> UInt64:
+ proto 1 2
+ // modules/actus_kernel.py:389
+ // entry.accrual_factor == UInt64(0)
+ frame_dig -1
+ pushint 17
+ extract_uint64
+ dup
+ // modules/actus_kernel.py:389-391
+ // entry.accrual_factor == UInt64(0)
+ // or self.nominal_interest_rate == UInt64(0)
+ // or self.interest_calculation_base == UInt64(0)
+ bz _entry_interest_segment_if_body@3
+ // modules/actus_kernel.py:390
+ // or self.nominal_interest_rate == UInt64(0)
+ intc_0 // 0
+ bytec 9 // "nominal_interest_rate"
+ app_global_get_ex
+ assert // check self.nominal_interest_rate exists
+ // modules/actus_kernel.py:389-391
+ // entry.accrual_factor == UInt64(0)
+ // or self.nominal_interest_rate == UInt64(0)
+ // or self.interest_calculation_base == UInt64(0)
+ bz _entry_interest_segment_if_body@3
+ // modules/actus_kernel.py:391
+ // or self.interest_calculation_base == UInt64(0)
+ intc_0 // 0
+ bytec 7 // "interest_calculation_base"
+ app_global_get_ex
+ assert // check self.interest_calculation_base exists
+ // modules/actus_kernel.py:389-391
+ // entry.accrual_factor == UInt64(0)
+ // or self.nominal_interest_rate == UInt64(0)
+ // or self.interest_calculation_base == UInt64(0)
+ bnz _entry_interest_segment_after_if_else@4
+
+_entry_interest_segment_if_body@3:
+ // modules/actus_kernel.py:393
+ // return UInt64(0)
+ intc_0 // 0
+ frame_dig -1
+ uncover 2
+ retsub
+
+_entry_interest_segment_after_if_else@4:
+ // modules/actus_kernel.py:395
+ // self.interest_calculation_base,
+ intc_0 // 0
+ bytec 7 // "interest_calculation_base"
+ app_global_get_ex
+ assert // check self.interest_calculation_base exists
+ // modules/actus_kernel.py:396
+ // self.nominal_interest_rate,
+ intc_0 // 0
+ bytec 9 // "nominal_interest_rate"
+ app_global_get_ex
+ assert // check self.nominal_interest_rate exists
+ // modules/actus_kernel.py:397
+ // self.fixed_point_scale,
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:394-398
+ // accrued = self._scaled_mul_div(
+ // self.interest_calculation_base,
+ // self.nominal_interest_rate,
+ // self.fixed_point_scale,
+ // )
+ callsub _scaled_mul_div
+ // modules/actus_kernel.py:402
+ // self.fixed_point_scale,
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:399-403
+ // return self._scaled_mul_div(
+ // accrued,
+ // entry.accrual_factor,
+ // self.fixed_point_scale,
+ // )
+ frame_dig 0
+ swap
+ callsub _scaled_mul_div
+ frame_dig -1
+ uncover 2
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._discount_annuity_factor(discount_factor: uint64, redemption_factor: uint64) -> uint64:
+_discount_annuity_factor:
+ // modules/actus_kernel.py:462-466
+ // def _discount_annuity_factor(
+ // self,
+ // discount_factor: UInt64,
+ // redemption_factor: UInt64,
+ // ) -> UInt64:
+ proto 2 1
+ // modules/actus_kernel.py:468
+ // if redemption_factor == UInt64(0):
+ frame_dig -1
+ bnz _discount_annuity_factor_after_if_else@2
+ // modules/actus_kernel.py:469
+ // return discount_factor
+ frame_dig -2
+ retsub
+
+_discount_annuity_factor_after_if_else@2:
+ // modules/actus_kernel.py:470
+ // period_rate = self.fixed_point_scale + self._scaled_mul_div(
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:471
+ // self.nominal_interest_rate,
+ intc_0 // 0
+ bytec 9 // "nominal_interest_rate"
+ app_global_get_ex
+ assert // check self.nominal_interest_rate exists
+ // modules/actus_kernel.py:470-474
+ // period_rate = self.fixed_point_scale + self._scaled_mul_div(
+ // self.nominal_interest_rate,
+ // redemption_factor,
+ // self.fixed_point_scale,
+ // )
+ frame_dig -1
+ dig 2
+ callsub _scaled_mul_div
+ +
+ // modules/actus_kernel.py:475
+ // assert period_rate > UInt64(0), err.INVALID_ACTUS_CONFIG
+ dup
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:478
+ // self.fixed_point_scale,
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:476-480
+ // return self._scaled_mul_div(
+ // discount_factor,
+ // self.fixed_point_scale,
+ // period_rate,
+ // )
+ frame_dig -2
+ swap
+ uncover 2
+ callsub _scaled_mul_div
+ retsub
+
+
+// modules.actus_kernel.ActusKernelModule._apply_non_cash_schedule_entry(entry: bytes, payload: bytes) -> bytes, bytes:
+_apply_non_cash_schedule_entry:
+ // modules/actus_kernel.py:613-615
+ // def _apply_non_cash_schedule_entry(
+ // self, entry: typ.ExecutionScheduleEntry, payload: typ.ObservedEventRequest
+ // ) -> None:
+ proto 2 2
+ intc_0 // 0
+ pushbytes ""
+ dupn 8
+ // modules/actus_kernel.py:623
+ // assert entry.event_id == self.event_cursor, err.INVALID_EVENT_CURSOR
+ frame_dig -2
+ intc_0 // 0
+ extract_uint64
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ ==
+ assert // Invalid event cursor
+ // modules/actus_kernel.py:624
+ // assert entry.scheduled_time <= Global.latest_timestamp, err.NO_DUE_CASHFLOW
+ frame_dig -2
+ pushint 9
+ extract_uint64
+ global LatestTimestamp
+ <=
+ assert // No due cashflow to pay
+ // modules/actus_kernel.py:626
+ // event_type = entry.event_type.as_uint64()
+ frame_dig -2
+ intc_2 // 8
+ getbyte
+ dup
+ // modules/actus_kernel.py:627
+ // if event_type == UInt64(enums.EVT_IED):
+ intc_1 // 1
+ ==
+ dup
+ bz _apply_non_cash_schedule_entry_after_if_else@6
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/actus_kernel.py:628-630
+ // # IED finalizes issuance: reserved units become activatable and the
+ // # schedule's initial contractual state becomes live.
+ // assert self._status_is_pending_ied(), err.INVALID_ACTUS_CONFIG
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:632
+ // self.reserved_units_total == self.total_units
+ intc_0 // 0
+ bytec 11 // "reserved_units_total"
+ app_global_get_ex
+ assert // check self.reserved_units_total exists
+ intc_0 // 0
+ bytec 13 // "total_units"
+ app_global_get_ex
+ assert // check self.total_units exists
+ ==
+ // modules/actus_kernel.py:631-633
+ // assert (
+ // self.reserved_units_total == self.total_units
+ // ), err.PRIMARY_DISTRIBUTION_INCOMPLETE
+ assert // Primary distribution is not complete
+ // modules/actus_kernel.py:634
+ // self.outstanding_principal = entry.next_outstanding_principal
+ frame_dig -2
+ pushint 49
+ extract_uint64
+ bytec 4 // "outstanding_principal"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:635
+ // self.interest_calculation_base = entry.next_outstanding_principal
+ bytec 7 // "interest_calculation_base"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:636
+ // self.nominal_interest_rate = entry.next_nominal_interest_rate
+ frame_dig -2
+ pushint 33
+ extract_uint64
+ bytec 9 // "nominal_interest_rate"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:637
+ // self.accrued_interest = UInt64(0)
+ bytec 6 // "accrued_interest"
+ intc_0 // 0
+ app_global_put
+ // modules/actus_kernel.py:638
+ // self.next_principal_redemption = entry.next_principal_redemption
+ frame_dig -2
+ pushint 41
+ extract_uint64
+ bytec 14 // "next_principal_redemption"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:639
+ // self.event_cursor += UInt64(1)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_1 // 1
+ +
+ bytec_2 // "event_cursor"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:640
+ // self.status = UInt64(enums.STATUS_ACTIVE)
+ bytec_1 // "status"
+ pushint 100
+ app_global_put
+ // modules/actus_kernel.py:451
+ // assert entry.event_type.as_uint64() == UInt64(enums.EVT_IED), err.NOT_EVT_IED
+ frame_dig 11
+ assert // Not IED event
+ // modules/actus_kernel.py:452
+ // return self.initial_exchange_amount
+ intc_0 // 0
+ bytec 20 // "initial_exchange_amount"
+ app_global_get_ex
+ assert // check self.initial_exchange_amount exists
+ // modules/actus_kernel.py:641-645
+ // self._emit_execution_event(
+ // entry=entry,
+ // payoff=self._entry_ied_amount(entry),
+ // settled_amount=UInt64(0),
+ // )
+ frame_dig -2
+ swap
+ // modules/actus_kernel.py:644
+ // settled_amount=UInt64(0),
+ intc_0 // 0
+ // modules/actus_kernel.py:641-645
+ // self._emit_execution_event(
+ // entry=entry,
+ // payoff=self._entry_ied_amount(entry),
+ // settled_amount=UInt64(0),
+ // )
+ callsub _emit_execution_event
+ dup
+ frame_bury -2
+ // modules/actus_kernel.py:646
+ // return
+ frame_dig -1
+ frame_bury 1
+ frame_bury 0
+ retsub
+
+_apply_non_cash_schedule_entry_after_if_else@6:
+ // modules/actus_kernel.py:135
+ // return self.status == UInt64(enums.STATUS_PENDING_IED)
+ intc_0 // 0
+ bytec_1 // "status"
+ app_global_get_ex
+ assert // check self.status exists
+ pushint 50
+ ==
+ // modules/actus_kernel.py:147
+ // assert not self._status_is_pending_ied(), err.PENDING_IED
+ !
+ assert // IED not yet executed
+ // modules/actus_kernel.py:649
+ // self.accrued_interest += self._entry_interest_segment(entry)
+ intc_0 // 0
+ bytec 6 // "accrued_interest"
+ app_global_get_ex
+ assert // check self.accrued_interest exists
+ frame_dig -2
+ callsub _entry_interest_segment
+ frame_bury -2
+ +
+ bytec 6 // "accrued_interest"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:651
+ // if event_type == UInt64(enums.EVT_RR):
+ frame_dig 10
+ pushint 12
+ ==
+ bz _apply_non_cash_schedule_entry_else_body@10
+ // modules/actus_kernel.py:655
+ // payload.observed_rate,
+ frame_dig -1
+ pushint 33
+ extract_uint64
+ // modules/actus_kernel.py:656
+ // self.rate_reset_multiplier,
+ intc_0 // 0
+ bytec 37 // "rate_reset_multiplier"
+ app_global_get_ex
+ assert // check self.rate_reset_multiplier exists
+ // modules/actus_kernel.py:657
+ // self.fixed_point_scale,
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:652-658
+ // # RR derives the next rate from an observed oracle value plus the
+ // # contract spread / multiplier terms, then enforces floor and cap.
+ // observed_rate = self._scaled_mul_div(
+ // payload.observed_rate,
+ // self.rate_reset_multiplier,
+ // self.fixed_point_scale,
+ // )
+ callsub _scaled_mul_div
+ // modules/actus_kernel.py:660
+ // observed_rate + self.rate_reset_spread
+ intc_0 // 0
+ bytec 36 // "rate_reset_spread"
+ app_global_get_ex
+ assert // check self.rate_reset_spread exists
+ +
+ frame_bury 6
+ // modules/actus_kernel.py:741
+ // if self.has_rate_reset_floor and rate < self.rate_reset_floor:
+ intc_0 // 0
+ bytec 39 // "has_rate_reset_floor"
+ app_global_get_ex
+ assert // check self.has_rate_reset_floor exists
+ bz _apply_non_cash_schedule_entry_after_if_else@55
+ intc_0 // 0
+ bytec 31 // "rate_reset_floor"
+ app_global_get_ex
+ assert // check self.rate_reset_floor exists
+ frame_dig 6
+ >
+ bz _apply_non_cash_schedule_entry_after_if_else@55
+ // modules/actus_kernel.py:742
+ // rate = self.rate_reset_floor
+ intc_0 // 0
+ bytec 31 // "rate_reset_floor"
+ app_global_get_ex
+ swap
+ frame_bury 6
+ assert // check self.rate_reset_floor exists
+
+_apply_non_cash_schedule_entry_after_if_else@55:
+ // modules/actus_kernel.py:743
+ // if self.has_rate_reset_cap and rate > self.rate_reset_cap:
+ intc_0 // 0
+ bytec 40 // "has_rate_reset_cap"
+ app_global_get_ex
+ assert // check self.has_rate_reset_cap exists
+ bz _apply_non_cash_schedule_entry_after_if_else@58
+ intc_0 // 0
+ bytec 32 // "rate_reset_cap"
+ app_global_get_ex
+ assert // check self.rate_reset_cap exists
+ frame_dig 6
+ <
+ bz _apply_non_cash_schedule_entry_after_if_else@58
+ // modules/actus_kernel.py:744
+ // rate = self.rate_reset_cap
+ intc_0 // 0
+ bytec 32 // "rate_reset_cap"
+ app_global_get_ex
+ swap
+ frame_bury 6
+ assert // check self.rate_reset_cap exists
+
+_apply_non_cash_schedule_entry_after_if_else@58:
+ // modules/actus_kernel.py:659
+ // self.nominal_interest_rate = self._clamp_rate(
+ bytec 9 // "nominal_interest_rate"
+ // modules/actus_kernel.py:659-661
+ // self.nominal_interest_rate = self._clamp_rate(
+ // observed_rate + self.rate_reset_spread
+ // )
+ frame_dig 6
+ app_global_put
+
+_apply_non_cash_schedule_entry_after_if_else@18:
+ // modules/actus_kernel.py:671
+ // if event_type == UInt64(enums.EVT_PI):
+ frame_dig 10
+ pushint 4
+ ==
+ bz _apply_non_cash_schedule_entry_else_body@20
+ // modules/actus_kernel.py:672
+ // self.outstanding_principal = entry.next_outstanding_principal
+ frame_dig -2
+ pushint 49
+ extract_uint64
+ bytec 4 // "outstanding_principal"
+ dig 1
+ app_global_put
+ // modules/actus_kernel.py:673
+ // self.interest_calculation_base = entry.next_outstanding_principal
+ bytec 7 // "interest_calculation_base"
+ swap
+ app_global_put
+
+_apply_non_cash_schedule_entry_after_if_else@23:
+ // modules/actus_kernel.py:678
+ // if self._is_dynamic_annuity():
+ callsub _is_dynamic_annuity
+ bz _apply_non_cash_schedule_entry_else_body@29
+ // modules/actus_kernel.py:679
+ // if event_type == UInt64(enums.EVT_PRF):
+ frame_dig 10
+ pushint 5
+ ==
+ bz _apply_non_cash_schedule_entry_after_if_else@30
+ // modules/actus_kernel.py:683
+ // + (self.schedule_entry_count - self.event_cursor)
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ -
+ // modules/actus_kernel.py:684
+ // * UInt64(cst.OP_UP_NON_CASH_PER_ENTRY_BUDGET)
+ pushint 100
+ // modules/actus_kernel.py:683-684
+ // + (self.schedule_entry_count - self.event_cursor)
+ // * UInt64(cst.OP_UP_NON_CASH_PER_ENTRY_BUDGET)
+ *
+ // modules/actus_kernel.py:682
+ // UInt64(cst.OP_UP_NON_CASH_BASE_BUDGET)
+ intc 4 // 1500
+ // modules/actus_kernel.py:682-684
+ // UInt64(cst.OP_UP_NON_CASH_BASE_BUDGET)
+ // + (self.schedule_entry_count - self.event_cursor)
+ // * UInt64(cst.OP_UP_NON_CASH_PER_ENTRY_BUDGET)
+ +
+ // modules/actus_kernel.py:680-686
+ // ensure_budget(
+ // required_budget=(
+ // UInt64(cst.OP_UP_NON_CASH_BASE_BUDGET)
+ // + (self.schedule_entry_count - self.event_cursor)
+ // * UInt64(cst.OP_UP_NON_CASH_PER_ENTRY_BUDGET)
+ // ),
+ // )
+ intc_0 // 0
+ callsub ensure_budget
+ // modules/actus_kernel.py:490
+ // discount_factor = self.fixed_point_scale
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ swap
+ frame_bury 2
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:491
+ // denominator = UInt64(0)
+ intc_0 // 0
+ frame_bury 1
+ // modules/actus_kernel.py:492
+ // skip_first_redemption = False
+ intc_0 // 0
+ frame_bury 7
+ // modules/actus_kernel.py:494
+ // if entry.redemption_accrual_factor > UInt64(0):
+ frame_dig -2
+ pushint 25
+ extract_uint64
+ dup
+ frame_bury 8
+ bz _apply_non_cash_schedule_entry_after_if_else@35
+ // modules/actus_kernel.py:495-499
+ // # An initial PRF may describe the first redemption period directly.
+ // discount_factor = self._discount_annuity_factor(
+ // discount_factor,
+ // entry.redemption_accrual_factor,
+ // )
+ frame_dig 2
+ frame_dig 8
+ callsub _discount_annuity_factor
+ dup
+ frame_bury 2
+ // modules/actus_kernel.py:501
+ // skip_first_redemption = True
+ intc_1 // 1
+ frame_bury 7
+ frame_bury 1
+
+_apply_non_cash_schedule_entry_after_if_else@35:
+ // modules/actus_kernel.py:503
+ // future_event_id = self.event_cursor + UInt64(1)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_1 // 1
+ +
+ frame_bury 3
+
+_apply_non_cash_schedule_entry_while_top@36:
+ // modules/actus_kernel.py:504
+ // while future_event_id < self.schedule_entry_count:
+ intc_0 // 0
+ bytec_3 // "schedule_entry_count"
+ app_global_get_ex
+ assert // check self.schedule_entry_count exists
+ frame_dig 3
+ >
+ bz _apply_non_cash_schedule_entry_after_while@48
+ // modules/actus_kernel.py:505
+ // future_entry = self._get_schedule_entry(future_event_id)
+ frame_dig 3
+ callsub _get_schedule_entry
+ dup
+ frame_bury 0
+ // modules/actus_kernel.py:506
+ // future_event_type = future_entry.event_type.as_uint64()
+ intc_2 // 8
+ getbyte
+ dup
+ frame_bury 4
+ // modules/actus_kernel.py:507-508
+ // # Only redemption-bearing events contribute to the annuity denominator.
+ // is_redemption_event = future_event_type == UInt64(enums.EVT_PR) or (
+ pushint 3
+ ==
+ // modules/actus_kernel.py:507-511
+ // # Only redemption-bearing events contribute to the annuity denominator.
+ // is_redemption_event = future_event_type == UInt64(enums.EVT_PR) or (
+ // future_event_type == UInt64(enums.EVT_MD)
+ // and future_entry.redemption_accrual_factor > UInt64(0)
+ // )
+ bnz _apply_non_cash_schedule_entry_bool_true@40
+ // modules/actus_kernel.py:509
+ // future_event_type == UInt64(enums.EVT_MD)
+ frame_dig 4
+ pushint 19
+ ==
+ // modules/actus_kernel.py:509-510
+ // future_event_type == UInt64(enums.EVT_MD)
+ // and future_entry.redemption_accrual_factor > UInt64(0)
+ bz _apply_non_cash_schedule_entry_bool_false@41
+ // modules/actus_kernel.py:510
+ // and future_entry.redemption_accrual_factor > UInt64(0)
+ frame_dig 0
+ pushint 25
+ extract_uint64
+ // modules/actus_kernel.py:509-510
+ // future_event_type == UInt64(enums.EVT_MD)
+ // and future_entry.redemption_accrual_factor > UInt64(0)
+ bz _apply_non_cash_schedule_entry_bool_false@41
+
+_apply_non_cash_schedule_entry_bool_true@40:
+ intc_1 // 1
+
+_apply_non_cash_schedule_entry_bool_merge@42:
+ // modules/actus_kernel.py:512
+ // if is_redemption_event:
+ bz _apply_non_cash_schedule_entry_after_if_else@47
+ // modules/actus_kernel.py:513
+ // if skip_first_redemption:
+ frame_dig 7
+ bz _apply_non_cash_schedule_entry_else_body@45
+ // modules/actus_kernel.py:514
+ // skip_first_redemption = False
+ intc_0 // 0
+ frame_bury 7
+
+_apply_non_cash_schedule_entry_after_if_else@47:
+ // modules/actus_kernel.py:521
+ // future_event_id += UInt64(1)
+ frame_dig 3
+ intc_1 // 1
+ +
+ frame_bury 3
+ b _apply_non_cash_schedule_entry_while_top@36
+
+_apply_non_cash_schedule_entry_else_body@45:
+ // modules/actus_kernel.py:518
+ // future_entry.redemption_accrual_factor,
+ frame_dig 0
+ pushint 25
+ extract_uint64
+ // modules/actus_kernel.py:516-519
+ // discount_factor = self._discount_annuity_factor(
+ // discount_factor,
+ // future_entry.redemption_accrual_factor,
+ // )
+ frame_dig 2
+ swap
+ callsub _discount_annuity_factor
+ dup
+ frame_bury 2
+ // modules/actus_kernel.py:520
+ // denominator += discount_factor
+ frame_dig 1
+ +
+ frame_bury 1
+ b _apply_non_cash_schedule_entry_after_if_else@47
+
+_apply_non_cash_schedule_entry_bool_false@41:
+ intc_0 // 0
+ b _apply_non_cash_schedule_entry_bool_merge@42
+
+_apply_non_cash_schedule_entry_after_while@48:
+ // modules/actus_kernel.py:523
+ // assert denominator > UInt64(0), err.INVALID_ACTUS_CONFIG
+ frame_dig 1
+ assert // Invalid ACTUS configuration
+ // modules/actus_kernel.py:524
+ // numerator = self.outstanding_principal
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ // modules/actus_kernel.py:525
+ // if entry.flags & UInt64(enums.FLAG_INITIAL_PRF) == UInt64(0):
+ frame_dig -2
+ pushint 57
+ extract_uint64
+ intc_2 // 8
+ &
+ bnz _apply_non_cash_schedule_entry_after_if_else@50
+ // modules/actus_kernel.py:526-527
+ // # Subsequent PRF events amortize both principal and already accrued carry.
+ // numerator += self.accrued_interest
+ intc_0 // 0
+ bytec 6 // "accrued_interest"
+ app_global_get_ex
+ assert // check self.accrued_interest exists
+ +
+
+_apply_non_cash_schedule_entry_after_if_else@50:
+ // modules/actus_kernel.py:530
+ // self.fixed_point_scale,
+ intc_0 // 0
+ bytec 5 // "fixed_point_scale"
+ app_global_get_ex
+ assert // check self.fixed_point_scale exists
+ // modules/actus_kernel.py:528-532
+ // return self._scaled_mul_div(
+ // numerator,
+ // self.fixed_point_scale,
+ // denominator,
+ // )
+ frame_dig 1
+ callsub _scaled_mul_div
+ // modules/actus_kernel.py:687
+ // self.next_principal_redemption = self._recalculate_annuity_payment(
+ bytec 14 // "next_principal_redemption"
+ // modules/actus_kernel.py:687-689
+ // self.next_principal_redemption = self._recalculate_annuity_payment(
+ // entry
+ // )
+ swap
+ app_global_put
+
+_apply_non_cash_schedule_entry_after_if_else@30:
+ // modules/actus_kernel.py:692
+ // self.event_cursor += UInt64(1)
+ intc_0 // 0
+ bytec_2 // "event_cursor"
+ app_global_get_ex
+ assert // check self.event_cursor exists
+ intc_1 // 1
+ +
+ bytec_2 // "event_cursor"
+ swap
+ app_global_put
+ // modules/actus_kernel.py:693-697
+ // self._emit_execution_event(
+ // entry=entry,
+ // payoff=UInt64(0),
+ // settled_amount=UInt64(0),
+ // )
+ frame_dig -2
+ // modules/actus_kernel.py:695
+ // payoff=UInt64(0),
+ intc_0 // 0
+ // modules/actus_kernel.py:696
+ // settled_amount=UInt64(0),
+ dup
+ // modules/actus_kernel.py:693-697
+ // self._emit_execution_event(
+ // entry=entry,
+ // payoff=UInt64(0),
+ // settled_amount=UInt64(0),
+ // )
+ callsub _emit_execution_event
+ dup
+ frame_bury -2
+ frame_dig -1
+ frame_bury 1
+ frame_bury 0
+ retsub
+
+_apply_non_cash_schedule_entry_else_body@29:
+ // modules/actus_kernel.py:691
+ // self.next_principal_redemption = entry.next_principal_redemption
+ frame_dig -2
+ pushint 41
+ extract_uint64
+ bytec 14 // "next_principal_redemption"
+ swap
+ app_global_put
+ b _apply_non_cash_schedule_entry_after_if_else@30
+
+_apply_non_cash_schedule_entry_else_body@20:
+ // modules/actus_kernel.py:674
+ // elif event_type == UInt64(enums.EVT_IPCB):
+ frame_dig 10
+ pushint 18
+ ==
+ bz _apply_non_cash_schedule_entry_after_if_else@23
+ // modules/actus_kernel.py:675-676
+ // # IPCB keeps principal unchanged and only resets the interest base.
+ // self.interest_calculation_base = self.outstanding_principal
+ intc_0 // 0
+ bytec 4 // "outstanding_principal"
+ app_global_get_ex
+ assert // check self.outstanding_principal exists
+ bytec 7 // "interest_calculation_base"
+ swap
+ app_global_put
+ b _apply_non_cash_schedule_entry_after_if_else@23
+
+_apply_non_cash_schedule_entry_else_body@10:
+ // modules/actus_kernel.py:662
+ // elif event_type == UInt64(enums.EVT_RRF):
+ frame_dig 10
+ pushint 11
+ ==
+ bz _apply_non_cash_schedule_entry_else_body@14
+ // modules/actus_kernel.py:663
+ // next_rate = entry.next_nominal_interest_rate
+ frame_dig -2
+ pushint 33
+ extract_uint64
+ dup
+ frame_bury 5
+ // modules/actus_kernel.py:664
+ // if next_rate == UInt64(0):
+ bnz _apply_non_cash_schedule_entry_after_if_else@13
+ // modules/actus_kernel.py:665
+ // next_rate = self.rate_reset_next
+ intc_0 // 0
+ bytec 38 // "rate_reset_next"
+ app_global_get_ex
+ swap
+ frame_bury 5
+ assert // check self.rate_reset_next exists
+
+_apply_non_cash_schedule_entry_after_if_else@13:
+ // modules/actus_kernel.py:666
+ // self.nominal_interest_rate = next_rate
+ bytec 9 // "nominal_interest_rate"
+ frame_dig 5
+ app_global_put
+ b _apply_non_cash_schedule_entry_after_if_else@18
+
+_apply_non_cash_schedule_entry_else_body@14:
+ // modules/actus_kernel.py:668
+ // if entry.next_nominal_interest_rate != UInt64(0):
+ frame_dig -2
+ pushint 33
+ extract_uint64
+ dup
+ frame_bury 9
+ bz _apply_non_cash_schedule_entry_after_if_else@18
+ // modules/actus_kernel.py:669
+ // self.nominal_interest_rate = entry.next_nominal_interest_rate
+ bytec 9 // "nominal_interest_rate"
+ frame_dig 9
+ app_global_put
+ b _apply_non_cash_schedule_entry_after_if_else@18
+
+
+// modules.actus_kernel.ActusKernelModule._emit_execution_event(entry: bytes, payoff: uint64, settled_amount: uint64) -> bytes:
+_emit_execution_event:
+ // modules/actus_kernel.py:703-709
+ // def _emit_execution_event(
+ // self,
+ // *,
+ // entry: typ.ExecutionScheduleEntry,
+ // payoff: UInt64,
+ // settled_amount: UInt64,
+ // ) -> None:
+ proto 3 1
+ // modules/actus_kernel.py:713
+ // contract_id=Global.current_application_id.id,
+ global CurrentApplicationID
+ // modules/actus_kernel.py:714
+ // event_id=entry.event_id,
+ frame_dig -3
+ intc_0 // 0
+ extract_uint64
+ // modules/actus_kernel.py:715
+ // event_type=entry.event_type,
+ frame_dig -3
+ extract 8 1
+ // modules/actus_kernel.py:716
+ // scheduled_time=entry.scheduled_time,
+ frame_dig -3
+ extract 9 8
+ // modules/actus_kernel.py:717
+ // applied_at=Global.latest_timestamp,
+ global LatestTimestamp
+ // modules/actus_kernel.py:720
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ frame_dig -3
+ // modules/actus_kernel.py:715
+ // event_type=entry.event_type,
+ intc_2 // 8
+ // modules/actus_kernel.py:720
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ getbyte
+ // modules/actus_kernel.py:749
+ // if payoff == UInt64(0):
+ frame_dig -2
+ bnz _emit_execution_event_after_if_else@3
+ // modules/actus_kernel.py:750
+ // return UInt64(enums.PAYOFF_SIGN_POSITIVE)
+ intc_1 // 1
+
+_emit_execution_event_after_inlined_modules.actus_kernel.ActusKernelModule._payoff_sign@7:
+ // modules/actus_kernel.py:719-721
+ // payoff_sign=arc4.UInt8(
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ // ),
+ itob
+ dup
+ bitlen
+ intc_2 // 8
+ <=
+ assert // overflow
+ extract 7 1
+ // modules/actus_kernel.py:723
+ // currency_id=self.settlement_asset_id,
+ intc_0 // 0
+ bytec 19 // "settlement_asset_id"
+ app_global_get_ex
+ assert // check self.settlement_asset_id exists
+ // modules/actus_kernel.py:724
+ // sequence=entry.event_id + UInt64(1),
+ frame_dig 1
+ dup
+ intc_1 // 1
+ +
+ // modules/actus_kernel.py:712-725
+ // ExecutionEvent(
+ // contract_id=Global.current_application_id.id,
+ // event_id=entry.event_id,
+ // event_type=entry.event_type,
+ // scheduled_time=entry.scheduled_time,
+ // applied_at=Global.latest_timestamp,
+ // payoff=payoff,
+ // payoff_sign=arc4.UInt8(
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ // ),
+ // settled_amount=settled_amount,
+ // currency_id=self.settlement_asset_id,
+ // sequence=entry.event_id + UInt64(1),
+ // )
+ frame_dig 0
+ itob
+ uncover 2
+ itob
+ concat
+ frame_dig 2
+ concat
+ frame_dig 3
+ concat
+ frame_dig 4
+ itob
+ concat
+ frame_dig -2
+ itob
+ concat
+ uncover 3
+ concat
+ frame_dig -1
+ itob
+ concat
+ uncover 2
+ itob
+ concat
+ swap
+ itob
+ concat
+ // modules/actus_kernel.py:711-726
+ // arc4.emit(
+ // ExecutionEvent(
+ // contract_id=Global.current_application_id.id,
+ // event_id=entry.event_id,
+ // event_type=entry.event_type,
+ // scheduled_time=entry.scheduled_time,
+ // applied_at=Global.latest_timestamp,
+ // payoff=payoff,
+ // payoff_sign=arc4.UInt8(
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ // ),
+ // settled_amount=settled_amount,
+ // currency_id=self.settlement_asset_id,
+ // sequence=entry.event_id + UInt64(1),
+ // )
+ // )
+ pushbytes 0x9a332b95 // method "ExecutionEvent(uint64,uint64,uint8,uint64,uint64,uint64,uint8,uint64,uint64,uint64)"
+ swap
+ concat
+ log
+ frame_dig -3
+ frame_bury 0
+ retsub
+
+_emit_execution_event_after_if_else@3:
+ // modules/actus_kernel.py:751
+ // if event_type in (UInt64(enums.EVT_IED), UInt64(enums.EVT_PI)):
+ frame_dig 5
+ intc_1 // 1
+ ==
+ bnz _emit_execution_event_if_body@5
+ frame_dig 5
+ pushint 4
+ ==
+ bz _emit_execution_event_after_if_else@6
+
+_emit_execution_event_if_body@5:
+ // modules/actus_kernel.py:752
+ // return UInt64(enums.PAYOFF_SIGN_POSITIVE)
+ intc_1 // 1
+ // modules/actus_kernel.py:720
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ b _emit_execution_event_after_inlined_modules.actus_kernel.ActusKernelModule._payoff_sign@7
+
+_emit_execution_event_after_if_else@6:
+ // modules/actus_kernel.py:753
+ // return UInt64(enums.PAYOFF_SIGN_NEGATIVE)
+ pushint 255
+ // modules/actus_kernel.py:720
+ // self._payoff_sign(entry.event_type.as_uint64(), payoff)
+ b _emit_execution_event_after_inlined_modules.actus_kernel.ActusKernelModule._payoff_sign@7
+
+
+// modules.rbac.RbacModule._role_is_active(role_map: bytes, role_address: bytes) -> uint64:
+_role_is_active:
+ // modules/rbac.py:59
+ // def _role_is_active(self, role_map: typ.RbacRole, role_address: Account) -> bool:
+ proto 2 1
+ pushbytes ""
+ // modules/rbac.py:57
+ // return role_address in role_map
+ frame_dig -2
+ frame_dig -1
+ concat
+ dup
+ box_len
+ bury 1
+ // modules/rbac.py:60-64
+ // return self._has_role(role_map, role_address) and (
+ // role_map[role_address].role_validity_start
+ // <= Global.latest_timestamp
+ // <= role_map[role_address].role_validity_end
+ // )
+ bz _role_is_active_bool_false@4
+ // modules/rbac.py:61
+ // role_map[role_address].role_validity_start
+ frame_dig 1
+ box_get
+ assert // check BoxMap entry exists
+ intc_0 // 0
+ extract_uint64
+ // modules/rbac.py:62
+ // <= Global.latest_timestamp
+ global LatestTimestamp
+ dup
+ frame_bury 0
+ // modules/rbac.py:61-62
+ // role_map[role_address].role_validity_start
+ // <= Global.latest_timestamp
+ <=
+ // modules/rbac.py:61-63
+ // role_map[role_address].role_validity_start
+ // <= Global.latest_timestamp
+ // <= role_map[role_address].role_validity_end
+ bz _role_is_active_bool_false@4
+ // modules/rbac.py:63
+ // <= role_map[role_address].role_validity_end
+ frame_dig 1
+ box_get
+ assert // check BoxMap entry exists
+ intc_2 // 8
+ extract_uint64
+ // modules/rbac.py:62-63
+ // <= Global.latest_timestamp
+ // <= role_map[role_address].role_validity_end
+ frame_dig 0
+ >=
+ // modules/rbac.py:61-63
+ // role_map[role_address].role_validity_start
+ // <= Global.latest_timestamp
+ // <= role_map[role_address].role_validity_end
+ bz _role_is_active_bool_false@4
+ intc_1 // 1
+
+_role_is_active_bool_merge@5:
+ // modules/rbac.py:60-64
+ // return self._has_role(role_map, role_address) and (
+ // role_map[role_address].role_validity_start
+ // <= Global.latest_timestamp
+ // <= role_map[role_address].role_validity_end
+ // )
+ frame_bury 0
+ retsub
+
+_role_is_active_bool_false@4:
+ intc_0 // 0
+ b _role_is_active_bool_merge@5
+
+
+// modules.rbac.RbacModule._assert_caller_is_arranger() -> void:
+_assert_caller_is_arranger:
+ // modules/rbac.py:67
+ // assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
+ txn Sender
+ // modules/rbac.py:54
+ // return role_address == self.arranger.value
+ intc_0 // 0
+ bytec 18 // 0x523a41525223
+ app_global_get_ex
+ assert // check self.arranger exists
+ ==
+ // modules/rbac.py:67
+ // assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
+ assert // Not authorized
+ retsub
+
+
+// modules.rbac.RbacModule._assert_is_not_contract_defaulted() -> void:
+_assert_is_not_contract_defaulted:
+ // modules/rbac.py:85
+ // assert not self.defaulted, err.DEFAULTED
+ intc_0 // 0
+ bytec 34 // "defaulted"
+ app_global_get_ex
+ assert // check self.defaulted exists
+ !
+ assert // Defaulted
+ retsub
+
+
+// modules.rbac.RbacModule._assert_is_not_contract_suspended() -> void:
+_assert_is_not_contract_suspended:
+ // modules/rbac.py:88
+ // assert not self.contract_suspended, err.SUSPENDED
+ intc_0 // 0
+ bytec 33 // "contract_suspended"
+ app_global_get_ex
+ assert // check self.contract_suspended exists
+ !
+ assert // Suspended operations
+ retsub
+
+
+// modules.rbac.RbacModule._assert_valid_role(role_id: uint64) -> void:
+_assert_valid_role:
+ // modules/rbac.py:90
+ // def _assert_valid_role(self, role_id: UInt64) -> None:
+ proto 1 0
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ frame_dig -1
+ // modules/rbac.py:92
+ // UInt64(enums.ROLE_ARRANGER),
+ pushint 20
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:93
+ // UInt64(enums.ROLE_OP_DAEMON),
+ pushint 25
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:94
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ pushint 40
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:95
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ pushint 50
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:96
+ // UInt64(enums.ROLE_TRUSTEE),
+ pushint 60
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:97
+ // UInt64(enums.ROLE_AUTHORITY),
+ pushint 70
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:98
+ // UInt64(enums.ROLE_OBSERVER),
+ pushint 80
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bz _assert_valid_role_bool_false@8
+
+_assert_valid_role_bool_true@7:
+ intc_1 // 1
+
+_assert_valid_role_bool_merge@9:
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ assert // Invalid role identifier
+ retsub
+
+_assert_valid_role_bool_false@8:
+ intc_0 // 0
+ b _assert_valid_role_bool_merge@9
diff --git a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.clear.puya.map b/smart_contracts/artifacts/d_asa/DASA.clear.puya.map
similarity index 100%
rename from smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.clear.puya.map
rename to smart_contracts/artifacts/d_asa/DASA.clear.puya.map
diff --git a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.clear.teal b/smart_contracts/artifacts/d_asa/DASA.clear.teal
similarity index 100%
rename from smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.clear.teal
rename to smart_contracts/artifacts/d_asa/DASA.clear.teal
diff --git a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.approval.puya.map b/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.approval.puya.map
deleted file mode 100644
index b7c88c8d..00000000
--- a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.approval.puya.map
+++ /dev/null
@@ -1,38192 +0,0 @@
-{
- "version": 3,
- "sources": [
- "../../../modules/accounting.py",
- "../../../modules/actus/pam.py",
- "../../../modules/core_financial/common.py",
- "../../../modules/core_financial/coupon.py",
- "../../../modules/payment_agent/common.py",
- "../../../modules/payment_agent/coupon.py",
- "../../../modules/payment_agent/principal.py",
- "../../../modules/rbac.py",
- "../../../modules/transfer_agent/coupon.py",
- "../../fixed_coupon_bond/contract.py"
- ],
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AO8BmD;;AAAf;;AAA5B;AAC4C;;AAAf;;AAA7B;AAgBA;;AAAuB;AAAvB;AACA;;AAAuB;AAAvB;AP9BA;;AAAmB;AAAnB;AACA;AAAyB;AAAzB;AACA;;AAAkB;AAAlB;AACA;AAAc;AAAd;AEUA;;AAA6B;AAA7B;AACA;;AAA2B;AAA3B;AACA;;AAAkB;AAAlB;AACA;;AAA4B;AAA5B;AAGA;;AAAgB;;AAAhB;AAGA;;AAA0B;AAA1B;AACA;;AAAqB;AAArB;AACA;;AAAqB;AAArB;AAIA;;AAAyC;AAAzC;AACA;;AAAyC;AAAzC;AACA;;AAAqB;AAArB;AACA;;AAAqC;AAArC;AACA;;AAAqC;AAArC;AACA;;AAAqB;AAArB;AC5BA;;AAAyB;AAAzB;AA8EA;;AAA6B;AAA7B;AMrEO;;AAA6B;;AAA7B;AAAP;AACO;;AAAuB;;AAAvB;AAAP;AACO;;AAAA;AAAP;AACO;;AAAA;AAAP;AAnBR;;;;;;AAAA;;;AAAA;;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;APsQK;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AD7PA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;ACyMG;;;AACO;AAAA;AAAA;AAAA;AAAA;AAAP;AA5KmB;;AAAA;;AAAA;;AACnB;AAGA;;AAAA;;AAAA;AAKI;;AAAA;;AAAA;AADJ;AAKA;;AAAA;;AAAA;AAEA;AAIQ;;AAFW;;AACF;;;;;;;;;AAHjB;;;;;;AAAA;AAwKO;;AAAA;;AAAA;AAAA;AAAP;AACA;;AAAA;;AAAA;AACmB;;AAAA;;AAAA;AAAnB;;AAAA;AAAA;AACA;;AAAA;;AAAA;AAGiC;AAAA;AArK1B;;;AAAA;AAEH;;AAFG;AAAA;;;;AAAP;AAMA;;AAAA;;AAAA;AAmK0B;;AAAA;AAAA;;AA/JnB;AAAA;;AAAA;AAAA;AAAf;;;AACY;;AAAA;AAGJ;;AAAA;;AAAA;ACWA;;AAAA;AAAA;AAGA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;;AAAA;;AAAA;ADL+C;;AAArB;AAAtB;;AAAA;AADJ;AA2JA;;AAAA;;;AAnIA;;AAAA;;AAAA;;AAAA;;AAAA;AACyC;AAAA;;;AAAA;;;;AAAA;AAAzC;;AAAA;AAAA;AAGyC;;;;AAAA;AAAzC;;AAAA;AAAA;AAGqB;;;;AAAA;AAArB;;AAAA;AAAA;AACiC;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAArB;;AAAA;AAAA;AAGO;;AAAA;AAAP;AA+HA;AAAc;;AAAd;AD/OH;AAAA;;;;;;;;;;AE+KA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBO;AAAA;;AAAA;AAAA;AAAA;;;AACI;;AAA2B;AAAA;;AAAA;AAAA;AAA3B;AADJ;;;;AADJ;AH9L0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAP;AGmMO;AAAA;;;AAAa;;AAAA;AAAA;AAAA;AAAA;AAAT;;AAAA;AAAJ;;;;AAAP;AAG8B;;AAAA;AAAA;;AAAA;;;AAAA;;AAEX;AAAnB;;AACY;AAAZ;;AACc;AAAd;;AAGc;;;AAAA;AAAA;;AACd;AAAA;;AAAA;;;AACG;;;AAAX;;;AAC+B;;AAAA;AAAA;;;AACA;;AAAA;;AAAA;;AAAA;;;AAAA;;AAGP;AAAA;AAAA;AAAA;;AACE;AAAA;AAAA;;AAKG;;AAAA;AAAA;;AAAA;AAAA;AAHd;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AA7CV;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;AA8DkB;;AH9OR;AAAA;AAAA;AAAA;AAAe;;AAAf;AG+Of;;;AAC2B;;AAAA;AAAA;AAAA;;AAAA;AAVtB;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAaA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AH7O6B;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AG4PkB;AACC;;AHnQZ;AAAA;AAAA;AAAe;;AAAf;AGoQf;;;AAC2B;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AACG;AAAA;;AAAA;AAAA;AAAf;AAAf;;;AAGoB;;AAAA;;;AACA;;AAAe;AAAf;AAFc;;;AAAA;;AAOnB;;AAAA;AAAA;;AAAA;AAAA;AA5BV;AAAA;AAAA;AAAA;AAAA;AAAA;AA2B8B;;AAAA;;;AAAA;;;;;AAeb;;;AAAA;;AACS;;;AAAA;AACA;AAAA;;;AAAA;AACX;AAAZ;AACc;AAAd;AACG;;;AAAX;;;AAC+B;;AAAA;;;AACP;AAAA;AAAA;AAAA;;AACE;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAGG;;AAAA;AAAA;;AAAA;AAAA;AAJd;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAlBV;AAAA;AAAA;AAAA;AAAA;AAAA;AE/QA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;ALLU;AAAA;AAAA;AAAA;AAAe;;AAAf;AGcP;AACA;;;AACA;;;AHV0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AGaQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACR;AAEc;;;AACS;AAAA;AAAA;AAAA;;AAAA;AAChB;AAAA;;AAAA;AAAP;AAEO;AAAA;;;AAAP;AAkJI;;AAAA;;;AACA;AAAuB;AAAvB;AAFG;;;AAAA;AE9IP;AAAA;;;AAGG;;;AAAX;;;AAEY;;AAAA;;;AAES;;AAAA;AAAA;AAAA;;;AAAT;AAAA;;;AFEJ;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAA8C;AAA9C;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AE/CoB;;AAGP;;AAEO;AAAA;;AAAA;AAAA;AACE;AAAA;;AAAA;AACA;AAAA;AAAA;AAAA;AAAyB;AAAA;;AAAA;AAAA;AAAzB;AARlB;;AAAA;AAAA;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AASqB;;AATrB;AAUoB;AAVpB;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AADJ;;AAAA;AAAA;AAAA;AAuDc;;AAFP;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAtCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCwB;AAAjB;;;;;AClCP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;ANLU;AAAA;AAAA;AAAA;AAAe;;AAAf;ACRP;AACA;;;AACA;;;ADY0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;ACVQ;AAAA;AAAA;AAAA;AACR;AACO;;AAA2B;AAAA;;AAAA;AAAA;AAA3B;AAAP;AEuDI;;;AADG;;;AAAP;AAGO;AAAA;;;AAAA;AG3BP;AAAA;;;AAGG;;;AAAX;;;AAEY;;AAAA;;;AAES;;AAAA;AAAA;AAAA;;;AAAT;AAAA;;;AJ2IJ;AAAA;AAAA;AAAA;AAA0B;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AACsC;AAAtC;AAAA;AAAA;AAAA;;AAAA;AACA;;;AIxLoB;;AAGP;;AAEO;AAAA;;AAAA;AAAA;AACE;AAAA;;AAAA;AACA;AAAA;AAAA;AAAA;AAAyB;AAAA;;AAAA;AAAA;AAAzB;AARlB;;AAAA;AAAA;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AASqB;;AATrB;AAAA;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AADJ;;AAAA;AAAA;AAAA;AAsDc;;AAFP;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AArCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCwB;AAAjB;;;;;;;;;;;AEtDP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ARgBU;AAAA;AAAA;AAAA;AAAe;;AAAf;AEgIH;;;AACI;AAAA;;AAAA;AAAA;AAAsC;;AAAtC;AADJ;;;AAGQ;AAAA;;AAAA;AAAA;AAAJ;;;AACG;;AAA0B;AAAA;;AAAA;AAAA;AAA1B;AADH;;;;AAJR;AAmBO;;AAAA;;AAAA;AAAA;;AAAA;AAAP;AACA;;;AACA;;;AF9I0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AAA0B;AAAnB;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AEiJA;;AAAA;;;AACA;;AAAA;;;AAaO;;AAAA;;AAAA;AAAP;AACA;;AAAA;AAAA;AACgB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;;AAAA;AAAP;AFjIoB;;;AAAA;;AACjB;AAAA;AAAA;AAAA;AAAX;;;AANY;;AAAA;AAAA;AAAA;;AAAA;AAAmC;;AAAA;AAAA;AAAA;;AAAA;AAAnC;AAAA;;;AACI;;AAAA;AAAA;AAAA;;AAAA;AAAqC;;AAAA;AAAA;AAAA;;AAAA;AAArC;AADJ;;;;AADJ;AQVoB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;ALuBN;;;AACd;;AAAA;AAAA;;AAAA;;AAAA;;;AACO;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;;AAAA;;AHDS;;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAP;AACA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AApBG;AAAA;AAAA;AAAA;AAAX;;;AACuD;AAA3C;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAsBJ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AQvBO;;AAAA;AAAA;;AAAA;AA5CV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;AR0DO;;AAAA;AAAA;;AAAA;;AAAA;AACsC;;AAAA;AAAA;AAAA;;;AAAtC;;AAAA;AAAA;;;;;;;;AEuMP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AASG;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAVH;AAAA;AAYA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAQG;;;AACA;;AAAA;AAAA;AATH;AAAA;;AAWA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAqBG;;;AF3RO;AAAA;AAAA;AAAA;AAAe;;AAAf;AE4RA;AAAP;AACA;;;AAEA;AAAA;AACyC;AAAtC;AAAX;;;AACY;AAAA;;;AAAA;;AAGA;AAAA;;AAAA;AAAA;AACG;;AAAA;AAAA;;;AAAA;;;;AAAA;AADH;AAAA;;AAAA;AADJ;AAIA;;AAAA;AAAA;AAGG;AAAA;;AAAA;AAAA;AAAX;;;AAEgB;AAAA;;AAAA;AAAA;AACgC;;AAAA;AAAA;AAA7B;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AADH;AAAA;;AAAA;AADJ;AAIA;;AAAA;AAAA;AAI8B;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAF3B;AAAA;AAAA;AAAA;AAAA;AA5CV;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AKzQ+B;;AAAc;;AAAnC;;;AAAP;ALsRA;;AAAA;AAAA;AACO;;AAdV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAgBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AF1UU;AAAA;AAAA;AAAA;AAAe;;AAAf;AEwHH;;;AACI;AAAA;;AAAA;AAAA;AACD;;AAAA;AAAA;;AADC;AAAA;;;AAEF;AAAA;;AAAA;AAAA;AADC;;AAAA;AADC;;;;AAFR;AKzE4B;;AAAqB;;AAA1C;;;AAAP;APxC0B;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AEgWA;;;AACA;;;AACA;;AAAA;AAAA;AACO;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAkC;AAAA;;AAAA;AAAA;AAAlC;;AAAA;AAAP;AAEA;AAAA;;AAAA;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAC2C;AAAA;;AAAA;AAAA;AAA3C;AAAA;;AAAA;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;AAAA;AApCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;AAgDiB;AACX;;AAA0B;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAA1B;AAAA;;;AAAA;AAAA;;;AACe;;AAAd;;AAED;AAAA;;AAAA;AAAA;AAAX;;;AAC0B;;AAAd;;AAGsB;AAAA;;AAAA;AAAA;AACF;AAAA;;AAAA;AAAA;AF/WjB;AAAA;AAAA;AAAA;AAAyB;AAAA;;AAAA;AAAA;AAAzB;AAAA;AEkX6B;AAAA;;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AACU;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AACO;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AACD;AAAA;;AAAA;AAAA;AAEqB;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACpB;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACJ;AAAA;;AAAA;AAAA;AACE;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAfT;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CiB;;AF3ZP;AAAA;AAAA;AAAA;AAAe;;AAAf;AE4Zf;;;AAC0B;;AAAA;AAAA;AAAA;;AAAA;AAVrB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAsBQ;AAAA;;AAAA;AAAA;AAAoC;AAAA;;AAAA;AAAA;AADlC;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AARV;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBuC;AAAA;;AAAA;AAAA;AATvC;AAAA;AAAA;AAAA;AAAA;AAAA;AFvWA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AOjB+B;;AAAgB;;AAArC;;;AAAP;AP9C0B;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AAmFA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACO;;AArBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AOjD+B;;AAAsB;;AAA3C;;;AAAP;APxCO;AAAA;AAAA;AAAA;AAAe;;AAAf;AA+GA;AAAP;AACA;;;AACA;;;AAC8B;AAAvB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AAIU;AAFsB;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAhC;AAOO;;AAlCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AOrF+B;;AAAsB;;AAA3C;;;AAAP;APuGA;;;AA5I0B;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA+Ie;AAAA;AAAA;AAAA;AAAA;AACf;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AACA;;;AACqB;;AAzBxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBU;;AAAA;;AAAA;AAAP;AACA;;;AACA;;;AA3K0B;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AA6KA;AAAA;;AAAA;AACO;;AAzBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAhL6B;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA+LO;AAAA;AAfV;AAAA;AAAA;AAAA;AAAA;AAAA;AO5DA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAsBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGc;;AAAX;AAAX;;;AACY;;AAAA;;AAAA;AAqGG;;AA1BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxEM;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA+FJ;;;AA7FG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA2FJ;;;AAzFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAuFJ;;;AArFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAmFJ;;;AAjFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;;;;AAkFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAmBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGO;AAAW;;AAAX;AAAP;AACc;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAmGG;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1EM;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA8FJ;;;AA5FG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA0FJ;;;AAxFG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAsFJ;;;AApFG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;;;;AAqFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzJ+B;;AAAgB;;AAArC;;;AAAP;AAyKA;;AAAA;AAAA;AACO;;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BU;AAAA;;AAAA;AAAA;AARV;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAc4B;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AAlBP;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAcU;AACP;AAAA;;;AAES;;;;;;;;AADT;;AAAA;;;;;;;;;;;;;;AA+BQ;AAJI;;AA5QL;;AAAA;AAAA;AAAA;AAAA;;AA2QC;AAGO;AAAA;AA7ClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCe;;AAvQL;;AAAA;AAAA;AAAA;AAAA;;AAsQC;AAGO;AAAA;AAxClB;;;AAiCe;;AAlQL;;AAAA;AAAA;AAAA;AAAA;;AAiQC;AAGO;AAAA;AAnClB;;;AA4Be;;AA7PL;;AAAA;AAAA;AAAA;AAAA;;AA4PC;AAGO;AAAA;AA9BlB;;;AAuBe;;AAxPL;;AAAA;AAAA;AAAA;AAAA;;AAuPC;AAGO;AAAA;AAzBlB;;;AAkBkB;;;;;;;;;;;;;;;;;;AAlBlB;;;AJzKD;;;;;AACiB;;AAAA;AACC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AACG;AAAA;;AAAA;AAAA;AAAd;AAAX;;;AAC0B;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAclB;;AAAA;;AAAA;AAAA;;AAAA;AACA;;AAAA;AAdkB;AAAA;;AAAA;AAAA;AAAb;;AAAA;AAAb;;;AAE0D;AAAA;;AAAA;AAAA;AAA1C;;AAAA;AAAA;AAAA;;AAEc;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AACZ;;AAAA;AAAlB;;;AAEoC;;AACL;AAFf;;;AAIA;;AAAc;AAAd;AAAA;AAAA;;AACkB;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;;AACR;;AAAa;;AAAb;AAAA;;;;;AAItB;;;AACkC;;AAAA;;AAAA;AAA2C;AAA3C;AAAvB;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAP;AAQJ;;;AACsB;AACD;AAAA;;AAAA;AAAA;AAAd;;AAAA;AAAX;;;AACmD;;AAAc;AAAd;AAArB;;;AAAA;;AACtB;;AAAA;AAAA;AAEJ;;;AAG8C;;AAAS;AAAT;AAAxB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACX;;AAAA;AAAsC;;;AAAtC;AAAP;AAEJ;;;;;;AAEJ;;AAAA;;;AACkC;AAAA;;AAAA;AAAA;AAGF;;AAAA;;AAAA;AAAA;;AACR;;AAAA;;;AAAA;AAAA;AACb;AAAA;;AAAA;AAAA;AAAX;;;ADCe;;AAAe;;AAAf;AAAA;;AAAe;;AAAf;ACEA;;AAAA;AAAA;AAAA;AAAA;AAAP;;AAAA;AA5BkB;AAAlB;;AACR;;AAAA;;;AAC8B;;AAAA;;;AAAA;;;;;;;AA+B1B;;;AAEQ;AAAA;;AAAA;AAAA;AAAA;;;AACI;;AAA2B;AAAA;;AAAA;AAAA;AAA3B;AADJ;;;AAEkB;AAAA;;AAAA;AAAA;AAAd;;AAAA;AAFJ;;;;AADJ;;AAAA;AAMJ;;;AAII;;AAAA;;AAAA;;;AACmB;;AAAA;;;AACK;AAAA;AAAA;AACR;AAAA;AAAA;AACO;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAGnB;;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;AAGI;;;AAAA;;AAAA;AAHJ;AADJ;AAhKJ;;;AACW;AAAA;;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;;AAAA;AAA1B;AAAP;AAEJ;;;AAIQ;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AADJ;;ACpBJ;;;AACO;AAAA;;AAAA;AAAA;AAAwB;;AAAxB;AAAX;;;AAEgB;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAA;;;AACG;;AAAA;;AAAA;AADH;;;AAEG;;AAAc;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAd;AAFH;;;;AADJ;;;;;;AAMR;;;AAEQ;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AACI;AAAA;;AAAA;AAAA;AADJ;;AAAA;;AAAA;;;AAGQ;;AAAA;AAAA;AAAA;;;AAAA;AAAJ;;;;AAJR;AAAA;;;;;AAOJ;;;AAEyC;;AAAjC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AADJ;;AAKJ;;;AACI;AAIQ;;AAHO;AAAA;;AAAA;AAAA;;;;;;;;;;;AADf;;;;;;AAAA;;AFwEJ;;;;;;;AAEQ;;AAAA;;;AAAA;;;;AAAA;AACE;;AADF;AADJ;AAIkB;;AAAA;AAAA;AAAqB;AAArB;AAAP;AAAnB;;AAAA;;AAAA;AAAA;;;AAEgC;;AACL;AAFf;;;AAIS;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AACkB;AAAN;AAAA;AAAA;;AAAZ;AAAA;AAAA;AAAA;AAAA;;AACF;AAAP;AACG;AAAA;;AAAA;AAAA;AAA6B;;AAA7B;AAAf;;;AAEwB;;AAAA;;AAAA;AAAmB;;AAApB;AAAA;AAAP;;;;;;;;;;;;;AFzFZ;;;AACe;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAJ;AAAP;;AAEJ;;;AACmB;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAR;;AAAA;AAAP;AAEJ;;;AAEyB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AADd;;AAAA;AAAA;;;AAAP;AAQG;AAAA;AAAA;AAAA;AAAX;;;AACY;AAAc;;AAAd;;AOQR;;;;;AAFW;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAGA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;AADH;AAAA;;;AAEG;;AAAA;AAAA;AAAA;AAAA;AADA;;AAAA;AADH;;;;AADJ;;AAAA;;;;;AAOyB;;AAbF;AAAA;;AAAA;AAAA;AAAhB;AAaP;;AAkBW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAEJ;;;AACW;;AACH;;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;;AAAP;;;",
- "op_pc_offset": 0,
- "pc_events": {
- "1": {
- "subroutine": "algopy.arc4.ARC4Contract.approval_program",
- "params": {},
- "block": "main",
- "stack_in": [],
- "op": "intcblock 0 1 32 8 255 200 86400"
- },
- "14": {
- "op": "bytecblock 0x151f7c75 0x52333023 \"status\" \"circulating_units\" \"issuance_date\" \"maturity_date\" \"unit_value\" \"total_coupons\" 0x52323023 \"settlement_asset_id\" \"primary_distribution_opening_date\" \"secondary_market_closure_date\" 0x74696d654576656e7473 0x52373023 0x52343023 \"total_units\" \"denomination_asset_id\" \"day_count_convention\" \"secondary_market_opening_date\" 0x636f75706f6e5261746573 0x52363023 0x52353023 0x52323523 \"asset_suspended\" \"asset_defaulted\" \"metadata\" \"principal_discount\" \"primary_distribution_closure_date\" \"paid_coupon_units\" \"due_coupons_watermark\" 0x0000 0x00 0x52383023 \"interest_rate\" 0x068101 0x003b 0x8c29904e 0x0012"
- },
- "499": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "501": {
- "op": "bnz main_after_if_else@2",
- "stack_out": []
- },
- "504": {
- "op": "bytec 8 // 0x52323023",
- "defined_out": [
- "0x52323023"
- ],
- "stack_out": [
- "0x52323023"
- ]
- },
- "506": {
- "op": "global ZeroAddress",
- "defined_out": [
- "0x52323023",
- "tmp%0#3"
- ],
- "stack_out": [
- "0x52323023",
- "tmp%0#3"
- ]
- },
- "508": {
- "op": "app_global_put",
- "stack_out": []
- },
- "509": {
- "op": "bytec 22 // 0x52323523",
- "defined_out": [
- "0x52323523"
- ],
- "stack_out": [
- "0x52323523"
- ]
- },
- "511": {
- "op": "global ZeroAddress",
- "defined_out": [
- "0x52323523",
- "tmp%1#3"
- ],
- "stack_out": [
- "0x52323523",
- "tmp%1#3"
- ]
- },
- "513": {
- "op": "app_global_put",
- "stack_out": []
- },
- "514": {
- "op": "bytec 23 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\""
- ],
- "stack_out": [
- "\"asset_suspended\""
- ]
- },
- "516": {
- "op": "intc_0 // 0",
- "defined_out": [
- "\"asset_suspended\"",
- "0"
- ],
- "stack_out": [
- "\"asset_suspended\"",
- "0"
- ]
- },
- "517": {
- "op": "app_global_put",
- "stack_out": []
- },
- "518": {
- "op": "bytec 24 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\""
- ],
- "stack_out": [
- "\"asset_defaulted\""
- ]
- },
- "520": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"asset_defaulted\"",
- "0"
- ]
- },
- "521": {
- "op": "app_global_put",
- "stack_out": []
- },
- "522": {
- "op": "bytec 15 // \"total_units\"",
- "defined_out": [
- "\"total_units\""
- ],
- "stack_out": [
- "\"total_units\""
- ]
- },
- "524": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"total_units\"",
- "0"
- ]
- },
- "525": {
- "op": "app_global_put",
- "stack_out": []
- },
- "526": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\""
- ],
- "stack_out": [
- "\"circulating_units\""
- ]
- },
- "527": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"circulating_units\"",
- "0"
- ]
- },
- "528": {
- "op": "app_global_put",
- "stack_out": []
- },
- "529": {
- "op": "bytec 6 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\""
- ],
- "stack_out": [
- "\"unit_value\""
- ]
- },
- "531": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"unit_value\"",
- "0"
- ]
- },
- "532": {
- "op": "app_global_put",
- "stack_out": []
- },
- "533": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\""
- ],
- "stack_out": [
- "\"status\""
- ]
- },
- "534": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"status\"",
- "0"
- ]
- },
- "535": {
- "op": "app_global_put",
- "stack_out": []
- },
- "536": {
- "op": "bytec 16 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\""
- ],
- "stack_out": [
- "\"denomination_asset_id\""
- ]
- },
- "538": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"denomination_asset_id\"",
- "0"
- ]
- },
- "539": {
- "op": "app_global_put",
- "stack_out": []
- },
- "540": {
- "op": "bytec 9 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\""
- ],
- "stack_out": [
- "\"settlement_asset_id\""
- ]
- },
- "542": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"settlement_asset_id\"",
- "0"
- ]
- },
- "543": {
- "op": "app_global_put",
- "stack_out": []
- },
- "544": {
- "op": "bytec 6 // \"unit_value\"",
- "stack_out": [
- "\"unit_value\""
- ]
- },
- "546": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"unit_value\"",
- "0"
- ]
- },
- "547": {
- "op": "app_global_put",
- "stack_out": []
- },
- "548": {
- "op": "bytec 17 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\""
- ],
- "stack_out": [
- "\"day_count_convention\""
- ]
- },
- "550": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"day_count_convention\"",
- "0"
- ]
- },
- "551": {
- "op": "app_global_put",
- "stack_out": []
- },
- "552": {
- "op": "bytec 25 // \"metadata\"",
- "defined_out": [
- "\"metadata\""
- ],
- "stack_out": [
- "\"metadata\""
- ]
- },
- "554": {
- "op": "pushbytes 0x",
- "defined_out": [
- "\"metadata\"",
- "0x"
- ],
- "stack_out": [
- "\"metadata\"",
- "0x"
- ]
- },
- "556": {
- "op": "app_global_put",
- "stack_out": []
- },
- "557": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\""
- ],
- "stack_out": [
- "\"principal_discount\""
- ]
- },
- "559": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"principal_discount\"",
- "0"
- ]
- },
- "560": {
- "op": "app_global_put",
- "stack_out": []
- },
- "561": {
- "op": "bytec 33 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\""
- ],
- "stack_out": [
- "\"interest_rate\""
- ]
- },
- "563": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"interest_rate\"",
- "0"
- ]
- },
- "564": {
- "op": "app_global_put",
- "stack_out": []
- },
- "565": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\""
- ],
- "stack_out": [
- "\"total_coupons\""
- ]
- },
- "567": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"total_coupons\"",
- "0"
- ]
- },
- "568": {
- "op": "app_global_put",
- "stack_out": []
- },
- "569": {
- "op": "bytec 10 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\""
- ],
- "stack_out": [
- "\"primary_distribution_opening_date\""
- ]
- },
- "571": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"primary_distribution_opening_date\"",
- "0"
- ]
- },
- "572": {
- "op": "app_global_put",
- "stack_out": []
- },
- "573": {
- "op": "bytec 27 // \"primary_distribution_closure_date\"",
- "defined_out": [
- "\"primary_distribution_closure_date\""
- ],
- "stack_out": [
- "\"primary_distribution_closure_date\""
- ]
- },
- "575": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"primary_distribution_closure_date\"",
- "0"
- ]
- },
- "576": {
- "op": "app_global_put",
- "stack_out": []
- },
- "577": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\""
- ],
- "stack_out": [
- "\"issuance_date\""
- ]
- },
- "579": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"issuance_date\"",
- "0"
- ]
- },
- "580": {
- "op": "app_global_put",
- "stack_out": []
- },
- "581": {
- "op": "bytec 18 // \"secondary_market_opening_date\"",
- "defined_out": [
- "\"secondary_market_opening_date\""
- ],
- "stack_out": [
- "\"secondary_market_opening_date\""
- ]
- },
- "583": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"secondary_market_opening_date\"",
- "0"
- ]
- },
- "584": {
- "op": "app_global_put",
- "stack_out": []
- },
- "585": {
- "op": "bytec 11 // \"secondary_market_closure_date\"",
- "defined_out": [
- "\"secondary_market_closure_date\""
- ],
- "stack_out": [
- "\"secondary_market_closure_date\""
- ]
- },
- "587": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"secondary_market_closure_date\"",
- "0"
- ]
- },
- "588": {
- "op": "app_global_put",
- "stack_out": []
- },
- "589": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\""
- ],
- "stack_out": [
- "\"maturity_date\""
- ]
- },
- "591": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"maturity_date\"",
- "0"
- ]
- },
- "592": {
- "op": "app_global_put",
- "stack_out": []
- },
- "593": {
- "op": "bytec 28 // \"paid_coupon_units\"",
- "defined_out": [
- "\"paid_coupon_units\""
- ],
- "stack_out": [
- "\"paid_coupon_units\""
- ]
- },
- "595": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"paid_coupon_units\"",
- "0"
- ]
- },
- "596": {
- "op": "app_global_put",
- "stack_out": []
- },
- "597": {
- "op": "bytec 29 // \"due_coupons_watermark\"",
- "defined_out": [
- "\"due_coupons_watermark\""
- ],
- "stack_out": [
- "\"due_coupons_watermark\""
- ]
- },
- "599": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"due_coupons_watermark\"",
- "0"
- ]
- },
- "600": {
- "op": "app_global_put",
- "stack_out": []
- },
- "601": {
- "op": "txn GlobalNumByteSlice",
- "defined_out": [
- "tmp%0#2"
- ],
- "stack_out": [
- "tmp%0#2"
- ]
- },
- "603": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "tmp%0#2"
- ],
- "stack_out": [
- "tmp%0#2",
- "3"
- ]
- },
- "605": {
- "op": "==",
- "defined_out": [
- "tmp%1#2"
- ],
- "stack_out": [
- "tmp%1#2"
- ]
- },
- "606": {
- "error": "Wrong Global Bytes allocation",
- "op": "assert // Wrong Global Bytes allocation",
- "stack_out": []
- },
- "607": {
- "op": "txn GlobalNumUint",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1"
- ]
- },
- "609": {
- "op": "pushint 20",
- "defined_out": [
- "20",
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "20"
- ]
- },
- "611": {
- "op": "==",
- "defined_out": [
- "tmp%3#1"
- ],
- "stack_out": [
- "tmp%3#1"
- ]
- },
- "612": {
- "error": "Wrong Global UInts allocation",
- "op": "assert // Wrong Global UInts allocation",
- "stack_out": []
- },
- "613": {
- "op": "txn LocalNumByteSlice",
- "defined_out": [
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1"
- ]
- },
- "615": {
- "op": "!",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "616": {
- "error": "Wrong Local Bytes allocation",
- "op": "assert // Wrong Local Bytes allocation",
- "stack_out": []
- },
- "617": {
- "op": "txn LocalNumUint",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "619": {
- "op": "!",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "tmp%7#0"
- ]
- },
- "620": {
- "error": "Wrong Local UInts allocation",
- "op": "assert // Wrong Local UInts allocation",
- "stack_out": []
- },
- "621": {
- "block": "main_after_if_else@2",
- "stack_in": [],
- "op": "pushbytes 0x25dba95b // method \"asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void\"",
- "defined_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ],
- "stack_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ]
- },
- "627": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%0#1"
- ],
- "stack_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%0#1"
- ]
- },
- "630": {
- "op": "match main_asset_update_route@4",
- "stack_out": []
- },
- "634": {
- "block": "main_switch_case_next@5",
- "stack_in": [],
- "op": "txn OnCompletion",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "636": {
- "op": "!",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "tmp%7#0"
- ]
- },
- "637": {
- "op": "assert",
- "stack_out": []
- },
- "638": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%8#0"
- ],
- "stack_out": [
- "tmp%8#0"
- ]
- },
- "640": {
- "op": "bz main_create_NoOp@36",
- "stack_out": []
- },
- "643": {
- "op": "pushbytess 0x89474134 0x44363d49 0x53bef045 0x67db4f20 0xf6a96c8d 0x8cf14b51 0x9c76b6a3 0x4fd6a3cc 0x1d6fc255 0x25e9997f 0x6c85e3ee 0x402dba47 0xfad2173e 0x08efea35 0xe4a5ab54 0xdc063b35 0x14fc10ef 0x4c113ed5 0x74a7297f 0x105c184e 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method \"asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void\", method \"get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))\", method \"get_coupon_rates()uint16[]\", method \"get_payment_amount(address)(uint64,uint64)\", method \"get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)\", method \"pay_coupon(address,byte[])(uint64,uint64,byte[])\", method \"pay_principal(address,byte[])(uint64,uint64,byte[])\", method \"asset_transfer(address,address,uint64)uint64\", method \"set_secondary_time_events(uint64[])(uint64,uint64)\", method \"set_default_status(bool)uint64\", method \"primary_distribution(address,uint64)uint64\", method \"get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)\", method \"get_time_events()uint64[]\", method \"get_secondary_market_schedule()uint64[]\", method \"get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)\", method \"account_gov_suspension(address,bool)uint64\", method \"account_open(address,address)uint64\", method \"account_close(address)(uint64,uint64)\", method \"account_update_payment_address(address,address)uint64\", method \"account_get_info(address)(address,uint64,uint64,uint64,bool)\", method \"rbac_rotate_arranger(address)uint64\", method \"rbac_set_op_daemon(address)uint64\", method \"rbac_assign_role(uint8,address,byte[])uint64\", method \"rbac_revoke_role(uint8,address)uint64\", method \"rbac_gov_asset_suspension(bool)uint64\", method \"rbac_get_arranger()address\", method \"rbac_get_address_roles(address)(bool,bool,bool,bool,bool)\", method \"rbac_get_role_config(uint8,address)(uint64,uint64)\"",
- "defined_out": [
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(get_coupon_rates()uint16[])",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_time_events()uint64[])",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(pay_principal(address,byte[])(uint64,uint64,byte[]))",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(set_default_status(bool)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))"
- ],
- "stack_out": [
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_coupon_rates()uint16[])",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(pay_principal(address,byte[])(uint64,uint64,byte[]))",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "Method(set_default_status(bool)uint64)",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_time_events()uint64[])",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))"
- ]
- },
- "785": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(get_coupon_rates()uint16[])",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_time_events()uint64[])",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(pay_principal(address,byte[])(uint64,uint64,byte[]))",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(set_default_status(bool)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "tmp%10#0"
- ],
- "stack_out": [
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_coupon_rates()uint16[])",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(pay_principal(address,byte[])(uint64,uint64,byte[]))",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "Method(set_default_status(bool)uint64)",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_time_events()uint64[])",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "tmp%10#0"
- ]
- },
- "788": {
- "op": "match asset_config get_account_units_current_value get_coupon_rates get_payment_amount get_coupons_status pay_coupon pay_principal asset_transfer set_secondary_time_events set_default_status primary_distribution get_asset_info get_time_events get_secondary_market_schedule get_asset_metadata account_gov_suspension account_open account_close account_update_payment_address account_get_info rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config",
- "stack_out": []
- },
- "846": {
- "op": "err"
- },
- "847": {
- "block": "main_create_NoOp@36",
- "stack_in": [],
- "op": "pushbytes 0x3f0efc6c // method \"asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void\"",
- "defined_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ],
- "stack_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ]
- },
- "853": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%11#0"
- ],
- "stack_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%11#0"
- ]
- },
- "856": {
- "op": "match asset_create",
- "stack_out": []
- },
- "860": {
- "op": "err"
- },
- "861": {
- "block": "main_asset_update_route@4",
- "stack_in": [],
- "op": "txn OnCompletion",
- "defined_out": [
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1"
- ]
- },
- "863": {
- "op": "pushint 4 // UpdateApplication",
- "defined_out": [
- "UpdateApplication",
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "UpdateApplication"
- ]
- },
- "865": {
- "op": "==",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "866": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%2#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "tmp%3#0"
- ]
- },
- "868": {
- "op": "&&",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "869": {
- "op": "assert",
- "stack_out": []
- },
- "870": {
- "op": "b asset_update"
- },
- "873": {
- "subroutine": "_puya_lib.util.ensure_budget",
- "params": {
- "required_budget#0": "uint64",
- "fee_source#0": "uint64"
- },
- "block": "ensure_budget",
- "stack_in": [],
- "op": "proto 2 0"
- },
- "876": {
- "op": "frame_dig -2",
- "defined_out": [
- "required_budget#0 (copy)"
- ],
- "stack_out": [
- "required_budget#0 (copy)"
- ]
- },
- "878": {
- "op": "pushint 10",
- "defined_out": [
- "10",
- "required_budget#0 (copy)"
- ],
- "stack_out": [
- "required_budget#0 (copy)",
- "10"
- ]
- },
- "880": {
- "op": "+",
- "defined_out": [
- "required_budget_with_buffer#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "881": {
- "block": "ensure_budget_while_top@1",
- "stack_in": [
- "required_budget_with_buffer#0"
- ],
- "op": "frame_dig 0",
- "defined_out": [
- "required_budget_with_buffer#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "required_budget_with_buffer#0"
- ]
- },
- "883": {
- "op": "global OpcodeBudget",
- "defined_out": [
- "required_budget_with_buffer#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "required_budget_with_buffer#0",
- "tmp%1#0"
- ]
- },
- "885": {
- "op": ">",
- "defined_out": [
- "required_budget_with_buffer#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "tmp%2#0"
- ]
- },
- "886": {
- "op": "bz ensure_budget_after_while@6",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "889": {
- "op": "itxn_begin"
- },
- "890": {
- "op": "pushint 6 // appl",
- "defined_out": [
- "appl",
- "required_budget_with_buffer#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "appl"
- ]
- },
- "892": {
- "op": "itxn_field TypeEnum",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "894": {
- "op": "pushint 5 // DeleteApplication",
- "defined_out": [
- "DeleteApplication",
- "required_budget_with_buffer#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "DeleteApplication"
- ]
- },
- "896": {
- "op": "itxn_field OnCompletion",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "898": {
- "op": "bytec 34 // 0x068101",
- "defined_out": [
- "0x068101",
- "required_budget_with_buffer#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "0x068101"
- ]
- },
- "900": {
- "op": "itxn_field ApprovalProgram",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "902": {
- "op": "bytec 34 // 0x068101",
- "stack_out": [
- "required_budget_with_buffer#0",
- "0x068101"
- ]
- },
- "904": {
- "op": "itxn_field ClearStateProgram",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "906": {
- "op": "frame_dig -1",
- "defined_out": [
- "fee_source#0 (copy)",
- "required_budget_with_buffer#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "fee_source#0 (copy)"
- ]
- },
- "908": {
- "op": "switch ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "914": {
- "block": "ensure_budget_switch_case_next@5",
- "stack_in": [
- "required_budget_with_buffer#0"
- ],
- "op": "itxn_submit"
- },
- "915": {
- "op": "b ensure_budget_while_top@1"
- },
- "918": {
- "block": "ensure_budget_switch_case_1@4",
- "stack_in": [
- "required_budget_with_buffer#0"
- ],
- "op": "global MinTxnFee",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "tmp%3#0"
- ]
- },
- "920": {
- "op": "itxn_field Fee",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "922": {
- "op": "b ensure_budget_switch_case_next@5"
- },
- "925": {
- "block": "ensure_budget_switch_case_0@3",
- "stack_in": [
- "required_budget_with_buffer#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "required_budget_with_buffer#0",
- "0"
- ]
- },
- "926": {
- "op": "itxn_field Fee",
- "stack_out": [
- "required_budget_with_buffer#0"
- ]
- },
- "928": {
- "op": "b ensure_budget_switch_case_next@5"
- },
- "931": {
- "block": "ensure_budget_after_while@6",
- "stack_in": [
- "required_budget_with_buffer#0"
- ],
- "retsub": true,
- "op": "retsub"
- },
- "932": {
- "subroutine": "modules.actus.pam.PAMCoreMixin.asset_config[routing]",
- "params": {},
- "block": "asset_config",
- "stack_in": [],
- "op": "pushbytes \"\"",
- "stack_out": [
- "interest_rate#2"
- ]
- },
- "934": {
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0"
- ]
- },
- "937": {
- "op": "dup",
- "defined_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ]
- },
- "938": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "len%0#0"
- ]
- },
- "939": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "len%0#0",
- "8"
- ]
- },
- "940": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "eq%0#0"
- ]
- },
- "941": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0"
- ]
- },
- "942": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0"
- ]
- },
- "943": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "denomination_asset_id#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0"
- ]
- },
- "946": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "947": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "948": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "len%1#0",
- "8"
- ]
- },
- "949": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "950": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0"
- ]
- },
- "951": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0"
- ]
- },
- "952": {
- "op": "txna ApplicationArgs 3",
- "defined_out": [
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ]
- },
- "955": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "tmp%4#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "tmp%4#0 (copy)"
- ]
- },
- "956": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%2#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "len%2#0"
- ]
- },
- "957": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "len%2#0",
- "8"
- ]
- },
- "958": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%2#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "eq%2#0"
- ]
- },
- "959": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ]
- },
- "960": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0"
- ]
- },
- "961": {
- "op": "txna ApplicationArgs 4",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0"
- ]
- },
- "964": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0",
- "tmp%6#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "tmp%6#0 (copy)"
- ]
- },
- "965": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%3#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "len%3#0"
- ]
- },
- "966": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "len%3#0",
- "8"
- ]
- },
- "967": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%3#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "eq%3#0"
- ]
- },
- "968": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0"
- ]
- },
- "969": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0"
- ]
- },
- "970": {
- "op": "txna ApplicationArgs 5",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0"
- ]
- },
- "973": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0",
- "tmp%8#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "tmp%8#0 (copy)"
- ]
- },
- "974": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%4#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "len%4#0"
- ]
- },
- "975": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "len%4#0",
- "8"
- ]
- },
- "976": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%4#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "eq%4#0"
- ]
- },
- "977": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0"
- ]
- },
- "978": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0"
- ]
- },
- "979": {
- "op": "txna ApplicationArgs 6",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "982": {
- "op": "dup",
- "defined_out": [
- "day_count_convention#0",
- "day_count_convention#0 (copy)",
- "denomination_asset_id#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "day_count_convention#0 (copy)"
- ]
- },
- "983": {
- "op": "len",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "len%5#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%5#0"
- ]
- },
- "984": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "len%5#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%5#0",
- "1"
- ]
- },
- "985": {
- "op": "==",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%5#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%5#0"
- ]
- },
- "986": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "987": {
- "op": "txna ApplicationArgs 7"
- },
- "990": {
- "op": "dup",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "interest_rate#0",
- "interest_rate#0"
- ]
- },
- "991": {
- "op": "cover 7",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "interest_rate#0"
- ]
- },
- "993": {
- "op": "len",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%6#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%6#0"
- ]
- },
- "994": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%6#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%6#0",
- "2"
- ]
- },
- "996": {
- "op": "==",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%6#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%6#0"
- ]
- },
- "997": {
- "error": "invalid number of bytes for arc4.uint16",
- "op": "assert // invalid number of bytes for arc4.uint16",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "998": {
- "op": "txna ApplicationArgs 8"
- },
- "1001": {
- "op": "dup",
- "defined_out": [
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "coupon_rates#0"
- ]
- },
- "1002": {
- "op": "cover 7",
- "defined_out": [
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0"
- ]
- },
- "1004": {
- "op": "dup",
- "defined_out": [
- "coupon_rates#0",
- "coupon_rates#0 (copy)",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "coupon_rates#0 (copy)"
- ]
- },
- "1005": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "coupon_rates#0 (copy)",
- "0"
- ]
- },
- "1006": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0"
- ]
- },
- "1007": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0"
- ]
- },
- "1008": {
- "op": "cover 8",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0"
- ]
- },
- "1010": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "1012": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "mul%0#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "mul%0#0"
- ]
- },
- "1013": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "mul%0#0",
- "2"
- ]
- },
- "1015": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "add%0#0"
- ]
- },
- "1016": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%0#0",
- "coupon_rates#0"
- ]
- },
- "1017": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%7#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%0#0",
- "len%7#0"
- ]
- },
- "1018": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%7#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%7#0"
- ]
- },
- "1019": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1020": {
- "op": "txna ApplicationArgs 9"
- },
- "1023": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "time_events#0"
- ]
- },
- "1024": {
- "op": "cover 7",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0"
- ]
- },
- "1026": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "time_events#0 (copy)"
- ]
- },
- "1027": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "time_events#0 (copy)",
- "0"
- ]
- },
- "1028": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0"
- ]
- },
- "1029": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%1#0"
- ]
- },
- "1030": {
- "op": "cover 8",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0"
- ]
- },
- "1032": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "8"
- ]
- },
- "1033": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "mul%1#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "mul%1#0"
- ]
- },
- "1034": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "mul%1#0",
- "2"
- ]
- },
- "1036": {
- "op": "+",
- "defined_out": [
- "add%1#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "add%1#0"
- ]
- },
- "1037": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%1#0",
- "time_events#0"
- ]
- },
- "1038": {
- "op": "len",
- "defined_out": [
- "add%1#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%8#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%1#0",
- "len%8#0"
- ]
- },
- "1039": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%8#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%8#0"
- ]
- },
- "1040": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1041": {
- "op": "txna ApplicationArgs 10",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0"
- ]
- },
- "1044": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0",
- "time_periods#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "time_periods#0 (copy)"
- ]
- },
- "1045": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "time_periods#0 (copy)",
- "0"
- ]
- },
- "1046": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0"
- ]
- },
- "1047": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "aggregate%array_length%2#0"
- ]
- },
- "1048": {
- "op": "cover 8",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0"
- ]
- },
- "1050": {
- "op": "pushint 16",
- "defined_out": [
- "16",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "16"
- ]
- },
- "1052": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "mul%2#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "mul%2#0"
- ]
- },
- "1053": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "mul%2#0",
- "2"
- ]
- },
- "1055": {
- "op": "+",
- "defined_out": [
- "add%2#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "add%2#0"
- ]
- },
- "1056": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%2#0",
- "time_periods#0"
- ]
- },
- "1057": {
- "op": "len",
- "defined_out": [
- "add%2#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%9#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%2#0",
- "len%9#0"
- ]
- },
- "1058": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%9#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%9#0"
- ]
- },
- "1059": {
- "error": "invalid number of bytes for arc4.dynamic_array>",
- "op": "assert // invalid number of bytes for arc4.dynamic_array>",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1060": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "1063": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "0"
- ]
- },
- "1064": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "0",
- "\"status\""
- ]
- },
- "1065": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1066": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "maybe_value%0#0"
- ]
- },
- "1067": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%0#1"
- ]
- },
- "1068": {
- "error": "D-ASA already configured",
- "op": "assert // D-ASA already configured",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1069": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "denomination_asset_id#0 (copy)",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "denomination_asset_id#0 (copy)"
- ]
- },
- "1071": {
- "op": "asset_params_get AssetCreator",
- "defined_out": [
- "_creator#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "exists#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "_creator#0",
- "exists#0"
- ]
- },
- "1073": {
- "op": "bury 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "exists#0"
- ]
- },
- "1075": {
- "error": "Denomination asset is not properly set",
- "op": "assert // Denomination asset is not properly set",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1076": {
- "op": "bytec 16 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"denomination_asset_id\""
- ]
- },
- "1078": {
- "op": "dig 6",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"denomination_asset_id\"",
- "denomination_asset_id#0 (copy)"
- ]
- },
- "1080": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1081": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "settlement_asset_id#0 (copy)",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "settlement_asset_id#0 (copy)"
- ]
- },
- "1083": {
- "op": "uncover 6",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "settlement_asset_id#0 (copy)",
- "denomination_asset_id#0"
- ]
- },
- "1085": {
- "op": "==",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%0#1"
- ]
- },
- "1086": {
- "error": "Different settlement asset not supported, must be equal to denomination asset",
- "op": "assert // Different settlement asset not supported, must be equal to denomination asset",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1087": {
- "op": "bytec 9 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"settlement_asset_id\""
- ]
- },
- "1089": {
- "op": "dig 5",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"settlement_asset_id\"",
- "settlement_asset_id#0 (copy)"
- ]
- },
- "1091": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1092": {
- "op": "itxn_begin"
- },
- "1093": {
- "op": "global MinTxnFee",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1095": {
- "op": "global CurrentApplicationAddress",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0"
- ]
- },
- "1097": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0",
- "0"
- ]
- },
- "1098": {
- "op": "itxn_field AssetAmount",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0"
- ]
- },
- "1100": {
- "op": "itxn_field AssetReceiver",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1102": {
- "op": "uncover 5",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "settlement_asset_id#0"
- ]
- },
- "1104": {
- "op": "itxn_field XferAsset",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1106": {
- "op": "pushint 4 // axfer",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "axfer",
- "coupon_rates#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "axfer"
- ]
- },
- "1108": {
- "op": "itxn_field TypeEnum",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1110": {
- "op": "itxn_field Fee",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1112": {
- "op": "itxn_submit"
- },
- "1113": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal#0 (copy)",
- "principal_discount#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "principal#0 (copy)"
- ]
- },
- "1115": {
- "op": "dig 2",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "minimum_denomination#0 (copy)",
- "principal#0",
- "principal#0 (copy)",
- "principal_discount#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "principal#0 (copy)",
- "minimum_denomination#0 (copy)"
- ]
- },
- "1117": {
- "op": "%",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%1#0"
- ]
- },
- "1118": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%2#1"
- ]
- },
- "1119": {
- "error": "Minimum denomination is not a divisor of principal",
- "op": "assert // Minimum denomination is not a divisor of principal",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1120": {
- "op": "bytec 6 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"unit_value\""
- ]
- },
- "1122": {
- "op": "dig 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"unit_value\"",
- "minimum_denomination#0 (copy)"
- ]
- },
- "1124": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1125": {
- "op": "uncover 3",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "principal#0"
- ]
- },
- "1127": {
- "op": "uncover 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "principal#0",
- "minimum_denomination#0"
- ]
- },
- "1129": {
- "op": "/",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "principal_discount#0",
- "time_events#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "tmp%3#0"
- ]
- },
- "1130": {
- "op": "bytec 15 // \"total_units\"",
- "defined_out": [
- "\"total_units\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "principal_discount#0",
- "time_events#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "tmp%3#0",
- "\"total_units\""
- ]
- },
- "1132": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "\"total_units\"",
- "tmp%3#0"
- ]
- },
- "1133": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0"
- ]
- },
- "1134": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "interest_rate#0",
- "principal_discount#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "\"principal_discount\""
- ]
- },
- "1136": {
- "op": "uncover 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "\"principal_discount\"",
- "principal_discount#0"
- ]
- },
- "1138": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0"
- ]
- },
- "1139": {
- "op": "btoi",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1140": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "day_count_convention#2"
- ]
- },
- "1141": {
- "op": "bz asset_config_bool_true@3",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1144": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "day_count_convention#2"
- ]
- },
- "1145": {
- "op": "intc 4 // 255",
- "defined_out": [
- "255",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "day_count_convention#2",
- "255"
- ]
- },
- "1147": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#1"
- ]
- },
- "1148": {
- "op": "bz asset_config_bool_false@4",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1151": {
- "block": "asset_config_bool_true@3",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ],
- "op": "intc_1 // 1",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "or_result%0#0"
- ]
- },
- "1152": {
- "error": "Invalid day-count convention ID",
- "block": "asset_config_bool_merge@5",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "or_result%0#0"
- ],
- "op": "assert // Invalid day-count convention ID",
- "defined_out": [],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1153": {
- "op": "bytec 17 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\""
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"day_count_convention\""
- ]
- },
- "1155": {
- "op": "dig 1",
- "defined_out": [
- "\"day_count_convention\"",
- "day_count_convention#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"day_count_convention\"",
- "day_count_convention#2"
- ]
- },
- "1157": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1158": {
- "op": "dig 6",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#0"
- ]
- },
- "1160": {
- "op": "btoi",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#2"
- ]
- },
- "1161": {
- "op": "bury 8",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1163": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0"
- ]
- },
- "1164": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\"",
- "0",
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0",
- "\"principal_discount\""
- ]
- },
- "1166": {
- "op": "app_global_get_ex",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1167": {
- "error": "check self.principal_discount exists",
- "op": "assert // check self.principal_discount exists",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "maybe_value%0#0"
- ]
- },
- "1168": {
- "op": "bnz asset_config_after_if_else@7",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1171": {
- "op": "dig 7",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#2"
- ]
- },
- "1173": {
- "error": "Interest rate is not properly defined",
- "op": "assert // Interest rate is not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1174": {
- "block": "asset_config_after_if_else@7",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ],
- "op": "bytec 33 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\""
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"interest_rate\""
- ]
- },
- "1176": {
- "op": "dig 8",
- "defined_out": [
- "\"interest_rate\"",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"interest_rate\"",
- "interest_rate#2"
- ]
- },
- "1178": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1179": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%array_length%0#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1181": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)"
- ]
- },
- "1182": {
- "error": "Coupon rates are not properly defined",
- "op": "assert // Coupon rates are not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1183": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "aggregate%array_length%0#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "\"total_coupons\""
- ]
- },
- "1185": {
- "op": "dig 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "\"total_coupons\"",
- "aggregate%array_length%0#0 (copy)"
- ]
- },
- "1187": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1188": {
- "op": "bytec 19 // 0x636f75706f6e5261746573",
- "defined_out": [
- "0x636f75706f6e5261746573",
- "aggregate%array_length%0#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "0x636f75706f6e5261746573"
- ]
- },
- "1190": {
- "op": "box_del",
- "defined_out": [
- "aggregate%array_length%0#0",
- "interest_rate#2",
- "{box_del}"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "{box_del}"
- ]
- },
- "1191": {
- "op": "pop",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1192": {
- "op": "bytec 19 // 0x636f75706f6e5261746573",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "0x636f75706f6e5261746573"
- ]
- },
- "1194": {
- "op": "dig 7",
- "defined_out": [
- "0x636f75706f6e5261746573",
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "0x636f75706f6e5261746573",
- "coupon_rates#0"
- ]
- },
- "1196": {
- "op": "box_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1197": {
- "op": "pushint 4",
- "defined_out": [
- "4",
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "4"
- ]
- },
- "1199": {
- "op": "+",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#0"
- ]
- },
- "1200": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#0",
- "aggregate%array_length%1#0"
- ]
- },
- "1202": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "tmp%2#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%2#1"
- ]
- },
- "1203": {
- "error": "Time events length is invalid",
- "op": "assert // Time events length is invalid",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1204": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1206": {
- "callsub": "modules.core_financial.common.CoreFinancialCommonMixin.assert_time_events_sorted",
- "op": "callsub assert_time_events_sorted"
- },
- "1209": {
- "op": "bytec 12 // 0x74696d654576656e7473",
- "defined_out": [
- "0x74696d654576656e7473",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "0x74696d654576656e7473"
- ]
- },
- "1211": {
- "op": "box_del",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "{box_del}"
- ]
- },
- "1212": {
- "op": "pop",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1213": {
- "op": "bytec 12 // 0x74696d654576656e7473",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "0x74696d654576656e7473"
- ]
- },
- "1215": {
- "op": "dig 1",
- "defined_out": [
- "0x74696d654576656e7473",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "0x74696d654576656e7473",
- "time_events#0 (copy)"
- ]
- },
- "1217": {
- "op": "box_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1218": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "time_events#0 (copy)"
- ]
- },
- "1219": {
- "op": "extract 2 0",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "1222": {
- "op": "dig 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)"
- ]
- },
- "1224": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)",
- "2"
- ]
- },
- "1226": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "values%0#0"
- ]
- },
- "1227": {
- "op": "bytec 10 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "values%0#0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "1229": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "\"primary_distribution_opening_date\"",
- "values%0#0"
- ]
- },
- "1230": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "1231": {
- "op": "dig 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)"
- ]
- },
- "1233": {
- "op": "pushint 10",
- "defined_out": [
- "10",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)",
- "10"
- ]
- },
- "1235": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "values%1#0"
- ]
- },
- "1236": {
- "op": "bytec 27 // \"primary_distribution_closure_date\"",
- "defined_out": [
- "\"primary_distribution_closure_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "values%1#0",
- "\"primary_distribution_closure_date\""
- ]
- },
- "1238": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "\"primary_distribution_closure_date\"",
- "values%1#0"
- ]
- },
- "1239": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "1240": {
- "op": "dig 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)"
- ]
- },
- "1242": {
- "op": "pushint 18",
- "defined_out": [
- "18",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)",
- "18"
- ]
- },
- "1244": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "values%2#0"
- ]
- },
- "1245": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "values%2#0",
- "\"issuance_date\""
- ]
- },
- "1247": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0",
- "\"issuance_date\"",
- "values%2#0"
- ]
- },
- "1248": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "1249": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "time_events#0"
- ]
- },
- "1250": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "time_events#0",
- "0"
- ]
- },
- "1251": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%6#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "aggregate%array_length%6#0"
- ]
- },
- "1252": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%6#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "aggregate%array_length%6#0",
- "1"
- ]
- },
- "1253": {
- "op": "-",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "tmp%1#0"
- ]
- },
- "1254": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "tmp%1#0",
- "8"
- ]
- },
- "1255": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%3#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%3#0"
- ]
- },
- "1256": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%3#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "values%3#0"
- ]
- },
- "1257": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "values%3#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "values%3#0",
- "\"maturity_date\""
- ]
- },
- "1259": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"maturity_date\"",
- "values%3#0"
- ]
- },
- "1260": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1261": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%2#0"
- ]
- },
- "1263": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#1"
- ]
- },
- "1264": {
- "error": "Time periods are not properly defined",
- "op": "assert // Time periods are not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1265": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"status\""
- ]
- },
- "1266": {
- "op": "pushint 100",
- "defined_out": [
- "\"status\"",
- "100",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_rates#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"status\"",
- "100"
- ]
- },
- "1268": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1269": {
- "op": "intc_1 // 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "1"
- ]
- },
- "1270": {
- "op": "return",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1271": {
- "block": "asset_config_bool_false@4",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "or_result%0#0"
- ]
- },
- "1272": {
- "op": "b asset_config_bool_merge@5"
- },
- "1275": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.get_account_units_current_value[routing]",
- "params": {},
- "block": "get_account_units_current_value",
- "stack_in": [],
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "1276": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0"
- ]
- },
- "1278": {
- "op": "dupn 4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ]
- },
- "1280": {
- "op": "txna ApplicationArgs 1"
- },
- "1283": {
- "op": "dup",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "holding_address#0"
- ]
- },
- "1284": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1285": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1286": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1287": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0"
- ]
- },
- "1288": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1291": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1292": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "1293": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "8"
- ]
- },
- "1294": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "1295": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1296": {
- "op": "btoi",
- "defined_out": [
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1297": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0"
- ]
- },
- "1298": {
- "op": "bytec 10 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\"",
- "0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "1300": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1301": {
- "error": "check self.primary_distribution_opening_date exists",
- "op": "assert // check self.primary_distribution_opening_date exists",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "1302": {
- "op": "bz get_account_units_current_value_bool_false@4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1305": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1"
- ]
- },
- "1307": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "0"
- ]
- },
- "1308": {
- "op": "bytec 10 // \"primary_distribution_opening_date\"",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "1310": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "1311": {
- "error": "check self.primary_distribution_opening_date exists",
- "op": "assert // check self.primary_distribution_opening_date exists",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0"
- ]
- },
- "1312": {
- "op": ">=",
- "defined_out": [
- "holding_address#0",
- "tmp%2#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%2#1"
- ]
- },
- "1313": {
- "op": "bz get_account_units_current_value_bool_false@4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1316": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "1317": {
- "error": "Primary distribution not yet executed",
- "block": "get_account_units_current_value_bool_merge@5",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ],
- "op": "assert // Primary distribution not yet executed",
- "defined_out": [],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1318": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0x52333023"
- ]
- },
- "1319": {
- "op": "dig 2",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "1321": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1322": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "1323": {
- "op": "bury 9",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1325": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1326": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "maybe_exists%0#0"
- ]
- },
- "1328": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1329": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "units#0"
- ]
- },
- "1330": {
- "op": "bz get_account_units_current_value_bool_false@8",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1333": {
- "op": "dig 7",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1335": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1336": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%box_get%0#0"
- ]
- },
- "1337": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "1338": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "values%0#0"
- ]
- },
- "1339": {
- "op": "dig 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "values%0#0",
- "units#0"
- ]
- },
- "1341": {
- "op": ">=",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%4#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%4#1"
- ]
- },
- "1342": {
- "op": "bz get_account_units_current_value_bool_false@8",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1345": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%1#0"
- ]
- },
- "1346": {
- "error": "Invalid amount of units for the account",
- "block": "get_account_units_current_value_bool_merge@9",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%1#0"
- ],
- "op": "assert // Invalid amount of units for the account",
- "defined_out": [],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1347": {
- "op": "dig 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1349": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1350": {
- "op": "dig 2",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "holding_address#0 (copy)",
- "units#0"
- ]
- },
- "1352": {
- "callsub": "modules.accounting.AccountingModule.account_units_value",
- "op": "callsub account_units_value",
- "defined_out": [
- "account_units_nominal_value#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "account_units_nominal_value#0"
- ]
- },
- "1355": {
- "op": "bury 8",
- "defined_out": [
- "account_units_nominal_value#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1357": {
- "op": "intc_0 // 0",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "accrued_interest#0"
- ]
- },
- "1358": {
- "op": "bury 7",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1360": {
- "op": "intc_0 // 0",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "numerator#0"
- ]
- },
- "1361": {
- "op": "bury 4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1363": {
- "op": "intc_0 // 0",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "denominator#0"
- ]
- },
- "1364": {
- "op": "bury 6",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1366": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "due_coupons#0"
- ]
- },
- "1369": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "due_coupons#0",
- "due_coupons#0"
- ]
- },
- "1370": {
- "op": "bury 6",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "due_coupons#0"
- ]
- },
- "1372": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "holding_address#0"
- ]
- },
- "1373": {
- "op": "dig 1",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "due_coupons#0 (copy)",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "holding_address#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1375": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.assert_no_pending_coupon_payment",
- "op": "callsub assert_no_pending_coupon_payment",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0"
- ]
- },
- "1378": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.is_accruing_interest",
- "op": "callsub is_accruing_interest",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "tmp%7#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%7#0"
- ]
- },
- "1381": {
- "op": "bz get_account_units_current_value_after_if_else@11",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1384": {
- "op": "dig 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0"
- ]
- },
- "1386": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1387": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.day_count_factor",
- "op": "callsub day_count_factor",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "day_count_factor#0"
- ]
- },
- "1390": {
- "op": "dig 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "day_count_factor#0",
- "holding_address#0"
- ]
- },
- "1392": {
- "op": "dig 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "day_count_factor#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1394": {
- "op": "uncover 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0"
- ]
- },
- "1396": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.accrued_interest_amount",
- "op": "callsub accrued_interest_amount",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "accrued_interest#0"
- ]
- },
- "1399": {
- "op": "bury 7",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0"
- ]
- },
- "1401": {
- "op": "dup",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ]
- },
- "1402": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "0"
- ]
- },
- "1403": {
- "op": "extract_uint64",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "numerator#0"
- ]
- },
- "1404": {
- "op": "bury 4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0"
- ]
- },
- "1406": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "8"
- ]
- },
- "1407": {
- "op": "extract_uint64",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "denominator#0"
- ]
- },
- "1408": {
- "op": "bury 5",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1410": {
- "block": "get_account_units_current_value_after_if_else@11",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "dig 2",
- "defined_out": [
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "numerator#0"
- ]
- },
- "1412": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1413": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%0#0",
- "denominator#0"
- ]
- },
- "1415": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1416": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0"
- ]
- },
- "1417": {
- "op": "dig 7",
- "defined_out": [
- "account_units_nominal_value#0",
- "aggregate%head%1#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "account_units_nominal_value#0"
- ]
- },
- "1419": {
- "op": "itob",
- "defined_out": [
- "account_units_nominal_value#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "1420": {
- "op": "dig 7",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "accrued_interest#0"
- ]
- },
- "1422": {
- "op": "itob",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "1423": {
- "op": "concat",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0"
- ]
- },
- "1424": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%3#0",
- "aggregate%head%1#0"
- ]
- },
- "1425": {
- "op": "concat",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%4#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%4#0"
- ]
- },
- "1426": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%4#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%4#0",
- "0x151f7c75"
- ]
- },
- "1427": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0x151f7c75",
- "aggregate%head%4#0"
- ]
- },
- "1428": {
- "op": "concat",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "numerator#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%5#0"
- ]
- },
- "1429": {
- "op": "log",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1430": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "1"
- ]
- },
- "1431": {
- "op": "return",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1432": {
- "block": "get_account_units_current_value_bool_false@8",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%1#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%1#0"
- ]
- },
- "1433": {
- "op": "b get_account_units_current_value_bool_merge@9"
- },
- "1436": {
- "block": "get_account_units_current_value_bool_false@4",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "1437": {
- "op": "b get_account_units_current_value_bool_merge@5"
- },
- "1440": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.get_coupon_rates[routing]",
- "params": {},
- "block": "get_coupon_rates",
- "stack_in": [],
- "op": "bytec 30 // 0x0000"
- },
- "1442": {
- "op": "intc_0 // 0"
- },
- "1443": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "coupon_rates#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "0",
- "\"status\""
- ]
- },
- "1444": {
- "op": "app_global_get_ex",
- "defined_out": [
- "coupon_rates#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1445": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "coupon_rates#0",
- "maybe_value%0#0"
- ]
- },
- "1446": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "coupon_rates#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "1448": {
- "op": "==",
- "defined_out": [
- "coupon_rates#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "coupon_rates#0",
- "tmp%0#2"
- ]
- },
- "1449": {
- "op": "bz get_coupon_rates_after_if_else@3",
- "stack_out": [
- "coupon_rates#0"
- ]
- },
- "1452": {
- "op": "bytec 19 // 0x636f75706f6e5261746573",
- "defined_out": [
- "0x636f75706f6e5261746573",
- "coupon_rates#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "0x636f75706f6e5261746573"
- ]
- },
- "1454": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%1#0",
- "coupon_rates#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "coupon_rates#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1455": {
- "op": "swap",
- "stack_out": [
- "coupon_rates#0",
- "aggregate%box_get%1#0",
- "coupon_rates#0"
- ]
- },
- "1456": {
- "op": "bury 2",
- "stack_out": [
- "coupon_rates#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1458": {
- "error": "check self.coupon_rates exists",
- "op": "assert // check self.coupon_rates exists",
- "stack_out": [
- "coupon_rates#0"
- ]
- },
- "1459": {
- "block": "get_coupon_rates_after_if_else@3",
- "stack_in": [
- "coupon_rates#0"
- ],
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75"
- ],
- "stack_out": [
- "coupon_rates#0",
- "0x151f7c75"
- ]
- },
- "1460": {
- "op": "dig 1",
- "defined_out": [
- "0x151f7c75",
- "coupon_rates#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "0x151f7c75",
- "coupon_rates#0"
- ]
- },
- "1462": {
- "op": "concat",
- "defined_out": [
- "coupon_rates#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "tmp%1#0"
- ]
- },
- "1463": {
- "op": "log",
- "stack_out": [
- "coupon_rates#0"
- ]
- },
- "1464": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "coupon_rates#0"
- ],
- "stack_out": [
- "coupon_rates#0",
- "1"
- ]
- },
- "1465": {
- "op": "return",
- "stack_out": [
- "coupon_rates#0"
- ]
- },
- "1466": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.get_payment_amount[routing]",
- "params": {},
- "block": "get_payment_amount",
- "stack_in": [],
- "op": "pushbytes \"\"",
- "stack_out": [
- "paid_coupons#0"
- ]
- },
- "1468": {
- "op": "txna ApplicationArgs 1"
- },
- "1471": {
- "op": "dupn 2",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1473": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1474": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1475": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1476": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "holding_address#0"
- ]
- },
- "1477": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "holding_address#0",
- "0x52333023"
- ]
- },
- "1478": {
- "op": "swap",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "1479": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1480": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "1481": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1482": {
- "op": "bury 1",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1484": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1485": {
- "op": "intc_0 // 0"
- },
- "1486": {
- "op": "dupn 2"
- },
- "1488": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "0",
- "\"status\""
- ]
- },
- "1489": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1490": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "maybe_value%0#0"
- ]
- },
- "1491": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "maybe_value%0#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "1493": {
- "op": "==",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%0#2"
- ]
- },
- "1494": {
- "op": "bz get_payment_amount_after_if_else@6",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ]
- },
- "1497": {
- "op": "dig 2",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1499": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1500": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%box_get%0#0"
- ]
- },
- "1501": {
- "op": "pushint 48",
- "defined_out": [
- "48",
- "aggregate%box_get%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%box_get%0#0",
- "48"
- ]
- },
- "1503": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "paid_coupons#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0"
- ]
- },
- "1504": {
- "op": "dup",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0",
- "paid_coupons#0"
- ]
- },
- "1505": {
- "op": "bury 6",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0"
- ]
- },
- "1507": {
- "op": "intc_0 // 0",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0",
- "0"
- ]
- },
- "1508": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "paid_coupons#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0",
- "0",
- "\"total_coupons\""
- ]
- },
- "1510": {
- "op": "app_global_get_ex",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1511": {
- "error": "check self.total_coupons exists",
- "op": "assert // check self.total_coupons exists",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "paid_coupons#0",
- "maybe_value%0#0"
- ]
- },
- "1512": {
- "op": "<",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "paid_coupons#0",
- "principal_amount#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%1#1"
- ]
- },
- "1513": {
- "op": "bz get_payment_amount_else_body@4",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ]
- },
- "1516": {
- "op": "dig 3",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "holding_address#0"
- ]
- },
- "1518": {
- "callsub": "modules.accounting.AccountingModule.account_total_units_value",
- "op": "callsub account_total_units_value",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "paid_coupons#0",
- "principal_amount#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%2#1"
- ]
- },
- "1521": {
- "op": "dig 5",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%2#1",
- "paid_coupons#0"
- ]
- },
- "1523": {
- "op": "intc_1 // 1",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%2#1",
- "paid_coupons#0",
- "1"
- ]
- },
- "1524": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "interest_amount#0",
- "paid_coupons#0",
- "principal_amount#0",
- "tmp%2#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%2#1",
- "tmp%3#1"
- ]
- },
- "1525": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_interest_amount",
- "op": "callsub coupon_interest_amount",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "interest_amount#0"
- ]
- },
- "1528": {
- "op": "bury 2",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ]
- },
- "1530": {
- "block": "get_payment_amount_after_if_else@6",
- "stack_in": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "op": "dig 1",
- "defined_out": [
- "interest_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "interest_amount#0"
- ]
- },
- "1532": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "interest_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1533": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%val_as_bytes%0#0",
- "principal_amount#0"
- ]
- },
- "1535": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1536": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%head%1#0"
- ]
- },
- "1537": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%1#0",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "aggregate%head%1#0",
- "0x151f7c75"
- ]
- },
- "1538": {
- "op": "swap",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "0x151f7c75",
- "aggregate%head%1#0"
- ]
- },
- "1539": {
- "op": "concat",
- "defined_out": [
- "interest_amount#0",
- "principal_amount#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "tmp%3#0"
- ]
- },
- "1540": {
- "op": "log",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ]
- },
- "1541": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "1"
- ]
- },
- "1542": {
- "op": "return",
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ]
- },
- "1543": {
- "block": "get_payment_amount_else_body@4",
- "stack_in": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ],
- "op": "dig 3",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "holding_address#0"
- ]
- },
- "1545": {
- "callsub": "modules.accounting.AccountingModule.account_total_units_value",
- "op": "callsub account_total_units_value",
- "defined_out": [
- "holding_address#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0",
- "principal_amount#0"
- ]
- },
- "1548": {
- "op": "bury 1",
- "defined_out": [
- "holding_address#0",
- "principal_amount#0"
- ],
- "stack_out": [
- "paid_coupons#0",
- "holding_address#0",
- "box_prefixed_key%0#1",
- "interest_amount#0",
- "principal_amount#0"
- ]
- },
- "1550": {
- "op": "b get_payment_amount_after_if_else@6"
- },
- "1553": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.get_coupons_status[routing]",
- "params": {},
- "block": "get_coupons_status",
- "stack_in": [],
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "due_coupons#0"
- ],
- "stack_out": [
- "due_coupons#0"
- ]
- },
- "1556": {
- "op": "dupn 2",
- "defined_out": [
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "due_coupons#0",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1558": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.next_coupon_due_date",
- "op": "callsub next_coupon_due_date",
- "defined_out": [
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "due_coupons#0",
- "next_coupon_due_date#0"
- ]
- },
- "1561": {
- "op": "swap",
- "defined_out": [
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "due_coupons#0"
- ]
- },
- "1562": {
- "op": "dup",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1563": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid",
- "op": "callsub all_due_coupons_paid",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "due_coupons#0",
- "all_due_coupons_paid#0"
- ]
- },
- "1566": {
- "op": "swap",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "due_coupons#0"
- ]
- },
- "1567": {
- "op": "intc_0 // 0",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "numerator#0"
- ]
- },
- "1568": {
- "op": "swap",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1569": {
- "op": "intc_0 // 0",
- "defined_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "due_coupons#0",
- "denominator#0"
- ]
- },
- "1570": {
- "op": "swap",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "due_coupons#0"
- ]
- },
- "1571": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.is_accruing_interest",
- "op": "callsub is_accruing_interest",
- "defined_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "tmp%3#0"
- ]
- },
- "1574": {
- "op": "bz get_coupons_status_after_if_else@3",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0"
- ]
- },
- "1577": {
- "op": "dig 4",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "due_coupons#0"
- ]
- },
- "1579": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.day_count_factor",
- "op": "callsub day_count_factor",
- "defined_out": [
- "all_due_coupons_paid#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "day_count_factor#0"
- ]
- },
- "1582": {
- "op": "dup",
- "defined_out": [
- "all_due_coupons_paid#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ]
- },
- "1583": {
- "op": "intc_0 // 0",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "0"
- ]
- },
- "1584": {
- "op": "extract_uint64",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "day_count_factor#0",
- "numerator#0"
- ]
- },
- "1585": {
- "op": "bury 3",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "day_count_factor#0"
- ]
- },
- "1587": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "all_due_coupons_paid#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "day_count_factor#0",
- "8"
- ]
- },
- "1588": {
- "op": "extract_uint64",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "denominator#0"
- ]
- },
- "1589": {
- "op": "bury 1",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0"
- ]
- },
- "1591": {
- "block": "get_coupons_status_after_if_else@3",
- "stack_in": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "0"
- ]
- },
- "1592": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "0",
- "\"total_coupons\""
- ]
- },
- "1594": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1595": {
- "error": "check self.total_coupons exists",
- "op": "assert // check self.total_coupons exists",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0"
- ]
- },
- "1596": {
- "op": "dig 2",
- "defined_out": [
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ]
- },
- "1598": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1599": {
- "op": "dig 2",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0",
- "aggregate%val_as_bytes%0#0",
- "denominator#0"
- ]
- },
- "1601": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1602": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "maybe_value%0#0",
- "aggregate%head%1#0"
- ]
- },
- "1603": {
- "op": "swap",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "maybe_value%0#0"
- ]
- },
- "1604": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "1605": {
- "op": "dig 6",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "due_coupons#0"
- ]
- },
- "1607": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "1608": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0"
- ]
- },
- "1609": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "next_coupon_due_date#0"
- ]
- },
- "1611": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%4#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%4#0"
- ]
- },
- "1612": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%4#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%1#0",
- "aggregate%head%4#0"
- ]
- },
- "1613": {
- "op": "swap",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%4#0",
- "aggregate%head%1#0"
- ]
- },
- "1614": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%5#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%5#0"
- ]
- },
- "1615": {
- "op": "bytec 31 // 0x00",
- "defined_out": [
- "0x00",
- "aggregate%head%5#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%5#0",
- "0x00"
- ]
- },
- "1617": {
- "op": "intc_0 // 0",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%5#0",
- "0x00",
- "0"
- ]
- },
- "1618": {
- "op": "dig 5",
- "defined_out": [
- "0",
- "0x00",
- "aggregate%head%5#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%5#0",
- "0x00",
- "0",
- "all_due_coupons_paid#0"
- ]
- },
- "1620": {
- "op": "setbit",
- "defined_out": [
- "aggregate%encoded_bool%0#0",
- "aggregate%head%5#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%5#0",
- "aggregate%encoded_bool%0#0"
- ]
- },
- "1621": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%6#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%6#0"
- ]
- },
- "1622": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%6#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "aggregate%head%6#0",
- "0x151f7c75"
- ]
- },
- "1623": {
- "op": "swap",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "0x151f7c75",
- "aggregate%head%6#0"
- ]
- },
- "1624": {
- "op": "concat",
- "defined_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "tmp%1#0"
- ]
- },
- "1625": {
- "op": "log",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0"
- ]
- },
- "1626": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0",
- "1"
- ]
- },
- "1627": {
- "op": "return",
- "stack_out": [
- "due_coupons#0",
- "next_coupon_due_date#0",
- "all_due_coupons_paid#0",
- "numerator#0",
- "denominator#0"
- ]
- },
- "1628": {
- "subroutine": "modules.payment_agent.coupon.CouponPaymentAgentMixin.pay_coupon[routing]",
- "params": {},
- "block": "pay_coupon",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1631": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1632": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1633": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1634": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1635": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1636": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1639": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1640": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)",
- "0"
- ]
- },
- "1641": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "aggregate%array_length%0#0"
- ]
- },
- "1642": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "1644": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "add%0#0"
- ]
- },
- "1645": {
- "op": "dig 1",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "add%0#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1647": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "add%0#0",
- "len%1#0"
- ]
- },
- "1648": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "1649": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1650": {
- "op": "extract 2 0",
- "defined_out": [
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_info#0"
- ]
- },
- "1653": {
- "op": "swap",
- "defined_out": [
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0"
- ]
- },
- "1654": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0"
- ]
- },
- "1655": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0",
- "\"status\""
- ]
- },
- "1656": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1657": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "maybe_value%0#0"
- ]
- },
- "1658": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "holding_address#0",
- "maybe_value%0#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "1660": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "payment_info#0",
- "tmp%0#5"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "tmp%0#5"
- ]
- },
- "1661": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "payment_info#0",
- "holding_address#0"
- ]
- },
- "1662": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "1665": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "1668": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0x52333023"
- ]
- },
- "1669": {
- "op": "dig 1",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "1671": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1672": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3"
- ]
- },
- "1673": {
- "op": "cover 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1675": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "1676": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "maybe_exists%0#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1677": {
- "op": "bury 1",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "maybe_exists%0#0"
- ]
- },
- "1679": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1680": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "1681": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1682": {
- "op": "pop",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%0#0"
- ]
- },
- "1683": {
- "op": "intc_2 // 32",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "1684": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "units#2"
- ]
- },
- "1685": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "units#2",
- "units#2"
- ]
- },
- "1686": {
- "op": "cover 3",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "units#2"
- ]
- },
- "1688": {
- "error": "No D-ASA units",
- "op": "assert // No D-ASA units",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1689": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "box_prefixed_key%0#3",
- "due_coupons#0",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "due_coupons#0"
- ]
- },
- "1692": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "due_coupons#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1693": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "box_prefixed_key%0#3",
- "due_coupons#0",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "due_coupons#0",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "1694": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "due_coupons#0",
- "aggregate%box_get%2#0"
- ]
- },
- "1695": {
- "op": "pushint 48",
- "defined_out": [
- "48",
- "aggregate%box_get%2#0",
- "box_prefixed_key%0#3",
- "due_coupons#0",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "due_coupons#0",
- "aggregate%box_get%2#0",
- "48"
- ]
- },
- "1697": {
- "op": "extract_uint64",
- "defined_out": [
- "account_paid_coupons#0",
- "box_prefixed_key%0#3",
- "due_coupons#0",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "due_coupons#0",
- "account_paid_coupons#0"
- ]
- },
- "1698": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "due_coupons#0"
- ]
- },
- "1699": {
- "op": "dig 1",
- "defined_out": [
- "account_paid_coupons#0",
- "account_paid_coupons#0 (copy)",
- "box_prefixed_key%0#3",
- "due_coupons#0",
- "holding_address#0",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "due_coupons#0",
- "account_paid_coupons#0 (copy)"
- ]
- },
- "1701": {
- "op": ">",
- "defined_out": [
- "account_paid_coupons#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%3#3",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "tmp%3#3"
- ]
- },
- "1702": {
- "error": "No due coupon to pay",
- "op": "assert // No due coupon to pay",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0"
- ]
- },
- "1703": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "account_paid_coupons#0 (copy)"
- ]
- },
- "1704": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid",
- "op": "callsub all_due_coupons_paid",
- "defined_out": [
- "account_paid_coupons#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%4#2",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "tmp%4#2"
- ]
- },
- "1707": {
- "error": "Pending due coupon payment",
- "op": "assert // Pending due coupon payment",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0"
- ]
- },
- "1708": {
- "op": "dig 1",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "holding_address#0 (copy)"
- ]
- },
- "1710": {
- "callsub": "modules.accounting.AccountingModule.account_total_units_value",
- "op": "callsub account_total_units_value",
- "defined_out": [
- "account_paid_coupons#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%0#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "account_paid_coupons#0",
- "tmp%0#1"
- ]
- },
- "1713": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "tmp%0#1",
- "account_paid_coupons#0"
- ]
- },
- "1714": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "account_paid_coupons#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%0#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "tmp%0#1",
- "account_paid_coupons#0",
- "1"
- ]
- },
- "1715": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%0#1",
- "tmp%1#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "tmp%0#1",
- "tmp%1#0"
- ]
- },
- "1716": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_interest_amount",
- "op": "callsub coupon_interest_amount",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "holding_address#0",
- "payment_amount#1"
- ]
- },
- "1719": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "holding_address#0"
- ]
- },
- "1720": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1721": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.assert_payment_authorization",
- "op": "callsub assert_payment_authorization",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "holding_address#0"
- ]
- },
- "1724": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.is_payment_executable",
- "op": "callsub is_payment_executable",
- "defined_out": [
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "tmp%2#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%2#1"
- ]
- },
- "1727": {
- "op": "bz pay_coupon_else_body@3",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1730": {
- "op": "dupn 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_amount#1 (copy)",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1",
- "payment_amount#1 (copy)"
- ]
- },
- "1732": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.assert_enough_funds",
- "op": "callsub assert_enough_funds",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1"
- ]
- },
- "1735": {
- "op": "dig 3",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1",
- "box_prefixed_key%0#3"
- ]
- },
- "1737": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1",
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0"
- ]
- },
- "1738": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1",
- "aggregate%box_get%4#0"
- ]
- },
- "1739": {
- "op": "extract 0 32",
- "defined_out": [
- "aggregate%extract%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1",
- "aggregate%extract%2#0"
- ]
- },
- "1742": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%extract%2#0",
- "payment_amount#1"
- ]
- },
- "1743": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.pay",
- "op": "callsub pay",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1746": {
- "block": "pay_coupon_after_if_else@4",
- "stack_in": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ],
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3"
- ]
- },
- "1748": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "1749": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0"
- ]
- },
- "1750": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "aggregate%box_get%6#0"
- ]
- },
- "1751": {
- "op": "pushint 48",
- "defined_out": [
- "48",
- "aggregate%box_get%6#0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "aggregate%box_get%6#0",
- "48"
- ]
- },
- "1753": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#3",
- "values%0#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "values%0#1"
- ]
- },
- "1754": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "box_prefixed_key%0#3",
- "values%0#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "values%0#1",
- "1"
- ]
- },
- "1755": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#3",
- "tmp%0#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "tmp%0#1"
- ]
- },
- "1756": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1757": {
- "op": "pushint 48"
- },
- "1759": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "box_prefixed_key%0#3",
- "48",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1760": {
- "op": "box_replace",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1761": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "0"
- ]
- },
- "1762": {
- "op": "bytec 28 // \"paid_coupon_units\"",
- "defined_out": [
- "\"paid_coupon_units\"",
- "0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "0",
- "\"paid_coupon_units\""
- ]
- },
- "1764": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1765": {
- "error": "check self.paid_coupon_units exists",
- "op": "assert // check self.paid_coupon_units exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0"
- ]
- },
- "1766": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "units#2"
- ]
- },
- "1768": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#3",
- "tmp%1#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%1#0"
- ]
- },
- "1769": {
- "op": "bytec 28 // \"paid_coupon_units\"",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%1#0",
- "\"paid_coupon_units\""
- ]
- },
- "1771": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "\"paid_coupon_units\"",
- "tmp%1#0"
- ]
- },
- "1772": {
- "op": "app_global_put",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1773": {
- "op": "global CurrentApplicationID",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1"
- ]
- },
- "1775": {
- "op": "global LatestTimestamp",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0"
- ]
- },
- "1777": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "0"
- ]
- },
- "1778": {
- "op": "bytec 16 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\"",
- "0",
- "box_prefixed_key%0#3",
- "tmp%0#1",
- "tmp%1#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "0",
- "\"denomination_asset_id\""
- ]
- },
- "1780": {
- "op": "app_global_get_ex",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1781": {
- "error": "check self.denomination_asset_id exists",
- "op": "assert // check self.denomination_asset_id exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0"
- ]
- },
- "1782": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "maybe_value%0#0 (copy)",
- "tmp%0#1",
- "tmp%1#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "maybe_value%0#0 (copy)"
- ]
- },
- "1783": {
- "op": "asset_params_get AssetUnitName",
- "defined_out": [
- "box_prefixed_key%0#3",
- "check%0#0",
- "maybe_value%0#0",
- "tmp%0#1",
- "tmp%1#0",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "check%0#0"
- ]
- },
- "1785": {
- "error": "asset exists",
- "op": "assert // asset exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0"
- ]
- },
- "1786": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "0"
- ]
- },
- "1787": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%0#1",
- "tmp%1#0",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "1788": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_exists%2#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "tmp%0#1",
- "tmp%1#0",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "maybe_exists%2#0"
- ]
- },
- "1789": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0"
- ]
- },
- "1790": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "0"
- ]
- },
- "1791": {
- "op": "bytec 6 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\"",
- "0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "tmp%0#1",
- "tmp%1#0",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "0",
- "\"unit_value\""
- ]
- },
- "1793": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_exists%3#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1",
- "tmp%1#0",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_exists%3#0"
- ]
- },
- "1794": {
- "error": "check self.unit_value exists",
- "op": "assert // check self.unit_value exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ]
- },
- "1795": {
- "op": "*",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%0#1",
- "tmp%1#0",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%0#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2"
- ]
- },
- "1796": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "tmp%0#1"
- ]
- },
- "1798": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%1#0",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1799": {
- "op": "pushbytes 0x080037",
- "defined_out": [
- "0x080037",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%1#0",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%1#0",
- "0x080037"
- ]
- },
- "1804": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%2#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%1#0",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%1#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%head%2#0"
- ]
- },
- "1805": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%head%2#0",
- "tmp%1#0"
- ]
- },
- "1807": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%2#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "1808": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%3#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%head%3#0"
- ]
- },
- "1809": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%head%3#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%head%3#0",
- "payment_amount#1"
- ]
- },
- "1811": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "1812": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%3#0"
- ]
- },
- "1813": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%3#0 (copy)",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%3#0 (copy)"
- ]
- },
- "1815": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%4#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%4#0"
- ]
- },
- "1816": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%4#0",
- "maybe_value%0#0"
- ]
- },
- "1818": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%4#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%4#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%4#0",
- "aggregate%val_as_bytes%4#0"
- ]
- },
- "1819": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0"
- ]
- },
- "1820": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0",
- "value%0#0 (copy)"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "value%0#0 (copy)"
- ]
- },
- "1822": {
- "op": "len",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%length%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%length%1#0"
- ]
- },
- "1823": {
- "op": "itob",
- "defined_out": [
- "aggregate%as_bytes%2#0",
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%as_bytes%2#0"
- ]
- },
- "1824": {
- "op": "extract 6 2",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%length_uint16%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "value%0#0",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%length_uint16%1#0"
- ]
- },
- "1827": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%length_uint16%1#0",
- "value%0#0"
- ]
- },
- "1829": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%encoded_value%1#0"
- ]
- },
- "1830": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0"
- ]
- },
- "1831": {
- "op": "bytec 35 // 0x003b",
- "defined_out": [
- "0x003b",
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0",
- "0x003b"
- ]
- },
- "1833": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%2#2",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%2#2",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0"
- ]
- },
- "1834": {
- "op": "uncover 3",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "tmp%2#2"
- ]
- },
- "1836": {
- "op": "itob",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%5#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%5#0"
- ]
- },
- "1837": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0"
- ]
- },
- "1838": {
- "op": "bytec 30 // 0x0000",
- "defined_out": [
- "0x0000",
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0",
- "0x0000"
- ]
- },
- "1840": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0"
- ]
- },
- "1841": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0",
- "0"
- ]
- },
- "1842": {
- "op": "itob",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%6#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0",
- "aggregate%val_as_bytes%6#0"
- ]
- },
- "1843": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0"
- ]
- },
- "1844": {
- "op": "pushbytes 0x00024950",
- "defined_out": [
- "0x00024950",
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0",
- "0x00024950"
- ]
- },
- "1850": {
- "op": "concat",
- "defined_out": [
- "aggregate%concat%0#0",
- "aggregate%encoded_value%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%concat%0#0"
- ]
- },
- "1851": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%concat%0#0",
- "aggregate%encoded_value%1#0"
- ]
- },
- "1852": {
- "op": "concat",
- "defined_out": [
- "aggregate%concat%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%concat%1#0"
- ]
- },
- "1853": {
- "op": "bytec 36 // method \"Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64)\"",
- "defined_out": [
- "Method(Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64))",
- "aggregate%concat%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%concat%1#0",
- "Method(Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64))"
- ]
- },
- "1855": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "Method(Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64))",
- "aggregate%concat%1#0"
- ]
- },
- "1856": {
- "op": "concat",
- "defined_out": [
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "event%0#0",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "event%0#0"
- ]
- },
- "1857": {
- "op": "log",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "1858": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "tmp%3#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "tmp%3#1"
- ]
- },
- "1860": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%8#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%8#0"
- ]
- },
- "1861": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0"
- ]
- },
- "1862": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "payment_info#0"
- ]
- },
- "1864": {
- "op": "dup",
- "defined_out": [
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "payment_info#0 (copy)",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "payment_info#0",
- "payment_info#0 (copy)"
- ]
- },
- "1865": {
- "op": "len",
- "defined_out": [
- "aggregate%head%11#0",
- "aggregate%length%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "payment_info#0",
- "aggregate%length%2#0"
- ]
- },
- "1866": {
- "op": "itob",
- "defined_out": [
- "aggregate%as_bytes%4#0",
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "payment_info#0",
- "aggregate%as_bytes%4#0"
- ]
- },
- "1867": {
- "op": "extract 6 2",
- "defined_out": [
- "aggregate%head%11#0",
- "aggregate%length_uint16%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "payment_info#0",
- "aggregate%length_uint16%2#0"
- ]
- },
- "1870": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "aggregate%length_uint16%2#0",
- "payment_info#0"
- ]
- },
- "1871": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%11#0",
- "aggregate%encoded_value%2#0"
- ]
- },
- "1872": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0"
- ]
- },
- "1873": {
- "op": "bytec 37 // 0x0012",
- "defined_out": [
- "0x0012",
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0",
- "0x0012"
- ]
- },
- "1875": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%2#0",
- "aggregate%head%12#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%encoded_value%2#0",
- "aggregate%head%12#0"
- ]
- },
- "1876": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%head%12#0",
- "aggregate%encoded_value%2#0"
- ]
- },
- "1877": {
- "op": "concat",
- "defined_out": [
- "aggregate%concat%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%concat%2#0"
- ]
- },
- "1878": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%concat%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "aggregate%concat%2#0",
- "0x151f7c75"
- ]
- },
- "1879": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "0x151f7c75",
- "aggregate%concat%2#0"
- ]
- },
- "1880": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#3",
- "payment_amount#1",
- "payment_info#0",
- "tmp%5#0",
- "units#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "tmp%5#0"
- ]
- },
- "1881": {
- "op": "log",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1882": {
- "op": "intc_1 // 1",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "1"
- ]
- },
- "1883": {
- "op": "return",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1884": {
- "block": "pay_coupon_else_body@3",
- "stack_in": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "payment_amount#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1",
- "payment_amount#1"
- ]
- },
- "1885": {
- "op": "bury 1",
- "defined_out": [
- "payment_amount#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "units#2",
- "payment_amount#1"
- ]
- },
- "1887": {
- "op": "b pay_coupon_after_if_else@4"
- },
- "1890": {
- "subroutine": "modules.payment_agent.principal.PrincipalPaymentAgentMixin.pay_principal[routing]",
- "params": {},
- "block": "pay_principal",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1893": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1894": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1895": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1896": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1897": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1898": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1901": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1902": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)",
- "0"
- ]
- },
- "1903": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "aggregate%array_length%0#0"
- ]
- },
- "1904": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "1906": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "add%0#0"
- ]
- },
- "1907": {
- "op": "dig 1",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "add%0#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1909": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "add%0#0",
- "len%1#0"
- ]
- },
- "1910": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "1911": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1912": {
- "op": "extract 2 0",
- "defined_out": [
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_info#0"
- ]
- },
- "1915": {
- "op": "swap",
- "defined_out": [
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0"
- ]
- },
- "1916": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0"
- ]
- },
- "1917": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0",
- "\"status\""
- ]
- },
- "1918": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1919": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "maybe_value%0#0"
- ]
- },
- "1920": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "holding_address#0",
- "maybe_value%0#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "1922": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "payment_info#0",
- "tmp%0#5"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "tmp%0#5"
- ]
- },
- "1923": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "payment_info#0",
- "holding_address#0"
- ]
- },
- "1924": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "1927": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "1930": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0x52333023"
- ]
- },
- "1931": {
- "op": "dig 1",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "1933": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1934": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3"
- ]
- },
- "1935": {
- "op": "cover 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1937": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "1938": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "maybe_exists%0#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1939": {
- "op": "bury 1",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3",
- "maybe_exists%0#0"
- ]
- },
- "1941": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1942": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1943": {
- "op": "pop",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "aggregate%box_get%0#0"
- ]
- },
- "1944": {
- "op": "intc_2 // 32",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "1945": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "units#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "units#0"
- ]
- },
- "1946": {
- "error": "No D-ASA units",
- "op": "assert // No D-ASA units",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0"
- ]
- },
- "1947": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%2#1"
- ]
- },
- "1949": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%2#1",
- "0"
- ]
- },
- "1950": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%2#1",
- "0",
- "\"maturity_date\""
- ]
- },
- "1952": {
- "op": "app_global_get_ex",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%2#1",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1953": {
- "error": "check self.maturity_date exists",
- "op": "assert // check self.maturity_date exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%2#1",
- "maybe_value%0#0"
- ]
- },
- "1954": {
- "op": ">=",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%3#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%3#3"
- ]
- },
- "1955": {
- "error": "Not mature",
- "op": "assert // Not mature",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0"
- ]
- },
- "1956": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%0#1"
- ]
- },
- "1959": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid",
- "op": "callsub all_due_coupons_paid",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_info#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "tmp%1#1"
- ]
- },
- "1962": {
- "error": "Pending due coupon payment",
- "op": "assert // Pending due coupon payment",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0"
- ]
- },
- "1963": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1964": {
- "callsub": "modules.accounting.AccountingModule.account_total_units_value",
- "op": "callsub account_total_units_value",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_amount#0"
- ]
- },
- "1967": {
- "op": "swap",
- "defined_out": [
- "box_prefixed_key%0#3",
- "holding_address#0",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "holding_address#0"
- ]
- },
- "1968": {
- "op": "dup",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1969": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.assert_payment_authorization",
- "op": "callsub assert_payment_authorization",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "holding_address#0"
- ]
- },
- "1972": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.is_payment_executable",
- "op": "callsub is_payment_executable",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%1#1"
- ]
- },
- "1975": {
- "op": "bz pay_principal_else_body@3",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ]
- },
- "1978": {
- "op": "dupn 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0 (copy)",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0",
- "payment_amount#0 (copy)"
- ]
- },
- "1980": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.assert_enough_funds",
- "op": "callsub assert_enough_funds",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0"
- ]
- },
- "1983": {
- "op": "dig 2",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0",
- "box_prefixed_key%0#3"
- ]
- },
- "1985": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "1986": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0",
- "aggregate%box_get%2#0"
- ]
- },
- "1987": {
- "op": "extract 0 32",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0",
- "aggregate%extract%1#0"
- ]
- },
- "1990": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%extract%1#0",
- "payment_amount#0"
- ]
- },
- "1991": {
- "callsub": "modules.payment_agent.common.PaymentAgentCommonMixin.pay",
- "op": "callsub pay",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ]
- },
- "1994": {
- "block": "pay_principal_after_if_else@4",
- "stack_in": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "0"
- ]
- },
- "1995": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "1996": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1997": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "maybe_value%0#0"
- ]
- },
- "1998": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "maybe_value%0#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2000": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "maybe_value%0#0",
- "box_prefixed_key%0#3 (copy)",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "2001": {
- "op": "cover 2",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "2003": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0"
- ]
- },
- "2004": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "aggregate%box_get%4#0"
- ]
- },
- "2005": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%4#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "aggregate%box_get%4#0",
- "32"
- ]
- },
- "2006": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "values%0#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "values%0#1"
- ]
- },
- "2007": {
- "op": "-",
- "defined_out": [
- "box_prefixed_key%0#3",
- "tmp%0#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "tmp%0#1"
- ]
- },
- "2008": {
- "op": "bytec_3 // \"circulating_units\"",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "tmp%0#1",
- "\"circulating_units\""
- ]
- },
- "2009": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "\"circulating_units\"",
- "tmp%0#1"
- ]
- },
- "2010": {
- "op": "app_global_put",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2011": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "0"
- ]
- },
- "2012": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "box_prefixed_key%0#3",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2013": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2014": {
- "op": "intc_2 // 32",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "32"
- ]
- },
- "2015": {
- "op": "dig 2",
- "defined_out": [
- "32",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%0#0 (copy)",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "32",
- "aggregate%val_as_bytes%0#0 (copy)"
- ]
- },
- "2017": {
- "op": "box_replace",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2018": {
- "callsub": "modules.accounting.AccountingModule.end_if_no_circulating_units",
- "op": "callsub end_if_no_circulating_units"
- },
- "2021": {
- "op": "global CurrentApplicationID",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1"
- ]
- },
- "2023": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "tmp%0#1",
- "tmp%1#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2"
- ]
- },
- "2025": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "0"
- ]
- },
- "2026": {
- "op": "bytec 16 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\"",
- "0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "tmp%0#1",
- "tmp%1#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "0",
- "\"denomination_asset_id\""
- ]
- },
- "2028": {
- "op": "app_global_get_ex",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2029": {
- "error": "check self.denomination_asset_id exists",
- "op": "assert // check self.denomination_asset_id exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0"
- ]
- },
- "2030": {
- "op": "dup",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "maybe_value%0#0 (copy)",
- "tmp%0#1",
- "tmp%1#2"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "maybe_value%0#0 (copy)"
- ]
- },
- "2031": {
- "op": "asset_params_get AssetUnitName",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "check%0#0",
- "maybe_value%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "check%0#0"
- ]
- },
- "2033": {
- "error": "asset exists",
- "op": "assert // asset exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0"
- ]
- },
- "2034": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "0"
- ]
- },
- "2035": {
- "op": "bytec_3 // \"circulating_units\"",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "2036": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_exists%2#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "tmp%0#1",
- "tmp%1#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "maybe_exists%2#0"
- ]
- },
- "2037": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0"
- ]
- },
- "2038": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "0"
- ]
- },
- "2039": {
- "op": "bytec 6 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\"",
- "0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "tmp%0#1",
- "tmp%1#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "0",
- "\"unit_value\""
- ]
- },
- "2041": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_exists%3#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1",
- "tmp%1#2",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_exists%3#0"
- ]
- },
- "2042": {
- "error": "check self.unit_value exists",
- "op": "assert // check self.unit_value exists",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ]
- },
- "2043": {
- "op": "*",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%0#1",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1"
- ]
- },
- "2044": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "tmp%0#1"
- ]
- },
- "2046": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%1#2",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2047": {
- "op": "pushbytes 0x030037",
- "defined_out": [
- "0x030037",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%1#2",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%1#0",
- "0x030037"
- ]
- },
- "2052": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%1#2",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%1#2",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%head%2#0"
- ]
- },
- "2053": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%head%2#0",
- "tmp%1#2"
- ]
- },
- "2055": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%2#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2056": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%head%3#0"
- ]
- },
- "2057": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%head%3#0",
- "payment_amount#0"
- ]
- },
- "2059": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "2060": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%3#0"
- ]
- },
- "2061": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%3#0 (copy)",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%3#0 (copy)"
- ]
- },
- "2063": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%4#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "maybe_value%0#0",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%4#0"
- ]
- },
- "2064": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%4#0",
- "maybe_value%0#0"
- ]
- },
- "2066": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%4#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%4#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%4#0",
- "aggregate%val_as_bytes%4#0"
- ]
- },
- "2067": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0"
- ]
- },
- "2068": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0",
- "value%0#0 (copy)"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "value%0#0 (copy)"
- ]
- },
- "2070": {
- "op": "len",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%length%1#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%length%1#0"
- ]
- },
- "2071": {
- "op": "itob",
- "defined_out": [
- "aggregate%as_bytes%2#0",
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%as_bytes%2#0"
- ]
- },
- "2072": {
- "op": "extract 6 2",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%length_uint16%1#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1",
- "value%0#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "value%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%length_uint16%1#0"
- ]
- },
- "2075": {
- "op": "uncover 4",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%length_uint16%1#0",
- "value%0#0"
- ]
- },
- "2077": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%head%5#0",
- "aggregate%encoded_value%1#0"
- ]
- },
- "2078": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0"
- ]
- },
- "2079": {
- "op": "bytec 35 // 0x003b",
- "defined_out": [
- "0x003b",
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%5#0",
- "0x003b"
- ]
- },
- "2081": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%2#1",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0"
- ]
- },
- "2082": {
- "op": "uncover 3",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "tmp%2#1"
- ]
- },
- "2084": {
- "op": "itob",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%5#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%5#0"
- ]
- },
- "2085": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0"
- ]
- },
- "2086": {
- "op": "bytec 30 // 0x0000",
- "defined_out": [
- "0x0000",
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%7#0",
- "0x0000"
- ]
- },
- "2088": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0"
- ]
- },
- "2089": {
- "op": "uncover 3",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%8#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2091": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0"
- ]
- },
- "2092": {
- "op": "pushbytes 0x00025052",
- "defined_out": [
- "0x00025052",
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%head%9#0",
- "0x00025052"
- ]
- },
- "2098": {
- "op": "concat",
- "defined_out": [
- "aggregate%concat%0#0",
- "aggregate%encoded_value%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%encoded_value%1#0",
- "aggregate%concat%0#0"
- ]
- },
- "2099": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%concat%0#0",
- "aggregate%encoded_value%1#0"
- ]
- },
- "2100": {
- "op": "concat",
- "defined_out": [
- "aggregate%concat%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%concat%1#0"
- ]
- },
- "2101": {
- "op": "bytec 36 // method \"Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64)\"",
- "defined_out": [
- "Method(Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64))",
- "aggregate%concat%1#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%concat%1#0",
- "Method(Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64))"
- ]
- },
- "2103": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "Method(Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64))",
- "aggregate%concat%1#0"
- ]
- },
- "2104": {
- "op": "concat",
- "defined_out": [
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "event%0#0",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "event%0#0"
- ]
- },
- "2105": {
- "op": "log",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "2106": {
- "op": "global LatestTimestamp",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "tmp%2#1"
- ]
- },
- "2108": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%8#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%8#0"
- ]
- },
- "2109": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0"
- ]
- },
- "2110": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "payment_info#0"
- ]
- },
- "2112": {
- "op": "dup",
- "defined_out": [
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0",
- "payment_info#0 (copy)"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "payment_info#0",
- "payment_info#0 (copy)"
- ]
- },
- "2113": {
- "op": "len",
- "defined_out": [
- "aggregate%head%11#0",
- "aggregate%length%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "payment_info#0",
- "aggregate%length%2#0"
- ]
- },
- "2114": {
- "op": "itob",
- "defined_out": [
- "aggregate%as_bytes%4#0",
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "payment_info#0",
- "aggregate%as_bytes%4#0"
- ]
- },
- "2115": {
- "op": "extract 6 2",
- "defined_out": [
- "aggregate%head%11#0",
- "aggregate%length_uint16%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "payment_info#0",
- "aggregate%length_uint16%2#0"
- ]
- },
- "2118": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "aggregate%length_uint16%2#0",
- "payment_info#0"
- ]
- },
- "2119": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%11#0",
- "aggregate%encoded_value%2#0"
- ]
- },
- "2120": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0"
- ]
- },
- "2121": {
- "op": "bytec 37 // 0x0012",
- "defined_out": [
- "0x0012",
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%encoded_value%2#0",
- "aggregate%head%11#0",
- "0x0012"
- ]
- },
- "2123": {
- "op": "concat",
- "defined_out": [
- "aggregate%encoded_value%2#0",
- "aggregate%head%12#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%encoded_value%2#0",
- "aggregate%head%12#0"
- ]
- },
- "2124": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%head%12#0",
- "aggregate%encoded_value%2#0"
- ]
- },
- "2125": {
- "op": "concat",
- "defined_out": [
- "aggregate%concat%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%concat%2#0"
- ]
- },
- "2126": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%concat%2#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "aggregate%concat%2#0",
- "0x151f7c75"
- ]
- },
- "2127": {
- "op": "swap",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "0x151f7c75",
- "aggregate%concat%2#0"
- ]
- },
- "2128": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "tmp%5#0"
- ]
- },
- "2129": {
- "op": "log",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ]
- },
- "2130": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_info#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "1"
- ]
- },
- "2131": {
- "op": "return",
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ]
- },
- "2132": {
- "block": "pay_principal_else_body@3",
- "stack_in": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0",
- "payment_amount#0"
- ]
- },
- "2133": {
- "op": "bury 1",
- "defined_out": [
- "payment_amount#0"
- ],
- "stack_out": [
- "payment_info#0",
- "box_prefixed_key%0#3",
- "payment_amount#0"
- ]
- },
- "2135": {
- "op": "b pay_principal_after_if_else@4"
- },
- "2138": {
- "subroutine": "modules.transfer_agent.coupon.CouponTransferAgentMixin.asset_transfer[routing]",
- "params": {},
- "block": "asset_transfer",
- "stack_in": [],
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%extract%1#0"
- ]
- },
- "2139": {
- "op": "dupn 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3"
- ]
- },
- "2141": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0"
- ]
- },
- "2143": {
- "op": "dup",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0"
- ]
- },
- "2144": {
- "op": "txna ApplicationArgs 1"
- },
- "2147": {
- "op": "dup",
- "defined_out": [
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "sender_holding_address#0"
- ]
- },
- "2148": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "len%0#0"
- ]
- },
- "2149": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%0#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "2150": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "eq%0#0"
- ]
- },
- "2151": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0"
- ]
- },
- "2152": {
- "op": "txna ApplicationArgs 2"
- },
- "2155": {
- "op": "dup",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "receiver_holding_address#0"
- ]
- },
- "2156": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "len%1#0"
- ]
- },
- "2157": {
- "op": "intc_2 // 32",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "len%1#0",
- "32"
- ]
- },
- "2158": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "eq%1#0"
- ]
- },
- "2159": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0"
- ]
- },
- "2160": {
- "op": "txna ApplicationArgs 3",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "tmp%4#0"
- ]
- },
- "2163": {
- "op": "dup",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#0",
- "tmp%4#0 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "tmp%4#0",
- "tmp%4#0 (copy)"
- ]
- },
- "2164": {
- "op": "len",
- "defined_out": [
- "len%2#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "tmp%4#0",
- "len%2#0"
- ]
- },
- "2165": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "len%2#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "tmp%4#0",
- "len%2#0",
- "8"
- ]
- },
- "2166": {
- "op": "==",
- "defined_out": [
- "eq%2#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "tmp%4#0",
- "eq%2#0"
- ]
- },
- "2167": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "tmp%4#0"
- ]
- },
- "2168": {
- "op": "btoi",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2169": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2170": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0",
- "\"status\""
- ]
- },
- "2171": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2172": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "2173": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "maybe_value%0#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "2175": {
- "op": "==",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%0#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%0#1"
- ]
- },
- "2176": {
- "op": "bz asset_transfer_bool_false@6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2179": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2180": {
- "op": "bytec 18 // \"secondary_market_opening_date\"",
- "defined_out": [
- "\"secondary_market_opening_date\"",
- "0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0",
- "\"secondary_market_opening_date\""
- ]
- },
- "2182": {
- "op": "app_global_get_ex",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2183": {
- "error": "check self.secondary_market_opening_date exists",
- "op": "assert // check self.secondary_market_opening_date exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "2184": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "maybe_value%0#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "tmp%1#1"
- ]
- },
- "2186": {
- "op": "<=",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%2#2",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%2#2"
- ]
- },
- "2187": {
- "op": "bz asset_transfer_bool_false@6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2190": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2191": {
- "op": "bytec 11 // \"secondary_market_closure_date\"",
- "defined_out": [
- "\"secondary_market_closure_date\"",
- "0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0",
- "\"secondary_market_closure_date\""
- ]
- },
- "2193": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "2194": {
- "error": "check self.secondary_market_closure_date exists",
- "op": "assert // check self.secondary_market_closure_date exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "maybe_value%1#0"
- ]
- },
- "2195": {
- "op": "bz asset_transfer_bool_true@5",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2198": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%4#1"
- ]
- },
- "2200": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%4#1",
- "0"
- ]
- },
- "2201": {
- "op": "bytec 11 // \"secondary_market_closure_date\"",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%4#1",
- "0",
- "\"secondary_market_closure_date\""
- ]
- },
- "2203": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%2#0",
- "maybe_value%2#0",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%4#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%4#1",
- "maybe_value%2#0",
- "maybe_exists%2#0"
- ]
- },
- "2204": {
- "error": "check self.secondary_market_closure_date exists",
- "op": "assert // check self.secondary_market_closure_date exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%4#1",
- "maybe_value%2#0"
- ]
- },
- "2205": {
- "op": "<",
- "defined_out": [
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%5#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%5#0"
- ]
- },
- "2206": {
- "op": "bz asset_transfer_bool_false@6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2209": {
- "block": "asset_transfer_bool_true@5",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ],
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "2210": {
- "error": "Secondary market is closed",
- "block": "asset_transfer_bool_merge@7",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "and_result%0#0"
- ],
- "op": "assert // Secondary market is closed",
- "defined_out": [],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2211": {
- "op": "txn Sender",
- "defined_out": [
- "tmp%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%0#3"
- ]
- },
- "2213": {
- "op": "dig 3",
- "defined_out": [
- "sender_holding_address#0",
- "tmp%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%0#3",
- "sender_holding_address#0"
- ]
- },
- "2215": {
- "op": "dup",
- "defined_out": [
- "sender_holding_address#0",
- "sender_holding_address#0 (copy)",
- "tmp%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%0#3",
- "sender_holding_address#0 (copy)",
- "sender_holding_address#0 (copy)"
- ]
- },
- "2216": {
- "op": "cover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "tmp%0#3",
- "sender_holding_address#0 (copy)"
- ]
- },
- "2218": {
- "op": "==",
- "defined_out": [
- "sender_holding_address#0",
- "tmp%1#4"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "tmp%1#4"
- ]
- },
- "2219": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0"
- ]
- },
- "2220": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "2223": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "2226": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "0x52333023"
- ]
- },
- "2227": {
- "op": "dig 1",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "0x52333023",
- "sender_holding_address#0 (copy)"
- ]
- },
- "2229": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#2",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2230": {
- "op": "dup",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2"
- ]
- },
- "2231": {
- "op": "bury 9",
- "defined_out": [
- "box_prefixed_key%0#2",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2233": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2 (copy)",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2 (copy)"
- ]
- },
- "2234": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#2",
- "maybe_exists%0#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2235": {
- "op": "bury 1",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "maybe_exists%0#0"
- ]
- },
- "2237": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2238": {
- "op": "bytec_1 // 0x52333023",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "0x52333023"
- ]
- },
- "2239": {
- "op": "dig 4",
- "defined_out": [
- "0x52333023",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "0x52333023",
- "receiver_holding_address#0"
- ]
- },
- "2241": {
- "op": "dup",
- "defined_out": [
- "0x52333023",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "receiver_holding_address#0 (copy)",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "0x52333023",
- "receiver_holding_address#0 (copy)",
- "receiver_holding_address#0 (copy)"
- ]
- },
- "2242": {
- "op": "cover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "0x52333023",
- "receiver_holding_address#0 (copy)"
- ]
- },
- "2244": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2245": {
- "op": "dup",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3"
- ]
- },
- "2246": {
- "op": "bury 10",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2248": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)",
- "receiver_holding_address#0",
- "sender_holding_address#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "2249": {
- "op": "box_len",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2250": {
- "op": "bury 1",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "maybe_exists%0#0"
- ]
- },
- "2252": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2253": {
- "op": "dig 3",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "sender_holding_address#0 (copy)"
- ]
- },
- "2255": {
- "callsub": "modules.accounting.AccountingModule.assert_is_not_account_suspended",
- "op": "callsub assert_is_not_account_suspended",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2258": {
- "op": "dig 1",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0 (copy)"
- ]
- },
- "2260": {
- "callsub": "modules.accounting.AccountingModule.assert_is_not_account_suspended",
- "op": "callsub assert_is_not_account_suspended",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "sender_holding_address#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2263": {
- "op": "uncover 3",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "receiver_holding_address#0",
- "box_prefixed_key%0#3",
- "sender_holding_address#0"
- ]
- },
- "2265": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "sender_holding_address#0",
- "receiver_holding_address#0"
- ]
- },
- "2267": {
- "op": "!=",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "tmp%0#1"
- ]
- },
- "2268": {
- "error": "Sender and receiver must be different",
- "op": "assert // Sender and receiver must be different",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3"
- ]
- },
- "2269": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "units#0"
- ]
- },
- "2271": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "units#0 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "units#0",
- "units#0 (copy)"
- ]
- },
- "2272": {
- "error": "Transfer units must be greater than zero",
- "op": "assert // Transfer units must be greater than zero",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "units#0"
- ]
- },
- "2273": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2275": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "2276": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "aggregate%box_get%0#0"
- ]
- },
- "2277": {
- "op": "dup",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%0#0 (copy)",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%0#0 (copy)"
- ]
- },
- "2278": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%0#0",
- "aggregate%box_get%0#0 (copy)",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%0#0 (copy)",
- "32"
- ]
- },
- "2279": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%box_get%0#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "aggregate%box_get%0#0",
- "values%0#0"
- ]
- },
- "2280": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%0#0",
- "values%0#0",
- "units#0"
- ]
- },
- "2282": {
- "op": ">=",
- "defined_out": [
- "aggregate%box_get%0#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "tmp%2#2",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%0#0",
- "tmp%2#2"
- ]
- },
- "2283": {
- "error": "Insufficient sender units to transfer",
- "op": "assert // Insufficient sender units to transfer",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%0#0"
- ]
- },
- "2284": {
- "op": "extract 40 8",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%extract%1#0"
- ]
- },
- "2287": {
- "op": "bury 9",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2289": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0"
- ]
- },
- "2290": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%4#0"
- ]
- },
- "2291": {
- "op": "intc_2 // 32",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%4#0",
- "32"
- ]
- },
- "2292": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "values%1#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%1#0"
- ]
- },
- "2293": {
- "op": "bz asset_transfer_else_body@9",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2296": {
- "op": "dig 6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2298": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0"
- ]
- },
- "2299": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%6#0"
- ]
- },
- "2300": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "aggregate%box_get%6#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%6#0",
- "40"
- ]
- },
- "2302": {
- "op": "extract_uint64",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0"
- ]
- },
- "2303": {
- "op": "dig 6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2305": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%8#0",
- "aggregate%box_get%9#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0",
- "aggregate%box_get%8#0",
- "aggregate%box_get%9#0"
- ]
- },
- "2306": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0",
- "aggregate%box_get%8#0"
- ]
- },
- "2307": {
- "op": "pushint 40",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0",
- "aggregate%box_get%8#0",
- "40"
- ]
- },
- "2309": {
- "op": "extract_uint64",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0",
- "values%1#0"
- ]
- },
- "2310": {
- "op": "==",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%0#1"
- ]
- },
- "2311": {
- "op": "bz asset_transfer_bool_false@20",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2314": {
- "op": "dig 6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2316": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%10#0",
- "aggregate%box_get%11#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%10#0",
- "aggregate%box_get%11#0"
- ]
- },
- "2317": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%10#0"
- ]
- },
- "2318": {
- "op": "pushint 48",
- "defined_out": [
- "48",
- "aggregate%box_get%10#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%10#0",
- "48"
- ]
- },
- "2320": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "values%2#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%2#0"
- ]
- },
- "2321": {
- "op": "dig 6",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%2#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2323": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%12#0",
- "aggregate%box_get%13#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "values%2#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%2#0",
- "aggregate%box_get%12#0",
- "aggregate%box_get%13#0"
- ]
- },
- "2324": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%2#0",
- "aggregate%box_get%12#0"
- ]
- },
- "2325": {
- "op": "pushint 48",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%2#0",
- "aggregate%box_get%12#0",
- "48"
- ]
- },
- "2327": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0",
- "values%2#0",
- "values%3#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%2#0",
- "values%3#0"
- ]
- },
- "2328": {
- "op": "==",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%1#4"
- ]
- },
- "2329": {
- "op": "bz asset_transfer_bool_false@20",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2332": {
- "op": "intc_1 // 1",
- "defined_out": [
- "aggregate%extract%1#0",
- "and_result%0#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "receiver_holding_address#0",
- "sender_holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "2333": {
- "error": "Sender and receiver units are not fungible",
- "block": "asset_transfer_bool_merge@21",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "and_result%0#0"
- ],
- "op": "assert // Sender and receiver units are not fungible",
- "defined_out": [],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2334": {
- "block": "asset_transfer_after_if_else@10",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ],
- "op": "dig 6",
- "defined_out": [
- "box_prefixed_key%0#2"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2336": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2 (copy)"
- ]
- },
- "2337": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%16#0",
- "aggregate%box_get%17#0",
- "box_prefixed_key%0#2"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%box_get%16#0",
- "aggregate%box_get%17#0"
- ]
- },
- "2338": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%box_get%16#0"
- ]
- },
- "2339": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "aggregate%box_get%16#0",
- "box_prefixed_key%0#2"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%box_get%16#0",
- "40"
- ]
- },
- "2341": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#2",
- "sender_unit_value#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "sender_unit_value#0"
- ]
- },
- "2342": {
- "op": "bury 5",
- "defined_out": [
- "box_prefixed_key%0#2",
- "sender_unit_value#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2344": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_unit_value#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "due_coupons#0"
- ]
- },
- "2347": {
- "op": "dig 4",
- "defined_out": [
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0",
- "sender_unit_value#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0"
- ]
- },
- "2349": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0",
- "sender_holding_address#0 (copy)",
- "sender_unit_value#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0 (copy)",
- "sender_holding_address#0 (copy)"
- ]
- },
- "2350": {
- "op": "cover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "due_coupons#0",
- "sender_holding_address#0 (copy)"
- ]
- },
- "2352": {
- "op": "dig 1",
- "defined_out": [
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "due_coupons#0 (copy)",
- "sender_holding_address#0",
- "sender_holding_address#0 (copy)",
- "sender_unit_value#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "due_coupons#0",
- "sender_holding_address#0 (copy)",
- "due_coupons#0 (copy)"
- ]
- },
- "2354": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.assert_no_pending_coupon_payment",
- "op": "callsub assert_no_pending_coupon_payment",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "due_coupons#0"
- ]
- },
- "2357": {
- "op": "swap",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0"
- ]
- },
- "2358": {
- "op": "dig 3",
- "defined_out": [
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0",
- "units#0"
- ]
- },
- "2360": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0",
- "units#0 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "due_coupons#0",
- "sender_holding_address#0",
- "units#0 (copy)",
- "units#0 (copy)"
- ]
- },
- "2361": {
- "op": "cover 3",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "due_coupons#0",
- "sender_holding_address#0",
- "units#0 (copy)"
- ]
- },
- "2363": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "sender_holding_address#0",
- "units#0 (copy)",
- "due_coupons#0"
- ]
- },
- "2365": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.accrued_interest_amount",
- "op": "callsub accrued_interest_amount",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "accrued_interest#0"
- ]
- },
- "2368": {
- "op": "bury 7",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0"
- ]
- },
- "2370": {
- "op": "dig 1",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "box_prefixed_key%0#2 (copy)"
- ]
- },
- "2372": {
- "op": "box_get",
- "defined_out": [
- "accrued_interest#0",
- "aggregate%box_get%18#0",
- "aggregate%box_get%19#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "aggregate%box_get%18#0",
- "aggregate%box_get%19#0"
- ]
- },
- "2373": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "aggregate%box_get%18#0"
- ]
- },
- "2374": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "accrued_interest#0",
- "aggregate%box_get%18#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "aggregate%box_get%18#0",
- "32"
- ]
- },
- "2375": {
- "op": "extract_uint64",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "values%0#0"
- ]
- },
- "2376": {
- "op": "dup2",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0",
- "units#0 (copy)",
- "values%0#0",
- "values%0#0 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "values%0#0",
- "units#0 (copy)",
- "values%0#0 (copy)"
- ]
- },
- "2377": {
- "op": "<=",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "tmp%0#1",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "values%0#0",
- "tmp%0#1"
- ]
- },
- "2378": {
- "error": "Insufficient sender units to transfer",
- "op": "assert // Insufficient sender units to transfer",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "units#0",
- "values%0#0"
- ]
- },
- "2379": {
- "op": "swap",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "values%0#0",
- "units#0"
- ]
- },
- "2380": {
- "op": "-",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "tmp%1#1"
- ]
- },
- "2381": {
- "op": "itob",
- "defined_out": [
- "accrued_interest#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2382": {
- "op": "dig 1",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#2 (copy)"
- ]
- },
- "2384": {
- "op": "intc_2 // 32",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#2 (copy)",
- "32"
- ]
- },
- "2385": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2 (copy)",
- "32",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2387": {
- "op": "box_replace",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2388": {
- "op": "box_get",
- "defined_out": [
- "accrued_interest#0",
- "aggregate%box_get%22#0",
- "aggregate%box_get%23#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%22#0",
- "aggregate%box_get%23#0"
- ]
- },
- "2389": {
- "op": "pop",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%22#0"
- ]
- },
- "2390": {
- "op": "intc_2 // 32",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%box_get%22#0",
- "32"
- ]
- },
- "2391": {
- "op": "extract_uint64",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "values%0#0"
- ]
- },
- "2392": {
- "op": "bnz asset_transfer_after_if_else@16",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2395": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2396": {
- "op": "itob",
- "defined_out": [
- "accrued_interest#0",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2397": {
- "op": "dig 7",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2"
- ]
- },
- "2399": {
- "op": "dup",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2 (copy)",
- "box_prefixed_key%0#2 (copy)"
- ]
- },
- "2400": {
- "op": "cover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2 (copy)"
- ]
- },
- "2402": {
- "op": "pushint 40",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2 (copy)",
- "40"
- ]
- },
- "2404": {
- "op": "dig 2",
- "defined_out": [
- "40",
- "accrued_interest#0",
- "aggregate%val_as_bytes%1#0",
- "aggregate%val_as_bytes%1#0 (copy)",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#2 (copy)",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2 (copy)",
- "40",
- "aggregate%val_as_bytes%1#0 (copy)"
- ]
- },
- "2406": {
- "op": "box_replace",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2407": {
- "op": "pushint 48"
- },
- "2409": {
- "op": "swap",
- "defined_out": [
- "48",
- "accrued_interest#0",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#2",
- "sender_holding_address#0",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#2",
- "48",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2410": {
- "op": "box_replace",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2411": {
- "block": "asset_transfer_after_if_else@16",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ],
- "op": "dig 5",
- "defined_out": [
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2413": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "2414": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%24#0",
- "aggregate%box_get%25#0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%24#0",
- "aggregate%box_get%25#0"
- ]
- },
- "2415": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%24#0"
- ]
- },
- "2416": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%24#0",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%24#0",
- "32"
- ]
- },
- "2417": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#3",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "values%0#0"
- ]
- },
- "2418": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#3",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "values%0#0",
- "units#0"
- ]
- },
- "2420": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "units#0",
- "units#0 (copy)",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "values%0#0",
- "units#0 (copy)",
- "units#0 (copy)"
- ]
- },
- "2421": {
- "op": "cover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "values%0#0",
- "units#0 (copy)"
- ]
- },
- "2423": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#3",
- "tmp%0#6",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "tmp%0#6"
- ]
- },
- "2424": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%2#0",
- "box_prefixed_key%0#3",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "units#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2425": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "units#0",
- "aggregate%val_as_bytes%2#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2427": {
- "op": "intc_2 // 32",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "units#0",
- "aggregate%val_as_bytes%2#0",
- "box_prefixed_key%0#3",
- "32"
- ]
- },
- "2428": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "units#0",
- "box_prefixed_key%0#3",
- "32",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2430": {
- "op": "box_replace",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "units#0"
- ]
- },
- "2431": {
- "op": "dig 4",
- "defined_out": [
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "units#0",
- "sender_unit_value#0"
- ]
- },
- "2433": {
- "op": "*",
- "defined_out": [
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%1#1"
- ]
- },
- "2434": {
- "op": "dig 5",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%1#1",
- "accrued_interest#0"
- ]
- },
- "2436": {
- "op": "+",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "tmp%2#1",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%2#1"
- ]
- },
- "2437": {
- "op": "itob",
- "defined_out": [
- "accrued_interest#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "2438": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "accrued_interest#0",
- "aggregate%val_as_bytes%3#0",
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%3#0",
- "0x151f7c75"
- ]
- },
- "2439": {
- "op": "swap",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "0x151f7c75",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "2440": {
- "op": "concat",
- "defined_out": [
- "accrued_interest#0",
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "tmp%8#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "tmp%8#0"
- ]
- },
- "2441": {
- "op": "log",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2442": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "accrued_interest#0",
- "box_prefixed_key%0#3",
- "sender_unit_value#0",
- "units#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "1"
- ]
- },
- "2443": {
- "op": "return",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2444": {
- "block": "asset_transfer_bool_false@20",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "2445": {
- "op": "b asset_transfer_bool_merge@21"
- },
- "2448": {
- "block": "asset_transfer_else_body@9",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ],
- "op": "dig 5",
- "defined_out": [
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2450": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ]
- },
- "2451": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)",
- "40"
- ]
- },
- "2453": {
- "op": "dig 10",
- "defined_out": [
- "40",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#3 (copy)",
- "40",
- "aggregate%extract%1#0"
- ]
- },
- "2455": {
- "op": "box_replace",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3"
- ]
- },
- "2456": {
- "op": "dig 7",
- "defined_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "box_prefixed_key%0#2"
- ]
- },
- "2458": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%14#0",
- "aggregate%box_get%15#0",
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%14#0",
- "aggregate%box_get%15#0"
- ]
- },
- "2459": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%box_get%14#0"
- ]
- },
- "2460": {
- "op": "extract 48 8",
- "defined_out": [
- "aggregate%extract%1#0",
- "aggregate%extract%7#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "aggregate%extract%7#0"
- ]
- },
- "2463": {
- "op": "pushint 48"
- },
- "2465": {
- "op": "swap",
- "defined_out": [
- "48",
- "aggregate%extract%1#0",
- "aggregate%extract%7#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "box_prefixed_key%0#3",
- "48",
- "aggregate%extract%7#0"
- ]
- },
- "2466": {
- "op": "box_replace",
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ]
- },
- "2467": {
- "op": "b asset_transfer_after_if_else@10"
- },
- "2470": {
- "block": "asset_transfer_bool_false@6",
- "stack_in": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "aggregate%extract%1#0",
- "box_prefixed_key%0#2",
- "box_prefixed_key%0#3",
- "accrued_interest#0",
- "sender_unit_value#0",
- "sender_holding_address#0",
- "receiver_holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "2471": {
- "op": "b asset_transfer_bool_merge@7"
- },
- "2474": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.asset_create[routing]",
- "params": {},
- "block": "asset_create",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "arranger#0"
- ],
- "stack_out": [
- "arranger#0"
- ]
- },
- "2477": {
- "op": "dup",
- "defined_out": [
- "arranger#0",
- "arranger#0 (copy)"
- ],
- "stack_out": [
- "arranger#0",
- "arranger#0 (copy)"
- ]
- },
- "2478": {
- "op": "len",
- "defined_out": [
- "arranger#0",
- "len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "len%0#0"
- ]
- },
- "2479": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "arranger#0",
- "len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "len%0#0",
- "32"
- ]
- },
- "2480": {
- "op": "==",
- "defined_out": [
- "arranger#0",
- "eq%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "eq%0#0"
- ]
- },
- "2481": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "arranger#0"
- ]
- },
- "2482": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "arranger#0",
- "metadata#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0"
- ]
- },
- "2485": {
- "op": "dup",
- "defined_out": [
- "arranger#0",
- "metadata#0",
- "metadata#0 (copy)"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "metadata#0 (copy)"
- ]
- },
- "2486": {
- "op": "len",
- "defined_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0"
- ]
- },
- "2487": {
- "op": "dig 1",
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)"
- ]
- },
- "2489": {
- "op": "pushint 38",
- "defined_out": [
- "38",
- "arranger#0",
- "metadata#0",
- "metadata#0 (copy)",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)",
- "38"
- ]
- },
- "2491": {
- "error": "invalid tuple encoding",
- "op": "extract_uint16 // on error: invalid tuple encoding",
- "defined_out": [
- "arranger#0",
- "extract_uint16%0#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0"
- ]
- },
- "2492": {
- "op": "dup",
- "defined_out": [
- "arranger#0",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)"
- ]
- },
- "2493": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "arranger#0",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)",
- "40"
- ]
- },
- "2495": {
- "op": "==",
- "defined_out": [
- "arranger#0",
- "eq%1#0",
- "extract_uint16%0#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "eq%1#0"
- ]
- },
- "2496": {
- "error": "invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))",
- "op": "assert // invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))",
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0"
- ]
- },
- "2497": {
- "op": "dig 2",
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "metadata#0 (copy)"
- ]
- },
- "2499": {
- "op": "swap",
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)",
- "extract_uint16%0#0"
- ]
- },
- "2500": {
- "op": "dig 2",
- "defined_out": [
- "arranger#0",
- "extract_uint16%0#0",
- "metadata#0",
- "metadata#0 (copy)",
- "tuple_len%0#0",
- "tuple_len%0#0 (copy)"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)",
- "extract_uint16%0#0",
- "tuple_len%0#0 (copy)"
- ]
- },
- "2502": {
- "op": "substring3",
- "defined_out": [
- "arranger#0",
- "metadata#0",
- "substring3%0#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "substring3%0#0"
- ]
- },
- "2503": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "arranger#0",
- "metadata#0",
- "substring3%0#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "substring3%0#0",
- "0"
- ]
- },
- "2504": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "aggregate%array_length%0#0"
- ]
- },
- "2505": {
- "op": "pushint 42",
- "defined_out": [
- "42",
- "aggregate%array_length%0#0",
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "aggregate%array_length%0#0",
- "42"
- ]
- },
- "2507": {
- "op": "+",
- "defined_out": [
- "add%1#0",
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "tuple_len%0#0",
- "add%1#0"
- ]
- },
- "2508": {
- "op": "==",
- "defined_out": [
- "arranger#0",
- "eq%2#0",
- "metadata#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "eq%2#0"
- ]
- },
- "2509": {
- "error": "invalid number of bytes for smart_contracts.abi_types.AssetMetadata",
- "op": "assert // invalid number of bytes for smart_contracts.abi_types.AssetMetadata",
- "stack_out": [
- "arranger#0",
- "metadata#0"
- ]
- },
- "2510": {
- "op": "bytec 8 // 0x52323023",
- "defined_out": [
- "0x52323023",
- "arranger#0",
- "metadata#0"
- ],
- "stack_out": [
- "arranger#0",
- "metadata#0",
- "0x52323023"
- ]
- },
- "2512": {
- "op": "uncover 2",
- "stack_out": [
- "metadata#0",
- "0x52323023",
- "arranger#0"
- ]
- },
- "2514": {
- "op": "app_global_put",
- "stack_out": [
- "metadata#0"
- ]
- },
- "2515": {
- "op": "bytec 25 // \"metadata\"",
- "defined_out": [
- "\"metadata\"",
- "metadata#0"
- ],
- "stack_out": [
- "metadata#0",
- "\"metadata\""
- ]
- },
- "2517": {
- "op": "swap",
- "stack_out": [
- "\"metadata\"",
- "metadata#0"
- ]
- },
- "2518": {
- "op": "app_global_put",
- "stack_out": []
- },
- "2519": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "2520": {
- "op": "return",
- "stack_out": []
- },
- "2521": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.asset_update[routing]",
- "params": {},
- "block": "asset_update",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "metadata#0"
- ],
- "stack_out": [
- "metadata#0"
- ]
- },
- "2524": {
- "op": "dup",
- "defined_out": [
- "metadata#0",
- "metadata#0 (copy)"
- ],
- "stack_out": [
- "metadata#0",
- "metadata#0 (copy)"
- ]
- },
- "2525": {
- "op": "len",
- "defined_out": [
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0"
- ]
- },
- "2526": {
- "op": "dig 1",
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)"
- ]
- },
- "2528": {
- "op": "pushint 38",
- "defined_out": [
- "38",
- "metadata#0",
- "metadata#0 (copy)",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)",
- "38"
- ]
- },
- "2530": {
- "error": "invalid tuple encoding",
- "op": "extract_uint16 // on error: invalid tuple encoding",
- "defined_out": [
- "extract_uint16%0#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0"
- ]
- },
- "2531": {
- "op": "dup",
- "defined_out": [
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)"
- ]
- },
- "2532": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "extract_uint16%0#0 (copy)",
- "40"
- ]
- },
- "2534": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "extract_uint16%0#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "eq%0#0"
- ]
- },
- "2535": {
- "error": "invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))",
- "op": "assert // invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))",
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0"
- ]
- },
- "2536": {
- "op": "dig 2",
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "extract_uint16%0#0",
- "metadata#0 (copy)"
- ]
- },
- "2538": {
- "op": "swap",
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)",
- "extract_uint16%0#0"
- ]
- },
- "2539": {
- "op": "dig 2",
- "defined_out": [
- "extract_uint16%0#0",
- "metadata#0",
- "metadata#0 (copy)",
- "tuple_len%0#0",
- "tuple_len%0#0 (copy)"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "metadata#0 (copy)",
- "extract_uint16%0#0",
- "tuple_len%0#0 (copy)"
- ]
- },
- "2541": {
- "op": "substring3",
- "defined_out": [
- "metadata#0",
- "substring3%0#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "substring3%0#0"
- ]
- },
- "2542": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "metadata#0",
- "substring3%0#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "substring3%0#0",
- "0"
- ]
- },
- "2543": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "aggregate%array_length%0#0"
- ]
- },
- "2544": {
- "op": "pushint 42",
- "defined_out": [
- "42",
- "aggregate%array_length%0#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "aggregate%array_length%0#0",
- "42"
- ]
- },
- "2546": {
- "op": "+",
- "defined_out": [
- "add%1#0",
- "metadata#0",
- "tuple_len%0#0"
- ],
- "stack_out": [
- "metadata#0",
- "tuple_len%0#0",
- "add%1#0"
- ]
- },
- "2547": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "metadata#0"
- ],
- "stack_out": [
- "metadata#0",
- "eq%1#0"
- ]
- },
- "2548": {
- "error": "invalid number of bytes for smart_contracts.abi_types.AssetMetadata",
- "op": "assert // invalid number of bytes for smart_contracts.abi_types.AssetMetadata",
- "stack_out": [
- "metadata#0"
- ]
- },
- "2549": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "2552": {
- "op": "bytec 25 // \"metadata\"",
- "defined_out": [
- "\"metadata\"",
- "metadata#0"
- ],
- "stack_out": [
- "metadata#0",
- "\"metadata\""
- ]
- },
- "2554": {
- "op": "swap",
- "stack_out": [
- "\"metadata\"",
- "metadata#0"
- ]
- },
- "2555": {
- "op": "app_global_put",
- "stack_out": []
- },
- "2556": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "2557": {
- "op": "return",
- "stack_out": []
- },
- "2558": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.set_secondary_time_events[routing]",
- "params": {},
- "block": "set_secondary_time_events",
- "stack_in": [],
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0"
- ]
- },
- "2559": {
- "op": "txna ApplicationArgs 1"
- },
- "2562": {
- "op": "dupn 2",
- "defined_out": [
- "secondary_market_time_events#0",
- "secondary_market_time_events#0 (copy)"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0 (copy)"
- ]
- },
- "2564": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0 (copy)",
- "0"
- ]
- },
- "2565": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0"
- ]
- },
- "2566": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)"
- ]
- },
- "2567": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)",
- "8"
- ]
- },
- "2568": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "mul%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "mul%0#0"
- ]
- },
- "2569": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "mul%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "mul%0#0",
- "2"
- ]
- },
- "2571": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "aggregate%array_length%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "add%0#0"
- ]
- },
- "2572": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "add%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2574": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "aggregate%array_length%0#0",
- "len%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "add%0#0",
- "len%0#0"
- ]
- },
- "2575": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "eq%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "eq%0#0"
- ]
- },
- "2576": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0"
- ]
- },
- "2577": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "2580": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "0"
- ]
- },
- "2581": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "aggregate%array_length%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "0",
- "\"status\""
- ]
- },
- "2582": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%array_length%0#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2583": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "maybe_value%0#0"
- ]
- },
- "2584": {
- "op": "intc 5 // 200",
- "defined_out": [
- "200",
- "aggregate%array_length%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "maybe_value%0#0",
- "200"
- ]
- },
- "2586": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "secondary_market_time_events#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "tmp%0#2"
- ]
- },
- "2587": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "secondary_market_time_events#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "tmp%1#1"
- ]
- },
- "2588": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0"
- ]
- },
- "2589": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "2592": {
- "op": "dup",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)"
- ]
- },
- "2593": {
- "error": "Time events length is invalid",
- "op": "assert // Time events length is invalid",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0"
- ]
- },
- "2594": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "aggregate%array_length%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_length%0#0",
- "1"
- ]
- },
- "2595": {
- "op": ">",
- "defined_out": [
- "secondary_market_time_events#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "tmp%5#0"
- ]
- },
- "2596": {
- "op": "bz set_secondary_time_events_after_if_else@3",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2599": {
- "op": "dup",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0"
- ]
- },
- "2600": {
- "callsub": "modules.core_financial.common.CoreFinancialCommonMixin.assert_time_events_sorted",
- "op": "callsub assert_time_events_sorted"
- },
- "2603": {
- "op": "bury 1",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2605": {
- "block": "set_secondary_time_events_after_if_else@3",
- "stack_in": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0"
- ]
- },
- "2606": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0",
- "\"issuance_date\""
- ]
- },
- "2608": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2609": {
- "error": "check self.issuance_date exists",
- "op": "assert // check self.issuance_date exists",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0"
- ]
- },
- "2610": {
- "op": "dig 1",
- "defined_out": [
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2612": {
- "op": "dup",
- "defined_out": [
- "maybe_value%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0 (copy)"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0",
- "secondary_market_time_events#0 (copy)"
- ]
- },
- "2613": {
- "op": "extract 2 0",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "2616": {
- "op": "bury 4",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2618": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_trimmed%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0",
- "2"
- ]
- },
- "2620": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%0#0",
- "values%0#0"
- ]
- },
- "2621": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%0#0",
- "maybe_value%0#0"
- ]
- },
- "2622": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%0#0",
- "secondary_market_time_events#0",
- "values%0#0",
- "values%0#0 (copy)"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%0#0",
- "maybe_value%0#0",
- "values%0#0 (copy)"
- ]
- },
- "2624": {
- "op": "<=",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "tmp%6#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%0#0",
- "tmp%6#0"
- ]
- },
- "2625": {
- "error": "Invalid secondary market opening date",
- "op": "assert // Invalid secondary market opening date",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%0#0"
- ]
- },
- "2626": {
- "op": "bytec 18 // \"secondary_market_opening_date\"",
- "defined_out": [
- "\"secondary_market_opening_date\"",
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%0#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%0#0",
- "\"secondary_market_opening_date\""
- ]
- },
- "2628": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "\"secondary_market_opening_date\"",
- "values%0#0"
- ]
- },
- "2629": {
- "op": "app_global_put",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2630": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0"
- ]
- },
- "2631": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "0",
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0",
- "\"maturity_date\""
- ]
- },
- "2633": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "2634": {
- "error": "check self.maturity_date exists",
- "op": "assert // check self.maturity_date exists",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%1#0"
- ]
- },
- "2635": {
- "op": "bz set_secondary_time_events_after_if_else@5",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2638": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0"
- ]
- },
- "2639": {
- "op": "bytec 5 // \"maturity_date\"",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0",
- "\"maturity_date\""
- ]
- },
- "2641": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_exists%2#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "maybe_exists%2#0"
- ]
- },
- "2642": {
- "error": "check self.maturity_date exists",
- "op": "assert // check self.maturity_date exists",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0"
- ]
- },
- "2643": {
- "op": "dig 1",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0"
- ]
- },
- "2645": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0",
- "0"
- ]
- },
- "2646": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%3#0",
- "aggregate%array_trimmed%0#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "aggregate%array_length%3#0"
- ]
- },
- "2647": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "aggregate%array_length%3#0",
- "aggregate%array_trimmed%0#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "aggregate%array_length%3#0",
- "1"
- ]
- },
- "2648": {
- "op": "-",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0",
- "tmp%9#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "tmp%9#0"
- ]
- },
- "2649": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "aggregate%array_trimmed%0#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0",
- "tmp%9#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "tmp%9#0",
- "8"
- ]
- },
- "2650": {
- "op": "*",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%1#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "aggregate%bytes_offset%1#0"
- ]
- },
- "2651": {
- "op": "dig 3",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "aggregate%bytes_offset%1#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "2653": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%1#0"
- ]
- },
- "2654": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0",
- "values%2#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%2#0",
- "values%2#0"
- ]
- },
- "2655": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%2#0",
- "maybe_value%2#0"
- ]
- },
- "2656": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "maybe_value%2#0",
- "secondary_market_time_events#0",
- "values%2#0",
- "values%2#0 (copy)"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%2#0",
- "maybe_value%2#0",
- "values%2#0 (copy)"
- ]
- },
- "2658": {
- "op": ">=",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "tmp%10#0",
- "values%2#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%2#0",
- "tmp%10#0"
- ]
- },
- "2659": {
- "error": "Invalid secondary market closure date",
- "op": "assert // Invalid secondary market closure date",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%2#0"
- ]
- },
- "2660": {
- "op": "bytec 11 // \"secondary_market_closure_date\"",
- "defined_out": [
- "\"secondary_market_closure_date\"",
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%2#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "values%2#0",
- "\"secondary_market_closure_date\""
- ]
- },
- "2662": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "\"secondary_market_closure_date\"",
- "values%2#0"
- ]
- },
- "2663": {
- "op": "app_global_put",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2664": {
- "block": "set_secondary_time_events_after_if_else@5",
- "stack_in": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0"
- ]
- },
- "2665": {
- "op": "bytec 18 // \"secondary_market_opening_date\"",
- "defined_out": [
- "\"secondary_market_opening_date\"",
- "0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0",
- "\"secondary_market_opening_date\""
- ]
- },
- "2667": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%3#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%3#0",
- "maybe_exists%3#0"
- ]
- },
- "2668": {
- "error": "check self.secondary_market_opening_date exists",
- "op": "assert // check self.secondary_market_opening_date exists",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%3#0"
- ]
- },
- "2669": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%3#0",
- "0"
- ]
- },
- "2670": {
- "op": "bytec 11 // \"secondary_market_closure_date\"",
- "defined_out": [
- "\"secondary_market_closure_date\"",
- "0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%3#0",
- "0",
- "\"secondary_market_closure_date\""
- ]
- },
- "2672": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%4#0",
- "maybe_value%3#0",
- "maybe_value%4#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%3#0",
- "maybe_value%4#0",
- "maybe_exists%4#0"
- ]
- },
- "2673": {
- "error": "check self.secondary_market_closure_date exists",
- "op": "assert // check self.secondary_market_closure_date exists",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%3#0",
- "maybe_value%4#0"
- ]
- },
- "2674": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%4#0",
- "maybe_value%3#0"
- ]
- },
- "2675": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "maybe_value%4#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "maybe_value%4#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2676": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%4#0"
- ]
- },
- "2677": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2678": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%head%1#0"
- ]
- },
- "2679": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "aggregate%head%1#0",
- "0x151f7c75"
- ]
- },
- "2680": {
- "op": "swap",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "0x151f7c75",
- "aggregate%head%1#0"
- ]
- },
- "2681": {
- "op": "concat",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "tmp%2#0"
- ]
- },
- "2682": {
- "op": "log",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2683": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0",
- "1"
- ]
- },
- "2684": {
- "op": "return",
- "stack_out": [
- "aggregate%array_trimmed%0#0",
- "secondary_market_time_events#0"
- ]
- },
- "2685": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.set_default_status[routing]",
- "params": {},
- "block": "set_default_status",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "2688": {
- "op": "dup",
- "defined_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ],
- "stack_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ]
- },
- "2689": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "len%0#0"
- ]
- },
- "2690": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "len%0#0",
- "1"
- ]
- },
- "2691": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "eq%0#0"
- ]
- },
- "2692": {
- "error": "invalid number of bytes for arc4.bool",
- "op": "assert // invalid number of bytes for arc4.bool",
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "2693": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "0"
- ]
- },
- "2694": {
- "op": "getbit",
- "defined_out": [
- "defaulted#0"
- ],
- "stack_out": [
- "defaulted#0"
- ]
- },
- "2695": {
- "op": "bytec 20 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "defaulted#0"
- ],
- "stack_out": [
- "defaulted#0",
- "0x52363023"
- ]
- },
- "2697": {
- "op": "txn Sender",
- "defined_out": [
- "0x52363023",
- "defaulted#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "defaulted#0",
- "0x52363023",
- "tmp%0#2"
- ]
- },
- "2699": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "defaulted#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "defaulted#0",
- "tmp%1#0"
- ]
- },
- "2702": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "defaulted#0"
- ]
- },
- "2703": {
- "op": "bytec 24 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\"",
- "defaulted#0"
- ],
- "stack_out": [
- "defaulted#0",
- "\"asset_defaulted\""
- ]
- },
- "2705": {
- "op": "swap",
- "stack_out": [
- "\"asset_defaulted\"",
- "defaulted#0"
- ]
- },
- "2706": {
- "op": "app_global_put",
- "stack_out": []
- },
- "2707": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "2709": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2710": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "2711": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2712": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "2713": {
- "op": "log",
- "stack_out": []
- },
- "2714": {
- "op": "intc_1 // 1",
- "stack_out": [
- "1"
- ]
- },
- "2715": {
- "op": "return",
- "stack_out": []
- },
- "2716": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.primary_distribution[routing]",
- "params": {},
- "block": "primary_distribution",
- "stack_in": [],
- "op": "pushbytes \"\"",
- "stack_out": [
- "awst_tmp%0#0"
- ]
- },
- "2718": {
- "op": "txna ApplicationArgs 1"
- },
- "2721": {
- "op": "dup",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "holding_address#0"
- ]
- },
- "2722": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "len%0#0"
- ]
- },
- "2723": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "2724": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "2725": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0"
- ]
- },
- "2726": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "2729": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "2730": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "2731": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "8"
- ]
- },
- "2732": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "2733": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "2734": {
- "op": "btoi",
- "defined_out": [
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2735": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2736": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0",
- "\"status\""
- ]
- },
- "2737": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2738": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "2739": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "holding_address#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "2741": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "tmp%0#4",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%0#4"
- ]
- },
- "2742": {
- "op": "bz primary_distribution_bool_false@5",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2745": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2746": {
- "op": "bytec 10 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\"",
- "0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "2748": {
- "op": "app_global_get_ex",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2749": {
- "error": "check self.primary_distribution_opening_date exists",
- "op": "assert // check self.primary_distribution_opening_date exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "2750": {
- "op": "global LatestTimestamp"
- },
- "2752": {
- "op": "dup",
- "defined_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "awst_tmp%0#0",
- "awst_tmp%0#0"
- ]
- },
- "2753": {
- "op": "bury 5",
- "defined_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "awst_tmp%0#0"
- ]
- },
- "2755": {
- "op": "<=",
- "defined_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%1#2",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#2"
- ]
- },
- "2756": {
- "op": "bz primary_distribution_bool_false@5",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2759": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0"
- ]
- },
- "2760": {
- "op": "bytec 27 // \"primary_distribution_closure_date\"",
- "defined_out": [
- "\"primary_distribution_closure_date\"",
- "0",
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0",
- "\"primary_distribution_closure_date\""
- ]
- },
- "2762": {
- "op": "app_global_get_ex",
- "defined_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "2763": {
- "error": "check self.primary_distribution_closure_date exists",
- "op": "assert // check self.primary_distribution_closure_date exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%1#0"
- ]
- },
- "2764": {
- "op": "dig 3",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%1#0",
- "awst_tmp%0#0"
- ]
- },
- "2766": {
- "op": ">",
- "defined_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "tmp%2#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%2#1"
- ]
- },
- "2767": {
- "op": "bz primary_distribution_bool_false@5",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2770": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0",
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "2771": {
- "error": "Primary distribution is closed",
- "block": "primary_distribution_bool_merge@6",
- "stack_in": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ],
- "op": "assert // Primary distribution is closed",
- "defined_out": [],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2772": {
- "op": "bytec 21 // 0x52353023",
- "defined_out": [
- "0x52353023"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0x52353023"
- ]
- },
- "2774": {
- "op": "txn Sender",
- "defined_out": [
- "0x52353023",
- "tmp%0#3"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0x52353023",
- "tmp%0#3"
- ]
- },
- "2776": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "tmp%1#2"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#2"
- ]
- },
- "2779": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2780": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0x52333023"
- ]
- },
- "2781": {
- "op": "dig 2",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "2783": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "2784": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "holding_address#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "2785": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2786": {
- "op": "bury 1",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "2788": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "2789": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "2792": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "2795": {
- "op": "dig 1",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0"
- ]
- },
- "2797": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0",
- "units#0 (copy)"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "units#0 (copy)"
- ]
- },
- "2798": {
- "error": "Can not distribute zero units",
- "op": "assert // Can not distribute zero units",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0"
- ]
- },
- "2799": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "0"
- ]
- },
- "2800": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "2801": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2802": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "2803": {
- "op": "dig 1",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "maybe_value%0#0",
- "units#0 (copy)"
- ]
- },
- "2805": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1"
- ]
- },
- "2806": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "0"
- ]
- },
- "2807": {
- "op": "bytec 15 // \"total_units\"",
- "defined_out": [
- "\"total_units\"",
- "0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "0",
- "\"total_units\""
- ]
- },
- "2809": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "2810": {
- "error": "check self.total_units exists",
- "op": "assert // check self.total_units exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0"
- ]
- },
- "2811": {
- "op": "dig 1",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_value%1#0",
- "tmp%1#1",
- "tmp%1#1 (copy)",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0",
- "tmp%1#1 (copy)"
- ]
- },
- "2813": {
- "op": ">=",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "tmp%2#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "tmp%2#1"
- ]
- },
- "2814": {
- "error": "Insufficient remaining D-ASA units",
- "op": "assert // Insufficient remaining D-ASA units",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1"
- ]
- },
- "2815": {
- "op": "bytec_3 // \"circulating_units\"",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "\"circulating_units\""
- ]
- },
- "2816": {
- "op": "dig 1",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "\"circulating_units\"",
- "tmp%1#1 (copy)"
- ]
- },
- "2818": {
- "op": "app_global_put",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1"
- ]
- },
- "2819": {
- "op": "dig 2",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "2821": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "2822": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "aggregate%box_get%0#0"
- ]
- },
- "2823": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "2824": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "units#0",
- "tmp%1#1",
- "values%0#0"
- ]
- },
- "2825": {
- "op": "uncover 2",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "values%0#0",
- "units#0"
- ]
- },
- "2827": {
- "op": "+",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "tmp%4#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "tmp%4#1"
- ]
- },
- "2828": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2829": {
- "op": "dig 2",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "2831": {
- "op": "intc_2 // 32",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#1 (copy)",
- "32"
- ]
- },
- "2832": {
- "op": "uncover 2",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "box_prefixed_key%0#1 (copy)",
- "32",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2834": {
- "op": "box_replace",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1"
- ]
- },
- "2835": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "0"
- ]
- },
- "2836": {
- "op": "bytec 6 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\"",
- "0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "0",
- "\"unit_value\""
- ]
- },
- "2838": {
- "op": "app_global_get_ex",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%3#0",
- "maybe_value%3#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "maybe_value%3#0",
- "maybe_exists%3#0"
- ]
- },
- "2839": {
- "error": "check self.unit_value exists",
- "op": "assert // check self.unit_value exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "maybe_value%3#0"
- ]
- },
- "2840": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "tmp%1#1",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2841": {
- "op": "uncover 2",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#1"
- ]
- },
- "2843": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "aggregate%val_as_bytes%1#0",
- "box_prefixed_key%0#1",
- "40"
- ]
- },
- "2845": {
- "op": "uncover 2",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "box_prefixed_key%0#1",
- "40",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2847": {
- "op": "box_replace",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1"
- ]
- },
- "2848": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "0"
- ]
- },
- "2849": {
- "op": "bytec 15 // \"total_units\"",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "0",
- "\"total_units\""
- ]
- },
- "2851": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%4#0",
- "maybe_value%4#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "maybe_value%4#0",
- "maybe_exists%4#0"
- ]
- },
- "2852": {
- "error": "check self.total_units exists",
- "op": "assert // check self.total_units exists",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "maybe_value%4#0"
- ]
- },
- "2853": {
- "op": "swap",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "maybe_value%4#0",
- "tmp%1#1"
- ]
- },
- "2854": {
- "op": "-",
- "defined_out": [
- "holding_address#0",
- "tmp%5#1",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%5#1"
- ]
- },
- "2855": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%2#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2856": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%2#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%2#0",
- "0x151f7c75"
- ]
- },
- "2857": {
- "op": "swap",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "0x151f7c75",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2858": {
- "op": "concat",
- "defined_out": [
- "holding_address#0",
- "tmp%6#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "tmp%6#0"
- ]
- },
- "2859": {
- "op": "log",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2860": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "1"
- ]
- },
- "2861": {
- "op": "return",
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "2862": {
- "block": "primary_distribution_bool_false@5",
- "stack_in": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "2863": {
- "op": "b primary_distribution_bool_merge@6"
- },
- "2866": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.get_asset_info[routing]",
- "params": {},
- "block": "get_asset_info",
- "stack_in": [],
- "op": "intc_0 // 0"
- },
- "2867": {
- "op": "global LatestTimestamp"
- },
- "2869": {
- "op": "intc_0 // 0"
- },
- "2870": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "tmp%0#1",
- "0",
- "\"maturity_date\""
- ]
- },
- "2872": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "tmp%0#1",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2873": {
- "op": "swap",
- "stack_out": [
- "performance#0",
- "tmp%0#1",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ]
- },
- "2874": {
- "op": "dup",
- "stack_out": [
- "performance#0",
- "tmp%0#1",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "maybe_value%0#0 (copy)"
- ]
- },
- "2875": {
- "op": "cover 2",
- "stack_out": [
- "performance#0",
- "tmp%0#1",
- "maybe_value%0#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ]
- },
- "2877": {
- "op": "cover 3",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "tmp%0#1",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2879": {
- "error": "check self.maturity_date exists",
- "op": "assert // check self.maturity_date exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "tmp%0#1",
- "maybe_value%0#0"
- ]
- },
- "2880": {
- "op": ">",
- "defined_out": [
- "maybe_value%0#0",
- "performance#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "tmp%1#1"
- ]
- },
- "2881": {
- "op": "bz get_asset_info_after_if_else@4",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "2884": {
- "op": "dup",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0"
- ]
- },
- "2885": {
- "op": "bz get_asset_info_after_if_else@4",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "2888": {
- "op": "pushint 4",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "performance#0"
- ]
- },
- "2890": {
- "op": "bury 2",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "2892": {
- "block": "get_asset_info_after_if_else@4",
- "stack_in": [
- "performance#0",
- "maybe_value%0#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "0"
- ]
- },
- "2893": {
- "op": "bytec 24 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\"",
- "0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "0",
- "\"asset_defaulted\""
- ]
- },
- "2895": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "2896": {
- "error": "check self.asset_defaulted exists",
- "op": "assert // check self.asset_defaulted exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%1#0"
- ]
- },
- "2897": {
- "op": "bz get_asset_info_after_if_else@6",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "2900": {
- "op": "pushint 3",
- "defined_out": [
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "performance#0"
- ]
- },
- "2902": {
- "op": "bury 2",
- "defined_out": [
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "2904": {
- "block": "get_asset_info_after_if_else@6",
- "stack_in": [
- "performance#0",
- "maybe_value%0#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "0"
- ]
- },
- "2905": {
- "op": "bytec 16 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\"",
- "0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "0",
- "\"denomination_asset_id\""
- ]
- },
- "2907": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%2#0",
- "maybe_value%2#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_exists%2#0"
- ]
- },
- "2908": {
- "error": "check self.denomination_asset_id exists",
- "op": "assert // check self.denomination_asset_id exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0"
- ]
- },
- "2909": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "0"
- ]
- },
- "2910": {
- "op": "bytec 9 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\"",
- "0",
- "maybe_value%2#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "0",
- "\"settlement_asset_id\""
- ]
- },
- "2912": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%3#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_exists%3#0"
- ]
- },
- "2913": {
- "error": "check self.settlement_asset_id exists",
- "op": "assert // check self.settlement_asset_id exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ]
- },
- "2914": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "0"
- ]
- },
- "2915": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "2916": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "2917": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0"
- ]
- },
- "2918": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "0"
- ]
- },
- "2919": {
- "op": "bytec 6 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\"",
- "0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "0",
- "\"unit_value\""
- ]
- },
- "2921": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "2922": {
- "error": "check self.unit_value exists",
- "op": "assert // check self.unit_value exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0"
- ]
- },
- "2923": {
- "op": "dup2",
- "defined_out": [
- "maybe_value%0#0",
- "maybe_value%0#0 (copy)",
- "maybe_value%1#0",
- "maybe_value%1#0 (copy)",
- "maybe_value%2#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%0#0 (copy)",
- "maybe_value%1#0 (copy)"
- ]
- },
- "2924": {
- "op": "*",
- "defined_out": [
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1"
- ]
- },
- "2925": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "0"
- ]
- },
- "2926": {
- "op": "bytec 17 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\"",
- "0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "0",
- "\"day_count_convention\""
- ]
- },
- "2928": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%5#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%5#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "maybe_value%5#0",
- "maybe_exists%5#0"
- ]
- },
- "2929": {
- "error": "check self.day_count_convention exists",
- "op": "assert // check self.day_count_convention exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "maybe_value%5#0"
- ]
- },
- "2930": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2931": {
- "op": "dup",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%0#0 (copy)",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%0#0 (copy)"
- ]
- },
- "2932": {
- "op": "bitlen",
- "defined_out": [
- "aggregate%bitlen%0#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%val_as_bytes%0#0",
- "aggregate%bitlen%0#0"
- ]
- },
- "2933": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "aggregate%bitlen%0#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%val_as_bytes%0#0",
- "aggregate%bitlen%0#0",
- "8"
- ]
- },
- "2934": {
- "op": "<=",
- "defined_out": [
- "aggregate%no_overflow%0#0",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%val_as_bytes%0#0",
- "aggregate%no_overflow%0#0"
- ]
- },
- "2935": {
- "error": "overflow",
- "op": "assert // overflow",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "2936": {
- "op": "extract 7 1",
- "defined_out": [
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0"
- ]
- },
- "2939": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "0"
- ]
- },
- "2940": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\"",
- "0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "0",
- "\"principal_discount\""
- ]
- },
- "2942": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint8%0#0",
- "maybe_exists%6#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%6#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "maybe_value%6#0",
- "maybe_exists%6#0"
- ]
- },
- "2943": {
- "error": "check self.principal_discount exists",
- "op": "assert // check self.principal_discount exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "maybe_value%6#0"
- ]
- },
- "2944": {
- "op": "itob",
- "defined_out": [
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2945": {
- "op": "dup",
- "defined_out": [
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "aggregate%val_as_bytes%1#0 (copy)",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "aggregate%val_as_bytes%1#0 (copy)"
- ]
- },
- "2946": {
- "op": "bitlen",
- "defined_out": [
- "aggregate%bitlen%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "aggregate%bitlen%1#0"
- ]
- },
- "2947": {
- "op": "pushint 16",
- "defined_out": [
- "16",
- "aggregate%bitlen%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "aggregate%bitlen%1#0",
- "16"
- ]
- },
- "2949": {
- "op": "<=",
- "defined_out": [
- "aggregate%no_overflow%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0",
- "aggregate%no_overflow%1#0"
- ]
- },
- "2950": {
- "error": "overflow",
- "op": "assert // overflow",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "2951": {
- "op": "extract 6 2",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0"
- ]
- },
- "2954": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "0"
- ]
- },
- "2955": {
- "op": "bytec 33 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "0",
- "\"interest_rate\""
- ]
- },
- "2957": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "maybe_exists%7#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%7#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "maybe_value%7#0",
- "maybe_exists%7#0"
- ]
- },
- "2958": {
- "error": "check self.interest_rate exists",
- "op": "assert // check self.interest_rate exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "maybe_value%7#0"
- ]
- },
- "2959": {
- "op": "itob",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%2#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2960": {
- "op": "dup",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%2#0 (copy)",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%2#0 (copy)"
- ]
- },
- "2961": {
- "op": "bitlen",
- "defined_out": [
- "aggregate%bitlen%2#0",
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%2#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%bitlen%2#0"
- ]
- },
- "2962": {
- "op": "pushint 16",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%bitlen%2#0",
- "16"
- ]
- },
- "2964": {
- "op": "<=",
- "defined_out": [
- "aggregate%no_overflow%2#0",
- "aggregate%uint16%0#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%2#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%no_overflow%2#0"
- ]
- },
- "2965": {
- "error": "overflow",
- "op": "assert // overflow",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "2966": {
- "op": "extract 6 2",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0"
- ]
- },
- "2969": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "0"
- ]
- },
- "2970": {
- "op": "bytec 15 // \"total_units\"",
- "defined_out": [
- "\"total_units\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "0",
- "\"total_units\""
- ]
- },
- "2972": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_exists%8#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_exists%8#0"
- ]
- },
- "2973": {
- "error": "check self.total_units exists",
- "op": "assert // check self.total_units exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0"
- ]
- },
- "2974": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "0"
- ]
- },
- "2975": {
- "op": "bytec 10 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "2977": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_exists%10#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_exists%10#0"
- ]
- },
- "2978": {
- "error": "check self.primary_distribution_opening_date exists",
- "op": "assert // check self.primary_distribution_opening_date exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0"
- ]
- },
- "2979": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "0"
- ]
- },
- "2980": {
- "op": "bytec 27 // \"primary_distribution_closure_date\"",
- "defined_out": [
- "\"primary_distribution_closure_date\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "0",
- "\"primary_distribution_closure_date\""
- ]
- },
- "2982": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_exists%11#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_exists%11#0"
- ]
- },
- "2983": {
- "error": "check self.primary_distribution_closure_date exists",
- "op": "assert // check self.primary_distribution_closure_date exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0"
- ]
- },
- "2984": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "0"
- ]
- },
- "2985": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "0",
- "\"issuance_date\""
- ]
- },
- "2987": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_exists%12#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_exists%12#0"
- ]
- },
- "2988": {
- "error": "check self.issuance_date exists",
- "op": "assert // check self.issuance_date exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0"
- ]
- },
- "2989": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "0"
- ]
- },
- "2990": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "0",
- "\"maturity_date\""
- ]
- },
- "2992": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_exists%13#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_exists%13#0"
- ]
- },
- "2993": {
- "error": "check self.maturity_date exists",
- "op": "assert // check self.maturity_date exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0"
- ]
- },
- "2994": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "0"
- ]
- },
- "2995": {
- "op": "bytec 23 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\"",
- "0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "0",
- "\"asset_suspended\""
- ]
- },
- "2997": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_exists%14#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_exists%14#0"
- ]
- },
- "2998": {
- "error": "check self.asset_suspended exists",
- "op": "assert // check self.asset_suspended exists",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0"
- ]
- },
- "2999": {
- "op": "dig 15",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ]
- },
- "3001": {
- "op": "itob",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "3002": {
- "op": "dup",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%3#0 (copy)",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%val_as_bytes%3#0 (copy)"
- ]
- },
- "3003": {
- "op": "bitlen",
- "defined_out": [
- "aggregate%bitlen%3#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%bitlen%3#0"
- ]
- },
- "3004": {
- "op": "intc_3 // 8",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%bitlen%3#0",
- "8"
- ]
- },
- "3005": {
- "op": "<=",
- "defined_out": [
- "aggregate%no_overflow%3#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%val_as_bytes%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%val_as_bytes%3#0",
- "aggregate%no_overflow%3#0"
- ]
- },
- "3006": {
- "error": "overflow",
- "op": "assert // overflow",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "3007": {
- "op": "extract 7 1",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%2#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0"
- ]
- },
- "3010": {
- "op": "uncover 14",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "maybe_value%2#0"
- ]
- },
- "3012": {
- "op": "itob",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%4#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%3#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%3#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%4#0"
- ]
- },
- "3013": {
- "op": "uncover 14",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%4#0",
- "maybe_value%3#0"
- ]
- },
- "3015": {
- "op": "itob",
- "defined_out": [
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%4#0",
- "aggregate%val_as_bytes%5#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%4#0",
- "aggregate%val_as_bytes%5#0"
- ]
- },
- "3016": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "tmp%0#1",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%1#0"
- ]
- },
- "3017": {
- "op": "uncover 11",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%1#0",
- "tmp%0#1"
- ]
- },
- "3019": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%6#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%6#0"
- ]
- },
- "3020": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%2#0"
- ]
- },
- "3021": {
- "op": "uncover 11",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%2#0",
- "maybe_value%1#0"
- ]
- },
- "3023": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%7#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%7#0"
- ]
- },
- "3024": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%3#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%0#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint8%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%3#0"
- ]
- },
- "3025": {
- "op": "uncover 10",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%3#0",
- "aggregate%uint8%0#0"
- ]
- },
- "3027": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%4#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint16%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%4#0"
- ]
- },
- "3028": {
- "op": "uncover 9",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%4#0",
- "aggregate%uint16%0#0"
- ]
- },
- "3030": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%5#0",
- "aggregate%uint16%1#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "aggregate%uint16%1#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%5#0"
- ]
- },
- "3031": {
- "op": "uncover 8",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%5#0",
- "aggregate%uint16%1#0"
- ]
- },
- "3033": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%6#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "maybe_value%8#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%8#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%6#0"
- ]
- },
- "3034": {
- "op": "uncover 7",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%6#0",
- "maybe_value%8#0"
- ]
- },
- "3036": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%6#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%8#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%6#0",
- "aggregate%val_as_bytes%8#0"
- ]
- },
- "3037": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%7#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%7#0"
- ]
- },
- "3038": {
- "op": "uncover 7",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%7#0",
- "maybe_value%0#0"
- ]
- },
- "3040": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%7#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%9#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%7#0",
- "aggregate%val_as_bytes%9#0"
- ]
- },
- "3041": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%8#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%10#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%8#0"
- ]
- },
- "3042": {
- "op": "uncover 6",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%8#0",
- "maybe_value%10#0"
- ]
- },
- "3044": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%8#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%10#0",
- "maybe_value%0#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%8#0",
- "aggregate%val_as_bytes%10#0"
- ]
- },
- "3045": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%9#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%11#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%9#0"
- ]
- },
- "3046": {
- "op": "uncover 5",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%9#0",
- "maybe_value%11#0"
- ]
- },
- "3048": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%9#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%11#0",
- "maybe_value%0#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%9#0",
- "aggregate%val_as_bytes%11#0"
- ]
- },
- "3049": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%10#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%12#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%10#0"
- ]
- },
- "3050": {
- "op": "uncover 4",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%10#0",
- "maybe_value%12#0"
- ]
- },
- "3052": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%10#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%12#0",
- "maybe_value%0#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%10#0",
- "aggregate%val_as_bytes%12#0"
- ]
- },
- "3053": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%11#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%13#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%11#0"
- ]
- },
- "3054": {
- "op": "uncover 3",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%11#0",
- "maybe_value%13#0"
- ]
- },
- "3056": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%11#0",
- "aggregate%uint8%1#0",
- "aggregate%val_as_bytes%13#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%11#0",
- "aggregate%val_as_bytes%13#0"
- ]
- },
- "3057": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%12#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%12#0"
- ]
- },
- "3058": {
- "op": "bytec 31 // 0x00",
- "defined_out": [
- "0x00",
- "aggregate%head%12#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%12#0",
- "0x00"
- ]
- },
- "3060": {
- "op": "intc_0 // 0",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "maybe_value%14#0",
- "aggregate%uint8%1#0",
- "aggregate%head%12#0",
- "0x00",
- "0"
- ]
- },
- "3061": {
- "op": "uncover 4",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "aggregate%uint8%1#0",
- "aggregate%head%12#0",
- "0x00",
- "0",
- "maybe_value%14#0"
- ]
- },
- "3063": {
- "op": "setbit",
- "defined_out": [
- "aggregate%encoded_bool%0#0",
- "aggregate%head%12#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "aggregate%uint8%1#0",
- "aggregate%head%12#0",
- "aggregate%encoded_bool%0#0"
- ]
- },
- "3064": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%13#0",
- "aggregate%uint8%1#0",
- "maybe_value%0#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "aggregate%uint8%1#0",
- "aggregate%head%13#0"
- ]
- },
- "3065": {
- "op": "swap",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "aggregate%head%13#0",
- "aggregate%uint8%1#0"
- ]
- },
- "3066": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%14#0",
- "maybe_value%0#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "aggregate%head%14#0"
- ]
- },
- "3067": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%14#0",
- "maybe_value%0#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "aggregate%head%14#0",
- "0x151f7c75"
- ]
- },
- "3068": {
- "op": "swap",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "0x151f7c75",
- "aggregate%head%14#0"
- ]
- },
- "3069": {
- "op": "concat",
- "defined_out": [
- "maybe_value%0#0",
- "performance#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "tmp%1#0"
- ]
- },
- "3070": {
- "op": "log",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "3071": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "maybe_value%0#0",
- "performance#0"
- ],
- "stack_out": [
- "performance#0",
- "maybe_value%0#0",
- "1"
- ]
- },
- "3072": {
- "op": "return",
- "stack_out": [
- "performance#0",
- "maybe_value%0#0"
- ]
- },
- "3073": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.get_time_events[routing]",
- "params": {},
- "block": "get_time_events",
- "stack_in": [],
- "op": "bytec 30 // 0x0000"
- },
- "3075": {
- "op": "intc_0 // 0"
- },
- "3076": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "0",
- "\"status\""
- ]
- },
- "3077": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3078": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "time_events#0",
- "maybe_value%0#0"
- ]
- },
- "3079": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "maybe_value%0#0",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "3081": {
- "op": "==",
- "defined_out": [
- "time_events#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "time_events#0",
- "tmp%0#2"
- ]
- },
- "3082": {
- "op": "bz get_time_events_after_if_else@3",
- "stack_out": [
- "time_events#0"
- ]
- },
- "3085": {
- "op": "bytec 12 // 0x74696d654576656e7473",
- "defined_out": [
- "0x74696d654576656e7473",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "0x74696d654576656e7473"
- ]
- },
- "3087": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%1#0",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "time_events#0",
- "aggregate%box_get%1#0"
- ]
- },
- "3088": {
- "op": "swap",
- "stack_out": [
- "time_events#0",
- "aggregate%box_get%1#0",
- "time_events#0"
- ]
- },
- "3089": {
- "op": "bury 2",
- "stack_out": [
- "time_events#0",
- "aggregate%box_get%1#0"
- ]
- },
- "3091": {
- "error": "check self.time_events exists",
- "op": "assert // check self.time_events exists",
- "stack_out": [
- "time_events#0"
- ]
- },
- "3092": {
- "block": "get_time_events_after_if_else@3",
- "stack_in": [
- "time_events#0"
- ],
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75"
- ],
- "stack_out": [
- "time_events#0",
- "0x151f7c75"
- ]
- },
- "3093": {
- "op": "dig 1",
- "defined_out": [
- "0x151f7c75",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "0x151f7c75",
- "time_events#0"
- ]
- },
- "3095": {
- "op": "concat",
- "defined_out": [
- "time_events#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "time_events#0",
- "tmp%1#0"
- ]
- },
- "3096": {
- "op": "log",
- "stack_out": [
- "time_events#0"
- ]
- },
- "3097": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "time_events#0"
- ],
- "stack_out": [
- "time_events#0",
- "1"
- ]
- },
- "3098": {
- "op": "return",
- "stack_out": [
- "time_events#0"
- ]
- },
- "3099": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.get_secondary_market_schedule[routing]",
- "params": {},
- "block": "get_secondary_market_schedule",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "3100": {
- "op": "bytec 18 // \"secondary_market_opening_date\"",
- "defined_out": [
- "\"secondary_market_opening_date\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"secondary_market_opening_date\""
- ]
- },
- "3102": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3103": {
- "error": "check self.secondary_market_opening_date exists",
- "op": "assert // check self.secondary_market_opening_date exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "3104": {
- "op": "intc_0 // 0",
- "stack_out": [
- "maybe_value%0#0",
- "0"
- ]
- },
- "3105": {
- "op": "bytec 11 // \"secondary_market_closure_date\"",
- "defined_out": [
- "\"secondary_market_closure_date\"",
- "0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "0",
- "\"secondary_market_closure_date\""
- ]
- },
- "3107": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "3108": {
- "error": "check self.secondary_market_closure_date exists",
- "op": "assert // check self.secondary_market_closure_date exists",
- "stack_out": [
- "maybe_value%0#0",
- "maybe_value%1#0"
- ]
- },
- "3109": {
- "op": "swap",
- "stack_out": [
- "maybe_value%1#0",
- "maybe_value%0#0"
- ]
- },
- "3110": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "maybe_value%1#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3111": {
- "op": "pushbytes 0x0002",
- "defined_out": [
- "0x0002",
- "aggregate%val_as_bytes%0#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "maybe_value%1#0",
- "aggregate%val_as_bytes%0#0",
- "0x0002"
- ]
- },
- "3115": {
- "op": "swap",
- "stack_out": [
- "maybe_value%1#0",
- "0x0002",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3116": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%0#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "maybe_value%1#0",
- "aggregate%head%0#0"
- ]
- },
- "3117": {
- "op": "swap",
- "stack_out": [
- "aggregate%head%0#0",
- "maybe_value%1#0"
- ]
- },
- "3118": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%0#0",
- "aggregate%val_as_bytes%1#0"
- ],
- "stack_out": [
- "aggregate%head%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "3119": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%head%1#0"
- ]
- },
- "3120": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%head%1#0",
- "0x151f7c75"
- ]
- },
- "3121": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ]
- },
- "3122": {
- "op": "concat",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "3123": {
- "op": "log",
- "stack_out": []
- },
- "3124": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3125": {
- "op": "return",
- "stack_out": []
- },
- "3126": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.get_asset_metadata[routing]",
- "params": {},
- "block": "get_asset_metadata",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "3127": {
- "op": "bytec 25 // \"metadata\"",
- "defined_out": [
- "\"metadata\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"metadata\""
- ]
- },
- "3129": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3130": {
- "error": "check self.metadata exists",
- "op": "assert // check self.metadata exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "3131": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "0x151f7c75"
- ]
- },
- "3132": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "maybe_value%0#0"
- ]
- },
- "3133": {
- "op": "concat",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "3134": {
- "op": "log",
- "stack_out": []
- },
- "3135": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3136": {
- "op": "return",
- "stack_out": []
- },
- "3137": {
- "subroutine": "modules.accounting.AccountingModule.account_gov_suspension[routing]",
- "params": {},
- "block": "account_gov_suspension",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3140": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "3141": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "3142": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "3143": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "3144": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3145": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "3148": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "3149": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "3150": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "1"
- ]
- },
- "3151": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "3152": {
- "error": "invalid number of bytes for arc4.bool",
- "op": "assert // invalid number of bytes for arc4.bool",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "3153": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "0"
- ]
- },
- "3154": {
- "op": "getbit",
- "defined_out": [
- "holding_address#0",
- "suspended#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0"
- ]
- },
- "3155": {
- "op": "bytec 13 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "holding_address#0",
- "suspended#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "0x52373023"
- ]
- },
- "3157": {
- "op": "txn Sender",
- "defined_out": [
- "0x52373023",
- "holding_address#0",
- "suspended#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "0x52373023",
- "tmp%0#2"
- ]
- },
- "3159": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "holding_address#0",
- "suspended#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "tmp%1#0"
- ]
- },
- "3162": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "suspended#0"
- ]
- },
- "3163": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "suspended#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "0x52333023"
- ]
- },
- "3164": {
- "op": "uncover 2",
- "stack_out": [
- "suspended#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "3166": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3167": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3168": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3169": {
- "op": "bury 1",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3171": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3172": {
- "op": "dup",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3173": {
- "op": "pushint 56",
- "defined_out": [
- "56",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "56"
- ]
- },
- "3175": {
- "op": "intc_1 // 1",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "56",
- "1"
- ]
- },
- "3176": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%0#0",
- "box_prefixed_key%0#1",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box%box_extract%0#0"
- ]
- },
- "3177": {
- "op": "intc_0 // 0",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box%box_extract%0#0",
- "0"
- ]
- },
- "3178": {
- "op": "uncover 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "box%box_extract%0#0",
- "0",
- "suspended#0"
- ]
- },
- "3180": {
- "op": "setbit",
- "defined_out": [
- "aggregate%updated_target%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%updated_target%0#0"
- ]
- },
- "3181": {
- "op": "pushint 56"
- },
- "3183": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "56",
- "aggregate%updated_target%0#0"
- ]
- },
- "3184": {
- "op": "box_replace",
- "stack_out": []
- },
- "3185": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "3187": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3188": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3189": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3190": {
- "op": "concat",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "3191": {
- "op": "log",
- "stack_out": []
- },
- "3192": {
- "op": "intc_1 // 1",
- "stack_out": [
- "1"
- ]
- },
- "3193": {
- "op": "return",
- "stack_out": []
- },
- "3194": {
- "subroutine": "modules.accounting.AccountingModule.account_open[routing]",
- "params": {},
- "block": "account_open",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3197": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "3198": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "3199": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "3200": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "3201": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3202": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "3205": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "payment_address#0",
- "payment_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "payment_address#0 (copy)"
- ]
- },
- "3206": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "len%1#0"
- ]
- },
- "3207": {
- "op": "intc_2 // 32",
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "len%1#0",
- "32"
- ]
- },
- "3208": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "eq%1#0"
- ]
- },
- "3209": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "3210": {
- "op": "bytec 14 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0x52343023"
- ]
- },
- "3212": {
- "op": "txn Sender",
- "defined_out": [
- "0x52343023",
- "holding_address#0",
- "payment_address#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0x52343023",
- "tmp%0#2"
- ]
- },
- "3214": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%1#1"
- ]
- },
- "3217": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "3218": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0"
- ]
- },
- "3219": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0",
- "\"status\""
- ]
- },
- "3220": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3221": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "maybe_value%0#0"
- ]
- },
- "3222": {
- "op": "intc 5 // 200",
- "defined_out": [
- "200",
- "holding_address#0",
- "maybe_value%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "maybe_value%0#0",
- "200"
- ]
- },
- "3224": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%0#3"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%0#3"
- ]
- },
- "3225": {
- "op": "!",
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%1#1"
- ]
- },
- "3226": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "3227": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "3230": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "3233": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0x52333023"
- ]
- },
- "3234": {
- "op": "uncover 2",
- "stack_out": [
- "payment_address#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "3236": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0"
- ]
- },
- "3237": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)"
- ]
- },
- "3238": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3239": {
- "op": "bury 1",
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3241": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%0#0",
- "payment_address#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "tmp%2#1"
- ]
- },
- "3242": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0"
- ]
- },
- "3243": {
- "op": "intc_0 // 0",
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "0"
- ]
- },
- "3244": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3245": {
- "op": "uncover 2",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "payment_address#0"
- ]
- },
- "3247": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%0#0 (copy)",
- "box_prefixed_key%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "payment_address#0",
- "aggregate%val_as_bytes%0#0 (copy)"
- ]
- },
- "3249": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%head%1#0"
- ]
- },
- "3250": {
- "op": "dig 1",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%0#0 (copy)"
- ]
- },
- "3252": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%head%2#0"
- ]
- },
- "3253": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3254": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%3#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%3#0"
- ]
- },
- "3255": {
- "op": "bytec 31 // 0x00",
- "defined_out": [
- "0x00",
- "aggregate%head%3#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%3#0",
- "0x00"
- ]
- },
- "3257": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%4#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%4#0"
- ]
- },
- "3258": {
- "op": "box_put",
- "stack_out": []
- },
- "3259": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1"
- ]
- },
- "3261": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%3#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "3262": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%3#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%3#0",
- "0x151f7c75"
- ]
- },
- "3263": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "3264": {
- "op": "concat",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "3265": {
- "op": "log",
- "stack_out": []
- },
- "3266": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3267": {
- "op": "return",
- "stack_out": []
- },
- "3268": {
- "subroutine": "modules.accounting.AccountingModule.account_close[routing]",
- "params": {},
- "block": "account_close",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3271": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "3272": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "3273": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "3274": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "3275": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3276": {
- "op": "bytec 14 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52343023"
- ]
- },
- "3278": {
- "op": "txn Sender",
- "defined_out": [
- "0x52343023",
- "holding_address#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52343023",
- "tmp%0#2"
- ]
- },
- "3280": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "holding_address#0",
- "tmp%1#2"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%1#2"
- ]
- },
- "3283": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3284": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "3287": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52333023"
- ]
- },
- "3288": {
- "op": "swap",
- "stack_out": [
- "0x52333023",
- "holding_address#0"
- ]
- },
- "3289": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "3290": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3291": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3292": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3294": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "3295": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3296": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "3297": {
- "op": "pop",
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0"
- ]
- },
- "3298": {
- "op": "intc_2 // 32",
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "3299": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "closed_units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "closed_units#0"
- ]
- },
- "3300": {
- "op": "swap",
- "stack_out": [
- "closed_units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3301": {
- "op": "box_del",
- "defined_out": [
- "closed_units#0",
- "{box_del}"
- ],
- "stack_out": [
- "closed_units#0",
- "{box_del}"
- ]
- },
- "3302": {
- "op": "pop",
- "stack_out": [
- "closed_units#0"
- ]
- },
- "3303": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "0"
- ]
- },
- "3304": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "3305": {
- "op": "app_global_get_ex",
- "defined_out": [
- "closed_units#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "closed_units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3306": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "closed_units#0",
- "maybe_value%0#0"
- ]
- },
- "3307": {
- "op": "dig 1",
- "defined_out": [
- "closed_units#0",
- "closed_units#0 (copy)",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "closed_units#0",
- "maybe_value%0#0",
- "closed_units#0 (copy)"
- ]
- },
- "3309": {
- "op": "-",
- "defined_out": [
- "closed_units#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%0#1"
- ]
- },
- "3310": {
- "op": "bytec_3 // \"circulating_units\"",
- "stack_out": [
- "closed_units#0",
- "tmp%0#1",
- "\"circulating_units\""
- ]
- },
- "3311": {
- "op": "swap",
- "stack_out": [
- "closed_units#0",
- "\"circulating_units\"",
- "tmp%0#1"
- ]
- },
- "3312": {
- "op": "app_global_put",
- "stack_out": [
- "closed_units#0"
- ]
- },
- "3313": {
- "callsub": "modules.accounting.AccountingModule.end_if_no_circulating_units",
- "op": "callsub end_if_no_circulating_units"
- },
- "3316": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "closed_units#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%1#1"
- ]
- },
- "3318": {
- "op": "swap",
- "stack_out": [
- "tmp%1#1",
- "closed_units#0"
- ]
- },
- "3319": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3320": {
- "op": "swap",
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "tmp%1#1"
- ]
- },
- "3321": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "3322": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%head%1#0"
- ]
- },
- "3323": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%head%1#0",
- "0x151f7c75"
- ]
- },
- "3324": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ]
- },
- "3325": {
- "op": "concat",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "3326": {
- "op": "log",
- "stack_out": []
- },
- "3327": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3328": {
- "op": "return",
- "stack_out": []
- },
- "3329": {
- "subroutine": "modules.accounting.AccountingModule.account_update_payment_address[routing]",
- "params": {},
- "block": "account_update_payment_address",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3332": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "3333": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "3334": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "3335": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "3336": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3337": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "3340": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "3341": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "3342": {
- "op": "intc_2 // 32",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "32"
- ]
- },
- "3343": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "3344": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "3345": {
- "op": "txn Sender",
- "defined_out": [
- "holding_address#0",
- "tmp%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%0#1"
- ]
- },
- "3347": {
- "op": "dig 2",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%0#1",
- "holding_address#0 (copy)"
- ]
- },
- "3349": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "tmp%1#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%1#1"
- ]
- },
- "3350": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "3351": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "3354": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "3357": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "0x52333023"
- ]
- },
- "3358": {
- "op": "uncover 2",
- "stack_out": [
- "tmp%2#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "3360": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3361": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3362": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3363": {
- "op": "bury 1",
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3365": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3366": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "0"
- ]
- },
- "3367": {
- "op": "uncover 2",
- "stack_out": [
- "box_prefixed_key%0#1",
- "0",
- "tmp%2#0"
- ]
- },
- "3369": {
- "op": "box_replace",
- "stack_out": []
- },
- "3370": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1"
- ]
- },
- "3372": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3373": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3374": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3375": {
- "op": "concat",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "3376": {
- "op": "log",
- "stack_out": []
- },
- "3377": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3378": {
- "op": "return",
- "stack_out": []
- },
- "3379": {
- "subroutine": "modules.accounting.AccountingModule.account_get_info[routing]",
- "params": {},
- "block": "account_get_info",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3382": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "3383": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "3384": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "3385": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "3386": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "3387": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52333023"
- ]
- },
- "3388": {
- "op": "swap",
- "stack_out": [
- "0x52333023",
- "holding_address#0"
- ]
- },
- "3389": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "3390": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3391": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3392": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3394": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "3395": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "3396": {
- "op": "pop",
- "stack_out": [
- "aggregate%box_get%0#0"
- ]
- },
- "3397": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%box_get%0#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "0x151f7c75"
- ]
- },
- "3398": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%box_get%0#0"
- ]
- },
- "3399": {
- "op": "concat",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "3400": {
- "op": "log",
- "stack_out": []
- },
- "3401": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3402": {
- "op": "return",
- "stack_out": []
- },
- "3403": {
- "subroutine": "modules.rbac.RbacModule.rbac_rotate_arranger[routing]",
- "params": {},
- "block": "rbac_rotate_arranger",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0"
- ]
- },
- "3406": {
- "op": "dup",
- "defined_out": [
- "new_arranger#0",
- "new_arranger#0 (copy)"
- ],
- "stack_out": [
- "new_arranger#0",
- "new_arranger#0 (copy)"
- ]
- },
- "3407": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "len%0#0"
- ]
- },
- "3408": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%0#0",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "len%0#0",
- "32"
- ]
- },
- "3409": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "eq%0#0"
- ]
- },
- "3410": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "new_arranger#0"
- ]
- },
- "3411": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "3414": {
- "op": "bytec 8 // 0x52323023",
- "defined_out": [
- "0x52323023",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "0x52323023"
- ]
- },
- "3416": {
- "op": "swap",
- "stack_out": [
- "0x52323023",
- "new_arranger#0"
- ]
- },
- "3417": {
- "op": "app_global_put",
- "stack_out": []
- },
- "3418": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "3420": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3421": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3422": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3423": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "3424": {
- "op": "log",
- "stack_out": []
- },
- "3425": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3426": {
- "op": "return",
- "stack_out": []
- },
- "3427": {
- "subroutine": "modules.rbac.RbacModule.rbac_set_op_daemon[routing]",
- "params": {},
- "block": "rbac_set_op_daemon",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "address#0"
- ],
- "stack_out": [
- "address#0"
- ]
- },
- "3430": {
- "op": "dup",
- "defined_out": [
- "address#0",
- "address#0 (copy)"
- ],
- "stack_out": [
- "address#0",
- "address#0 (copy)"
- ]
- },
- "3431": {
- "op": "len",
- "defined_out": [
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0"
- ]
- },
- "3432": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0",
- "32"
- ]
- },
- "3433": {
- "op": "==",
- "defined_out": [
- "address#0",
- "eq%0#0"
- ],
- "stack_out": [
- "address#0",
- "eq%0#0"
- ]
- },
- "3434": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "address#0"
- ]
- },
- "3435": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "3438": {
- "op": "bytec 22 // 0x52323523",
- "defined_out": [
- "0x52323523",
- "address#0"
- ],
- "stack_out": [
- "address#0",
- "0x52323523"
- ]
- },
- "3440": {
- "op": "swap",
- "stack_out": [
- "0x52323523",
- "address#0"
- ]
- },
- "3441": {
- "op": "app_global_put",
- "stack_out": []
- },
- "3442": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "3444": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3445": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3446": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3447": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "3448": {
- "op": "log",
- "stack_out": []
- },
- "3449": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3450": {
- "op": "return",
- "stack_out": []
- },
- "3451": {
- "subroutine": "modules.rbac.RbacModule.rbac_assign_role[routing]",
- "params": {},
- "block": "rbac_assign_role",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0"
- ]
- },
- "3454": {
- "op": "dup",
- "defined_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ]
- },
- "3455": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0"
- ]
- },
- "3456": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0",
- "1"
- ]
- },
- "3457": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "eq%0#0"
- ]
- },
- "3458": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "role_id#0"
- ]
- },
- "3459": {
- "op": "txna ApplicationArgs 2"
- },
- "3462": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "role_address#0",
- "role_address#0"
- ]
- },
- "3463": {
- "op": "cover 2",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "role_address#0"
- ]
- },
- "3465": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0"
- ]
- },
- "3466": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0",
- "32"
- ]
- },
- "3467": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "eq%1#0"
- ]
- },
- "3468": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "role_address#0",
- "role_id#0"
- ]
- },
- "3469": {
- "op": "txna ApplicationArgs 3",
- "defined_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ]
- },
- "3472": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)"
- ]
- },
- "3473": {
- "op": "intc_0 // 0",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)",
- "0"
- ]
- },
- "3474": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "aggregate%array_length%0#0"
- ]
- },
- "3475": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "3477": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0"
- ]
- },
- "3478": {
- "op": "dig 1",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0",
- "tmp%3#0 (copy)"
- ]
- },
- "3480": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "len%2#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0",
- "len%2#0"
- ]
- },
- "3481": {
- "op": "==",
- "defined_out": [
- "eq%2#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "eq%2#0"
- ]
- },
- "3482": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ]
- },
- "3483": {
- "op": "extract 2 0",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "config#0"
- ]
- },
- "3486": {
- "op": "swap",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#0"
- ]
- },
- "3487": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "3490": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "3493": {
- "op": "btoi",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3494": {
- "op": "dupn 2",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1",
- "role_id#1 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)"
- ]
- },
- "3496": {
- "callsub": "modules.rbac.RbacModule._assert_valid_role",
- "op": "callsub _assert_valid_role",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3499": {
- "op": "pushint 20",
- "defined_out": [
- "20",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "20"
- ]
- },
- "3501": {
- "op": "==",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1",
- "tmp%0#2"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%0#2"
- ]
- },
- "3502": {
- "op": "bz rbac_assign_role_after_if_else@3",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3505": {
- "op": "bytec 8 // 0x52323023",
- "defined_out": [
- "0x52323023",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52323023"
- ]
- },
- "3507": {
- "op": "dig 3",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52323023",
- "role_address#0"
- ]
- },
- "3509": {
- "op": "app_global_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3510": {
- "block": "rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%2#1"
- ]
- },
- "3512": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3513": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3514": {
- "op": "swap",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3515": {
- "op": "concat",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%7#0"
- ]
- },
- "3516": {
- "op": "log",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3517": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "1"
- ]
- },
- "3518": {
- "op": "return",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3519": {
- "block": "rbac_assign_role_after_if_else@3",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3520": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "40"
- ]
- },
- "3522": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%1#1"
- ]
- },
- "3523": {
- "op": "bz rbac_assign_role_after_if_else@5",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3526": {
- "op": "bytec 14 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52343023"
- ]
- },
- "3528": {
- "op": "dig 3",
- "defined_out": [
- "0x52343023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52343023",
- "role_address#0"
- ]
- },
- "3530": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "3531": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)"
- ]
- },
- "3532": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3533": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3535": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%0#0",
- "role_address#0",
- "role_id#1",
- "tmp%2#2"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "tmp%2#2"
- ]
- },
- "3536": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "3537": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "config#0"
- ]
- },
- "3539": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3540": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "3543": {
- "block": "rbac_assign_role_after_if_else@5",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3544": {
- "op": "pushint 50",
- "defined_out": [
- "50",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "50"
- ]
- },
- "3546": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%3#1"
- ]
- },
- "3547": {
- "op": "bz rbac_assign_role_after_if_else@7",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3550": {
- "op": "bytec 21 // 0x52353023",
- "defined_out": [
- "0x52353023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52353023"
- ]
- },
- "3552": {
- "op": "dig 3",
- "defined_out": [
- "0x52353023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52353023",
- "role_address#0"
- ]
- },
- "3554": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "3555": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)"
- ]
- },
- "3556": {
- "op": "box_len",
- "defined_out": [
- "_%1#0",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "_%1#0",
- "maybe_exists%1#0"
- ]
- },
- "3557": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0"
- ]
- },
- "3559": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%2#0",
- "role_address#0",
- "role_id#1",
- "tmp%4#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "tmp%4#0"
- ]
- },
- "3560": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "3561": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%2#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "config#0"
- ]
- },
- "3563": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3564": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "3567": {
- "block": "rbac_assign_role_after_if_else@7",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3568": {
- "op": "pushint 60",
- "defined_out": [
- "60",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "60"
- ]
- },
- "3570": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%5#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%5#0"
- ]
- },
- "3571": {
- "op": "bz rbac_assign_role_after_if_else@9",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3574": {
- "op": "bytec 20 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52363023"
- ]
- },
- "3576": {
- "op": "dig 3",
- "defined_out": [
- "0x52363023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52363023",
- "role_address#0"
- ]
- },
- "3578": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "3579": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)"
- ]
- },
- "3580": {
- "op": "box_len",
- "defined_out": [
- "_%2#0",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "_%2#0",
- "maybe_exists%2#0"
- ]
- },
- "3581": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0"
- ]
- },
- "3583": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%4#0",
- "role_address#0",
- "role_id#1",
- "tmp%6#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "tmp%6#1"
- ]
- },
- "3584": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "3585": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%4#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "config#0"
- ]
- },
- "3587": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3588": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "3591": {
- "block": "rbac_assign_role_after_if_else@9",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3592": {
- "op": "pushint 70",
- "defined_out": [
- "70",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "70"
- ]
- },
- "3594": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%7#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%7#1"
- ]
- },
- "3595": {
- "op": "bz rbac_assign_role_after_if_else@11",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3598": {
- "op": "bytec 13 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52373023"
- ]
- },
- "3600": {
- "op": "dig 3",
- "defined_out": [
- "0x52373023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52373023",
- "role_address#0"
- ]
- },
- "3602": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%6#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "3603": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)"
- ]
- },
- "3604": {
- "op": "box_len",
- "defined_out": [
- "_%3#0",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "_%3#0",
- "maybe_exists%3#0"
- ]
- },
- "3605": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0"
- ]
- },
- "3607": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%6#0",
- "role_address#0",
- "role_id#1",
- "tmp%8#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "tmp%8#0"
- ]
- },
- "3608": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "3609": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%6#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "config#0"
- ]
- },
- "3611": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3612": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "3615": {
- "block": "rbac_assign_role_after_if_else@11",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3616": {
- "op": "pushint 80",
- "defined_out": [
- "80",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "80"
- ]
- },
- "3618": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%9#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%9#0"
- ]
- },
- "3619": {
- "op": "bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3622": {
- "op": "bytec 32 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52383023"
- ]
- },
- "3624": {
- "op": "dig 3",
- "defined_out": [
- "0x52383023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52383023",
- "role_address#0"
- ]
- },
- "3626": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%8#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "3627": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)"
- ]
- },
- "3628": {
- "op": "box_len",
- "defined_out": [
- "_%4#0",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "_%4#0",
- "maybe_exists%4#0"
- ]
- },
- "3629": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0"
- ]
- },
- "3631": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%8#0",
- "role_address#0",
- "role_id#1",
- "tmp%10#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "tmp%10#0"
- ]
- },
- "3632": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "3633": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%8#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "config#0"
- ]
- },
- "3635": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "3636": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "3639": {
- "subroutine": "modules.rbac.RbacModule.rbac_revoke_role[routing]",
- "params": {},
- "block": "rbac_revoke_role",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0"
- ]
- },
- "3642": {
- "op": "dup",
- "defined_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ]
- },
- "3643": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0"
- ]
- },
- "3644": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0",
- "1"
- ]
- },
- "3645": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "eq%0#0"
- ]
- },
- "3646": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "role_id#0"
- ]
- },
- "3647": {
- "op": "txna ApplicationArgs 2"
- },
- "3650": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "role_address#0",
- "role_address#0"
- ]
- },
- "3651": {
- "op": "cover 2",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "role_address#0"
- ]
- },
- "3653": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0"
- ]
- },
- "3654": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0",
- "32"
- ]
- },
- "3655": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "eq%1#0"
- ]
- },
- "3656": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "role_address#0",
- "role_id#0"
- ]
- },
- "3657": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "3660": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "3663": {
- "op": "btoi",
- "defined_out": [
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3664": {
- "op": "dupn 2",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)"
- ]
- },
- "3666": {
- "callsub": "modules.rbac.RbacModule._assert_valid_role",
- "op": "callsub _assert_valid_role",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3669": {
- "op": "dup",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)"
- ]
- },
- "3670": {
- "op": "pushint 20",
- "defined_out": [
- "20",
- "role_address#0",
- "role_id#1",
- "role_id#1 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)",
- "20"
- ]
- },
- "3672": {
- "op": "!=",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "tmp%0#2"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "tmp%0#2"
- ]
- },
- "3673": {
- "error": "Invalid role identifier",
- "op": "assert // Invalid role identifier",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3674": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "40"
- ]
- },
- "3676": {
- "op": "==",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%1#1"
- ]
- },
- "3677": {
- "op": "bz rbac_revoke_role_after_if_else@3",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3680": {
- "op": "bytec 14 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52343023"
- ]
- },
- "3682": {
- "op": "dig 2",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52343023",
- "role_address#0"
- ]
- },
- "3684": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "3685": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)"
- ]
- },
- "3686": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3687": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3689": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "3690": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "3691": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3692": {
- "block": "rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%2#1"
- ]
- },
- "3694": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3695": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3696": {
- "op": "swap",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3697": {
- "op": "concat",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%5#0"
- ]
- },
- "3698": {
- "op": "log",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3699": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "1"
- ]
- },
- "3700": {
- "op": "return",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3701": {
- "block": "rbac_revoke_role_after_if_else@3",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3702": {
- "op": "pushint 50",
- "defined_out": [
- "50",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "50"
- ]
- },
- "3704": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%2#2"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%2#2"
- ]
- },
- "3705": {
- "op": "bz rbac_revoke_role_after_if_else@5",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3708": {
- "op": "bytec 21 // 0x52353023",
- "defined_out": [
- "0x52353023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52353023"
- ]
- },
- "3710": {
- "op": "dig 2",
- "defined_out": [
- "0x52353023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52353023",
- "role_address#0"
- ]
- },
- "3712": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "3713": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)"
- ]
- },
- "3714": {
- "op": "box_len",
- "defined_out": [
- "_%1#0",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "_%1#0",
- "maybe_exists%1#0"
- ]
- },
- "3715": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0"
- ]
- },
- "3717": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "3718": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "3719": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3720": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "3723": {
- "block": "rbac_revoke_role_after_if_else@5",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3724": {
- "op": "pushint 60",
- "defined_out": [
- "60",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "60"
- ]
- },
- "3726": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%3#0"
- ]
- },
- "3727": {
- "op": "bz rbac_revoke_role_after_if_else@7",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3730": {
- "op": "bytec 20 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52363023"
- ]
- },
- "3732": {
- "op": "dig 2",
- "defined_out": [
- "0x52363023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52363023",
- "role_address#0"
- ]
- },
- "3734": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "3735": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)"
- ]
- },
- "3736": {
- "op": "box_len",
- "defined_out": [
- "_%2#0",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "_%2#0",
- "maybe_exists%2#0"
- ]
- },
- "3737": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0"
- ]
- },
- "3739": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "3740": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "3741": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3742": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "3745": {
- "block": "rbac_revoke_role_after_if_else@7",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3746": {
- "op": "pushint 70",
- "defined_out": [
- "70",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "70"
- ]
- },
- "3748": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%4#1"
- ]
- },
- "3749": {
- "op": "bz rbac_revoke_role_after_if_else@9",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3752": {
- "op": "bytec 13 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52373023"
- ]
- },
- "3754": {
- "op": "dig 2",
- "defined_out": [
- "0x52373023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52373023",
- "role_address#0"
- ]
- },
- "3756": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%6#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "3757": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)"
- ]
- },
- "3758": {
- "op": "box_len",
- "defined_out": [
- "_%3#0",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "_%3#0",
- "maybe_exists%3#0"
- ]
- },
- "3759": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0"
- ]
- },
- "3761": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "3762": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "3763": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3764": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "3767": {
- "block": "rbac_revoke_role_after_if_else@9",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "3768": {
- "op": "pushint 80",
- "defined_out": [
- "80",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "80"
- ]
- },
- "3770": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%5#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%5#1"
- ]
- },
- "3771": {
- "op": "bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3774": {
- "op": "bytec 32 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52383023"
- ]
- },
- "3776": {
- "op": "dig 2",
- "defined_out": [
- "0x52383023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52383023",
- "role_address#0"
- ]
- },
- "3778": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%8#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "3779": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)"
- ]
- },
- "3780": {
- "op": "box_len",
- "defined_out": [
- "_%4#0",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "_%4#0",
- "maybe_exists%4#0"
- ]
- },
- "3781": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0"
- ]
- },
- "3783": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "3784": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "3785": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "3786": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "3789": {
- "subroutine": "modules.rbac.RbacModule.rbac_gov_asset_suspension[routing]",
- "params": {},
- "block": "rbac_gov_asset_suspension",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "3792": {
- "op": "dup",
- "defined_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ],
- "stack_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ]
- },
- "3793": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "len%0#0"
- ]
- },
- "3794": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "len%0#0",
- "1"
- ]
- },
- "3795": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "eq%0#0"
- ]
- },
- "3796": {
- "error": "invalid number of bytes for arc4.bool",
- "op": "assert // invalid number of bytes for arc4.bool",
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "3797": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "0"
- ]
- },
- "3798": {
- "op": "getbit",
- "defined_out": [
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0"
- ]
- },
- "3799": {
- "op": "bytec 13 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "0x52373023"
- ]
- },
- "3801": {
- "op": "txn Sender",
- "defined_out": [
- "0x52373023",
- "suspended#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "suspended#0",
- "0x52373023",
- "tmp%0#2"
- ]
- },
- "3803": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "suspended#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "suspended#0",
- "tmp%1#0"
- ]
- },
- "3806": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "suspended#0"
- ]
- },
- "3807": {
- "op": "bytec 23 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\"",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "\"asset_suspended\""
- ]
- },
- "3809": {
- "op": "swap",
- "stack_out": [
- "\"asset_suspended\"",
- "suspended#0"
- ]
- },
- "3810": {
- "op": "app_global_put",
- "stack_out": []
- },
- "3811": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "3813": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3814": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "3815": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "3816": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "3817": {
- "op": "log",
- "stack_out": []
- },
- "3818": {
- "op": "intc_1 // 1",
- "stack_out": [
- "1"
- ]
- },
- "3819": {
- "op": "return",
- "stack_out": []
- },
- "3820": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_arranger[routing]",
- "params": {},
- "block": "rbac_get_arranger",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "3821": {
- "op": "bytec 8 // 0x52323023",
- "defined_out": [
- "0",
- "0x52323023"
- ],
- "stack_out": [
- "0",
- "0x52323023"
- ]
- },
- "3823": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3824": {
- "error": "check self.arranger exists",
- "op": "assert // check self.arranger exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "3825": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "0x151f7c75"
- ]
- },
- "3826": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "maybe_value%0#0"
- ]
- },
- "3827": {
- "op": "concat",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "3828": {
- "op": "log",
- "stack_out": []
- },
- "3829": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3830": {
- "op": "return",
- "stack_out": []
- },
- "3831": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_address_roles[routing]",
- "params": {},
- "block": "rbac_get_address_roles",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "address#0"
- ],
- "stack_out": [
- "address#0"
- ]
- },
- "3834": {
- "op": "dup",
- "defined_out": [
- "address#0",
- "address#0 (copy)"
- ],
- "stack_out": [
- "address#0",
- "address#0 (copy)"
- ]
- },
- "3835": {
- "op": "len",
- "defined_out": [
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0"
- ]
- },
- "3836": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0",
- "32"
- ]
- },
- "3837": {
- "op": "==",
- "defined_out": [
- "address#0",
- "eq%0#0"
- ],
- "stack_out": [
- "address#0",
- "eq%0#0"
- ]
- },
- "3838": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "address#0"
- ]
- },
- "3839": {
- "op": "bytec 14 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "address#0"
- ],
- "stack_out": [
- "address#0",
- "0x52343023"
- ]
- },
- "3841": {
- "op": "dig 1",
- "stack_out": [
- "address#0",
- "0x52343023",
- "address#0 (copy)"
- ]
- },
- "3843": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1"
- ]
- },
- "3846": {
- "op": "bytec 21 // 0x52353023",
- "defined_out": [
- "0x52353023",
- "address#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "0x52353023"
- ]
- },
- "3848": {
- "op": "dig 2",
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "0x52353023",
- "address#0 (copy)"
- ]
- },
- "3850": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1"
- ]
- },
- "3853": {
- "op": "bytec 20 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "address#0",
- "tmp%0#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "0x52363023"
- ]
- },
- "3855": {
- "op": "dig 3",
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "0x52363023",
- "address#0 (copy)"
- ]
- },
- "3857": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1"
- ]
- },
- "3860": {
- "op": "bytec 13 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "0x52373023"
- ]
- },
- "3862": {
- "op": "dig 4",
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "0x52373023",
- "address#0 (copy)"
- ]
- },
- "3864": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1"
- ]
- },
- "3867": {
- "op": "bytec 32 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "0x52383023"
- ]
- },
- "3869": {
- "op": "uncover 5",
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "0x52383023",
- "address#0"
- ]
- },
- "3871": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ]
- },
- "3874": {
- "op": "bytec 31 // 0x00",
- "defined_out": [
- "0x00",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "0x00"
- ]
- },
- "3876": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "0x00",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "0x00",
- "0"
- ]
- },
- "3877": {
- "op": "uncover 6",
- "stack_out": [
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "0x00",
- "0",
- "tmp%0#1"
- ]
- },
- "3879": {
- "op": "setbit",
- "defined_out": [
- "aggregate%encoded_bool%0#0",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%encoded_bool%0#0"
- ]
- },
- "3880": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "aggregate%encoded_bool%0#0",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%encoded_bool%0#0",
- "1"
- ]
- },
- "3881": {
- "op": "uncover 5",
- "stack_out": [
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%encoded_bool%0#0",
- "1",
- "tmp%1#1"
- ]
- },
- "3883": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%0#0",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%0#0"
- ]
- },
- "3884": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%set_bit%0#0",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%0#0",
- "2"
- ]
- },
- "3886": {
- "op": "uncover 4",
- "stack_out": [
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%0#0",
- "2",
- "tmp%2#1"
- ]
- },
- "3888": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%1#0",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%1#0"
- ]
- },
- "3889": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "aggregate%set_bit%1#0",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%1#0",
- "3"
- ]
- },
- "3891": {
- "op": "uncover 3",
- "stack_out": [
- "tmp%4#1",
- "aggregate%set_bit%1#0",
- "3",
- "tmp%3#1"
- ]
- },
- "3893": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%2#0",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1",
- "aggregate%set_bit%2#0"
- ]
- },
- "3894": {
- "op": "pushint 4",
- "defined_out": [
- "4",
- "aggregate%set_bit%2#0",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1",
- "aggregate%set_bit%2#0",
- "4"
- ]
- },
- "3896": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%set_bit%2#0",
- "4",
- "tmp%4#1"
- ]
- },
- "3898": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%3#0"
- ],
- "stack_out": [
- "aggregate%set_bit%3#0"
- ]
- },
- "3899": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%set_bit%3#0"
- ],
- "stack_out": [
- "aggregate%set_bit%3#0",
- "0x151f7c75"
- ]
- },
- "3900": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%set_bit%3#0"
- ]
- },
- "3901": {
- "op": "concat",
- "defined_out": [
- "tmp%8#0"
- ],
- "stack_out": [
- "tmp%8#0"
- ]
- },
- "3902": {
- "op": "log",
- "stack_out": []
- },
- "3903": {
- "op": "intc_1 // 1",
- "stack_out": [
- "1"
- ]
- },
- "3904": {
- "op": "return",
- "stack_out": []
- },
- "3905": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_role_config[routing]",
- "params": {},
- "block": "rbac_get_role_config",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0"
- ]
- },
- "3908": {
- "op": "dup",
- "defined_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ]
- },
- "3909": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0"
- ]
- },
- "3910": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0",
- "1"
- ]
- },
- "3911": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "eq%0#0"
- ]
- },
- "3912": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "role_id#0"
- ]
- },
- "3913": {
- "op": "txna ApplicationArgs 2"
- },
- "3916": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "role_address#0",
- "role_address#0"
- ]
- },
- "3917": {
- "op": "cover 2",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "role_address#0"
- ]
- },
- "3919": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0"
- ]
- },
- "3920": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0",
- "32"
- ]
- },
- "3921": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "eq%1#0"
- ]
- },
- "3922": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "role_address#0",
- "role_id#0"
- ]
- },
- "3923": {
- "op": "btoi",
- "defined_out": [
- "role#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0"
- ]
- },
- "3924": {
- "op": "dup",
- "defined_out": [
- "role#0",
- "role#0 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0",
- "role#0 (copy)"
- ]
- },
- "3925": {
- "callsub": "modules.rbac.RbacModule._assert_valid_role",
- "op": "callsub _assert_valid_role",
- "stack_out": [
- "role_address#0",
- "role#0"
- ]
- },
- "3928": {
- "op": "pushints 20 40 50 60 70 80",
- "defined_out": [
- "20",
- "40",
- "50",
- "60",
- "70",
- "80",
- "role#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0",
- "20",
- "40",
- "50",
- "60",
- "70",
- "80"
- ]
- },
- "3936": {
- "op": "uncover 6",
- "stack_out": [
- "role_address#0",
- "20",
- "40",
- "50",
- "60",
- "70",
- "80",
- "role#0"
- ]
- },
- "3938": {
- "op": "match rbac_get_role_config_switch_case_0@2 rbac_get_role_config_switch_case_1@3 rbac_get_role_config_switch_case_2@4 rbac_get_role_config_switch_case_3@5 rbac_get_role_config_switch_case_4@6 rbac_get_role_config_switch_case_5@7",
- "stack_out": [
- "role_address#0"
- ]
- },
- "3952": {
- "error": "Invalid role identifier",
- "op": "err // Invalid role identifier"
- },
- "3953": {
- "block": "rbac_get_role_config_switch_case_5@7",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 32 // 0x52383023",
- "defined_out": [
- "0x52383023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52383023"
- ]
- },
- "3955": {
- "op": "dig 1",
- "defined_out": [
- "0x52383023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52383023",
- "role_address#0"
- ]
- },
- "3957": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3958": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3959": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3960": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3962": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3963": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%8#0",
- "aggregate%box_get%9#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%8#0",
- "aggregate%box_get%9#0"
- ]
- },
- "3964": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "3965": {
- "block": "rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9",
- "stack_in": [
- "role_address#0",
- "tmp%3#0"
- ],
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0",
- "0x151f7c75"
- ]
- },
- "3966": {
- "op": "swap",
- "defined_out": [
- "0x151f7c75",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x151f7c75",
- "tmp%3#0"
- ]
- },
- "3967": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%4#0"
- ]
- },
- "3968": {
- "op": "log",
- "stack_out": [
- "role_address#0"
- ]
- },
- "3969": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "role_address#0",
- "1"
- ]
- },
- "3970": {
- "op": "return",
- "stack_out": [
- "role_address#0"
- ]
- },
- "3971": {
- "block": "rbac_get_role_config_switch_case_4@6",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 13 // 0x52373023",
- "defined_out": [
- "0x52373023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52373023"
- ]
- },
- "3973": {
- "op": "dig 1",
- "defined_out": [
- "0x52373023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52373023",
- "role_address#0"
- ]
- },
- "3975": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3976": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3977": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3978": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3980": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3981": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0"
- ]
- },
- "3982": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "3983": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "3986": {
- "block": "rbac_get_role_config_switch_case_3@5",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 20 // 0x52363023",
- "defined_out": [
- "0x52363023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52363023"
- ]
- },
- "3988": {
- "op": "dig 1",
- "defined_out": [
- "0x52363023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52363023",
- "role_address#0"
- ]
- },
- "3990": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3991": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "3992": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "3993": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "3995": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "3996": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0"
- ]
- },
- "3997": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "3998": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "4001": {
- "block": "rbac_get_role_config_switch_case_2@4",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 21 // 0x52353023",
- "defined_out": [
- "0x52353023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52353023"
- ]
- },
- "4003": {
- "op": "dig 1",
- "defined_out": [
- "0x52353023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52353023",
- "role_address#0"
- ]
- },
- "4005": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4006": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "4007": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4008": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "4010": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4011": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "4012": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "4013": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "4016": {
- "block": "rbac_get_role_config_switch_case_1@3",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 14 // 0x52343023",
- "defined_out": [
- "0x52343023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52343023"
- ]
- },
- "4018": {
- "op": "dig 1",
- "defined_out": [
- "0x52343023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52343023",
- "role_address#0"
- ]
- },
- "4020": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4021": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "4022": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4023": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "4025": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4026": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4027": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "4028": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "4031": {
- "block": "rbac_get_role_config_switch_case_0@2",
- "stack_in": [
- "role_address#0"
- ],
- "op": "pushbytes 0x00000000000000000000000000000000",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "4049": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "4052": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons",
- "params": {},
- "block": "count_due_coupons",
- "stack_in": [],
- "op": "proto 0 1"
- },
- "4055": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "coupon_idx#0"
- ]
- },
- "4057": {
- "op": "global LatestTimestamp"
- },
- "4059": {
- "op": "dup"
- },
- "4060": {
- "op": "intc_0 // 0"
- },
- "4061": {
- "op": "bytec 29 // \"due_coupons_watermark\"",
- "defined_out": [
- "\"due_coupons_watermark\"",
- "0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "current_ts#0",
- "0",
- "\"due_coupons_watermark\""
- ]
- },
- "4063": {
- "op": "app_global_get_ex",
- "defined_out": [
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%0#0"
- ]
- },
- "4064": {
- "op": "swap",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "current_ts#0",
- "maybe_exists%0#0",
- "due_coupons#0"
- ]
- },
- "4065": {
- "op": "cover 2",
- "defined_out": [
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "current_ts#0",
- "maybe_exists%0#0"
- ]
- },
- "4067": {
- "error": "check self.due_coupons_watermark exists",
- "op": "assert // check self.due_coupons_watermark exists",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "current_ts#0"
- ]
- },
- "4068": {
- "op": "intc_0 // 0",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "current_ts#0",
- "0"
- ]
- },
- "4069": {
- "op": "bytec 5 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "0",
- "current_ts#0",
- "due_coupons#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "current_ts#0",
- "0",
- "\"maturity_date\""
- ]
- },
- "4071": {
- "op": "app_global_get_ex",
- "defined_out": [
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%1#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "current_ts#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "4072": {
- "error": "check self.maturity_date exists",
- "op": "assert // check self.maturity_date exists",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "current_ts#0",
- "maybe_value%1#0"
- ]
- },
- "4073": {
- "op": ">=",
- "defined_out": [
- "current_ts#0",
- "due_coupons#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "tmp%1#0"
- ]
- },
- "4074": {
- "op": "bz count_due_coupons_else_body@2",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ]
- },
- "4077": {
- "op": "intc_0 // 0",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0"
- ]
- },
- "4078": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "0",
- "current_ts#0",
- "due_coupons#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0",
- "\"total_coupons\""
- ]
- },
- "4080": {
- "op": "app_global_get_ex",
- "defined_out": [
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%2#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "due_coupons#0",
- "maybe_exists%2#0"
- ]
- },
- "4081": {
- "op": "swap",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%2#0",
- "due_coupons#0"
- ]
- },
- "4082": {
- "op": "frame_bury 2",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_exists%2#0"
- ]
- },
- "4084": {
- "error": "check self.total_coupons exists",
- "op": "assert // check self.total_coupons exists",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ]
- },
- "4085": {
- "block": "count_due_coupons_after_if_else@8",
- "stack_in": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ],
- "op": "bytec 29 // \"due_coupons_watermark\"",
- "defined_out": [
- "\"due_coupons_watermark\""
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "\"due_coupons_watermark\""
- ]
- },
- "4087": {
- "op": "frame_dig 2",
- "defined_out": [
- "\"due_coupons_watermark\"",
- "due_coupons#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "\"due_coupons_watermark\"",
- "due_coupons#0"
- ]
- },
- "4089": {
- "op": "dup",
- "defined_out": [
- "\"due_coupons_watermark\"",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "\"due_coupons_watermark\"",
- "due_coupons#0 (copy)",
- "due_coupons#0 (copy)"
- ]
- },
- "4090": {
- "op": "cover 2",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "due_coupons#0",
- "\"due_coupons_watermark\"",
- "due_coupons#0 (copy)"
- ]
- },
- "4092": {
- "op": "app_global_put",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "due_coupons#0"
- ]
- },
- "4093": {
- "op": "frame_bury 0"
- },
- "4095": {
- "retsub": true,
- "op": "retsub"
- },
- "4096": {
- "block": "count_due_coupons_else_body@2",
- "stack_in": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0"
- ]
- },
- "4097": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0",
- "\"issuance_date\""
- ]
- },
- "4099": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%3#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_value%3#0",
- "maybe_exists%3#0"
- ]
- },
- "4100": {
- "error": "check self.issuance_date exists",
- "op": "assert // check self.issuance_date exists",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_value%3#0"
- ]
- },
- "4101": {
- "op": "frame_dig 1",
- "defined_out": [
- "current_ts#0",
- "maybe_value%3#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_value%3#0",
- "current_ts#0"
- ]
- },
- "4103": {
- "op": "<",
- "defined_out": [
- "current_ts#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "tmp%2#0"
- ]
- },
- "4104": {
- "op": "bz count_due_coupons_after_if_else@8",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ]
- },
- "4107": {
- "op": "intc_0 // 0",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0"
- ]
- },
- "4108": {
- "op": "bytec 29 // \"due_coupons_watermark\"",
- "defined_out": [
- "\"due_coupons_watermark\"",
- "0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0",
- "\"due_coupons_watermark\""
- ]
- },
- "4110": {
- "op": "app_global_get_ex",
- "defined_out": [
- "current_ts#0",
- "maybe_exists%4#0",
- "maybe_value%4#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_value%4#0",
- "maybe_exists%4#0"
- ]
- },
- "4111": {
- "error": "check self.due_coupons_watermark exists",
- "op": "assert // check self.due_coupons_watermark exists",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_value%4#0"
- ]
- },
- "4112": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "current_ts#0",
- "maybe_value%4#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "maybe_value%4#0",
- "3"
- ]
- },
- "4114": {
- "op": "+",
- "defined_out": [
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0"
- ]
- },
- "4115": {
- "op": "dup",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0",
- "coupon_idx#0"
- ]
- },
- "4116": {
- "op": "frame_bury 0",
- "defined_out": [
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0"
- ]
- },
- "4118": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0",
- "8"
- ]
- },
- "4119": {
- "op": "*",
- "defined_out": [
- "box%element_offset%0#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%element_offset%0#0"
- ]
- },
- "4120": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "box%element_offset%0#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%element_offset%0#0",
- "2"
- ]
- },
- "4122": {
- "op": "+",
- "defined_out": [
- "box%offset%0#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%offset%0#0"
- ]
- },
- "4123": {
- "op": "bytec 12 // 0x74696d654576656e7473",
- "defined_out": [
- "0x74696d654576656e7473",
- "box%offset%0#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%offset%0#0",
- "0x74696d654576656e7473"
- ]
- },
- "4125": {
- "op": "swap",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0x74696d654576656e7473",
- "box%offset%0#0"
- ]
- },
- "4126": {
- "op": "intc_3 // 8",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0x74696d654576656e7473",
- "box%offset%0#0",
- "8"
- ]
- },
- "4127": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%0#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%box_extract%0#0"
- ]
- },
- "4128": {
- "op": "btoi",
- "defined_out": [
- "coupon_due_date#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_due_date#0"
- ]
- },
- "4129": {
- "block": "count_due_coupons_while_top@4",
- "stack_in": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_due_date#0"
- ],
- "op": "frame_dig 1",
- "defined_out": [
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_due_date#0",
- "current_ts#0"
- ]
- },
- "4131": {
- "op": "<=",
- "defined_out": [
- "current_ts#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "tmp%4#0"
- ]
- },
- "4132": {
- "op": "bz count_due_coupons_after_while@6",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ]
- },
- "4135": {
- "op": "intc 4 // 255",
- "defined_out": [
- "255",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "255"
- ]
- },
- "4137": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "255",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "255",
- "0"
- ]
- },
- "4138": {
- "callsub": "_puya_lib.util.ensure_budget",
- "op": "callsub ensure_budget",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ]
- },
- "4141": {
- "op": "frame_dig 0",
- "defined_out": [
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0"
- ]
- },
- "4143": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0",
- "1"
- ]
- },
- "4144": {
- "op": "+",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0"
- ]
- },
- "4145": {
- "op": "dup",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0",
- "coupon_idx#0"
- ]
- },
- "4146": {
- "op": "frame_bury 0",
- "defined_out": [
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0"
- ]
- },
- "4148": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0",
- "8"
- ]
- },
- "4149": {
- "op": "*",
- "defined_out": [
- "box%element_offset%1#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%element_offset%1#0"
- ]
- },
- "4150": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "box%element_offset%1#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%element_offset%1#0",
- "2"
- ]
- },
- "4152": {
- "op": "+",
- "defined_out": [
- "box%offset%1#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%offset%1#0"
- ]
- },
- "4153": {
- "op": "bytec 12 // 0x74696d654576656e7473",
- "defined_out": [
- "0x74696d654576656e7473",
- "box%offset%1#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%offset%1#0",
- "0x74696d654576656e7473"
- ]
- },
- "4155": {
- "op": "swap",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0x74696d654576656e7473",
- "box%offset%1#0"
- ]
- },
- "4156": {
- "op": "intc_3 // 8",
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "0x74696d654576656e7473",
- "box%offset%1#0",
- "8"
- ]
- },
- "4157": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%1#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "box%box_extract%1#0"
- ]
- },
- "4158": {
- "op": "btoi",
- "defined_out": [
- "coupon_due_date#0",
- "coupon_idx#0",
- "current_ts#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_due_date#0"
- ]
- },
- "4159": {
- "op": "b count_due_coupons_while_top@4"
- },
- "4162": {
- "block": "count_due_coupons_after_while@6",
- "stack_in": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ],
- "op": "frame_dig 0",
- "defined_out": [
- "coupon_idx#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0"
- ]
- },
- "4164": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "coupon_idx#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "coupon_idx#0",
- "3"
- ]
- },
- "4166": {
- "op": "-",
- "defined_out": [
- "coupon_idx#0",
- "due_coupons#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0",
- "due_coupons#0"
- ]
- },
- "4167": {
- "op": "frame_bury 2",
- "defined_out": [
- "coupon_idx#0",
- "due_coupons#0"
- ],
- "stack_out": [
- "coupon_idx#0",
- "current_ts#0",
- "due_coupons#0"
- ]
- },
- "4169": {
- "op": "b count_due_coupons_after_if_else@8"
- },
- "4172": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_due_date",
- "params": {
- "coupon#0": "uint64"
- },
- "block": "coupon_due_date",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4175": {
- "op": "pushint 3",
- "defined_out": [
- "3"
- ],
- "stack_out": [
- "3"
- ]
- },
- "4177": {
- "op": "frame_dig -1",
- "defined_out": [
- "3",
- "coupon#0 (copy)"
- ],
- "stack_out": [
- "3",
- "coupon#0 (copy)"
- ]
- },
- "4179": {
- "op": "+",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4180": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "1"
- ]
- },
- "4181": {
- "op": "-",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "4182": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0",
- "8"
- ]
- },
- "4183": {
- "op": "*",
- "defined_out": [
- "box%element_offset%0#0"
- ],
- "stack_out": [
- "box%element_offset%0#0"
- ]
- },
- "4184": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "box%element_offset%0#0"
- ],
- "stack_out": [
- "box%element_offset%0#0",
- "2"
- ]
- },
- "4186": {
- "op": "+",
- "defined_out": [
- "box%offset%0#0"
- ],
- "stack_out": [
- "box%offset%0#0"
- ]
- },
- "4187": {
- "op": "bytec 12 // 0x74696d654576656e7473",
- "defined_out": [
- "0x74696d654576656e7473",
- "box%offset%0#0"
- ],
- "stack_out": [
- "box%offset%0#0",
- "0x74696d654576656e7473"
- ]
- },
- "4189": {
- "op": "swap",
- "stack_out": [
- "0x74696d654576656e7473",
- "box%offset%0#0"
- ]
- },
- "4190": {
- "op": "intc_3 // 8",
- "stack_out": [
- "0x74696d654576656e7473",
- "box%offset%0#0",
- "8"
- ]
- },
- "4191": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%0#0"
- ],
- "stack_out": [
- "box%box_extract%0#0"
- ]
- },
- "4192": {
- "op": "btoi",
- "defined_out": [
- "values%0#0"
- ],
- "stack_out": [
- "values%0#0"
- ]
- },
- "4193": {
- "retsub": true,
- "op": "retsub"
- },
- "4194": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.next_coupon_due_date",
- "params": {
- "due_coupons#0": "uint64"
- },
- "block": "next_coupon_due_date",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4197": {
- "op": "intc_0 // 0"
- },
- "4198": {
- "op": "dup"
- },
- "4199": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "0",
- "coupon_due_date#0"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "0",
- "\"total_coupons\""
- ]
- },
- "4201": {
- "op": "app_global_get_ex",
- "defined_out": [
- "coupon_due_date#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4202": {
- "error": "check self.total_coupons exists",
- "op": "assert // check self.total_coupons exists",
- "stack_out": [
- "coupon_due_date#0",
- "maybe_value%0#0"
- ]
- },
- "4203": {
- "op": "frame_dig -1",
- "defined_out": [
- "coupon_due_date#0",
- "due_coupons#0 (copy)",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "maybe_value%0#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4205": {
- "op": ">",
- "defined_out": [
- "coupon_due_date#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "tmp%0#0"
- ]
- },
- "4206": {
- "op": "bz next_coupon_due_date_after_if_else@2",
- "stack_out": [
- "coupon_due_date#0"
- ]
- },
- "4209": {
- "op": "frame_dig -1",
- "stack_out": [
- "coupon_due_date#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4211": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "coupon_due_date#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "due_coupons#0 (copy)",
- "1"
- ]
- },
- "4212": {
- "op": "+",
- "defined_out": [
- "coupon_due_date#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "tmp%1#0"
- ]
- },
- "4213": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_due_date",
- "op": "callsub coupon_due_date",
- "stack_out": [
- "coupon_due_date#0",
- "coupon_due_date#0"
- ]
- },
- "4216": {
- "op": "frame_bury 0",
- "stack_out": [
- "coupon_due_date#0"
- ]
- },
- "4218": {
- "block": "next_coupon_due_date_after_if_else@2",
- "stack_in": [
- "coupon_due_date#0"
- ],
- "op": "frame_dig 0",
- "defined_out": [
- "coupon_due_date#0"
- ],
- "stack_out": [
- "coupon_due_date#0",
- "coupon_due_date#0"
- ]
- },
- "4220": {
- "op": "swap"
- },
- "4221": {
- "retsub": true,
- "op": "retsub"
- },
- "4222": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_interest_amount",
- "params": {
- "principal_amount#0": "uint64",
- "coupon#0": "uint64"
- },
- "block": "coupon_interest_amount",
- "stack_in": [],
- "op": "proto 2 1"
- },
- "4225": {
- "op": "frame_dig -1",
- "defined_out": [
- "coupon#0 (copy)"
- ],
- "stack_out": [
- "coupon#0 (copy)"
- ]
- },
- "4227": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "coupon#0 (copy)"
- ],
- "stack_out": [
- "coupon#0 (copy)",
- "1"
- ]
- },
- "4228": {
- "op": "-",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4229": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "2"
- ]
- },
- "4231": {
- "op": "*",
- "defined_out": [
- "box%element_offset%0#0"
- ],
- "stack_out": [
- "box%element_offset%0#0"
- ]
- },
- "4232": {
- "op": "pushint 2",
- "stack_out": [
- "box%element_offset%0#0",
- "2"
- ]
- },
- "4234": {
- "op": "+",
- "defined_out": [
- "box%offset%0#0"
- ],
- "stack_out": [
- "box%offset%0#0"
- ]
- },
- "4235": {
- "op": "bytec 19 // 0x636f75706f6e5261746573",
- "defined_out": [
- "0x636f75706f6e5261746573",
- "box%offset%0#0"
- ],
- "stack_out": [
- "box%offset%0#0",
- "0x636f75706f6e5261746573"
- ]
- },
- "4237": {
- "op": "swap",
- "stack_out": [
- "0x636f75706f6e5261746573",
- "box%offset%0#0"
- ]
- },
- "4238": {
- "op": "pushint 2",
- "stack_out": [
- "0x636f75706f6e5261746573",
- "box%offset%0#0",
- "2"
- ]
- },
- "4240": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%0#0"
- ],
- "stack_out": [
- "box%box_extract%0#0"
- ]
- },
- "4241": {
- "op": "btoi",
- "defined_out": [
- "coupon_rate_bps#0"
- ],
- "stack_out": [
- "coupon_rate_bps#0"
- ]
- },
- "4242": {
- "op": "frame_dig -2",
- "defined_out": [
- "coupon_rate_bps#0",
- "principal_amount#0 (copy)"
- ],
- "stack_out": [
- "coupon_rate_bps#0",
- "principal_amount#0 (copy)"
- ]
- },
- "4244": {
- "op": "*",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "4245": {
- "op": "pushint 10000",
- "defined_out": [
- "10000",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "10000"
- ]
- },
- "4248": {
- "op": "/",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "4249": {
- "retsub": true,
- "op": "retsub"
- },
- "4250": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.day_count_factor",
- "params": {
- "due_coupons#0": "uint64"
- },
- "block": "day_count_factor",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4253": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "coupon_accrued_period#0"
- ]
- },
- "4255": {
- "op": "dup",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ]
- },
- "4256": {
- "op": "frame_dig -1",
- "defined_out": [
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4258": {
- "op": "bnz day_count_factor_else_body@2",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ]
- },
- "4261": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "0"
- ]
- },
- "4262": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "0",
- "\"issuance_date\""
- ]
- },
- "4264": {
- "op": "app_global_get_ex",
- "defined_out": [
- "accruing_start_time#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0",
- "maybe_exists%0#0"
- ]
- },
- "4265": {
- "error": "check self.issuance_date exists",
- "op": "assert // check self.issuance_date exists",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0"
- ]
- },
- "4266": {
- "block": "day_count_factor_after_if_else@3",
- "stack_in": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0"
- ],
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0",
- "tmp%2#0"
- ]
- },
- "4268": {
- "op": "dig 1",
- "defined_out": [
- "accruing_start_time#0",
- "accruing_start_time#0 (copy)",
- "tmp%2#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0",
- "tmp%2#0",
- "accruing_start_time#0 (copy)"
- ]
- },
- "4270": {
- "op": "-",
- "defined_out": [
- "accruing_start_time#0",
- "coupon_accrued_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0",
- "coupon_accrued_period#0"
- ]
- },
- "4271": {
- "op": "frame_bury 0",
- "defined_out": [
- "accruing_start_time#0",
- "coupon_accrued_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0"
- ]
- },
- "4273": {
- "op": "frame_dig -1",
- "defined_out": [
- "accruing_start_time#0",
- "coupon_accrued_period#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4275": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.next_coupon_due_date",
- "op": "callsub next_coupon_due_date",
- "defined_out": [
- "accruing_start_time#0",
- "coupon_accrued_period#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0",
- "tmp%4#0"
- ]
- },
- "4278": {
- "op": "swap",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "tmp%4#0",
- "accruing_start_time#0"
- ]
- },
- "4279": {
- "op": "-",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0"
- ]
- },
- "4280": {
- "op": "intc_0 // 0",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "0"
- ]
- },
- "4281": {
- "op": "bytec 17 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\"",
- "0",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "0",
- "\"day_count_convention\""
- ]
- },
- "4283": {
- "op": "app_global_get_ex",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "maybe_exists%1#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "4284": {
- "error": "check self.day_count_convention exists",
- "op": "assert // check self.day_count_convention exists",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "maybe_value%1#0"
- ]
- },
- "4285": {
- "op": "bnz day_count_factor_after_if_else@5",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0"
- ]
- },
- "4288": {
- "op": "frame_dig 0",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "coupon_accrued_period#0"
- ]
- },
- "4290": {
- "op": "intc 6 // 86400",
- "defined_out": [
- "86400",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "coupon_accrued_period#0",
- "86400"
- ]
- },
- "4292": {
- "op": "/",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "coupon_accrued_period#0"
- ]
- },
- "4293": {
- "op": "frame_bury 0",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0"
- ]
- },
- "4295": {
- "op": "intc 6 // 86400",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "86400"
- ]
- },
- "4297": {
- "op": "/",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0"
- ]
- },
- "4298": {
- "block": "day_count_factor_after_if_else@5",
- "stack_in": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0"
- ],
- "op": "frame_dig 0",
- "defined_out": [
- "coupon_accrued_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "coupon_accrued_period#0"
- ]
- },
- "4300": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "coupon_accrued_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_period#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "4301": {
- "op": "swap",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "aggregate%val_as_bytes%0#0",
- "coupon_period#0"
- ]
- },
- "4302": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "coupon_accrued_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "4303": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "coupon_accrued_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "aggregate%head%1#0"
- ]
- },
- "4304": {
- "op": "frame_bury 0"
- },
- "4306": {
- "retsub": true,
- "op": "retsub"
- },
- "4307": {
- "block": "day_count_factor_else_body@2",
- "stack_in": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "coupon_due_date#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_due_date#0"
- ]
- },
- "4308": {
- "op": "frame_bury 1",
- "defined_out": [
- "coupon_due_date#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ]
- },
- "4310": {
- "op": "frame_dig -1",
- "defined_out": [
- "coupon_due_date#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4312": {
- "op": "bz day_count_factor_after_if_else@8",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ]
- },
- "4315": {
- "op": "frame_dig -1",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4317": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_due_date",
- "op": "callsub coupon_due_date",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "coupon_due_date#0"
- ]
- },
- "4320": {
- "op": "frame_bury 1",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ]
- },
- "4322": {
- "block": "day_count_factor_after_if_else@8",
- "stack_in": [
- "coupon_accrued_period#0",
- "coupon_due_date#0"
- ],
- "op": "frame_dig 1",
- "defined_out": [
- "accruing_start_time#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_due_date#0",
- "accruing_start_time#0"
- ]
- },
- "4324": {
- "op": "b day_count_factor_after_if_else@3"
- },
- "4327": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.is_accruing_interest",
- "params": {
- "due_coupons#0": "uint64"
- },
- "block": "is_accruing_interest",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4330": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "4331": {
- "op": "bytec 4 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"issuance_date\""
- ]
- },
- "4333": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4334": {
- "error": "check self.issuance_date exists",
- "op": "assert // check self.issuance_date exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "4335": {
- "op": "bz is_accruing_interest_bool_false@4",
- "stack_out": []
- },
- "4338": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "4340": {
- "op": "intc_0 // 0",
- "stack_out": [
- "tmp%1#0",
- "0"
- ]
- },
- "4341": {
- "op": "bytec 4 // \"issuance_date\"",
- "stack_out": [
- "tmp%1#0",
- "0",
- "\"issuance_date\""
- ]
- },
- "4343": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "4344": {
- "error": "check self.issuance_date exists",
- "op": "assert // check self.issuance_date exists",
- "stack_out": [
- "tmp%1#0",
- "maybe_value%1#0"
- ]
- },
- "4345": {
- "op": ">=",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "4346": {
- "op": "bz is_accruing_interest_bool_false@4",
- "stack_out": []
- },
- "4349": {
- "op": "intc_0 // 0",
- "stack_out": [
- "0"
- ]
- },
- "4350": {
- "op": "bytec 7 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"total_coupons\""
- ]
- },
- "4352": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%2#0",
- "maybe_value%2#0"
- ],
- "stack_out": [
- "maybe_value%2#0",
- "maybe_exists%2#0"
- ]
- },
- "4353": {
- "error": "check self.total_coupons exists",
- "op": "assert // check self.total_coupons exists",
- "stack_out": [
- "maybe_value%2#0"
- ]
- },
- "4354": {
- "op": "frame_dig -1",
- "defined_out": [
- "due_coupons#0 (copy)",
- "maybe_value%2#0"
- ],
- "stack_out": [
- "maybe_value%2#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4356": {
- "op": ">",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "4357": {
- "op": "bz is_accruing_interest_bool_false@4",
- "stack_out": []
- },
- "4360": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "and_result%0#0"
- ]
- },
- "4361": {
- "retsub": true,
- "op": "retsub"
- },
- "4362": {
- "block": "is_accruing_interest_bool_false@4",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "and_result%0#0"
- ]
- },
- "4363": {
- "retsub": true,
- "op": "retsub"
- },
- "4364": {
- "subroutine": "modules.core_financial.coupon.FixedCouponCashflowMixin.accrued_interest_amount",
- "params": {
- "holding_address#0": "bytes",
- "units#0": "uint64",
- "due_coupons#0": "uint64"
- },
- "block": "accrued_interest_amount",
- "stack_in": [],
- "op": "proto 3 1"
- },
- "4367": {
- "op": "frame_dig -3",
- "defined_out": [
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0 (copy)"
- ]
- },
- "4369": {
- "op": "frame_dig -1",
- "defined_out": [
- "due_coupons#0 (copy)",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0 (copy)",
- "due_coupons#0 (copy)"
- ]
- },
- "4371": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.assert_no_pending_coupon_payment",
- "op": "callsub assert_no_pending_coupon_payment",
- "stack_out": []
- },
- "4374": {
- "op": "frame_dig -1",
- "stack_out": [
- "due_coupons#0 (copy)"
- ]
- },
- "4376": {
- "callsub": "modules.core_financial.coupon.FixedCouponCashflowMixin.day_count_factor",
- "op": "callsub day_count_factor",
- "defined_out": [
- "day_count_factor#0"
- ],
- "stack_out": [
- "day_count_factor#0"
- ]
- },
- "4379": {
- "op": "dup",
- "defined_out": [
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ],
- "stack_out": [
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ]
- },
- "4380": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ],
- "stack_out": [
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "0"
- ]
- },
- "4381": {
- "op": "extract_uint64",
- "defined_out": [
- "coupon_accrued_period#0",
- "day_count_factor#0"
- ],
- "stack_out": [
- "day_count_factor#0",
- "coupon_accrued_period#0"
- ]
- },
- "4382": {
- "op": "swap",
- "stack_out": [
- "coupon_accrued_period#0",
- "day_count_factor#0"
- ]
- },
- "4383": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "coupon_accrued_period#0",
- "day_count_factor#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "day_count_factor#0",
- "8"
- ]
- },
- "4384": {
- "op": "extract_uint64",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0"
- ]
- },
- "4385": {
- "op": "frame_dig -1",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4387": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "coupon_accrued_period#0",
- "coupon_period#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "due_coupons#0 (copy)",
- "2"
- ]
- },
- "4389": {
- "op": "*",
- "defined_out": [
- "box%element_offset%0#0",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "box%element_offset%0#0"
- ]
- },
- "4390": {
- "op": "pushint 2",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "box%element_offset%0#0",
- "2"
- ]
- },
- "4392": {
- "op": "+",
- "defined_out": [
- "box%offset%0#0",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "box%offset%0#0"
- ]
- },
- "4393": {
- "op": "bytec 19 // 0x636f75706f6e5261746573",
- "defined_out": [
- "0x636f75706f6e5261746573",
- "box%offset%0#0",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "box%offset%0#0",
- "0x636f75706f6e5261746573"
- ]
- },
- "4395": {
- "op": "swap",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "0x636f75706f6e5261746573",
- "box%offset%0#0"
- ]
- },
- "4396": {
- "op": "pushint 2",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "0x636f75706f6e5261746573",
- "box%offset%0#0",
- "2"
- ]
- },
- "4398": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%0#0",
- "coupon_accrued_period#0",
- "coupon_period#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "box%box_extract%0#0"
- ]
- },
- "4399": {
- "op": "btoi",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "next_coupon_rate_bps#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "next_coupon_rate_bps#0"
- ]
- },
- "4400": {
- "op": "frame_dig -3",
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "next_coupon_rate_bps#0",
- "holding_address#0 (copy)"
- ]
- },
- "4402": {
- "op": "frame_dig -2",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "holding_address#0 (copy)",
- "next_coupon_rate_bps#0",
- "units#0 (copy)"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "next_coupon_rate_bps#0",
- "holding_address#0 (copy)",
- "units#0 (copy)"
- ]
- },
- "4404": {
- "callsub": "modules.accounting.AccountingModule.account_units_value",
- "op": "callsub account_units_value",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "next_coupon_rate_bps#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "next_coupon_rate_bps#0",
- "tmp%2#0"
- ]
- },
- "4407": {
- "op": "*",
- "defined_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "coupon_accrued_period#0",
- "coupon_period#0",
- "tmp%3#0"
- ]
- },
- "4408": {
- "op": "uncover 2",
- "stack_out": [
- "coupon_period#0",
- "tmp%3#0",
- "coupon_accrued_period#0"
- ]
- },
- "4410": {
- "op": "*",
- "defined_out": [
- "coupon_period#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "coupon_period#0",
- "tmp%4#0"
- ]
- },
- "4411": {
- "op": "pushint 10000",
- "defined_out": [
- "10000",
- "coupon_period#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "coupon_period#0",
- "tmp%4#0",
- "10000"
- ]
- },
- "4414": {
- "op": "uncover 2",
- "stack_out": [
- "tmp%4#0",
- "10000",
- "coupon_period#0"
- ]
- },
- "4416": {
- "op": "*",
- "defined_out": [
- "tmp%4#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%4#0",
- "tmp%5#0"
- ]
- },
- "4417": {
- "op": "/",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "4418": {
- "retsub": true,
- "op": "retsub"
- },
- "4419": {
- "subroutine": "modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid",
- "params": {
- "due_coupons#0": "uint64"
- },
- "block": "all_due_coupons_paid",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4422": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "4423": {
- "op": "bytec 28 // \"paid_coupon_units\"",
- "defined_out": [
- "\"paid_coupon_units\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"paid_coupon_units\""
- ]
- },
- "4425": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4426": {
- "error": "check self.paid_coupon_units exists",
- "op": "assert // check self.paid_coupon_units exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "4427": {
- "op": "intc_0 // 0",
- "stack_out": [
- "maybe_value%0#0",
- "0"
- ]
- },
- "4428": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "4429": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%0#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "4430": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "maybe_value%0#0",
- "maybe_value%1#0"
- ]
- },
- "4431": {
- "op": "frame_dig -1",
- "defined_out": [
- "due_coupons#0 (copy)",
- "maybe_value%0#0",
- "maybe_value%1#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_value%1#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4433": {
- "op": "*",
- "defined_out": [
- "maybe_value%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "tmp%0#0"
- ]
- },
- "4434": {
- "op": ">=",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "4435": {
- "retsub": true,
- "op": "retsub"
- },
- "4436": {
- "subroutine": "modules.core_financial.coupon.CouponCashflowMixin.assert_no_pending_coupon_payment",
- "params": {
- "holding_address#0": "bytes",
- "due_coupons#0": "uint64"
- },
- "block": "assert_no_pending_coupon_payment",
- "stack_in": [],
- "op": "proto 2 0"
- },
- "4439": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "0x52333023"
- ]
- },
- "4440": {
- "op": "frame_dig -2",
- "defined_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "4442": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4443": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4444": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%box_get%0#0"
- ]
- },
- "4445": {
- "op": "pushint 48",
- "defined_out": [
- "48",
- "aggregate%box_get%0#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "48"
- ]
- },
- "4447": {
- "op": "extract_uint64",
- "defined_out": [
- "values%0#0"
- ],
- "stack_out": [
- "values%0#0"
- ]
- },
- "4448": {
- "op": "frame_dig -1",
- "defined_out": [
- "due_coupons#0 (copy)",
- "values%0#0"
- ],
- "stack_out": [
- "values%0#0",
- "due_coupons#0 (copy)"
- ]
- },
- "4450": {
- "op": "==",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4451": {
- "error": "Pending due coupon payment",
- "op": "assert // Pending due coupon payment",
- "stack_out": []
- },
- "4452": {
- "retsub": true,
- "op": "retsub"
- },
- "4453": {
- "subroutine": "modules.payment_agent.common.PaymentAgentCommonMixin.assert_payment_authorization",
- "params": {
- "holding_address#0": "bytes"
- },
- "block": "assert_payment_authorization",
- "stack_in": [],
- "op": "proto 1 0"
- },
- "4456": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "4457": {
- "op": "bytec 22 // 0x52323523",
- "defined_out": [
- "0",
- "0x52323523"
- ],
- "stack_out": [
- "0",
- "0x52323523"
- ]
- },
- "4459": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4460": {
- "error": "check self.op_daemon exists",
- "op": "assert // check self.op_daemon exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "4461": {
- "op": "global ZeroAddress",
- "defined_out": [
- "maybe_value%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "tmp%0#0"
- ]
- },
- "4463": {
- "op": "!=",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "4464": {
- "op": "bz assert_payment_authorization_after_if_else@7",
- "stack_out": []
- },
- "4467": {
- "op": "txn Sender",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "4469": {
- "op": "intc_0 // 0",
- "stack_out": [
- "tmp%2#0",
- "0"
- ]
- },
- "4470": {
- "op": "bytec 22 // 0x52323523",
- "stack_out": [
- "tmp%2#0",
- "0",
- "0x52323523"
- ]
- },
- "4472": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "4473": {
- "error": "check self.op_daemon exists",
- "op": "assert // check self.op_daemon exists",
- "stack_out": [
- "tmp%2#0",
- "maybe_value%1#0"
- ]
- },
- "4474": {
- "op": "==",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "4475": {
- "op": "bnz assert_payment_authorization_bool_true@4",
- "stack_out": []
- },
- "4478": {
- "op": "txn Sender",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "4480": {
- "op": "frame_dig -1",
- "defined_out": [
- "holding_address#0 (copy)",
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0",
- "holding_address#0 (copy)"
- ]
- },
- "4482": {
- "op": "==",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "4483": {
- "op": "bnz assert_payment_authorization_bool_true@4",
- "stack_out": []
- },
- "4486": {
- "op": "txn Sender",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "4488": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0",
- "0x52333023"
- ]
- },
- "4489": {
- "op": "frame_dig -1",
- "stack_out": [
- "tmp%6#0",
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "4491": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0",
- "box_prefixed_key%0#0"
- ]
- },
- "4492": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4493": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "tmp%6#0",
- "aggregate%box_get%0#0"
- ]
- },
- "4494": {
- "op": "extract 0 32",
- "defined_out": [
- "aggregate%extract%0#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0",
- "aggregate%extract%0#0"
- ]
- },
- "4497": {
- "op": "==",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "tmp%7#0"
- ]
- },
- "4498": {
- "op": "bz assert_payment_authorization_bool_false@5",
- "stack_out": []
- },
- "4501": {
- "block": "assert_payment_authorization_bool_true@4",
- "stack_in": [],
- "op": "intc_1 // 1",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "or_result%0#0"
- ]
- },
- "4502": {
- "error": "Not authorized",
- "block": "assert_payment_authorization_bool_merge@6",
- "stack_in": [
- "or_result%0#0"
- ],
- "op": "assert // Not authorized",
- "defined_out": [],
- "stack_out": []
- },
- "4503": {
- "block": "assert_payment_authorization_after_if_else@7",
- "stack_in": [],
- "retsub": true,
- "op": "retsub"
- },
- "4504": {
- "block": "assert_payment_authorization_bool_false@5",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "or_result%0#0"
- ]
- },
- "4505": {
- "op": "b assert_payment_authorization_bool_merge@6"
- },
- "4508": {
- "subroutine": "modules.payment_agent.common.PaymentAgentCommonMixin.is_payment_executable",
- "params": {
- "holding_address#0": "bytes"
- },
- "block": "is_payment_executable",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4511": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "0x52333023"
- ]
- },
- "4512": {
- "op": "frame_dig -1",
- "defined_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "4514": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4515": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0"
- ]
- },
- "4516": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4517": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%box_get%0#0"
- ]
- },
- "4518": {
- "op": "extract 0 32",
- "defined_out": [
- "aggregate%extract%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%extract%0#0"
- ]
- },
- "4521": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%extract%0#0",
- "0"
- ]
- },
- "4522": {
- "op": "bytec 9 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\"",
- "0",
- "aggregate%extract%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%extract%0#0",
- "0",
- "\"settlement_asset_id\""
- ]
- },
- "4524": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%extract%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%extract%0#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4525": {
- "error": "check self.settlement_asset_id exists",
- "op": "assert // check self.settlement_asset_id exists",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%extract%0#0",
- "maybe_value%0#0"
- ]
- },
- "4526": {
- "op": "asset_holding_get AssetBalance",
- "defined_out": [
- "box_prefixed_key%0#0",
- "tmp%0#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "tmp%0#0",
- "tmp%1#0"
- ]
- },
- "4528": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#0",
- "tmp%1#0"
- ]
- },
- "4530": {
- "op": "bz is_payment_executable_bool_false@3",
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4533": {
- "op": "frame_dig 0",
- "stack_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0"
- ]
- },
- "4535": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "4536": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%box_get%2#0"
- ]
- },
- "4537": {
- "op": "pushint 448",
- "defined_out": [
- "448",
- "aggregate%box_get%2#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%box_get%2#0",
- "448"
- ]
- },
- "4540": {
- "op": "getbit",
- "defined_out": [
- "aggregate%get_bit%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%get_bit%0#0"
- ]
- },
- "4541": {
- "op": "bnz is_payment_executable_bool_false@3",
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4544": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "and_result%0#0"
- ]
- },
- "4545": {
- "block": "is_payment_executable_bool_merge@4",
- "stack_in": [
- "box_prefixed_key%0#0",
- "and_result%0#0"
- ],
- "op": "swap",
- "defined_out": [
- "and_result%0#0"
- ]
- },
- "4546": {
- "retsub": true,
- "op": "retsub"
- },
- "4547": {
- "block": "is_payment_executable_bool_false@3",
- "stack_in": [
- "box_prefixed_key%0#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "and_result%0#0"
- ]
- },
- "4548": {
- "op": "b is_payment_executable_bool_merge@4"
- },
- "4551": {
- "subroutine": "modules.payment_agent.common.PaymentAgentCommonMixin.assert_enough_funds",
- "params": {
- "payment_amount#0": "uint64"
- },
- "block": "assert_enough_funds",
- "stack_in": [],
- "op": "proto 1 0"
- },
- "4554": {
- "op": "global CurrentApplicationAddress",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4556": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "0"
- ]
- },
- "4557": {
- "op": "bytec 9 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\"",
- "0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "0",
- "\"settlement_asset_id\""
- ]
- },
- "4559": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4560": {
- "error": "check self.settlement_asset_id exists",
- "op": "assert // check self.settlement_asset_id exists",
- "stack_out": [
- "tmp%0#0",
- "maybe_value%0#0"
- ]
- },
- "4561": {
- "op": "asset_holding_get AssetBalance",
- "defined_out": [
- "check%0#0",
- "value%0#0"
- ],
- "stack_out": [
- "value%0#0",
- "check%0#0"
- ]
- },
- "4563": {
- "error": "account opted into asset",
- "op": "assert // account opted into asset",
- "stack_out": [
- "value%0#0"
- ]
- },
- "4564": {
- "op": "frame_dig -1",
- "defined_out": [
- "payment_amount#0 (copy)",
- "value%0#0"
- ],
- "stack_out": [
- "value%0#0",
- "payment_amount#0 (copy)"
- ]
- },
- "4566": {
- "op": ">=",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "4567": {
- "error": "Not enough funds for the payment",
- "op": "assert // Not enough funds for the payment",
- "stack_out": []
- },
- "4568": {
- "retsub": true,
- "op": "retsub"
- },
- "4569": {
- "subroutine": "modules.payment_agent.common.PaymentAgentCommonMixin.pay",
- "params": {
- "receiver#0": "bytes",
- "amount#0": "uint64"
- },
- "block": "pay",
- "stack_in": [],
- "op": "proto 2 0"
- },
- "4572": {
- "op": "itxn_begin"
- },
- "4573": {
- "op": "global MinTxnFee",
- "defined_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "4575": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "0"
- ]
- },
- "4576": {
- "op": "bytec 9 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\"",
- "0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "0",
- "\"settlement_asset_id\""
- ]
- },
- "4578": {
- "op": "app_global_get_ex",
- "defined_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4579": {
- "error": "check self.settlement_asset_id exists",
- "op": "assert // check self.settlement_asset_id exists",
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0"
- ]
- },
- "4580": {
- "op": "frame_dig -1",
- "defined_out": [
- "amount#0 (copy)",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0",
- "amount#0 (copy)"
- ]
- },
- "4582": {
- "op": "itxn_field AssetAmount",
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0"
- ]
- },
- "4584": {
- "op": "frame_dig -2",
- "defined_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0",
- "receiver#0 (copy)"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0",
- "receiver#0 (copy)"
- ]
- },
- "4586": {
- "op": "itxn_field AssetReceiver",
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "maybe_value%0#0"
- ]
- },
- "4588": {
- "op": "itxn_field XferAsset",
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "4590": {
- "op": "pushint 4 // axfer",
- "defined_out": [
- "axfer",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ],
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "axfer"
- ]
- },
- "4592": {
- "op": "itxn_field TypeEnum",
- "stack_out": [
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "4594": {
- "op": "itxn_field Fee",
- "stack_out": []
- },
- "4596": {
- "op": "itxn_submit"
- },
- "4597": {
- "retsub": true,
- "op": "retsub"
- },
- "4598": {
- "subroutine": "modules.core_financial.common.CoreFinancialCommonMixin.assert_time_events_sorted",
- "params": {
- "time_events#0": "bytes"
- },
- "block": "assert_time_events_sorted",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4601": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "time_f#0"
- ]
- },
- "4603": {
- "op": "dupn 2",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0"
- ]
- },
- "4605": {
- "op": "frame_dig -1",
- "defined_out": [
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "time_events#0 (copy)"
- ]
- },
- "4607": {
- "op": "extract 2 0",
- "defined_out": [
- "aggregate%array_trimmed%0#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "4610": {
- "op": "frame_dig -1",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)"
- ]
- },
- "4612": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)",
- "2"
- ]
- },
- "4614": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "values%0#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "values%0#0"
- ]
- },
- "4615": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "tmp%0#0",
- "values%0#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "values%0#0",
- "tmp%0#0"
- ]
- },
- "4617": {
- "op": ">",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%1#0"
- ]
- },
- "4618": {
- "error": "Time events must be set in the future",
- "op": "assert // Time events must be set in the future",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "4619": {
- "op": "frame_dig -1",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)"
- ]
- },
- "4621": {
- "op": "intc_0 // 0",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "time_events#0 (copy)",
- "0"
- ]
- },
- "4622": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_trimmed%0#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "aggregate%array_length%0#0"
- ]
- },
- "4623": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "aggregate%array_length%0#0",
- "aggregate%array_trimmed%0#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "aggregate%array_length%0#0",
- "1"
- ]
- },
- "4624": {
- "op": "-",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0"
- ]
- },
- "4625": {
- "op": "intc_0 // 0",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4626": {
- "block": "assert_time_events_sorted_for_header@1",
- "stack_in": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ],
- "op": "frame_dig 5",
- "defined_out": [
- "idx#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0"
- ]
- },
- "4628": {
- "op": "frame_dig 4",
- "defined_out": [
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0",
- "tmp%3#0"
- ]
- },
- "4630": {
- "op": "<",
- "defined_out": [
- "continue_looping%0#0",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "continue_looping%0#0"
- ]
- },
- "4631": {
- "op": "bz assert_time_events_sorted_after_for@6",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4634": {
- "op": "pushint 65",
- "defined_out": [
- "65",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "65"
- ]
- },
- "4636": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "65",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "65",
- "1"
- ]
- },
- "4637": {
- "callsub": "_puya_lib.util.ensure_budget",
- "op": "callsub ensure_budget",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4640": {
- "op": "frame_dig 5",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0"
- ]
- },
- "4642": {
- "op": "dup",
- "defined_out": [
- "idx#0",
- "idx#0 (copy)",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0",
- "idx#0 (copy)"
- ]
- },
- "4643": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "idx#0",
- "idx#0 (copy)",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0",
- "idx#0 (copy)",
- "8"
- ]
- },
- "4644": {
- "op": "*",
- "defined_out": [
- "aggregate%bytes_offset%1#0",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0",
- "aggregate%bytes_offset%1#0"
- ]
- },
- "4645": {
- "op": "frame_dig 3",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%1#0",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0",
- "aggregate%bytes_offset%1#0",
- "aggregate%array_trimmed%0#0"
- ]
- },
- "4647": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "aggregate%array_trimmed%0#0 (copy)",
- "aggregate%bytes_offset%1#0",
- "idx#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0",
- "aggregate%bytes_offset%1#0",
- "aggregate%array_trimmed%0#0 (copy)",
- "aggregate%array_trimmed%0#0 (copy)"
- ]
- },
- "4648": {
- "op": "cover 3",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "aggregate%bytes_offset%1#0",
- "aggregate%array_trimmed%0#0 (copy)"
- ]
- },
- "4650": {
- "op": "swap",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "aggregate%array_trimmed%0#0 (copy)",
- "aggregate%bytes_offset%1#0"
- ]
- },
- "4651": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0"
- ]
- },
- "4652": {
- "op": "dup",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0",
- "time_i#0 (copy)"
- ]
- },
- "4653": {
- "op": "cover 3",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0"
- ]
- },
- "4655": {
- "op": "frame_bury 1",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "idx#0"
- ]
- },
- "4657": {
- "op": "intc_1 // 1",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "1"
- ]
- },
- "4658": {
- "op": "+",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "tmp%4#0"
- ]
- },
- "4659": {
- "op": "dup",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "tmp%4#0",
- "tmp%4#0"
- ]
- },
- "4660": {
- "op": "frame_bury 2",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "tmp%4#0"
- ]
- },
- "4662": {
- "op": "intc_3 // 8",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "tmp%4#0",
- "8"
- ]
- },
- "4663": {
- "op": "*",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%2#0",
- "idx#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "aggregate%array_trimmed%0#0",
- "aggregate%bytes_offset%2#0"
- ]
- },
- "4664": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "time_f#0"
- ]
- },
- "4665": {
- "op": "dup",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "time_f#0",
- "time_f#0"
- ]
- },
- "4666": {
- "op": "frame_bury 0",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_i#0",
- "time_f#0"
- ]
- },
- "4668": {
- "op": "<",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "tmp%5#0"
- ]
- },
- "4669": {
- "error": "Time events must be sorted in strictly ascending order",
- "op": "assert // Time events must be sorted in strictly ascending order",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4670": {
- "op": "intc_0 // 0",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "0"
- ]
- },
- "4671": {
- "op": "bytec 17 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\"",
- "0",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "0",
- "\"day_count_convention\""
- ]
- },
- "4673": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4674": {
- "error": "check self.day_count_convention exists",
- "op": "assert // check self.day_count_convention exists",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "maybe_value%0#0"
- ]
- },
- "4675": {
- "op": "intc 4 // 255",
- "defined_out": [
- "255",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "maybe_value%0#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "maybe_value%0#0",
- "255"
- ]
- },
- "4677": {
- "op": "!=",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "tmp%6#0"
- ]
- },
- "4678": {
- "op": "bz assert_time_events_sorted_after_if_else@4",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4681": {
- "op": "frame_dig 0",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_f#0"
- ]
- },
- "4683": {
- "op": "frame_dig 1",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_f#0",
- "time_i#0"
- ]
- },
- "4685": {
- "op": "-",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0",
- "tmp%7#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "tmp%7#0"
- ]
- },
- "4686": {
- "op": "intc 6 // 86400",
- "defined_out": [
- "86400",
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0",
- "tmp%7#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "tmp%7#0",
- "86400"
- ]
- },
- "4688": {
- "op": "%",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "tmp%8#0"
- ]
- },
- "4689": {
- "op": "!",
- "defined_out": [
- "aggregate%array_trimmed%0#0",
- "idx#0",
- "time_f#0",
- "time_i#0",
- "tmp%3#0",
- "tmp%4#0",
- "tmp%9#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "tmp%9#0"
- ]
- },
- "4690": {
- "error": "Time periods in Actual/Actual day count convention must be multiples of a day (in seconds)",
- "op": "assert // Time periods in Actual/Actual day count convention must be multiples of a day (in seconds)",
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4691": {
- "block": "assert_time_events_sorted_after_if_else@4",
- "stack_in": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ],
- "op": "frame_dig 2",
- "defined_out": [
- "idx#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "idx#0"
- ]
- },
- "4693": {
- "op": "frame_bury 5",
- "defined_out": [
- "idx#0"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ]
- },
- "4695": {
- "op": "b assert_time_events_sorted_for_header@1"
- },
- "4698": {
- "block": "assert_time_events_sorted_after_for@6",
- "stack_in": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0"
- ],
- "op": "frame_dig -1",
- "defined_out": [
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "time_f#0",
- "time_i#0",
- "tmp%4#0",
- "aggregate%array_trimmed%0#0",
- "tmp%3#0",
- "idx#0",
- "time_events#0 (copy)"
- ]
- },
- "4700": {
- "op": "frame_bury 0"
- },
- "4702": {
- "retsub": true,
- "op": "retsub"
- },
- "4703": {
- "subroutine": "modules.accounting.AccountingModule.assert_is_not_account_suspended",
- "params": {
- "holding_address#0": "bytes"
- },
- "block": "assert_is_not_account_suspended",
- "stack_in": [],
- "op": "proto 1 0"
- },
- "4706": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "0x52333023"
- ]
- },
- "4707": {
- "op": "frame_dig -1",
- "defined_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "4709": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4710": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4711": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%box_get%0#0"
- ]
- },
- "4712": {
- "op": "pushint 448",
- "defined_out": [
- "448",
- "aggregate%box_get%0#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "448"
- ]
- },
- "4715": {
- "op": "getbit",
- "defined_out": [
- "aggregate%get_bit%0#0"
- ],
- "stack_out": [
- "aggregate%get_bit%0#0"
- ]
- },
- "4716": {
- "op": "!",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4717": {
- "error": "Suspended operations",
- "op": "assert // Suspended operations",
- "stack_out": []
- },
- "4718": {
- "retsub": true,
- "op": "retsub"
- },
- "4719": {
- "subroutine": "modules.accounting.AccountingModule.account_units_value",
- "params": {
- "holding_address#0": "bytes",
- "units#0": "uint64"
- },
- "block": "account_units_value",
- "stack_in": [],
- "op": "proto 2 1"
- },
- "4722": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "0x52333023"
- ]
- },
- "4723": {
- "op": "frame_dig -2",
- "defined_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "4725": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4726": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4727": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%box_get%0#0"
- ]
- },
- "4728": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "aggregate%box_get%0#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "40"
- ]
- },
- "4730": {
- "op": "extract_uint64",
- "defined_out": [
- "values%0#0"
- ],
- "stack_out": [
- "values%0#0"
- ]
- },
- "4731": {
- "op": "frame_dig -1",
- "defined_out": [
- "units#0 (copy)",
- "values%0#0"
- ],
- "stack_out": [
- "values%0#0",
- "units#0 (copy)"
- ]
- },
- "4733": {
- "op": "*",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4734": {
- "retsub": true,
- "op": "retsub"
- },
- "4735": {
- "subroutine": "modules.accounting.AccountingModule.account_total_units_value",
- "params": {
- "holding_address#0": "bytes"
- },
- "block": "account_total_units_value",
- "stack_in": [],
- "op": "proto 1 1"
- },
- "4738": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "0x52333023"
- ]
- },
- "4739": {
- "op": "frame_dig -1",
- "defined_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "4741": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0"
- ]
- },
- "4742": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4743": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "aggregate%box_get%0#0"
- ]
- },
- "4744": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%0#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "4745": {
- "op": "extract_uint64",
- "defined_out": [
- "values%0#0"
- ],
- "stack_out": [
- "values%0#0"
- ]
- },
- "4746": {
- "op": "frame_dig -1",
- "stack_out": [
- "values%0#0",
- "holding_address#0 (copy)"
- ]
- },
- "4748": {
- "op": "swap",
- "stack_out": [
- "holding_address#0 (copy)",
- "values%0#0"
- ]
- },
- "4749": {
- "callsub": "modules.accounting.AccountingModule.account_units_value",
- "op": "callsub account_units_value",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4752": {
- "retsub": true,
- "op": "retsub"
- },
- "4753": {
- "subroutine": "modules.accounting.AccountingModule.end_if_no_circulating_units",
- "params": {},
- "block": "end_if_no_circulating_units",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "4754": {
- "op": "bytec_3 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"circulating_units\""
- ]
- },
- "4755": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4756": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "4757": {
- "op": "bnz end_if_no_circulating_units_after_if_else@2",
- "stack_out": []
- },
- "4760": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\""
- ],
- "stack_out": [
- "\"status\""
- ]
- },
- "4761": {
- "op": "intc 5 // 200",
- "defined_out": [
- "\"status\"",
- "200"
- ],
- "stack_out": [
- "\"status\"",
- "200"
- ]
- },
- "4763": {
- "op": "app_global_put",
- "stack_out": []
- },
- "4764": {
- "block": "end_if_no_circulating_units_after_if_else@2",
- "stack_in": [],
- "retsub": true,
- "op": "retsub"
- },
- "4765": {
- "subroutine": "modules.rbac.RbacModule._role_is_active",
- "params": {
- "role_map#0": "bytes",
- "role_address#0": "bytes"
- },
- "block": "_role_is_active",
- "stack_in": [],
- "op": "proto 2 1"
- },
- "4768": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "awst_tmp%0#0"
- ]
- },
- "4770": {
- "op": "frame_dig -2",
- "defined_out": [
- "role_map#0 (copy)"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "role_map#0 (copy)"
- ]
- },
- "4772": {
- "op": "frame_dig -1",
- "defined_out": [
- "role_address#0 (copy)",
- "role_map#0 (copy)"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "role_map#0 (copy)",
- "role_address#0 (copy)"
- ]
- },
- "4774": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4775": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "4776": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4777": {
- "op": "bury 1",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "4779": {
- "op": "bz _role_is_active_bool_false@4",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4782": {
- "op": "frame_dig 1",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "4784": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "4785": {
- "error": "check BoxMap entry exists",
- "op": "assert // check BoxMap entry exists",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0"
- ]
- },
- "4786": {
- "op": "intc_0 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "0"
- ]
- },
- "4787": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0"
- ]
- },
- "4788": {
- "op": "global LatestTimestamp"
- },
- "4790": {
- "op": "dup",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0",
- "awst_tmp%0#0",
- "awst_tmp%0#0"
- ]
- },
- "4791": {
- "op": "frame_bury 0",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0",
- "awst_tmp%0#0"
- ]
- },
- "4793": {
- "op": "<=",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%1#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%1#0"
- ]
- },
- "4794": {
- "op": "bz _role_is_active_bool_false@4",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4797": {
- "op": "frame_dig 1",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "4799": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "4800": {
- "error": "check BoxMap entry exists",
- "op": "assert // check BoxMap entry exists",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%2#0"
- ]
- },
- "4801": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "aggregate%box_get%2#0",
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%2#0",
- "8"
- ]
- },
- "4802": {
- "op": "extract_uint64",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%1#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%1#0"
- ]
- },
- "4803": {
- "op": "frame_dig 0",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%1#0",
- "awst_tmp%0#0"
- ]
- },
- "4805": {
- "op": ">=",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ]
- },
- "4806": {
- "op": "bz _role_is_active_bool_false@4",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "4809": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0",
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "and_result%0#0"
- ]
- },
- "4810": {
- "block": "_role_is_active_bool_merge@5",
- "stack_in": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "and_result%0#0"
- ],
- "op": "frame_bury 0",
- "defined_out": [
- "and_result%0#0"
- ]
- },
- "4812": {
- "retsub": true,
- "op": "retsub"
- },
- "4813": {
- "block": "_role_is_active_bool_false@4",
- "stack_in": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "and_result%0#0"
- ]
- },
- "4814": {
- "op": "b _role_is_active_bool_merge@5"
- },
- "4817": {
- "subroutine": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "params": {},
- "block": "assert_caller_is_arranger",
- "stack_in": [],
- "op": "txn Sender",
- "defined_out": [
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0"
- ]
- },
- "4819": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0"
- ]
- },
- "4820": {
- "op": "bytec 8 // 0x52323023",
- "defined_out": [
- "0",
- "0x52323023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0",
- "0x52323023"
- ]
- },
- "4822": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4823": {
- "error": "check self.arranger exists",
- "op": "assert // check self.arranger exists",
- "stack_out": [
- "role_address#0",
- "maybe_value%0#0"
- ]
- },
- "4824": {
- "op": "==",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "4825": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": []
- },
- "4826": {
- "retsub": true,
- "op": "retsub"
- },
- "4827": {
- "subroutine": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "params": {},
- "block": "assert_is_not_asset_defaulted",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "4828": {
- "op": "bytec 24 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"asset_defaulted\""
- ]
- },
- "4830": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4831": {
- "error": "check self.asset_defaulted exists",
- "op": "assert // check self.asset_defaulted exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "4832": {
- "op": "!",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4833": {
- "error": "Defaulted",
- "op": "assert // Defaulted",
- "stack_out": []
- },
- "4834": {
- "retsub": true,
- "op": "retsub"
- },
- "4835": {
- "subroutine": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "params": {},
- "block": "assert_is_not_asset_suspended",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "4836": {
- "op": "bytec 23 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"asset_suspended\""
- ]
- },
- "4838": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "4839": {
- "error": "check self.asset_suspended exists",
- "op": "assert // check self.asset_suspended exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "4840": {
- "op": "!",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4841": {
- "error": "Suspended operations",
- "op": "assert // Suspended operations",
- "stack_out": []
- },
- "4842": {
- "retsub": true,
- "op": "retsub"
- },
- "4843": {
- "subroutine": "modules.rbac.RbacModule._assert_valid_role",
- "params": {
- "role_id#0": "uint64"
- },
- "block": "_assert_valid_role",
- "stack_in": [],
- "op": "proto 1 0"
- },
- "4846": {
- "op": "frame_dig -1",
- "defined_out": [
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "4848": {
- "op": "pushint 20",
- "defined_out": [
- "20",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "20"
- ]
- },
- "4850": {
- "op": "==",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "4851": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "4854": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "4856": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "40"
- ]
- },
- "4858": {
- "op": "==",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "4859": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "4862": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "4864": {
- "op": "pushint 50",
- "defined_out": [
- "50",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "50"
- ]
- },
- "4866": {
- "op": "==",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "4867": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "4870": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "4872": {
- "op": "pushint 60",
- "defined_out": [
- "60",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "60"
- ]
- },
- "4874": {
- "op": "==",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "4875": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "4878": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "4880": {
- "op": "pushint 70",
- "defined_out": [
- "70",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "70"
- ]
- },
- "4882": {
- "op": "==",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "4883": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "4886": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "4888": {
- "op": "pushint 80",
- "defined_out": [
- "80",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "80"
- ]
- },
- "4890": {
- "op": "==",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "4891": {
- "op": "bz _assert_valid_role_bool_false@7",
- "stack_out": []
- },
- "4894": {
- "block": "_assert_valid_role_bool_true@6",
- "stack_in": [],
- "op": "intc_1 // 1",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "or_result%0#0"
- ]
- },
- "4895": {
- "error": "Invalid role identifier",
- "block": "_assert_valid_role_bool_merge@8",
- "stack_in": [
- "or_result%0#0"
- ],
- "op": "assert // Invalid role identifier",
- "defined_out": [],
- "stack_out": []
- },
- "4896": {
- "retsub": true,
- "op": "retsub"
- },
- "4897": {
- "block": "_assert_valid_role_bool_false@7",
- "stack_in": [],
- "op": "intc_0 // 0",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "or_result%0#0"
- ]
- },
- "4898": {
- "op": "b _assert_valid_role_bool_merge@8"
- }
- }
-}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.approval.teal b/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.approval.teal
deleted file mode 100644
index b9ec56e3..00000000
--- a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.approval.teal
+++ /dev/null
@@ -1,4980 +0,0 @@
-#pragma version 12
-#pragma typetrack false
-
-// algopy.arc4.ARC4Contract.approval_program() -> uint64:
-main:
- intcblock 0 1 32 8 255 200 86400
- bytecblock 0x151f7c75 0x52333023 "status" "circulating_units" "issuance_date" "maturity_date" "unit_value" "total_coupons" 0x52323023 "settlement_asset_id" "primary_distribution_opening_date" "secondary_market_closure_date" 0x74696d654576656e7473 0x52373023 0x52343023 "total_units" "denomination_asset_id" "day_count_convention" "secondary_market_opening_date" 0x636f75706f6e5261746573 0x52363023 0x52353023 0x52323523 "asset_suspended" "asset_defaulted" "metadata" "principal_discount" "primary_distribution_closure_date" "paid_coupon_units" "due_coupons_watermark" 0x0000 0x00 0x52383023 "interest_rate" 0x068101 0x003b 0x8c29904e 0x0012
- txn ApplicationID
- bnz main_after_if_else@2
- // modules/rbac.py:30-31
- // # RBAC Roles
- // self.arranger = GlobalState(Account(), key=cst.PREFIX_ID_ARRANGER)
- bytec 8 // 0x52323023
- global ZeroAddress
- app_global_put
- // modules/rbac.py:32
- // self.op_daemon = GlobalState(Account(), key=cst.PREFIX_ID_OP_DAEMON)
- bytec 22 // 0x52323523
- global ZeroAddress
- app_global_put
- // modules/rbac.py:47-48
- // # D-ASA Governance
- // self.asset_suspended = False
- bytec 23 // "asset_suspended"
- intc_0 // 0
- app_global_put
- // modules/rbac.py:49
- // self.asset_defaulted = False
- bytec 24 // "asset_defaulted"
- intc_0 // 0
- app_global_put
- // modules/accounting.py:19
- // self.total_units = UInt64()
- bytec 15 // "total_units"
- intc_0 // 0
- app_global_put
- // modules/accounting.py:20
- // self.circulating_units = UInt64()
- bytec_3 // "circulating_units"
- intc_0 // 0
- app_global_put
- // modules/accounting.py:21
- // self.unit_value = UInt64()
- bytec 6 // "unit_value"
- intc_0 // 0
- app_global_put
- // modules/accounting.py:22
- // self.status = UInt64(enm.STATUS_INACTIVE)
- bytec_2 // "status"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:31-32
- // # Asset Configuration
- // self.denomination_asset_id = Asset()
- bytec 16 // "denomination_asset_id"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:33
- // self.settlement_asset_id = Asset()
- bytec 9 // "settlement_asset_id"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:34
- // self.unit_value = UInt64()
- bytec 6 // "unit_value"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:35
- // self.day_count_convention = UInt64()
- bytec 17 // "day_count_convention"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:37-38
- // # Metadata
- // self.metadata = Bytes()
- bytec 25 // "metadata"
- pushbytes 0x
- app_global_put
- // modules/core_financial/common.py:40-41
- // # Principal / Rates
- // self.principal_discount = UInt64()
- bytec 26 // "principal_discount"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:42
- // self.interest_rate = UInt64()
- bytec 33 // "interest_rate"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:43
- // self.total_coupons = UInt64()
- bytec 7 // "total_coupons"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:47
- // self.primary_distribution_opening_date = UInt64()
- bytec 10 // "primary_distribution_opening_date"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:48
- // self.primary_distribution_closure_date = UInt64()
- bytec 27 // "primary_distribution_closure_date"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:49
- // self.issuance_date = UInt64()
- bytec 4 // "issuance_date"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:50
- // self.secondary_market_opening_date = UInt64()
- bytec 18 // "secondary_market_opening_date"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:51
- // self.secondary_market_closure_date = UInt64()
- bytec 11 // "secondary_market_closure_date"
- intc_0 // 0
- app_global_put
- // modules/core_financial/common.py:52
- // self.maturity_date = UInt64()
- bytec 5 // "maturity_date"
- intc_0 // 0
- app_global_put
- // modules/core_financial/coupon.py:24
- // self.paid_coupon_units = UInt64()
- bytec 28 // "paid_coupon_units"
- intc_0 // 0
- app_global_put
- // modules/core_financial/coupon.py:102
- // self.due_coupons_watermark = UInt64()
- bytec 29 // "due_coupons_watermark"
- intc_0 // 0
- app_global_put
- // smart_contracts/fixed_coupon_bond/contract.py:33
- // assert Txn.global_num_byte_slice == cfg.GLOBAL_BYTES, err.WRONG_GLOBAL_BYTES
- txn GlobalNumByteSlice
- pushint 3
- ==
- assert // Wrong Global Bytes allocation
- // smart_contracts/fixed_coupon_bond/contract.py:34
- // assert Txn.global_num_uint == cfg.GLOBAL_UINTS, err.WRONG_GLOBAL_UINTS
- txn GlobalNumUint
- pushint 20
- ==
- assert // Wrong Global UInts allocation
- // smart_contracts/fixed_coupon_bond/contract.py:35
- // assert Txn.local_num_byte_slice == cfg.LOCAL_BYTES, err.WRONG_LOCAL_BYTES
- txn LocalNumByteSlice
- !
- assert // Wrong Local Bytes allocation
- // smart_contracts/fixed_coupon_bond/contract.py:36
- // assert Txn.local_num_uint == cfg.LOCAL_UINTS, err.WRONG_LOCAL_UINTS
- txn LocalNumUint
- !
- assert // Wrong Local UInts allocation
-
-main_after_if_else@2:
- // smart_contracts/fixed_coupon_bond/contract.py:17-30
- // class FixedCouponBond(
- // PAMCoreMixin,
- // FixedCouponCashflowMixin,
- // CouponPaymentAgentMixin,
- // PrincipalPaymentAgentMixin,
- // CouponTransferAgentMixin,
- // state_totals=StateTotals(
- // global_bytes=cfg.GLOBAL_BYTES,
- // global_uints=cfg.GLOBAL_UINTS,
- // local_bytes=cfg.LOCAL_BYTES,
- // local_uints=cfg.LOCAL_UINTS,
- // ),
- // avm_version=12,
- // ):
- pushbytes 0x25dba95b // method "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void"
- txna ApplicationArgs 0
- match main_asset_update_route@4
-
-main_switch_case_next@5:
- // smart_contracts/fixed_coupon_bond/contract.py:17-30
- // class FixedCouponBond(
- // PAMCoreMixin,
- // FixedCouponCashflowMixin,
- // CouponPaymentAgentMixin,
- // PrincipalPaymentAgentMixin,
- // CouponTransferAgentMixin,
- // state_totals=StateTotals(
- // global_bytes=cfg.GLOBAL_BYTES,
- // global_uints=cfg.GLOBAL_UINTS,
- // local_bytes=cfg.LOCAL_BYTES,
- // local_uints=cfg.LOCAL_UINTS,
- // ),
- // avm_version=12,
- // ):
- txn OnCompletion
- !
- assert
- txn ApplicationID
- bz main_create_NoOp@36
- pushbytess 0x89474134 0x44363d49 0x53bef045 0x67db4f20 0xf6a96c8d 0x8cf14b51 0x9c76b6a3 0x4fd6a3cc 0x1d6fc255 0x25e9997f 0x6c85e3ee 0x402dba47 0xfad2173e 0x08efea35 0xe4a5ab54 0xdc063b35 0x14fc10ef 0x4c113ed5 0x74a7297f 0x105c184e 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void", method "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))", method "get_coupon_rates()uint16[]", method "get_payment_amount(address)(uint64,uint64)", method "get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)", method "pay_coupon(address,byte[])(uint64,uint64,byte[])", method "pay_principal(address,byte[])(uint64,uint64,byte[])", method "asset_transfer(address,address,uint64)uint64", method "set_secondary_time_events(uint64[])(uint64,uint64)", method "set_default_status(bool)uint64", method "primary_distribution(address,uint64)uint64", method "get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)", method "get_time_events()uint64[]", method "get_secondary_market_schedule()uint64[]", method "get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", method "account_gov_suspension(address,bool)uint64", method "account_open(address,address)uint64", method "account_close(address)(uint64,uint64)", method "account_update_payment_address(address,address)uint64", method "account_get_info(address)(address,uint64,uint64,uint64,bool)", method "rbac_rotate_arranger(address)uint64", method "rbac_set_op_daemon(address)uint64", method "rbac_assign_role(uint8,address,byte[])uint64", method "rbac_revoke_role(uint8,address)uint64", method "rbac_gov_asset_suspension(bool)uint64", method "rbac_get_arranger()address", method "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", method "rbac_get_role_config(uint8,address)(uint64,uint64)"
- txna ApplicationArgs 0
- match asset_config get_account_units_current_value get_coupon_rates get_payment_amount get_coupons_status pay_coupon pay_principal asset_transfer set_secondary_time_events set_default_status primary_distribution get_asset_info get_time_events get_secondary_market_schedule get_asset_metadata account_gov_suspension account_open account_close account_update_payment_address account_get_info rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config
- err
-
-main_create_NoOp@36:
- // smart_contracts/fixed_coupon_bond/contract.py:17-30
- // class FixedCouponBond(
- // PAMCoreMixin,
- // FixedCouponCashflowMixin,
- // CouponPaymentAgentMixin,
- // PrincipalPaymentAgentMixin,
- // CouponTransferAgentMixin,
- // state_totals=StateTotals(
- // global_bytes=cfg.GLOBAL_BYTES,
- // global_uints=cfg.GLOBAL_UINTS,
- // local_bytes=cfg.LOCAL_BYTES,
- // local_uints=cfg.LOCAL_UINTS,
- // ),
- // avm_version=12,
- // ):
- pushbytes 0x3f0efc6c // method "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void"
- txna ApplicationArgs 0
- match asset_create
- err
-
-main_asset_update_route@4:
- // modules/core_financial/common.py:279
- // @arc4.abimethod(allow_actions=["UpdateApplication"])
- txn OnCompletion
- pushint 4 // UpdateApplication
- ==
- txn ApplicationID
- &&
- assert
- b asset_update
-
-
-// _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void:
-ensure_budget:
- proto 2 0
- frame_dig -2
- pushint 10
- +
-
-ensure_budget_while_top@1:
- frame_dig 0
- global OpcodeBudget
- >
- bz ensure_budget_after_while@6
- itxn_begin
- pushint 6 // appl
- itxn_field TypeEnum
- pushint 5 // DeleteApplication
- itxn_field OnCompletion
- bytec 34 // 0x068101
- itxn_field ApprovalProgram
- bytec 34 // 0x068101
- itxn_field ClearStateProgram
- frame_dig -1
- switch ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4
-
-ensure_budget_switch_case_next@5:
- itxn_submit
- b ensure_budget_while_top@1
-
-ensure_budget_switch_case_1@4:
- global MinTxnFee
- itxn_field Fee
- b ensure_budget_switch_case_next@5
-
-ensure_budget_switch_case_0@3:
- intc_0 // 0
- itxn_field Fee
- b ensure_budget_switch_case_next@5
-
-ensure_budget_after_while@6:
- retsub
-
-
-// modules.actus.pam.PAMCoreMixin.asset_config[routing]() -> void:
-asset_config:
- pushbytes ""
- // modules/actus/pam.py:26
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- txna ApplicationArgs 2
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- txna ApplicationArgs 3
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- txna ApplicationArgs 4
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- txna ApplicationArgs 5
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- txna ApplicationArgs 6
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 7
- dup
- cover 7
- len
- pushint 2
- ==
- assert // invalid number of bytes for arc4.uint16
- txna ApplicationArgs 8
- dup
- cover 7
- dup
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- dup
- cover 8
- pushint 2
- *
- pushint 2
- +
- swap
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- txna ApplicationArgs 9
- dup
- cover 7
- dup
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- dup
- cover 8
- intc_3 // 8
- *
- pushint 2
- +
- swap
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- txna ApplicationArgs 10
- dup
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- dup
- cover 8
- pushint 16
- *
- pushint 2
- +
- swap
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array>
- // modules/core_financial/common.py:227
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/core_financial/common.py:228
- // assert self.status == enums.STATUS_INACTIVE, err.ALREADY_CONFIGURED
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- !
- assert // D-ASA already configured
- // modules/core_financial/common.py:55-56
- // # The reference implementation has on-chain denomination with ASA
- // _creator, exists = op.AssetParamsGet.asset_creator(denomination_asset_id)
- dig 5
- asset_params_get AssetCreator
- bury 1
- // modules/core_financial/common.py:57
- // assert exists, err.INVALID_DENOMINATION
- assert // Denomination asset is not properly set
- // modules/core_financial/common.py:60
- // self.denomination_asset_id = denomination_asset_id
- bytec 16 // "denomination_asset_id"
- dig 6
- app_global_put
- // modules/core_financial/common.py:65
- // settlement_asset_id == self.denomination_asset_id
- dig 4
- uncover 6
- ==
- // modules/core_financial/common.py:63-66
- // # The reference implementation settlement asset is the denomination asset
- // assert (
- // settlement_asset_id == self.denomination_asset_id
- // ), err.INVALID_SETTLEMENT_ASSET
- assert // Different settlement asset not supported, must be equal to denomination asset
- // modules/core_financial/common.py:69
- // self.settlement_asset_id = settlement_asset_id
- bytec 9 // "settlement_asset_id"
- dig 5
- app_global_put
- // modules/core_financial/common.py:70-76
- // # The reference implementation has on-chain settlement with ASA
- // itxn.AssetTransfer(
- // xfer_asset=self.settlement_asset_id,
- // asset_receiver=Global.current_application_address,
- // asset_amount=0,
- // fee=Global.min_txn_fee,
- // ).submit()
- itxn_begin
- // modules/core_financial/common.py:75
- // fee=Global.min_txn_fee,
- global MinTxnFee
- // modules/core_financial/common.py:73
- // asset_receiver=Global.current_application_address,
- global CurrentApplicationAddress
- // modules/core_financial/common.py:74
- // asset_amount=0,
- intc_0 // 0
- itxn_field AssetAmount
- itxn_field AssetReceiver
- uncover 5
- itxn_field XferAsset
- // modules/core_financial/common.py:70-71
- // # The reference implementation has on-chain settlement with ASA
- // itxn.AssetTransfer(
- pushint 4 // axfer
- itxn_field TypeEnum
- itxn_field Fee
- // modules/core_financial/common.py:70-76
- // # The reference implementation has on-chain settlement with ASA
- // itxn.AssetTransfer(
- // xfer_asset=self.settlement_asset_id,
- // asset_receiver=Global.current_application_address,
- // asset_amount=0,
- // fee=Global.min_txn_fee,
- // ).submit()
- itxn_submit
- // modules/core_financial/common.py:238-239
- // # Set Principal and Minimum Denomination
- // assert principal % minimum_denomination == 0, err.INVALID_MINIMUM_DENOMINATION
- dig 3
- dig 2
- %
- !
- assert // Minimum denomination is not a divisor of principal
- // modules/core_financial/common.py:240
- // self.unit_value = minimum_denomination
- bytec 6 // "unit_value"
- dig 2
- app_global_put
- // modules/core_financial/common.py:241
- // self.total_units = principal // minimum_denomination
- uncover 3
- uncover 2
- /
- bytec 15 // "total_units"
- swap
- app_global_put
- // modules/core_financial/common.py:242
- // self.principal_discount = principal_discount
- bytec 26 // "principal_discount"
- uncover 2
- app_global_put
- // modules/core_financial/common.py:244-245
- // # Set Day-Count Convention
- // self.assert_day_count_convention(day_count_convention.as_uint64())
- btoi
- dup
- // modules/core_financial/common.py:79-83
- // # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- // assert day_count_convention in (
- // UInt64(cst.DCC_A_A),
- // UInt64(cst.DCC_CONT),
- // ), err.INVALID_DAY_COUNT_CONVENTION
- bz asset_config_bool_true@3
- dup
- // modules/core_financial/common.py:82
- // UInt64(cst.DCC_CONT),
- intc 4 // 255
- // modules/core_financial/common.py:79-83
- // # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- // assert day_count_convention in (
- // UInt64(cst.DCC_A_A),
- // UInt64(cst.DCC_CONT),
- // ), err.INVALID_DAY_COUNT_CONVENTION
- ==
- bz asset_config_bool_false@4
-
-asset_config_bool_true@3:
- intc_1 // 1
-
-asset_config_bool_merge@5:
- // modules/core_financial/common.py:79-83
- // # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- // assert day_count_convention in (
- // UInt64(cst.DCC_A_A),
- // UInt64(cst.DCC_CONT),
- // ), err.INVALID_DAY_COUNT_CONVENTION
- assert // Invalid day-count convention ID
- // modules/core_financial/common.py:86
- // self.day_count_convention = day_count_convention
- bytec 17 // "day_count_convention"
- dig 1
- app_global_put
- // modules/core_financial/common.py:248-249
- // # Set Interest Rate
- // self.assert_interest_rate(interest_rate.as_uint64())
- dig 6
- btoi
- bury 8
- // modules/core_financial/common.py:89-90
- // # This subroutine must be used after the principal discount has been set
- // if not self.principal_discount:
- intc_0 // 0
- bytec 26 // "principal_discount"
- app_global_get_ex
- assert // check self.principal_discount exists
- bnz asset_config_after_if_else@7
- // modules/core_financial/common.py:91
- // assert interest_rate > UInt64(0), err.INVALID_INTEREST_RATE
- dig 7
- assert // Interest rate is not properly defined
-
-asset_config_after_if_else@7:
- // modules/core_financial/common.py:94
- // self.interest_rate = interest_rate
- bytec 33 // "interest_rate"
- dig 8
- app_global_put
- // modules/core_financial/coupon.py:105
- // assert coupon_rates.length, err.INVALID_COUPON_RATES
- dig 4
- dup
- assert // Coupon rates are not properly defined
- // modules/core_financial/coupon.py:108
- // self.total_coupons = coupon_rates.length
- bytec 7 // "total_coupons"
- dig 1
- app_global_put
- // modules/core_financial/coupon.py:109
- // self.coupon_rates.value = coupon_rates.copy()
- bytec 19 // 0x636f75706f6e5261746573
- box_del
- pop
- bytec 19 // 0x636f75706f6e5261746573
- dig 7
- box_put
- // modules/core_financial/common.py:104
- // time_events.length == self.total_coupons + cfg.TIME_SCHEDULE_LIMITS
- pushint 4
- +
- dig 3
- ==
- // modules/core_financial/common.py:103-105
- // assert (
- // time_events.length == self.total_coupons + cfg.TIME_SCHEDULE_LIMITS
- // ), err.INVALID_TIME_EVENTS_LENGTH
- assert // Time events length is invalid
- // modules/core_financial/common.py:258
- // self.assert_time_events_sorted(time_events)
- dig 3
- callsub assert_time_events_sorted
- // modules/core_financial/common.py:127
- // self.time_events.value = time_events.copy()
- bytec 12 // 0x74696d654576656e7473
- box_del
- pop
- bytec 12 // 0x74696d654576656e7473
- dig 1
- box_put
- // modules/core_financial/common.py:128-130
- // self.primary_distribution_opening_date = time_events[
- // cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX
- // ]
- dup
- extract 2 0
- dig 1
- pushint 2
- extract_uint64
- // modules/core_financial/common.py:128
- // self.primary_distribution_opening_date = time_events[
- bytec 10 // "primary_distribution_opening_date"
- // modules/core_financial/common.py:128-130
- // self.primary_distribution_opening_date = time_events[
- // cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX
- // ]
- swap
- app_global_put
- // modules/core_financial/common.py:131-133
- // self.primary_distribution_closure_date = time_events[
- // cfg.PRIMARY_DISTRIBUTION_CLOSURE_DATE_IDX
- // ]
- dig 1
- pushint 10
- extract_uint64
- // modules/core_financial/common.py:131
- // self.primary_distribution_closure_date = time_events[
- bytec 27 // "primary_distribution_closure_date"
- // modules/core_financial/common.py:131-133
- // self.primary_distribution_closure_date = time_events[
- // cfg.PRIMARY_DISTRIBUTION_CLOSURE_DATE_IDX
- // ]
- swap
- app_global_put
- // modules/core_financial/common.py:134
- // self.issuance_date = time_events[cfg.ISSUANCE_DATE_IDX]
- dig 1
- pushint 18
- extract_uint64
- bytec 4 // "issuance_date"
- swap
- app_global_put
- // modules/core_financial/common.py:135
- // self.maturity_date = time_events[cfg.MATURITY_DATE_IDX]
- swap
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- intc_1 // 1
- -
- intc_3 // 8
- *
- extract_uint64
- bytec 5 // "maturity_date"
- swap
- app_global_put
- // modules/core_financial/common.py:138
- // assert not time_periods.length, err.INVALID_TIME_PERIODS
- dig 1
- !
- assert // Time periods are not properly defined
- // modules/core_financial/common.py:265
- // self.status = UInt64(enums.STATUS_ACTIVE)
- bytec_2 // "status"
- pushint 100
- app_global_put
- // modules/actus/pam.py:26
- // @arc4.abimethod
- intc_1 // 1
- return
-
-asset_config_bool_false@4:
- intc_0 // 0
- b asset_config_bool_merge@5
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.get_account_units_current_value[routing]() -> void:
-get_account_units_current_value:
- intc_0 // 0
- pushbytes ""
- dupn 4
- // modules/core_financial/coupon.py:201
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- // modules/core_financial/coupon.py:222
- // self.primary_distribution_opening_date
- intc_0 // 0
- bytec 10 // "primary_distribution_opening_date"
- app_global_get_ex
- assert // check self.primary_distribution_opening_date exists
- // modules/core_financial/coupon.py:222-223
- // self.primary_distribution_opening_date
- // and Global.latest_timestamp >= self.primary_distribution_opening_date
- bz get_account_units_current_value_bool_false@4
- // modules/core_financial/coupon.py:223
- // and Global.latest_timestamp >= self.primary_distribution_opening_date
- global LatestTimestamp
- intc_0 // 0
- bytec 10 // "primary_distribution_opening_date"
- app_global_get_ex
- assert // check self.primary_distribution_opening_date exists
- >=
- // modules/core_financial/coupon.py:222-223
- // self.primary_distribution_opening_date
- // and Global.latest_timestamp >= self.primary_distribution_opening_date
- bz get_account_units_current_value_bool_false@4
- intc_1 // 1
-
-get_account_units_current_value_bool_merge@5:
- // modules/core_financial/coupon.py:221-224
- // assert (
- // self.primary_distribution_opening_date
- // and Global.latest_timestamp >= self.primary_distribution_opening_date
- // ), err.NO_PRIMARY_DISTRIBUTION
- assert // Primary distribution not yet executed
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- dig 2
- concat
- dup
- bury 9
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/core_financial/coupon.py:226
- // assert 0 < units <= self.account[holding_address].units, err.INVALID_UNITS
- dup
- bz get_account_units_current_value_bool_false@8
- dig 7
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- dig 1
- >=
- bz get_account_units_current_value_bool_false@8
- intc_1 // 1
-
-get_account_units_current_value_bool_merge@9:
- // modules/core_financial/coupon.py:226
- // assert 0 < units <= self.account[holding_address].units, err.INVALID_UNITS
- assert // Invalid amount of units for the account
- // modules/core_financial/coupon.py:228-229
- // # Value during primary distribution and at maturity
- // account_units_nominal_value = self.account_units_value(holding_address, units)
- dig 1
- dup
- dig 2
- callsub account_units_value
- bury 8
- // modules/core_financial/coupon.py:230-231
- // # Accruing interest during primary distribution and at maturity
- // accrued_interest = UInt64()
- intc_0 // 0
- bury 7
- // modules/core_financial/coupon.py:232
- // numerator = UInt64()
- intc_0 // 0
- bury 4
- // modules/core_financial/coupon.py:233
- // denominator = UInt64()
- intc_0 // 0
- bury 6
- // modules/core_financial/coupon.py:235-236
- // # Accruing interest
- // due_coupons = self.count_due_coupons()
- callsub count_due_coupons
- dup
- bury 6
- // modules/core_financial/coupon.py:237
- // self.assert_no_pending_coupon_payment(holding_address, due_coupons)
- swap
- dig 1
- callsub assert_no_pending_coupon_payment
- // modules/core_financial/coupon.py:238
- // if self.is_accruing_interest(due_coupons):
- callsub is_accruing_interest
- bz get_account_units_current_value_after_if_else@11
- // modules/core_financial/coupon.py:239
- // day_count_factor = self.day_count_factor(due_coupons)
- dig 3
- dup
- callsub day_count_factor
- // modules/core_financial/coupon.py:240-242
- // accrued_interest = self.accrued_interest_amount(
- // holding_address, units, due_coupons
- // )
- dig 3
- dig 3
- uncover 3
- callsub accrued_interest_amount
- bury 7
- // modules/core_financial/coupon.py:243
- // numerator = day_count_factor.numerator
- dup
- intc_0 // 0
- extract_uint64
- bury 4
- // modules/core_financial/coupon.py:244
- // denominator = day_count_factor.denominator
- intc_3 // 8
- extract_uint64
- bury 5
-
-get_account_units_current_value_after_if_else@11:
- // modules/core_financial/coupon.py:249-252
- // day_count_factor=typ.DayCountFactor(
- // numerator=numerator,
- // denominator=denominator,
- // ),
- dig 2
- itob
- dig 5
- itob
- concat
- // modules/core_financial/coupon.py:246-253
- // return typ.CurrentUnitsValue(
- // units_value=account_units_nominal_value,
- // accrued_interest=accrued_interest,
- // day_count_factor=typ.DayCountFactor(
- // numerator=numerator,
- // denominator=denominator,
- // ),
- // )
- dig 7
- itob
- dig 7
- itob
- concat
- swap
- concat
- // modules/core_financial/coupon.py:201
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-get_account_units_current_value_bool_false@8:
- intc_0 // 0
- b get_account_units_current_value_bool_merge@9
-
-get_account_units_current_value_bool_false@4:
- intc_0 // 0
- b get_account_units_current_value_bool_merge@5
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.get_coupon_rates[routing]() -> void:
-get_coupon_rates:
- // modules/core_financial/coupon.py:263
- // coupon_rates = typ.CouponRates()
- bytec 30 // 0x0000
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/core_financial/coupon.py:264
- // if self.status_is_active():
- bz get_coupon_rates_after_if_else@3
- // modules/core_financial/coupon.py:265
- // coupon_rates = self.coupon_rates.value.copy()
- bytec 19 // 0x636f75706f6e5261746573
- box_get
- swap
- bury 2
- assert // check self.coupon_rates exists
-
-get_coupon_rates_after_if_else@3:
- // modules/core_financial/coupon.py:255
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- dig 1
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.get_payment_amount[routing]() -> void:
-get_payment_amount:
- pushbytes ""
- // modules/core_financial/coupon.py:268
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dupn 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- swap
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/core_financial/coupon.py:283
- // interest_amount = UInt64()
- intc_0 // 0
- // modules/core_financial/coupon.py:284
- // principal_amount = UInt64()
- dupn 2
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/core_financial/coupon.py:285
- // if self.status_is_active():
- bz get_payment_amount_after_if_else@6
- // modules/core_financial/coupon.py:286
- // paid_coupons = self.account[holding_address].paid_coupons
- dig 2
- box_get
- assert // check self.account entry exists
- pushint 48
- extract_uint64
- dup
- bury 6
- // modules/core_financial/coupon.py:287
- // if paid_coupons < self.total_coupons:
- intc_0 // 0
- bytec 7 // "total_coupons"
- app_global_get_ex
- assert // check self.total_coupons exists
- <
- bz get_payment_amount_else_body@4
- // modules/core_financial/coupon.py:290
- // self.account_total_units_value(holding_address),
- dig 3
- callsub account_total_units_value
- // modules/core_financial/coupon.py:291
- // paid_coupons + 1,
- dig 5
- intc_1 // 1
- +
- // modules/core_financial/coupon.py:288-292
- // # Coupon Payment
- // interest_amount = self.coupon_interest_amount(
- // self.account_total_units_value(holding_address),
- // paid_coupons + 1,
- // )
- callsub coupon_interest_amount
- bury 2
-
-get_payment_amount_after_if_else@6:
- // modules/core_financial/coupon.py:296-299
- // return typ.PaymentAmounts(
- // interest=interest_amount,
- // principal=principal_amount,
- // )
- dig 1
- itob
- dig 1
- itob
- concat
- // modules/core_financial/coupon.py:268
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-get_payment_amount_else_body@4:
- // modules/core_financial/coupon.py:294-295
- // # Principal Payment
- // principal_amount = self.account_total_units_value(holding_address)
- dig 3
- callsub account_total_units_value
- bury 1
- b get_payment_amount_after_if_else@6
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.get_coupons_status[routing]() -> void:
-get_coupons_status:
- // modules/core_financial/coupon.py:310
- // due_coupons = self.count_due_coupons()
- callsub count_due_coupons
- dupn 2
- // modules/core_financial/coupon.py:311
- // next_coupon_due_date = self.next_coupon_due_date(due_coupons)
- callsub next_coupon_due_date
- swap
- // modules/core_financial/coupon.py:312
- // all_due_coupons_paid = self.all_due_coupons_paid(due_coupons)
- dup
- callsub all_due_coupons_paid
- swap
- // modules/core_financial/coupon.py:313
- // numerator = UInt64()
- intc_0 // 0
- swap
- // modules/core_financial/coupon.py:314
- // denominator = UInt64()
- intc_0 // 0
- swap
- // modules/core_financial/coupon.py:315
- // if self.is_accruing_interest(due_coupons):
- callsub is_accruing_interest
- bz get_coupons_status_after_if_else@3
- // modules/core_financial/coupon.py:316
- // day_count_factor = self.day_count_factor(due_coupons)
- dig 4
- callsub day_count_factor
- // modules/core_financial/coupon.py:317
- // numerator = day_count_factor.numerator
- dup
- intc_0 // 0
- extract_uint64
- bury 3
- // modules/core_financial/coupon.py:318
- // denominator = day_count_factor.denominator
- intc_3 // 8
- extract_uint64
- bury 1
-
-get_coupons_status_after_if_else@3:
- // modules/core_financial/coupon.py:320
- // total_coupons=self.total_coupons,
- intc_0 // 0
- bytec 7 // "total_coupons"
- app_global_get_ex
- assert // check self.total_coupons exists
- // modules/core_financial/coupon.py:323-326
- // day_count_factor=typ.DayCountFactor(
- // numerator=numerator,
- // denominator=denominator,
- // ),
- dig 2
- itob
- dig 2
- itob
- concat
- // modules/core_financial/coupon.py:319-328
- // return typ.CouponsInfo(
- // total_coupons=self.total_coupons,
- // due_coupons=due_coupons,
- // next_coupon_due_date=next_coupon_due_date,
- // day_count_factor=typ.DayCountFactor(
- // numerator=numerator,
- // denominator=denominator,
- // ),
- // all_due_coupons_paid=all_due_coupons_paid,
- // )
- swap
- itob
- dig 6
- itob
- concat
- dig 5
- itob
- concat
- swap
- concat
- bytec 31 // 0x00
- intc_0 // 0
- dig 5
- setbit
- concat
- // modules/core_financial/coupon.py:301
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.payment_agent.coupon.CouponPaymentAgentMixin.pay_coupon[routing]() -> void:
-pay_coupon:
- // modules/payment_agent/coupon.py:30
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- pushint 2
- +
- dig 1
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- extract 2 0
- swap
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/core_financial/coupon.py:39
- // assert self.status_is_active(), err.UNAUTHORIZED
- assert // Not authorized
- // modules/core_financial/coupon.py:40
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/core_financial/coupon.py:41
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- dig 1
- concat
- dup
- cover 2
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/core_financial/coupon.py:44
- // units = self.account[holding_address].units
- dup
- box_get
- pop
- intc_2 // 32
- extract_uint64
- dup
- cover 3
- // modules/core_financial/coupon.py:45
- // assert units > 0, err.NO_UNITS
- assert // No D-ASA units
- // modules/core_financial/coupon.py:47
- // due_coupons = self.count_due_coupons()
- callsub count_due_coupons
- // modules/core_financial/coupon.py:48
- // account_paid_coupons = self.account[holding_address].paid_coupons
- swap
- box_get
- assert // check self.account entry exists
- pushint 48
- extract_uint64
- // modules/core_financial/coupon.py:49
- // assert due_coupons > account_paid_coupons, err.NO_DUE_COUPON
- swap
- dig 1
- >
- assert // No due coupon to pay
- // modules/core_financial/coupon.py:50-53
- // # The following conditions verify if other accounts are still waiting for the payment of previous coupons
- // assert self.all_due_coupons_paid(
- // account_paid_coupons
- // ), err.PENDING_COUPON_PAYMENT
- dup
- callsub all_due_coupons_paid
- assert // Pending due coupon payment
- // modules/core_financial/coupon.py:197
- // self.account_total_units_value(holding_address),
- dig 1
- callsub account_total_units_value
- // modules/core_financial/coupon.py:198
- // account_paid_coupons + 1,
- swap
- intc_1 // 1
- +
- // modules/core_financial/coupon.py:196-199
- // return self.coupon_interest_amount(
- // self.account_total_units_value(holding_address),
- // account_paid_coupons + 1,
- // )
- callsub coupon_interest_amount
- swap
- // modules/payment_agent/coupon.py:54
- // self.assert_payment_authorization(holding_address)
- dup
- callsub assert_payment_authorization
- // modules/payment_agent/coupon.py:57
- // if self.is_payment_executable(holding_address):
- callsub is_payment_executable
- bz pay_coupon_else_body@3
- // modules/payment_agent/coupon.py:58-59
- // # The reference implementation has on-chain payment agent
- // self.assert_enough_funds(payment_amount)
- dupn 2
- callsub assert_enough_funds
- // modules/payment_agent/coupon.py:60-61
- // # The reference implementation has the same asset for denomination and settlement, no conversion needed
- // self.pay(self.account[holding_address].payment_address, payment_amount)
- dig 3
- box_get
- assert // check self.account entry exists
- extract 0 32
- swap
- callsub pay
-
-pay_coupon_after_if_else@4:
- // modules/core_financial/coupon.py:63
- // self.account[holding_address].paid_coupons += 1
- dig 2
- dup
- box_get
- assert // check self.account entry exists
- pushint 48
- extract_uint64
- intc_1 // 1
- +
- itob
- pushint 48
- swap
- box_replace
- // modules/core_financial/coupon.py:64
- // self.paid_coupon_units += units
- intc_0 // 0
- bytec 28 // "paid_coupon_units"
- app_global_get_ex
- assert // check self.paid_coupon_units exists
- dig 2
- +
- bytec 28 // "paid_coupon_units"
- swap
- app_global_put
- // modules/payment_agent/coupon.py:17
- // contract_id=Global.current_application_id.id,
- global CurrentApplicationID
- // modules/payment_agent/coupon.py:20
- // time=Global.latest_timestamp,
- global LatestTimestamp
- // modules/payment_agent/coupon.py:22
- // currency_id=self.denomination_asset_id.id,
- intc_0 // 0
- bytec 16 // "denomination_asset_id"
- app_global_get_ex
- assert // check self.denomination_asset_id exists
- // modules/payment_agent/coupon.py:23
- // currency_unit=self.denomination_asset_id.unit_name,
- dup
- asset_params_get AssetUnitName
- assert // asset exists
- // modules/payment_agent/coupon.py:24
- // nominal_value=self.circulating_units * self.unit_value,
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- intc_0 // 0
- bytec 6 // "unit_value"
- app_global_get_ex
- assert // check self.unit_value exists
- *
- // modules/payment_agent/coupon.py:16-27
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_IP),
- // type_name=String("IP"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0), # TODO: Add interest rate
- // nominal_accrued=UInt64(0),
- // )
- uncover 4
- itob
- pushbytes 0x080037
- concat
- uncover 4
- itob
- concat
- dig 4
- itob
- swap
- dig 1
- concat
- uncover 4
- itob
- concat
- dig 3
- len
- itob
- extract 6 2
- uncover 4
- concat
- swap
- bytec 35 // 0x003b
- concat
- uncover 3
- itob
- concat
- // modules/payment_agent/coupon.py:25
- // nominal_rate_bps=arc4.UInt16(0), # TODO: Add interest rate
- bytec 30 // 0x0000
- // modules/payment_agent/coupon.py:16-27
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_IP),
- // type_name=String("IP"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0), # TODO: Add interest rate
- // nominal_accrued=UInt64(0),
- // )
- concat
- // modules/payment_agent/coupon.py:26
- // nominal_accrued=UInt64(0),
- intc_0 // 0
- // modules/payment_agent/coupon.py:16-27
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_IP),
- // type_name=String("IP"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0), # TODO: Add interest rate
- // nominal_accrued=UInt64(0),
- // )
- itob
- concat
- pushbytes 0x00024950
- concat
- swap
- concat
- // modules/payment_agent/coupon.py:15-28
- // arc4.emit(
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_IP),
- // type_name=String("IP"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0), # TODO: Add interest rate
- // nominal_accrued=UInt64(0),
- // )
- // )
- bytec 36 // method "Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64)"
- swap
- concat
- log
- // modules/payment_agent/coupon.py:70
- // timestamp=Global.latest_timestamp,
- global LatestTimestamp
- // modules/payment_agent/coupon.py:68-72
- // return typ.PaymentResult(
- // amount=payment_amount,
- // timestamp=Global.latest_timestamp,
- // context=payment_info, # TODO: Add info on failed payment
- // )
- itob
- concat
- dig 4
- dup
- len
- itob
- extract 6 2
- swap
- concat
- swap
- bytec 37 // 0x0012
- concat
- swap
- concat
- // modules/payment_agent/coupon.py:30
- // @arc4.abimethod
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-pay_coupon_else_body@3:
- // modules/payment_agent/coupon.py:63-64
- // # Accounts suspended or not opted in at the time of payments must not stall the D-ASA
- // payment_amount = UInt64()
- intc_0 // 0
- bury 1
- b pay_coupon_after_if_else@4
-
-
-// modules.payment_agent.principal.PrincipalPaymentAgentMixin.pay_principal[routing]() -> void:
-pay_principal:
- // modules/payment_agent/principal.py:30
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- pushint 2
- +
- dig 1
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- extract 2 0
- swap
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/actus/pam.py:16-17
- // # The reference implementation does not restrict caller authorization
- // assert self.status_is_active(), err.UNAUTHORIZED
- assert // Not authorized
- // modules/actus/pam.py:18
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/actus/pam.py:19
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- dig 1
- concat
- dup
- cover 2
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/actus/pam.py:21
- // units = self.account[holding_address].units
- box_get
- pop
- intc_2 // 32
- extract_uint64
- // modules/actus/pam.py:22
- // assert units > 0, err.NO_UNITS
- assert // No D-ASA units
- // modules/actus/pam.py:23
- // assert Global.latest_timestamp >= self.maturity_date, err.NOT_MATURE
- global LatestTimestamp
- intc_0 // 0
- bytec 5 // "maturity_date"
- app_global_get_ex
- assert // check self.maturity_date exists
- >=
- assert // Not mature
- // modules/core_financial/coupon.py:78
- // self.count_due_coupons()
- callsub count_due_coupons
- // modules/core_financial/coupon.py:76-79
- // # Principal payment is forbidden in case of pending coupon payments
- // assert self.all_due_coupons_paid(
- // self.count_due_coupons()
- // ), err.PENDING_COUPON_PAYMENT
- callsub all_due_coupons_paid
- assert // Pending due coupon payment
- // modules/core_financial/coupon.py:80
- // return self.account_total_units_value(holding_address)
- dup
- callsub account_total_units_value
- swap
- // modules/payment_agent/principal.py:53
- // self.assert_payment_authorization(holding_address)
- dup
- callsub assert_payment_authorization
- // modules/payment_agent/principal.py:56
- // if self.is_payment_executable(holding_address):
- callsub is_payment_executable
- bz pay_principal_else_body@3
- // modules/payment_agent/principal.py:57-58
- // # The reference implementation has on-chain payment agent
- // self.assert_enough_funds(payment_amount)
- dupn 2
- callsub assert_enough_funds
- // modules/payment_agent/principal.py:59-60
- // # The reference implementation has the same asset for denomination and settlement, no conversion needed
- // self.pay(self.account[holding_address].payment_address, payment_amount)
- dig 2
- box_get
- assert // check self.account entry exists
- extract 0 32
- swap
- callsub pay
-
-pay_principal_after_if_else@4:
- // modules/core_financial/common.py:199
- // self.circulating_units -= self.account[holding_address].units
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- dig 2
- dup
- cover 2
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- -
- bytec_3 // "circulating_units"
- swap
- app_global_put
- // modules/core_financial/common.py:200
- // self.account[holding_address].units = UInt64()
- intc_0 // 0
- itob
- swap
- intc_2 // 32
- dig 2
- box_replace
- // modules/core_financial/common.py:201
- // self.end_if_no_circulating_units()
- callsub end_if_no_circulating_units
- // modules/payment_agent/principal.py:17
- // contract_id=Global.current_application_id.id,
- global CurrentApplicationID
- // modules/payment_agent/principal.py:20
- // time=Global.latest_timestamp,
- global LatestTimestamp
- // modules/payment_agent/principal.py:22
- // currency_id=self.denomination_asset_id.id,
- intc_0 // 0
- bytec 16 // "denomination_asset_id"
- app_global_get_ex
- assert // check self.denomination_asset_id exists
- // modules/payment_agent/principal.py:23
- // currency_unit=self.denomination_asset_id.unit_name,
- dup
- asset_params_get AssetUnitName
- assert // asset exists
- // modules/payment_agent/principal.py:24
- // nominal_value=self.circulating_units * self.unit_value,
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- intc_0 // 0
- bytec 6 // "unit_value"
- app_global_get_ex
- assert // check self.unit_value exists
- *
- // modules/payment_agent/principal.py:16-27
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_PR),
- // type_name=String("PR"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0),
- // nominal_accrued=UInt64(0),
- // )
- uncover 4
- itob
- pushbytes 0x030037
- concat
- uncover 4
- itob
- concat
- dig 5
- itob
- swap
- dig 1
- concat
- uncover 4
- itob
- concat
- dig 3
- len
- itob
- extract 6 2
- uncover 4
- concat
- swap
- bytec 35 // 0x003b
- concat
- uncover 3
- itob
- concat
- // modules/payment_agent/principal.py:25
- // nominal_rate_bps=arc4.UInt16(0),
- bytec 30 // 0x0000
- // modules/payment_agent/principal.py:16-27
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_PR),
- // type_name=String("PR"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0),
- // nominal_accrued=UInt64(0),
- // )
- concat
- uncover 3
- concat
- pushbytes 0x00025052
- concat
- swap
- concat
- // modules/payment_agent/principal.py:15-28
- // arc4.emit(
- // Event(
- // contract_id=Global.current_application_id.id,
- // type=arc4.UInt8(enums.EVT_TYPE_PR),
- // type_name=String("PR"),
- // time=Global.latest_timestamp,
- // payoff=payoff,
- // currency_id=self.denomination_asset_id.id,
- // currency_unit=self.denomination_asset_id.unit_name,
- // nominal_value=self.circulating_units * self.unit_value,
- // nominal_rate_bps=arc4.UInt16(0),
- // nominal_accrued=UInt64(0),
- // )
- // )
- bytec 36 // method "Event(uint64,uint8,string,uint64,uint64,uint64,byte[],uint64,uint16,uint64)"
- swap
- concat
- log
- // modules/payment_agent/principal.py:69
- // timestamp=Global.latest_timestamp,
- global LatestTimestamp
- // modules/payment_agent/principal.py:67-71
- // return typ.PaymentResult(
- // amount=payment_amount,
- // timestamp=Global.latest_timestamp,
- // context=payment_info, # TODO: Add info on failed payment
- // )
- itob
- concat
- dig 3
- dup
- len
- itob
- extract 6 2
- swap
- concat
- swap
- bytec 37 // 0x0012
- concat
- swap
- concat
- // modules/payment_agent/principal.py:30
- // @arc4.abimethod
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-pay_principal_else_body@3:
- // modules/payment_agent/principal.py:62-63
- // # Accounts suspended or not opted in at the time of payments must not stall the D-ASA
- // payment_amount = UInt64()
- intc_0 // 0
- bury 1
- b pay_principal_after_if_else@4
-
-
-// modules.transfer_agent.coupon.CouponTransferAgentMixin.asset_transfer[routing]() -> void:
-asset_transfer:
- intc_0 // 0
- dupn 2
- pushbytes ""
- dup
- // modules/transfer_agent/coupon.py:9
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 3
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/core_financial/common.py:153-158
- // self.status_is_active()
- // and self.secondary_market_opening_date <= Global.latest_timestamp
- // and (
- // not self.secondary_market_closure_date
- // or Global.latest_timestamp < self.secondary_market_closure_date
- // )
- bz asset_transfer_bool_false@6
- // modules/core_financial/common.py:154
- // and self.secondary_market_opening_date <= Global.latest_timestamp
- intc_0 // 0
- bytec 18 // "secondary_market_opening_date"
- app_global_get_ex
- assert // check self.secondary_market_opening_date exists
- global LatestTimestamp
- <=
- // modules/core_financial/common.py:153-158
- // self.status_is_active()
- // and self.secondary_market_opening_date <= Global.latest_timestamp
- // and (
- // not self.secondary_market_closure_date
- // or Global.latest_timestamp < self.secondary_market_closure_date
- // )
- bz asset_transfer_bool_false@6
- // modules/core_financial/common.py:156
- // not self.secondary_market_closure_date
- intc_0 // 0
- bytec 11 // "secondary_market_closure_date"
- app_global_get_ex
- assert // check self.secondary_market_closure_date exists
- // modules/core_financial/common.py:156-157
- // not self.secondary_market_closure_date
- // or Global.latest_timestamp < self.secondary_market_closure_date
- bz asset_transfer_bool_true@5
- // modules/core_financial/common.py:157
- // or Global.latest_timestamp < self.secondary_market_closure_date
- global LatestTimestamp
- intc_0 // 0
- bytec 11 // "secondary_market_closure_date"
- app_global_get_ex
- assert // check self.secondary_market_closure_date exists
- <
- // modules/core_financial/common.py:156-157
- // not self.secondary_market_closure_date
- // or Global.latest_timestamp < self.secondary_market_closure_date
- bz asset_transfer_bool_false@6
-
-asset_transfer_bool_true@5:
- intc_1 // 1
-
-asset_transfer_bool_merge@7:
- // modules/core_financial/common.py:152-159
- // assert (
- // self.status_is_active()
- // and self.secondary_market_opening_date <= Global.latest_timestamp
- // and (
- // not self.secondary_market_closure_date
- // or Global.latest_timestamp < self.secondary_market_closure_date
- // )
- // ), err.SECONDARY_MARKET_CLOSED
- assert // Secondary market is closed
- // modules/core_financial/common.py:169-171
- // # The reference implementation grants transfer right to D-ASA owners. Other implementations may relay on other
- // # roles, external Apps through C2C calls (e.g., an order book), or off-chain transfer agents.
- // assert Txn.sender == sender_holding_address, err.UNAUTHORIZED
- txn Sender
- dig 3
- dup
- cover 2
- ==
- assert // Not authorized
- // modules/core_financial/common.py:172
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/core_financial/common.py:173
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- dig 1
- concat
- dup
- bury 9
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- bytec_1 // 0x52333023
- dig 4
- dup
- cover 2
- concat
- dup
- bury 10
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/core_financial/common.py:176
- // self.assert_is_not_account_suspended(sender_holding_address)
- dig 3
- callsub assert_is_not_account_suspended
- // modules/core_financial/common.py:177
- // self.assert_is_not_account_suspended(receiver_holding_address)
- dig 1
- callsub assert_is_not_account_suspended
- // modules/core_financial/common.py:190
- // assert sender_holding_address != receiver_holding_address, err.SELF_TRANSFER
- uncover 3
- uncover 2
- !=
- assert // Sender and receiver must be different
- // modules/core_financial/common.py:191
- // assert units > 0, err.NULL_TRANSFER
- dig 2
- dup
- assert // Transfer units must be greater than zero
- // modules/core_financial/common.py:192
- // assert units <= self.account[sender_holding_address].units, err.OVER_TRANSFER
- uncover 2
- box_get
- assert // check self.account entry exists
- dup
- intc_2 // 32
- extract_uint64
- uncover 2
- >=
- assert // Insufficient sender units to transfer
- // modules/accounting.py:63
- // sender_unit_value = self.account[sender].unit_value
- extract 40 8
- bury 9
- // modules/accounting.py:64
- // if self.account[receiver].units > UInt64(0):
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- bz asset_transfer_else_body@9
- // modules/accounting.py:58
- // self.account[sender].unit_value == self.account[receiver].unit_value
- dig 6
- box_get
- assert // check self.account entry exists
- pushint 40
- extract_uint64
- dig 6
- box_get
- assert // check self.account entry exists
- pushint 40
- extract_uint64
- ==
- // modules/accounting.py:58-59
- // self.account[sender].unit_value == self.account[receiver].unit_value
- // and self.account[sender].paid_coupons == self.account[receiver].paid_coupons
- bz asset_transfer_bool_false@20
- // modules/accounting.py:59
- // and self.account[sender].paid_coupons == self.account[receiver].paid_coupons
- dig 6
- box_get
- assert // check self.account entry exists
- pushint 48
- extract_uint64
- dig 6
- box_get
- assert // check self.account entry exists
- pushint 48
- extract_uint64
- ==
- // modules/accounting.py:58-59
- // self.account[sender].unit_value == self.account[receiver].unit_value
- // and self.account[sender].paid_coupons == self.account[receiver].paid_coupons
- bz asset_transfer_bool_false@20
- intc_1 // 1
-
-asset_transfer_bool_merge@21:
- // modules/accounting.py:57-60
- // assert (
- // self.account[sender].unit_value == self.account[receiver].unit_value
- // and self.account[sender].paid_coupons == self.account[receiver].paid_coupons
- // ), err.NON_FUNGIBLE_UNITS
- assert // Sender and receiver units are not fungible
-
-asset_transfer_after_if_else@10:
- // modules/transfer_agent/coupon.py:46-47
- // # Transferred units value (must be computed before the transfer)
- // sender_unit_value = self.account[sender_holding_address].unit_value
- dig 6
- dup
- box_get
- assert // check self.account entry exists
- pushint 40
- extract_uint64
- bury 5
- // modules/core_financial/coupon.py:69-70
- // # Transfer is forbidden in case of pending coupon payments
- // due_coupons = self.count_due_coupons()
- callsub count_due_coupons
- // modules/core_financial/coupon.py:71
- // self.assert_no_pending_coupon_payment(sender_holding_address, due_coupons)
- dig 4
- dup
- cover 2
- dig 1
- callsub assert_no_pending_coupon_payment
- // modules/core_financial/coupon.py:72
- // return self.accrued_interest_amount(sender_holding_address, units, due_coupons)
- swap
- dig 3
- dup
- cover 3
- uncover 2
- callsub accrued_interest_amount
- bury 7
- // modules/accounting.py:71
- // assert units <= self.account[holding_address].units, err.OVER_TRANSFER
- dig 1
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- dup2
- <=
- assert // Insufficient sender units to transfer
- // modules/accounting.py:72
- // self.account[holding_address].units -= units
- swap
- -
- itob
- dig 1
- intc_2 // 32
- uncover 2
- box_replace
- // modules/accounting.py:52
- // if self.account[holding_address].units == UInt64(0):
- box_get
- pop
- intc_2 // 32
- extract_uint64
- bnz asset_transfer_after_if_else@16
- // modules/accounting.py:53
- // self.account[holding_address].unit_value = UInt64(0)
- intc_0 // 0
- itob
- dig 7
- dup
- cover 2
- pushint 40
- dig 2
- box_replace
- // modules/accounting.py:54
- // self.account[holding_address].paid_coupons = UInt64(0)
- pushint 48
- swap
- box_replace
-
-asset_transfer_after_if_else@16:
- // modules/accounting.py:76
- // self.account[holding_address].units += units
- dig 5
- dup
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- dig 2
- dup
- cover 2
- +
- itob
- uncover 2
- intc_2 // 32
- uncover 2
- box_replace
- // modules/transfer_agent/coupon.py:53
- // return units * sender_unit_value + accrued_interest
- dig 4
- *
- dig 5
- +
- // modules/transfer_agent/coupon.py:9
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-asset_transfer_bool_false@20:
- intc_0 // 0
- b asset_transfer_bool_merge@21
-
-asset_transfer_else_body@9:
- // modules/accounting.py:67
- // self.account[receiver].unit_value = sender_unit_value
- dig 5
- dup
- pushint 40
- dig 10
- box_replace
- // modules/accounting.py:68
- // self.account[receiver].paid_coupons = self.account[sender].paid_coupons
- dig 7
- box_get
- assert // check self.account entry exists
- extract 48 8
- pushint 48
- swap
- box_replace
- b asset_transfer_after_if_else@10
-
-asset_transfer_bool_false@6:
- intc_0 // 0
- b asset_transfer_bool_merge@7
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.asset_create[routing]() -> void:
-asset_create:
- // modules/core_financial/common.py:267
- // @arc4.abimethod(create="require")
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- dig 1
- pushint 38
- extract_uint16 // on error: invalid tuple encoding
- dup
- pushint 40
- ==
- assert // invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))
- dig 2
- swap
- dig 2
- substring3
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- pushint 42
- +
- ==
- assert // invalid number of bytes for smart_contracts.abi_types.AssetMetadata
- // modules/core_financial/common.py:276
- // self.arranger.value = arranger
- bytec 8 // 0x52323023
- uncover 2
- app_global_put
- // modules/core_financial/common.py:277
- // self.metadata = metadata.bytes
- bytec 25 // "metadata"
- swap
- app_global_put
- // modules/core_financial/common.py:267
- // @arc4.abimethod(create="require")
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.asset_update[routing]() -> void:
-asset_update:
- // modules/core_financial/common.py:279
- // @arc4.abimethod(allow_actions=["UpdateApplication"])
- txna ApplicationArgs 1
- dup
- len
- dig 1
- pushint 38
- extract_uint16 // on error: invalid tuple encoding
- dup
- pushint 40
- ==
- assert // invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))
- dig 2
- swap
- dig 2
- substring3
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- pushint 42
- +
- ==
- assert // invalid number of bytes for smart_contracts.abi_types.AssetMetadata
- // modules/core_financial/common.py:284-287
- // # The reference implementation grants the update permissions to the Arranger.
- // # Other implementations may disable D-ASA application updatability or change its authorizations.
- // # ⚠️ WARNING: Application updates must be executed VERY carefully, as they might introduce breaking changes.
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/core_financial/common.py:288
- // self.metadata = metadata.bytes
- bytec 25 // "metadata"
- swap
- app_global_put
- // modules/core_financial/common.py:279
- // @arc4.abimethod(allow_actions=["UpdateApplication"])
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.set_secondary_time_events[routing]() -> void:
-set_secondary_time_events:
- intc_0 // 0
- // modules/core_financial/common.py:290
- // @arc4.abimethod
- txna ApplicationArgs 1
- dupn 2
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- dup
- intc_3 // 8
- *
- pushint 2
- +
- uncover 2
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- // modules/core_financial/common.py:311
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/accounting.py:28
- // return self.status == enm.STATUS_ENDED
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- intc 5 // 200
- ==
- // modules/core_financial/common.py:312
- // assert not self.status_is_ended(), err.UNAUTHORIZED
- !
- assert // Not authorized
- // modules/core_financial/common.py:313
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/core_financial/common.py:315
- // assert secondary_market_time_events.length >= 1, err.INVALID_TIME_EVENTS_LENGTH
- dup
- assert // Time events length is invalid
- // modules/core_financial/common.py:316
- // if secondary_market_time_events.length > 1:
- intc_1 // 1
- >
- bz set_secondary_time_events_after_if_else@3
- // modules/core_financial/common.py:317
- // self.assert_time_events_sorted(secondary_market_time_events)
- dup
- callsub assert_time_events_sorted
- bury 1
-
-set_secondary_time_events_after_if_else@3:
- // modules/core_financial/common.py:320
- // self.issuance_date
- intc_0 // 0
- bytec 4 // "issuance_date"
- app_global_get_ex
- assert // check self.issuance_date exists
- // modules/core_financial/common.py:321
- // <= secondary_market_time_events[cfg.SECONDARY_MARKET_OPENING_DATE_IDX]
- dig 1
- dup
- extract 2 0
- bury 4
- pushint 2
- extract_uint64
- // modules/core_financial/common.py:320-321
- // self.issuance_date
- // <= secondary_market_time_events[cfg.SECONDARY_MARKET_OPENING_DATE_IDX]
- swap
- dig 1
- <=
- // modules/core_financial/common.py:319-322
- // assert (
- // self.issuance_date
- // <= secondary_market_time_events[cfg.SECONDARY_MARKET_OPENING_DATE_IDX]
- // ), err.INVALID_SECONDARY_OPENING_DATE
- assert // Invalid secondary market opening date
- // modules/core_financial/common.py:323
- // self.secondary_market_opening_date = secondary_market_time_events[
- bytec 18 // "secondary_market_opening_date"
- // modules/core_financial/common.py:323-325
- // self.secondary_market_opening_date = secondary_market_time_events[
- // cfg.SECONDARY_MARKET_OPENING_DATE_IDX
- // ]
- swap
- app_global_put
- // modules/core_financial/common.py:326
- // if self.maturity_date:
- intc_0 // 0
- bytec 5 // "maturity_date"
- app_global_get_ex
- assert // check self.maturity_date exists
- bz set_secondary_time_events_after_if_else@5
- // modules/core_financial/common.py:328
- // self.maturity_date
- intc_0 // 0
- bytec 5 // "maturity_date"
- app_global_get_ex
- assert // check self.maturity_date exists
- // modules/core_financial/common.py:329
- // >= secondary_market_time_events[cfg.SECONDARY_MARKET_CLOSURE_DATE_IDX]
- dig 1
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- intc_1 // 1
- -
- intc_3 // 8
- *
- dig 3
- swap
- extract_uint64
- // modules/core_financial/common.py:328-329
- // self.maturity_date
- // >= secondary_market_time_events[cfg.SECONDARY_MARKET_CLOSURE_DATE_IDX]
- swap
- dig 1
- >=
- // modules/core_financial/common.py:327-330
- // assert (
- // self.maturity_date
- // >= secondary_market_time_events[cfg.SECONDARY_MARKET_CLOSURE_DATE_IDX]
- // ), err.INVALID_SECONDARY_CLOSURE_DATE
- assert // Invalid secondary market closure date
- // modules/core_financial/common.py:331
- // self.secondary_market_closure_date = secondary_market_time_events[
- bytec 11 // "secondary_market_closure_date"
- // modules/core_financial/common.py:331-333
- // self.secondary_market_closure_date = secondary_market_time_events[
- // cfg.SECONDARY_MARKET_CLOSURE_DATE_IDX
- // ]
- swap
- app_global_put
-
-set_secondary_time_events_after_if_else@5:
- // modules/core_financial/common.py:335
- // secondary_market_opening_date=self.secondary_market_opening_date,
- intc_0 // 0
- bytec 18 // "secondary_market_opening_date"
- app_global_get_ex
- assert // check self.secondary_market_opening_date exists
- // modules/core_financial/common.py:336
- // secondary_market_closure_date=self.secondary_market_closure_date,
- intc_0 // 0
- bytec 11 // "secondary_market_closure_date"
- app_global_get_ex
- assert // check self.secondary_market_closure_date exists
- // modules/core_financial/common.py:334-337
- // return typ.SecondaryMarketSchedule(
- // secondary_market_opening_date=self.secondary_market_opening_date,
- // secondary_market_closure_date=self.secondary_market_closure_date,
- // )
- swap
- itob
- swap
- itob
- concat
- // modules/core_financial/common.py:290
- // @arc4.abimethod
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.set_default_status[routing]() -> void:
-set_default_status:
- // modules/core_financial/common.py:339
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.bool
- intc_0 // 0
- getbit
- // modules/rbac.py:74
- // assert self._role_is_active(self.trustee, Txn.sender), err.UNAUTHORIZED
- bytec 20 // 0x52363023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/core_financial/common.py:352
- // self.asset_defaulted = defaulted
- bytec 24 // "asset_defaulted"
- swap
- app_global_put
- // modules/core_financial/common.py:353
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/core_financial/common.py:339
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.primary_distribution[routing]() -> void:
-primary_distribution:
- pushbytes ""
- // modules/core_financial/common.py:355
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_3 // 8
- ==
- assert // invalid number of bytes for arc4.uint64
- btoi
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/core_financial/common.py:145-148
- // self.status_is_active()
- // and self.primary_distribution_opening_date
- // <= Global.latest_timestamp
- // < self.primary_distribution_closure_date
- bz primary_distribution_bool_false@5
- // modules/core_financial/common.py:146
- // and self.primary_distribution_opening_date
- intc_0 // 0
- bytec 10 // "primary_distribution_opening_date"
- app_global_get_ex
- assert // check self.primary_distribution_opening_date exists
- // modules/core_financial/common.py:147
- // <= Global.latest_timestamp
- global LatestTimestamp
- dup
- bury 5
- // modules/core_financial/common.py:146-147
- // and self.primary_distribution_opening_date
- // <= Global.latest_timestamp
- <=
- // modules/core_financial/common.py:146-148
- // and self.primary_distribution_opening_date
- // <= Global.latest_timestamp
- // < self.primary_distribution_closure_date
- bz primary_distribution_bool_false@5
- // modules/core_financial/common.py:148
- // < self.primary_distribution_closure_date
- intc_0 // 0
- bytec 27 // "primary_distribution_closure_date"
- app_global_get_ex
- assert // check self.primary_distribution_closure_date exists
- // modules/core_financial/common.py:147-148
- // <= Global.latest_timestamp
- // < self.primary_distribution_closure_date
- dig 3
- >
- // modules/core_financial/common.py:146-148
- // and self.primary_distribution_opening_date
- // <= Global.latest_timestamp
- // < self.primary_distribution_closure_date
- bz primary_distribution_bool_false@5
- intc_1 // 1
-
-primary_distribution_bool_merge@6:
- // modules/core_financial/common.py:144-149
- // assert (
- // self.status_is_active()
- // and self.primary_distribution_opening_date
- // <= Global.latest_timestamp
- // < self.primary_distribution_closure_date
- // ), err.PRIMARY_DISTRIBUTION_CLOSED
- assert // Primary distribution is closed
- // modules/rbac.py:71
- // assert self._role_is_active(self.primary_dealer, Txn.sender), err.UNAUTHORIZED
- bytec 21 // 0x52353023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/core_financial/common.py:383
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/core_financial/common.py:384
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/core_financial/common.py:385
- // assert units > 0, err.ZERO_UNITS
- dig 1
- dup
- assert // Can not distribute zero units
- // modules/core_financial/common.py:386
- // assert self.circulating_units + units <= self.total_units, err.OVER_DISTRIBUTION
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- dig 1
- +
- intc_0 // 0
- bytec 15 // "total_units"
- app_global_get_ex
- assert // check self.total_units exists
- dig 1
- >=
- assert // Insufficient remaining D-ASA units
- // modules/core_financial/common.py:388
- // self.circulating_units += units
- bytec_3 // "circulating_units"
- dig 1
- app_global_put
- // modules/core_financial/common.py:389
- // self.account[holding_address].units += units
- dig 2
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- uncover 2
- +
- itob
- dig 2
- intc_2 // 32
- uncover 2
- box_replace
- // modules/core_financial/common.py:390
- // self.account[holding_address].unit_value = self.unit_value
- intc_0 // 0
- bytec 6 // "unit_value"
- app_global_get_ex
- assert // check self.unit_value exists
- itob
- uncover 2
- pushint 40
- uncover 2
- box_replace
- // modules/core_financial/common.py:391
- // return self.total_units - self.circulating_units
- intc_0 // 0
- bytec 15 // "total_units"
- app_global_get_ex
- assert // check self.total_units exists
- swap
- -
- // modules/core_financial/common.py:355
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-primary_distribution_bool_false@5:
- intc_0 // 0
- b primary_distribution_bool_merge@6
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.get_asset_info[routing]() -> void:
-get_asset_info:
- // modules/core_financial/common.py:403
- // performance = UInt64(cst.PRF_PERFORMANT)
- intc_0 // 0
- // modules/core_financial/common.py:404
- // if Global.latest_timestamp > self.maturity_date > 0:
- global LatestTimestamp
- intc_0 // 0
- bytec 5 // "maturity_date"
- app_global_get_ex
- swap
- dup
- cover 2
- cover 3
- assert // check self.maturity_date exists
- >
- bz get_asset_info_after_if_else@4
- dup
- bz get_asset_info_after_if_else@4
- // modules/core_financial/common.py:405
- // performance = UInt64(cst.PRF_MATURED)
- pushint 4
- bury 2
-
-get_asset_info_after_if_else@4:
- // modules/core_financial/common.py:406-407
- // # The reference implementation has no grace or delinquency periods
- // if self.asset_defaulted:
- intc_0 // 0
- bytec 24 // "asset_defaulted"
- app_global_get_ex
- assert // check self.asset_defaulted exists
- bz get_asset_info_after_if_else@6
- // modules/core_financial/common.py:408
- // performance = UInt64(cst.PRF_DEFAULTED)
- pushint 3
- bury 2
-
-get_asset_info_after_if_else@6:
- // modules/core_financial/common.py:411
- // denomination_asset_id=self.denomination_asset_id.id,
- intc_0 // 0
- bytec 16 // "denomination_asset_id"
- app_global_get_ex
- assert // check self.denomination_asset_id exists
- // modules/core_financial/common.py:412
- // settlement_asset_id=self.settlement_asset_id.id,
- intc_0 // 0
- bytec 9 // "settlement_asset_id"
- app_global_get_ex
- assert // check self.settlement_asset_id exists
- // modules/accounting.py:45
- // return self.circulating_units * self.unit_value
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- intc_0 // 0
- bytec 6 // "unit_value"
- app_global_get_ex
- assert // check self.unit_value exists
- dup2
- *
- // modules/core_financial/common.py:415
- // day_count_convention=arc4.UInt8(self.day_count_convention),
- intc_0 // 0
- bytec 17 // "day_count_convention"
- app_global_get_ex
- assert // check self.day_count_convention exists
- itob
- dup
- bitlen
- intc_3 // 8
- <=
- assert // overflow
- extract 7 1
- // modules/core_financial/common.py:416
- // principal_discount=arc4.UInt16(self.principal_discount),
- intc_0 // 0
- bytec 26 // "principal_discount"
- app_global_get_ex
- assert // check self.principal_discount exists
- itob
- dup
- bitlen
- pushint 16
- <=
- assert // overflow
- extract 6 2
- // modules/core_financial/common.py:417
- // interest_rate=arc4.UInt16(self.interest_rate),
- intc_0 // 0
- bytec 33 // "interest_rate"
- app_global_get_ex
- assert // check self.interest_rate exists
- itob
- dup
- bitlen
- pushint 16
- <=
- assert // overflow
- extract 6 2
- // modules/core_financial/common.py:418
- // total_supply=self.total_units,
- intc_0 // 0
- bytec 15 // "total_units"
- app_global_get_ex
- assert // check self.total_units exists
- // modules/core_financial/common.py:420
- // primary_distribution_opening_date=self.primary_distribution_opening_date,
- intc_0 // 0
- bytec 10 // "primary_distribution_opening_date"
- app_global_get_ex
- assert // check self.primary_distribution_opening_date exists
- // modules/core_financial/common.py:421
- // primary_distribution_closure_date=self.primary_distribution_closure_date,
- intc_0 // 0
- bytec 27 // "primary_distribution_closure_date"
- app_global_get_ex
- assert // check self.primary_distribution_closure_date exists
- // modules/core_financial/common.py:422
- // issuance_date=self.issuance_date,
- intc_0 // 0
- bytec 4 // "issuance_date"
- app_global_get_ex
- assert // check self.issuance_date exists
- // modules/core_financial/common.py:423
- // maturity_date=self.maturity_date,
- intc_0 // 0
- bytec 5 // "maturity_date"
- app_global_get_ex
- assert // check self.maturity_date exists
- // modules/core_financial/common.py:424
- // suspended=self.asset_suspended,
- intc_0 // 0
- bytec 23 // "asset_suspended"
- app_global_get_ex
- assert // check self.asset_suspended exists
- // modules/core_financial/common.py:425
- // performance=arc4.UInt8(performance),
- dig 15
- itob
- dup
- bitlen
- intc_3 // 8
- <=
- assert // overflow
- extract 7 1
- // modules/core_financial/common.py:410-426
- // return typ.AssetInfo(
- // denomination_asset_id=self.denomination_asset_id.id,
- // settlement_asset_id=self.settlement_asset_id.id,
- // outstanding_principal=self.outstanding_principal(),
- // unit_value=self.unit_value,
- // day_count_convention=arc4.UInt8(self.day_count_convention),
- // principal_discount=arc4.UInt16(self.principal_discount),
- // interest_rate=arc4.UInt16(self.interest_rate),
- // total_supply=self.total_units,
- // circulating_supply=self.circulating_units,
- // primary_distribution_opening_date=self.primary_distribution_opening_date,
- // primary_distribution_closure_date=self.primary_distribution_closure_date,
- // issuance_date=self.issuance_date,
- // maturity_date=self.maturity_date,
- // suspended=self.asset_suspended,
- // performance=arc4.UInt8(performance),
- // )
- uncover 14
- itob
- uncover 14
- itob
- concat
- uncover 11
- itob
- concat
- uncover 11
- itob
- concat
- uncover 10
- concat
- uncover 9
- concat
- uncover 8
- concat
- uncover 7
- itob
- concat
- uncover 7
- itob
- concat
- uncover 6
- itob
- concat
- uncover 5
- itob
- concat
- uncover 4
- itob
- concat
- uncover 3
- itob
- concat
- bytec 31 // 0x00
- intc_0 // 0
- uncover 4
- setbit
- concat
- swap
- concat
- // modules/core_financial/common.py:393
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.get_time_events[routing]() -> void:
-get_time_events:
- // modules/core_financial/common.py:436
- // time_events = typ.TimeEvents()
- bytec 30 // 0x0000
- // modules/accounting.py:25
- // return self.status == enm.STATUS_ACTIVE
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 100
- ==
- // modules/core_financial/common.py:437
- // if self.status_is_active():
- bz get_time_events_after_if_else@3
- // modules/core_financial/common.py:438
- // time_events = self.time_events.value.copy()
- bytec 12 // 0x74696d654576656e7473
- box_get
- swap
- bury 2
- assert // check self.time_events exists
-
-get_time_events_after_if_else@3:
- // modules/core_financial/common.py:428
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- dig 1
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.get_secondary_market_schedule[routing]() -> void:
-get_secondary_market_schedule:
- // modules/core_financial/common.py:450
- // (self.secondary_market_opening_date, self.secondary_market_closure_date)
- intc_0 // 0
- bytec 18 // "secondary_market_opening_date"
- app_global_get_ex
- assert // check self.secondary_market_opening_date exists
- intc_0 // 0
- bytec 11 // "secondary_market_closure_date"
- app_global_get_ex
- assert // check self.secondary_market_closure_date exists
- // modules/core_financial/common.py:449-451
- // return typ.TimeEvents(
- // (self.secondary_market_opening_date, self.secondary_market_closure_date)
- // )
- swap
- itob
- pushbytes 0x0002
- swap
- concat
- swap
- itob
- concat
- // modules/core_financial/common.py:441
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.get_asset_metadata[routing]() -> void:
-get_asset_metadata:
- // modules/core_financial/common.py:462
- // return typ.AssetMetadata.from_bytes(self.metadata)
- intc_0 // 0
- bytec 25 // "metadata"
- app_global_get_ex
- assert // check self.metadata exists
- // modules/core_financial/common.py:453
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_gov_suspension[routing]() -> void:
-account_gov_suspension:
- // modules/accounting.py:94
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.bool
- intc_0 // 0
- getbit
- // modules/rbac.py:77
- // assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
- bytec 13 // 0x52373023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- uncover 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:114
- // self.account[holding_address].suspended = suspended
- dup
- pushint 56
- intc_1 // 1
- box_extract
- intc_0 // 0
- uncover 3
- setbit
- pushint 56
- swap
- box_replace
- // modules/accounting.py:115
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:94
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_open[routing]() -> void:
-account_open:
- // modules/accounting.py:117
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:68
- // assert self._role_is_active(self.account_manager, Txn.sender), err.UNAUTHORIZED
- bytec 14 // 0x52343023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:28
- // return self.status == enm.STATUS_ENDED
- intc_0 // 0
- bytec_2 // "status"
- app_global_get_ex
- assert // check self.status exists
- intc 5 // 200
- ==
- // modules/accounting.py:139
- // assert not self.status_is_ended(), err.UNAUTHORIZED
- !
- assert // Not authorized
- // modules/accounting.py:140
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/accounting.py:141
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:142
- // assert holding_address not in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- uncover 2
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account holding address
- // modules/accounting.py:146
- // units=UInt64(0),
- intc_0 // 0
- // modules/accounting.py:144-150
- // self.account[holding_address] = typ.AccountInfo(
- // payment_address=payment_address,
- // units=UInt64(0),
- // unit_value=UInt64(0),
- // paid_coupons=UInt64(0),
- // suspended=False,
- // )
- itob
- uncover 2
- dig 1
- concat
- dig 1
- concat
- swap
- concat
- bytec 31 // 0x00
- concat
- box_put
- // modules/accounting.py:151
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:117
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_close[routing]() -> void:
-account_close:
- // modules/accounting.py:153
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:68
- // assert self._role_is_active(self.account_manager, Txn.sender), err.UNAUTHORIZED
- bytec 14 // 0x52343023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:171
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- swap
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:174
- // closed_units = self.account[holding_address].units
- dup
- box_get
- pop
- intc_2 // 32
- extract_uint64
- // modules/accounting.py:175
- // del self.account[holding_address]
- swap
- box_del
- pop
- // modules/accounting.py:176
- // self.circulating_units -= closed_units
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- dig 1
- -
- bytec_3 // "circulating_units"
- swap
- app_global_put
- // modules/accounting.py:177
- // self.end_if_no_circulating_units()
- callsub end_if_no_circulating_units
- // modules/accounting.py:178
- // return closed_units, Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:153
- // @arc4.abimethod
- swap
- itob
- swap
- itob
- concat
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_update_payment_address[routing]() -> void:
-account_update_payment_address:
- // modules/accounting.py:180
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/accounting.py:200
- // assert Txn.sender == holding_address, err.UNAUTHORIZED
- txn Sender
- dig 2
- ==
- assert // Not authorized
- // modules/accounting.py:201
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/accounting.py:202
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- uncover 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:204
- // self.account[holding_address].payment_address = payment_address
- intc_0 // 0
- uncover 2
- box_replace
- // modules/accounting.py:205
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:180
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_get_info[routing]() -> void:
-account_get_info:
- // modules/accounting.py:207
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec_1 // 0x52333023
- swap
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:222
- // return self.account[holding_address]
- box_get
- pop
- // modules/accounting.py:207
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_rotate_arranger[routing]() -> void:
-rbac_rotate_arranger:
- // modules/rbac.py:147
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:158
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:159
- // self.arranger.value = new_arranger
- bytec 8 // 0x52323023
- swap
- app_global_put
- // modules/rbac.py:160
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:147
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_set_op_daemon[routing]() -> void:
-rbac_set_op_daemon:
- // modules/rbac.py:162
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:173
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:174
- // self.op_daemon.value = address
- bytec 22 // 0x52323523
- swap
- app_global_put
- // modules/rbac.py:175
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:162
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_assign_role[routing]() -> void:
-rbac_assign_role:
- // modules/rbac.py:177
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 2
- dup
- cover 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 3
- dup
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- pushint 2
- +
- dig 1
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- extract 2 0
- swap
- // modules/rbac.py:199
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:200
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/rbac.py:201
- // self._assert_valid_role(role_id.as_uint64())
- btoi
- dupn 2
- callsub _assert_valid_role
- // modules/rbac.py:101
- // if role_id == UInt64(cst.ROLE_ARRANGER):
- pushint 20
- ==
- bz rbac_assign_role_after_if_else@3
- // modules/rbac.py:102
- // self.arranger.value = role_address
- bytec 8 // 0x52323023
- dig 3
- app_global_put
-
-rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14:
- // modules/rbac.py:203
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:177
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-rbac_assign_role_after_if_else@3:
- // modules/rbac.py:105
- // if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
- dup
- pushint 40
- ==
- bz rbac_assign_role_after_if_else@5
- // modules/rbac.py:106
- // assert role_address not in self.account_manager, err.INVALID_ROLE_ADDRESS
- bytec 14 // 0x52343023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:107
- // self.account_manager[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@5:
- // modules/rbac.py:109
- // if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
- dup
- pushint 50
- ==
- bz rbac_assign_role_after_if_else@7
- // modules/rbac.py:110
- // assert role_address not in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- bytec 21 // 0x52353023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:111
- // self.primary_dealer[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@7:
- // modules/rbac.py:113
- // if role_id == UInt64(cst.ROLE_TRUSTEE):
- dup
- pushint 60
- ==
- bz rbac_assign_role_after_if_else@9
- // modules/rbac.py:114
- // assert role_address not in self.trustee, err.INVALID_ROLE_ADDRESS
- bytec 20 // 0x52363023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:115
- // self.trustee[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@9:
- // modules/rbac.py:117
- // if role_id == UInt64(cst.ROLE_AUTHORITY):
- dup
- pushint 70
- ==
- bz rbac_assign_role_after_if_else@11
- // modules/rbac.py:118
- // assert role_address not in self.authority, err.INVALID_ROLE_ADDRESS
- bytec 13 // 0x52373023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:119
- // self.authority[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@11:
- // modules/rbac.py:121
- // if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
- dup
- pushint 80
- ==
- bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
- // modules/rbac.py:122
- // assert role_address not in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- bytec 32 // 0x52383023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:123
- // self.interest_oracle[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-
-// modules.rbac.RbacModule.rbac_revoke_role[routing]() -> void:
-rbac_revoke_role:
- // modules/rbac.py:205
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 2
- dup
- cover 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:224
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:225
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/rbac.py:226
- // self._assert_valid_role(role_id.as_uint64())
- btoi
- dupn 2
- callsub _assert_valid_role
- // modules/rbac.py:126
- // assert role_id != UInt64(cst.ROLE_ARRANGER), err.INVALID_ROLE
- dup
- pushint 20
- !=
- assert // Invalid role identifier
- // modules/rbac.py:127
- // if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
- pushint 40
- ==
- bz rbac_revoke_role_after_if_else@3
- // modules/rbac.py:128
- // assert role_address in self.account_manager, err.INVALID_ROLE_ADDRESS
- bytec 14 // 0x52343023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:129
- // del self.account_manager[role_address]
- box_del
- pop
-
-rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12:
- // modules/rbac.py:228
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:205
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-rbac_revoke_role_after_if_else@3:
- // modules/rbac.py:131
- // if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
- dup
- pushint 50
- ==
- bz rbac_revoke_role_after_if_else@5
- // modules/rbac.py:132
- // assert role_address in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- bytec 21 // 0x52353023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:133
- // del self.primary_dealer[role_address]
- box_del
- pop
- // modules/rbac.py:227
- // self._delete_role(role_id.as_uint64(), role_address)
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-rbac_revoke_role_after_if_else@5:
- // modules/rbac.py:135
- // if role_id == UInt64(cst.ROLE_TRUSTEE):
- dup
- pushint 60
- ==
- bz rbac_revoke_role_after_if_else@7
- // modules/rbac.py:136
- // assert role_address in self.trustee, err.INVALID_ROLE_ADDRESS
- bytec 20 // 0x52363023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:137
- // del self.trustee[role_address]
- box_del
- pop
- // modules/rbac.py:227
- // self._delete_role(role_id.as_uint64(), role_address)
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-rbac_revoke_role_after_if_else@7:
- // modules/rbac.py:139
- // if role_id == UInt64(cst.ROLE_AUTHORITY):
- dup
- pushint 70
- ==
- bz rbac_revoke_role_after_if_else@9
- // modules/rbac.py:140
- // assert role_address in self.authority, err.INVALID_ROLE_ADDRESS
- bytec 13 // 0x52373023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:141
- // del self.authority[role_address]
- box_del
- pop
- // modules/rbac.py:227
- // self._delete_role(role_id.as_uint64(), role_address)
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-rbac_revoke_role_after_if_else@9:
- // modules/rbac.py:143
- // if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
- dup
- pushint 80
- ==
- bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
- // modules/rbac.py:144
- // assert role_address in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- bytec 32 // 0x52383023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:145
- // del self.interest_oracle[role_address]
- box_del
- pop
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-
-// modules.rbac.RbacModule.rbac_gov_asset_suspension[routing]() -> void:
-rbac_gov_asset_suspension:
- // modules/rbac.py:230
- // @arc4.abimethod # TODO: Update specs and add test
- txna ApplicationArgs 1
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.bool
- intc_0 // 0
- getbit
- // modules/rbac.py:77
- // assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
- bytec 13 // 0x52373023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/rbac.py:246
- // self.asset_suspended = suspended
- bytec 23 // "asset_suspended"
- swap
- app_global_put
- // modules/rbac.py:247
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:230
- // @arc4.abimethod # TODO: Update specs and add test
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_get_arranger[routing]() -> void:
-rbac_get_arranger:
- // modules/rbac.py:257
- // return self.arranger.value
- intc_0 // 0
- bytec 8 // 0x52323023
- app_global_get_ex
- assert // check self.arranger exists
- // modules/rbac.py:249
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_get_address_roles[routing]() -> void:
-rbac_get_address_roles:
- // modules/rbac.py:259
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:273
- // self._role_is_active(self.account_manager, address),
- bytec 14 // 0x52343023
- dig 1
- callsub _role_is_active
- // modules/rbac.py:274
- // self._role_is_active(self.primary_dealer, address),
- bytec 21 // 0x52353023
- dig 2
- callsub _role_is_active
- // modules/rbac.py:275
- // self._role_is_active(self.trustee, address),
- bytec 20 // 0x52363023
- dig 3
- callsub _role_is_active
- // modules/rbac.py:276
- // self._role_is_active(self.authority, address),
- bytec 13 // 0x52373023
- dig 4
- callsub _role_is_active
- // modules/rbac.py:277
- // self._role_is_active(self.interest_oracle, address),
- bytec 32 // 0x52383023
- uncover 5
- callsub _role_is_active
- // modules/rbac.py:259
- // @arc4.abimethod(readonly=True)
- bytec 31 // 0x00
- intc_0 // 0
- uncover 6
- setbit
- intc_1 // 1
- uncover 5
- setbit
- pushint 2
- uncover 4
- setbit
- pushint 3
- uncover 3
- setbit
- pushint 4
- uncover 2
- setbit
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_get_role_config[routing]() -> void:
-rbac_get_role_config:
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_1 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 2
- dup
- cover 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:294
- // role = role_id.as_uint64()
- btoi
- // modules/rbac.py:295
- // self._assert_valid_role(role)
- dup
- callsub _assert_valid_role
- // modules/rbac.py:297
- // case UInt64(cst.ROLE_ARRANGER):
- pushints 20 40 50 60 70 80
- // modules/rbac.py:296-327
- // match role:
- // case UInt64(cst.ROLE_ARRANGER):
- // return typ.RoleConfig(
- // role_validity_start=UInt64(0), role_validity_end=UInt64(0)
- // )
- // case UInt64(cst.ROLE_ACCOUNT_MANAGER):
- // assert self._has_role(
- // self.account_manager, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.account_manager[role_address]
- // case UInt64(cst.ROLE_PRIMARY_DEALER):
- // assert self._has_role(
- // self.primary_dealer, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.primary_dealer[role_address]
- // case UInt64(cst.ROLE_TRUSTEE):
- // assert self._has_role(
- // self.trustee, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.trustee[role_address]
- // case UInt64(cst.ROLE_AUTHORITY):
- // assert self._has_role(
- // self.authority, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.authority[role_address]
- // case UInt64(cst.ROLE_INTEREST_ORACLE):
- // assert self._has_role(
- // self.interest_oracle, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.interest_oracle[role_address]
- // case _:
- // op.err(err.INVALID_ROLE)
- uncover 6
- match rbac_get_role_config_switch_case_0@2 rbac_get_role_config_switch_case_1@3 rbac_get_role_config_switch_case_2@4 rbac_get_role_config_switch_case_3@5 rbac_get_role_config_switch_case_4@6 rbac_get_role_config_switch_case_5@7
- // modules/rbac.py:327
- // op.err(err.INVALID_ROLE)
- err // Invalid role identifier
-
-rbac_get_role_config_switch_case_5@7:
- // modules/rbac.py:323
- // self.interest_oracle, role_address
- bytec 32 // 0x52383023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:322-324
- // assert self._has_role(
- // self.interest_oracle, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:325
- // return self.interest_oracle[role_address]
- box_get
- pop
-
-rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9:
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_1 // 1
- return
-
-rbac_get_role_config_switch_case_4@6:
- // modules/rbac.py:318
- // self.authority, role_address
- bytec 13 // 0x52373023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:317-319
- // assert self._has_role(
- // self.authority, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:320
- // return self.authority[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_3@5:
- // modules/rbac.py:313
- // self.trustee, role_address
- bytec 20 // 0x52363023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:312-314
- // assert self._has_role(
- // self.trustee, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:315
- // return self.trustee[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_2@4:
- // modules/rbac.py:308
- // self.primary_dealer, role_address
- bytec 21 // 0x52353023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:307-309
- // assert self._has_role(
- // self.primary_dealer, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:310
- // return self.primary_dealer[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_1@3:
- // modules/rbac.py:303
- // self.account_manager, role_address
- bytec 14 // 0x52343023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:302-304
- // assert self._has_role(
- // self.account_manager, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:305
- // return self.account_manager[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_0@2:
- // modules/rbac.py:298-300
- // return typ.RoleConfig(
- // role_validity_start=UInt64(0), role_validity_end=UInt64(0)
- // )
- pushbytes 0x00000000000000000000000000000000
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.count_due_coupons() -> uint64:
-count_due_coupons:
- // modules/core_financial/coupon.py:111
- // def count_due_coupons(self) -> UInt64:
- proto 0 1
- pushbytes ""
- // modules/core_financial/coupon.py:112
- // current_ts = Global.latest_timestamp
- global LatestTimestamp
- dup
- // modules/core_financial/coupon.py:113
- // due_coupons = self.due_coupons_watermark
- intc_0 // 0
- bytec 29 // "due_coupons_watermark"
- app_global_get_ex
- swap
- cover 2
- assert // check self.due_coupons_watermark exists
- // modules/core_financial/coupon.py:114
- // if current_ts >= self.maturity_date:
- intc_0 // 0
- bytec 5 // "maturity_date"
- app_global_get_ex
- assert // check self.maturity_date exists
- >=
- bz count_due_coupons_else_body@2
- // modules/core_financial/coupon.py:115
- // due_coupons = self.total_coupons
- intc_0 // 0
- bytec 7 // "total_coupons"
- app_global_get_ex
- swap
- frame_bury 2
- assert // check self.total_coupons exists
-
-count_due_coupons_after_if_else@8:
- // modules/core_financial/coupon.py:129
- // self.due_coupons_watermark = due_coupons
- bytec 29 // "due_coupons_watermark"
- frame_dig 2
- dup
- cover 2
- app_global_put
- // modules/core_financial/coupon.py:130
- // return due_coupons
- frame_bury 0
- retsub
-
-count_due_coupons_else_body@2:
- // modules/core_financial/coupon.py:116
- // elif current_ts > self.issuance_date:
- intc_0 // 0
- bytec 4 // "issuance_date"
- app_global_get_ex
- assert // check self.issuance_date exists
- frame_dig 1
- <
- bz count_due_coupons_after_if_else@8
- // modules/core_financial/coupon.py:118
- // UInt64(fixed_cfg.FIRST_COUPON_DATE_IDX) + self.due_coupons_watermark
- intc_0 // 0
- bytec 29 // "due_coupons_watermark"
- app_global_get_ex
- assert // check self.due_coupons_watermark exists
- pushint 3
- +
- dup
- frame_bury 0
- // modules/core_financial/coupon.py:120
- // coupon_due_date = self.time_events.value[coupon_idx]
- intc_3 // 8
- *
- pushint 2
- +
- bytec 12 // 0x74696d654576656e7473
- swap
- intc_3 // 8
- box_extract
- btoi
-
-count_due_coupons_while_top@4:
- // modules/core_financial/coupon.py:121
- // while current_ts >= coupon_due_date:
- frame_dig 1
- <=
- bz count_due_coupons_after_while@6
- // modules/core_financial/coupon.py:123
- // required_budget=UInt64(fixed_cfg.OP_UP_COUPON_DUE_COUNTING),
- intc 4 // 255
- // modules/core_financial/coupon.py:124
- // fee_source=OpUpFeeSource.GroupCredit,
- intc_0 // 0
- // modules/core_financial/coupon.py:122-125
- // ensure_budget(
- // required_budget=UInt64(fixed_cfg.OP_UP_COUPON_DUE_COUNTING),
- // fee_source=OpUpFeeSource.GroupCredit,
- // )
- callsub ensure_budget
- // modules/core_financial/coupon.py:126
- // coupon_idx += 1
- frame_dig 0
- intc_1 // 1
- +
- dup
- frame_bury 0
- // modules/core_financial/coupon.py:127
- // coupon_due_date = self.time_events.value[coupon_idx]
- intc_3 // 8
- *
- pushint 2
- +
- bytec 12 // 0x74696d654576656e7473
- swap
- intc_3 // 8
- box_extract
- btoi
- b count_due_coupons_while_top@4
-
-count_due_coupons_after_while@6:
- // modules/core_financial/coupon.py:128
- // due_coupons = coupon_idx - fixed_cfg.FIRST_COUPON_DATE_IDX
- frame_dig 0
- pushint 3
- -
- frame_bury 2
- b count_due_coupons_after_if_else@8
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_due_date(coupon: uint64) -> uint64:
-coupon_due_date:
- // modules/core_financial/coupon.py:132
- // def coupon_due_date(self, coupon: UInt64) -> UInt64:
- proto 1 1
- // modules/core_financial/coupon.py:133
- // return self.time_events.value[fixed_cfg.FIRST_COUPON_DATE_IDX + coupon - 1]
- pushint 3
- frame_dig -1
- +
- intc_1 // 1
- -
- intc_3 // 8
- *
- pushint 2
- +
- bytec 12 // 0x74696d654576656e7473
- swap
- intc_3 // 8
- box_extract
- btoi
- retsub
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.next_coupon_due_date(due_coupons: uint64) -> uint64:
-next_coupon_due_date:
- // modules/core_financial/coupon.py:141
- // def next_coupon_due_date(self, due_coupons: UInt64) -> UInt64:
- proto 1 1
- // modules/core_financial/coupon.py:142
- // coupon_due_date = UInt64()
- intc_0 // 0
- // modules/core_financial/coupon.py:143
- // if due_coupons < self.total_coupons:
- dup
- bytec 7 // "total_coupons"
- app_global_get_ex
- assert // check self.total_coupons exists
- frame_dig -1
- >
- bz next_coupon_due_date_after_if_else@2
- // modules/core_financial/coupon.py:144
- // coupon_due_date = self.coupon_due_date(due_coupons + 1)
- frame_dig -1
- intc_1 // 1
- +
- callsub coupon_due_date
- frame_bury 0
-
-next_coupon_due_date_after_if_else@2:
- // modules/core_financial/coupon.py:145
- // return coupon_due_date
- frame_dig 0
- swap
- retsub
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.coupon_interest_amount(principal_amount: uint64, coupon: uint64) -> uint64:
-coupon_interest_amount:
- // modules/core_financial/coupon.py:147-149
- // def coupon_interest_amount(
- // self, principal_amount: UInt64, coupon: UInt64
- // ) -> UInt64:
- proto 2 1
- // modules/core_financial/coupon.py:150
- // coupon_rate_bps = self.coupon_rates.value[coupon - 1].as_uint64()
- frame_dig -1
- intc_1 // 1
- -
- pushint 2
- *
- pushint 2
- +
- bytec 19 // 0x636f75706f6e5261746573
- swap
- pushint 2
- box_extract
- btoi
- // modules/core_financial/coupon.py:151
- // return principal_amount * coupon_rate_bps // cst.BPS
- frame_dig -2
- *
- pushint 10000
- /
- retsub
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.day_count_factor(due_coupons: uint64) -> bytes:
-day_count_factor:
- // modules/core_financial/coupon.py:153
- // def day_count_factor(self, due_coupons: UInt64) -> typ.DayCountFactor:
- proto 1 1
- pushbytes ""
- dup
- // modules/core_financial/coupon.py:154-155
- // # The reference implementation supports only the Actual/Actual and Continuous day-count conventions
- // if not due_coupons:
- frame_dig -1
- bnz day_count_factor_else_body@2
- // modules/core_financial/coupon.py:156
- // accruing_start_time = self.issuance_date
- intc_0 // 0
- bytec 4 // "issuance_date"
- app_global_get_ex
- assert // check self.issuance_date exists
-
-day_count_factor_after_if_else@3:
- // modules/core_financial/coupon.py:159
- // coupon_accrued_period = Global.latest_timestamp - accruing_start_time
- global LatestTimestamp
- dig 1
- -
- frame_bury 0
- // modules/core_financial/coupon.py:160
- // coupon_period = self.next_coupon_due_date(due_coupons) - accruing_start_time
- frame_dig -1
- callsub next_coupon_due_date
- swap
- -
- // modules/core_financial/coupon.py:161
- // if self.day_count_convention == UInt64(cst.DCC_A_A):
- intc_0 // 0
- bytec 17 // "day_count_convention"
- app_global_get_ex
- assert // check self.day_count_convention exists
- bnz day_count_factor_after_if_else@5
- // modules/core_financial/common.py:162
- // return time_period // UInt64(cst.DAY_2_SEC)
- frame_dig 0
- intc 6 // 86400
- /
- frame_bury 0
- intc 6 // 86400
- /
-
-day_count_factor_after_if_else@5:
- // modules/core_financial/coupon.py:164-167
- // return typ.DayCountFactor(
- // numerator=coupon_accrued_period,
- // denominator=coupon_period,
- // )
- frame_dig 0
- itob
- swap
- itob
- concat
- frame_bury 0
- retsub
-
-day_count_factor_else_body@2:
- // modules/core_financial/coupon.py:136
- // coupon_due_date = UInt64()
- intc_0 // 0
- frame_bury 1
- // modules/core_financial/coupon.py:137
- // if due_coupons >= UInt64(1):
- frame_dig -1
- bz day_count_factor_after_if_else@8
- // modules/core_financial/coupon.py:138
- // coupon_due_date = self.coupon_due_date(due_coupons)
- frame_dig -1
- callsub coupon_due_date
- frame_bury 1
-
-day_count_factor_after_if_else@8:
- frame_dig 1
- b day_count_factor_after_if_else@3
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.is_accruing_interest(due_coupons: uint64) -> uint64:
-is_accruing_interest:
- // modules/core_financial/coupon.py:169
- // def is_accruing_interest(self, due_coupons: UInt64) -> bool:
- proto 1 1
- // modules/core_financial/coupon.py:171
- // self.issuance_date != 0
- intc_0 // 0
- bytec 4 // "issuance_date"
- app_global_get_ex
- assert // check self.issuance_date exists
- // modules/core_financial/coupon.py:171-173
- // self.issuance_date != 0
- // and Global.latest_timestamp >= self.issuance_date
- // and due_coupons < self.total_coupons
- bz is_accruing_interest_bool_false@4
- // modules/core_financial/coupon.py:172
- // and Global.latest_timestamp >= self.issuance_date
- global LatestTimestamp
- intc_0 // 0
- bytec 4 // "issuance_date"
- app_global_get_ex
- assert // check self.issuance_date exists
- >=
- // modules/core_financial/coupon.py:171-173
- // self.issuance_date != 0
- // and Global.latest_timestamp >= self.issuance_date
- // and due_coupons < self.total_coupons
- bz is_accruing_interest_bool_false@4
- // modules/core_financial/coupon.py:173
- // and due_coupons < self.total_coupons
- intc_0 // 0
- bytec 7 // "total_coupons"
- app_global_get_ex
- assert // check self.total_coupons exists
- frame_dig -1
- >
- // modules/core_financial/coupon.py:171-173
- // self.issuance_date != 0
- // and Global.latest_timestamp >= self.issuance_date
- // and due_coupons < self.total_coupons
- bz is_accruing_interest_bool_false@4
- intc_1 // 1
- // modules/core_financial/coupon.py:170-174
- // return (
- // self.issuance_date != 0
- // and Global.latest_timestamp >= self.issuance_date
- // and due_coupons < self.total_coupons
- // )
- retsub
-
-is_accruing_interest_bool_false@4:
- intc_0 // 0
- // modules/core_financial/coupon.py:170-174
- // return (
- // self.issuance_date != 0
- // and Global.latest_timestamp >= self.issuance_date
- // and due_coupons < self.total_coupons
- // )
- retsub
-
-
-// modules.core_financial.coupon.FixedCouponCashflowMixin.accrued_interest_amount(holding_address: bytes, units: uint64, due_coupons: uint64) -> uint64:
-accrued_interest_amount:
- // modules/core_financial/coupon.py:176-178
- // def accrued_interest_amount(
- // self, holding_address: Account, units: UInt64, due_coupons: UInt64
- // ) -> UInt64:
- proto 3 1
- // modules/core_financial/coupon.py:179-180
- // # The following assert safeguards the subroutine from forbidden invocations
- // self.assert_no_pending_coupon_payment(holding_address, due_coupons)
- frame_dig -3
- frame_dig -1
- callsub assert_no_pending_coupon_payment
- // modules/core_financial/coupon.py:181
- // day_count_factor = self.day_count_factor(due_coupons)
- frame_dig -1
- callsub day_count_factor
- // modules/core_financial/coupon.py:182
- // coupon_accrued_period = day_count_factor.numerator
- dup
- intc_0 // 0
- extract_uint64
- // modules/core_financial/coupon.py:183
- // coupon_period = day_count_factor.denominator
- swap
- intc_3 // 8
- extract_uint64
- // modules/core_financial/coupon.py:184
- // next_coupon_rate_bps = self.coupon_rates.value[due_coupons].as_uint64()
- frame_dig -1
- pushint 2
- *
- pushint 2
- +
- bytec 19 // 0x636f75706f6e5261746573
- swap
- pushint 2
- box_extract
- btoi
- // modules/core_financial/coupon.py:187
- // self.account_units_value(holding_address, units)
- frame_dig -3
- frame_dig -2
- callsub account_units_value
- // modules/core_financial/coupon.py:187-188
- // self.account_units_value(holding_address, units)
- // * next_coupon_rate_bps
- *
- // modules/core_financial/coupon.py:187-189
- // self.account_units_value(holding_address, units)
- // * next_coupon_rate_bps
- // * coupon_accrued_period
- uncover 2
- *
- // modules/core_financial/coupon.py:190
- // // (cst.BPS * coupon_period)
- pushint 10000
- uncover 2
- *
- // modules/core_financial/coupon.py:187-190
- // self.account_units_value(holding_address, units)
- // * next_coupon_rate_bps
- // * coupon_accrued_period
- // // (cst.BPS * coupon_period)
- /
- // modules/core_financial/coupon.py:185-191
- // # due_coupons is equal to the 0-base idx of next coupon
- // return (
- // self.account_units_value(holding_address, units)
- // * next_coupon_rate_bps
- // * coupon_accrued_period
- // // (cst.BPS * coupon_period)
- // ) # div-by-zero: coupon_period != 0 due to assert_time_events_sorted checks
- retsub
-
-
-// modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid(due_coupons: uint64) -> uint64:
-all_due_coupons_paid:
- // modules/core_financial/coupon.py:26
- // def all_due_coupons_paid(self, due_coupons: UInt64) -> bool:
- proto 1 1
- // modules/core_financial/coupon.py:27
- // return self.paid_coupon_units >= self.circulating_units * due_coupons
- intc_0 // 0
- bytec 28 // "paid_coupon_units"
- app_global_get_ex
- assert // check self.paid_coupon_units exists
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- frame_dig -1
- *
- >=
- retsub
-
-
-// modules.core_financial.coupon.CouponCashflowMixin.assert_no_pending_coupon_payment(holding_address: bytes, due_coupons: uint64) -> void:
-assert_no_pending_coupon_payment:
- // modules/core_financial/coupon.py:29-31
- // def assert_no_pending_coupon_payment(
- // self, holding_address: Account, due_coupons: UInt64
- // ) -> None:
- proto 2 0
- // modules/core_financial/coupon.py:33
- // self.account[holding_address].paid_coupons == due_coupons
- bytec_1 // 0x52333023
- frame_dig -2
- concat
- box_get
- assert // check self.account entry exists
- pushint 48
- extract_uint64
- frame_dig -1
- ==
- // modules/core_financial/coupon.py:32-34
- // assert (
- // self.account[holding_address].paid_coupons == due_coupons
- // ), err.PENDING_COUPON_PAYMENT
- assert // Pending due coupon payment
- retsub
-
-
-// modules.payment_agent.common.PaymentAgentCommonMixin.assert_payment_authorization(holding_address: bytes) -> void:
-assert_payment_authorization:
- // modules/payment_agent/common.py:12
- // def assert_payment_authorization(self, holding_address: Account) -> None:
- proto 1 0
- // modules/payment_agent/common.py:13
- // if self.op_daemon.value != Global.zero_address:
- intc_0 // 0
- bytec 22 // 0x52323523
- app_global_get_ex
- assert // check self.op_daemon exists
- global ZeroAddress
- !=
- bz assert_payment_authorization_after_if_else@7
- // modules/payment_agent/common.py:15
- // Txn.sender == self.op_daemon.value
- txn Sender
- intc_0 // 0
- bytec 22 // 0x52323523
- app_global_get_ex
- assert // check self.op_daemon exists
- ==
- // modules/payment_agent/common.py:15-17
- // Txn.sender == self.op_daemon.value
- // or Txn.sender == holding_address
- // or Txn.sender == self.account[holding_address].payment_address
- bnz assert_payment_authorization_bool_true@4
- // modules/payment_agent/common.py:16
- // or Txn.sender == holding_address
- txn Sender
- frame_dig -1
- ==
- // modules/payment_agent/common.py:15-17
- // Txn.sender == self.op_daemon.value
- // or Txn.sender == holding_address
- // or Txn.sender == self.account[holding_address].payment_address
- bnz assert_payment_authorization_bool_true@4
- // modules/payment_agent/common.py:17
- // or Txn.sender == self.account[holding_address].payment_address
- txn Sender
- bytec_1 // 0x52333023
- frame_dig -1
- concat
- box_get
- assert // check self.account entry exists
- extract 0 32
- ==
- // modules/payment_agent/common.py:15-17
- // Txn.sender == self.op_daemon.value
- // or Txn.sender == holding_address
- // or Txn.sender == self.account[holding_address].payment_address
- bz assert_payment_authorization_bool_false@5
-
-assert_payment_authorization_bool_true@4:
- intc_1 // 1
-
-assert_payment_authorization_bool_merge@6:
- // modules/payment_agent/common.py:14-18
- // assert (
- // Txn.sender == self.op_daemon.value
- // or Txn.sender == holding_address
- // or Txn.sender == self.account[holding_address].payment_address
- // ), err.UNAUTHORIZED
- assert // Not authorized
-
-assert_payment_authorization_after_if_else@7:
- retsub
-
-assert_payment_authorization_bool_false@5:
- intc_0 // 0
- b assert_payment_authorization_bool_merge@6
-
-
-// modules.payment_agent.common.PaymentAgentCommonMixin.is_payment_executable(holding_address: bytes) -> uint64:
-is_payment_executable:
- // modules/payment_agent/common.py:20
- // def is_payment_executable(self, holding_address: Account) -> bool:
- proto 1 1
- // modules/payment_agent/common.py:22
- // self.account[holding_address].payment_address.is_opted_in(
- bytec_1 // 0x52333023
- frame_dig -1
- concat
- dup
- box_get
- assert // check self.account entry exists
- extract 0 32
- // modules/payment_agent/common.py:23
- // self.settlement_asset_id
- intc_0 // 0
- bytec 9 // "settlement_asset_id"
- app_global_get_ex
- assert // check self.settlement_asset_id exists
- // modules/payment_agent/common.py:22-24
- // self.account[holding_address].payment_address.is_opted_in(
- // self.settlement_asset_id
- // )
- asset_holding_get AssetBalance
- bury 1
- // modules/payment_agent/common.py:22-25
- // self.account[holding_address].payment_address.is_opted_in(
- // self.settlement_asset_id
- // )
- // and not self.account[holding_address].suspended
- bz is_payment_executable_bool_false@3
- // modules/payment_agent/common.py:25
- // and not self.account[holding_address].suspended
- frame_dig 0
- box_get
- assert // check self.account entry exists
- pushint 448
- getbit
- bnz is_payment_executable_bool_false@3
- intc_1 // 1
-
-is_payment_executable_bool_merge@4:
- // modules/payment_agent/common.py:21-26
- // return (
- // self.account[holding_address].payment_address.is_opted_in(
- // self.settlement_asset_id
- // )
- // and not self.account[holding_address].suspended
- // )
- swap
- retsub
-
-is_payment_executable_bool_false@3:
- intc_0 // 0
- b is_payment_executable_bool_merge@4
-
-
-// modules.payment_agent.common.PaymentAgentCommonMixin.assert_enough_funds(payment_amount: uint64) -> void:
-assert_enough_funds:
- // modules/payment_agent/common.py:28
- // def assert_enough_funds(self, payment_amount: UInt64) -> None:
- proto 1 0
- // modules/payment_agent/common.py:30
- // self.settlement_asset_id.balance(Global.current_application_address)
- global CurrentApplicationAddress
- intc_0 // 0
- bytec 9 // "settlement_asset_id"
- app_global_get_ex
- assert // check self.settlement_asset_id exists
- asset_holding_get AssetBalance
- assert // account opted into asset
- // modules/payment_agent/common.py:30-31
- // self.settlement_asset_id.balance(Global.current_application_address)
- // >= payment_amount
- frame_dig -1
- >=
- // modules/payment_agent/common.py:29-32
- // assert (
- // self.settlement_asset_id.balance(Global.current_application_address)
- // >= payment_amount
- // ), err.NOT_ENOUGH_FUNDS
- assert // Not enough funds for the payment
- retsub
-
-
-// modules.payment_agent.common.PaymentAgentCommonMixin.pay(receiver: bytes, amount: uint64) -> void:
-pay:
- // modules/payment_agent/common.py:34
- // def pay(self, receiver: Account, amount: UInt64) -> None:
- proto 2 0
- // modules/payment_agent/common.py:35-40
- // itxn.AssetTransfer(
- // xfer_asset=self.settlement_asset_id,
- // asset_receiver=receiver,
- // asset_amount=amount,
- // fee=Global.min_txn_fee,
- // ).submit()
- itxn_begin
- // modules/payment_agent/common.py:39
- // fee=Global.min_txn_fee,
- global MinTxnFee
- // modules/payment_agent/common.py:36
- // xfer_asset=self.settlement_asset_id,
- intc_0 // 0
- bytec 9 // "settlement_asset_id"
- app_global_get_ex
- assert // check self.settlement_asset_id exists
- frame_dig -1
- itxn_field AssetAmount
- frame_dig -2
- itxn_field AssetReceiver
- itxn_field XferAsset
- // modules/payment_agent/common.py:35
- // itxn.AssetTransfer(
- pushint 4 // axfer
- itxn_field TypeEnum
- itxn_field Fee
- // modules/payment_agent/common.py:35-40
- // itxn.AssetTransfer(
- // xfer_asset=self.settlement_asset_id,
- // asset_receiver=receiver,
- // asset_amount=amount,
- // fee=Global.min_txn_fee,
- // ).submit()
- itxn_submit
- retsub
-
-
-// modules.core_financial.common.CoreFinancialCommonMixin.assert_time_events_sorted(time_events: bytes) -> bytes:
-assert_time_events_sorted:
- // modules/core_financial/common.py:107
- // def assert_time_events_sorted(self, time_events: typ.TimeEvents) -> None:
- proto 1 1
- pushbytes ""
- dupn 2
- // modules/core_financial/common.py:109
- // time_events[cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX]
- frame_dig -1
- extract 2 0
- frame_dig -1
- pushint 2
- extract_uint64
- // modules/core_financial/common.py:110
- // > Global.latest_timestamp
- global LatestTimestamp
- // modules/core_financial/common.py:109-110
- // time_events[cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX]
- // > Global.latest_timestamp
- >
- // modules/core_financial/common.py:108-111
- // assert (
- // time_events[cfg.PRIMARY_DISTRIBUTION_OPENING_DATE_IDX]
- // > Global.latest_timestamp
- // ), err.INVALID_TIME
- assert // Time events must be set in the future
- // modules/core_financial/common.py:112
- // for idx in urange(time_events.length - 1):
- frame_dig -1
- intc_0 // 0
- extract_uint16 // on error: invalid array length header
- intc_1 // 1
- -
- intc_0 // 0
-
-assert_time_events_sorted_for_header@1:
- // modules/core_financial/common.py:112
- // for idx in urange(time_events.length - 1):
- frame_dig 5
- frame_dig 4
- <
- bz assert_time_events_sorted_after_for@6
- // modules/core_financial/common.py:114
- // required_budget=UInt64(cfg.OP_UP_TIME_EVENT_SORTING),
- pushint 65
- // modules/core_financial/common.py:115
- // fee_source=OpUpFeeSource.AppAccount,
- intc_1 // 1
- // modules/core_financial/common.py:113-116
- // ensure_budget(
- // required_budget=UInt64(cfg.OP_UP_TIME_EVENT_SORTING),
- // fee_source=OpUpFeeSource.AppAccount,
- // )
- callsub ensure_budget
- // modules/core_financial/common.py:117
- // time_i = time_events[idx]
- frame_dig 5
- dup
- intc_3 // 8
- *
- frame_dig 3
- dup
- cover 3
- swap
- extract_uint64
- dup
- cover 3
- frame_bury 1
- // modules/core_financial/common.py:118
- // time_f = time_events[idx + 1]
- intc_1 // 1
- +
- dup
- frame_bury 2
- intc_3 // 8
- *
- extract_uint64
- dup
- frame_bury 0
- // modules/core_financial/common.py:119
- // assert time_f > time_i, err.INVALID_SORTING
- <
- assert // Time events must be sorted in strictly ascending order
- // modules/core_financial/common.py:120
- // if self.day_count_convention != UInt64(cst.DCC_CONT):
- intc_0 // 0
- bytec 17 // "day_count_convention"
- app_global_get_ex
- assert // check self.day_count_convention exists
- intc 4 // 255
- !=
- bz assert_time_events_sorted_after_if_else@4
- // modules/core_financial/common.py:121-122
- // # The reference implementation requires time periods expressed in days for regular day-count conventions
- // assert (time_f - time_i) % UInt64(
- frame_dig 0
- frame_dig 1
- -
- // modules/core_financial/common.py:121-124
- // # The reference implementation requires time periods expressed in days for regular day-count conventions
- // assert (time_f - time_i) % UInt64(
- // cst.DAY_2_SEC
- // ) == 0, err.INVALID_TIME_PERIOD
- intc 6 // 86400
- %
- !
- assert // Time periods in Actual/Actual day count convention must be multiples of a day (in seconds)
-
-assert_time_events_sorted_after_if_else@4:
- frame_dig 2
- frame_bury 5
- b assert_time_events_sorted_for_header@1
-
-assert_time_events_sorted_after_for@6:
- frame_dig -1
- frame_bury 0
- retsub
-
-
-// modules.accounting.AccountingModule.assert_is_not_account_suspended(holding_address: bytes) -> void:
-assert_is_not_account_suspended:
- // modules/accounting.py:33
- // def assert_is_not_account_suspended(self, holding_address: Account) -> None:
- proto 1 0
- // modules/accounting.py:34
- // assert not self.account[holding_address].suspended, err.SUSPENDED
- bytec_1 // 0x52333023
- frame_dig -1
- concat
- box_get
- assert // check self.account entry exists
- pushint 448
- getbit
- !
- assert // Suspended operations
- retsub
-
-
-// modules.accounting.AccountingModule.account_units_value(holding_address: bytes, units: uint64) -> uint64:
-account_units_value:
- // modules/accounting.py:36
- // def account_units_value(self, holding_address: Account, units: UInt64) -> UInt64:
- proto 2 1
- // modules/accounting.py:37
- // return units * self.account[holding_address].unit_value
- bytec_1 // 0x52333023
- frame_dig -2
- concat
- box_get
- assert // check self.account entry exists
- pushint 40
- extract_uint64
- frame_dig -1
- *
- retsub
-
-
-// modules.accounting.AccountingModule.account_total_units_value(holding_address: bytes) -> uint64:
-account_total_units_value:
- // modules/accounting.py:39
- // def account_total_units_value(self, holding_address: Account) -> UInt64:
- proto 1 1
- // modules/accounting.py:41
- // holding_address, self.account[holding_address].units
- bytec_1 // 0x52333023
- frame_dig -1
- concat
- box_get
- assert // check self.account entry exists
- intc_2 // 32
- extract_uint64
- // modules/accounting.py:40-42
- // return self.account_units_value(
- // holding_address, self.account[holding_address].units
- // )
- frame_dig -1
- swap
- callsub account_units_value
- retsub
-
-
-// modules.accounting.AccountingModule.end_if_no_circulating_units() -> void:
-end_if_no_circulating_units:
- // modules/accounting.py:48
- // if self.circulating_units == UInt64(0):
- intc_0 // 0
- bytec_3 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- bnz end_if_no_circulating_units_after_if_else@2
- // modules/accounting.py:49
- // self.status = UInt64(enm.STATUS_ENDED)
- bytec_2 // "status"
- intc 5 // 200
- app_global_put
-
-end_if_no_circulating_units_after_if_else@2:
- retsub
-
-
-// modules.rbac.RbacModule._role_is_active(role_map: bytes, role_address: bytes) -> uint64:
-_role_is_active:
- // modules/rbac.py:57
- // def _role_is_active(self, role_map: typ.RbacRole, role_address: Account) -> bool:
- proto 2 1
- pushbytes ""
- // modules/rbac.py:55
- // return role_address in role_map
- frame_dig -2
- frame_dig -1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:58-62
- // return self._has_role(role_map, role_address) and (
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- // )
- bz _role_is_active_bool_false@4
- // modules/rbac.py:59
- // role_map[role_address].role_validity_start
- frame_dig 1
- box_get
- assert // check BoxMap entry exists
- intc_0 // 0
- extract_uint64
- // modules/rbac.py:60
- // <= Global.latest_timestamp
- global LatestTimestamp
- dup
- frame_bury 0
- // modules/rbac.py:59-60
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- <=
- // modules/rbac.py:59-61
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- bz _role_is_active_bool_false@4
- // modules/rbac.py:61
- // <= role_map[role_address].role_validity_end
- frame_dig 1
- box_get
- assert // check BoxMap entry exists
- intc_3 // 8
- extract_uint64
- // modules/rbac.py:60-61
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- frame_dig 0
- >=
- // modules/rbac.py:59-61
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- bz _role_is_active_bool_false@4
- intc_1 // 1
-
-_role_is_active_bool_merge@5:
- // modules/rbac.py:58-62
- // return self._has_role(role_map, role_address) and (
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- // )
- frame_bury 0
- retsub
-
-_role_is_active_bool_false@4:
- intc_0 // 0
- b _role_is_active_bool_merge@5
-
-
-// modules.rbac.RbacModule.assert_caller_is_arranger() -> void:
-assert_caller_is_arranger:
- // modules/rbac.py:65
- // assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
- txn Sender
- // modules/rbac.py:52
- // return role_address == self.arranger.value
- intc_0 // 0
- bytec 8 // 0x52323023
- app_global_get_ex
- assert // check self.arranger exists
- ==
- // modules/rbac.py:65
- // assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
- assert // Not authorized
- retsub
-
-
-// modules.rbac.RbacModule.assert_is_not_asset_defaulted() -> void:
-assert_is_not_asset_defaulted:
- // modules/rbac.py:83
- // assert not self.asset_defaulted, err.DEFAULTED
- intc_0 // 0
- bytec 24 // "asset_defaulted"
- app_global_get_ex
- assert // check self.asset_defaulted exists
- !
- assert // Defaulted
- retsub
-
-
-// modules.rbac.RbacModule.assert_is_not_asset_suspended() -> void:
-assert_is_not_asset_suspended:
- // modules/rbac.py:86
- // assert not self.asset_suspended, err.SUSPENDED
- intc_0 // 0
- bytec 23 // "asset_suspended"
- app_global_get_ex
- assert // check self.asset_suspended exists
- !
- assert // Suspended operations
- retsub
-
-
-// modules.rbac.RbacModule._assert_valid_role(role_id: uint64) -> void:
-_assert_valid_role:
- // modules/rbac.py:88
- // def _assert_valid_role(self, role_id: UInt64) -> None:
- proto 1 0
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- frame_dig -1
- // modules/rbac.py:90
- // UInt64(cst.ROLE_ARRANGER),
- pushint 20
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:91
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- pushint 40
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:92
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- pushint 50
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:93
- // UInt64(cst.ROLE_TRUSTEE),
- pushint 60
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:94
- // UInt64(cst.ROLE_AUTHORITY),
- pushint 70
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:95
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- pushint 80
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bz _assert_valid_role_bool_false@7
-
-_assert_valid_role_bool_true@6:
- intc_1 // 1
-
-_assert_valid_role_bool_merge@8:
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- assert // Invalid role identifier
- retsub
-
-_assert_valid_role_bool_false@7:
- intc_0 // 0
- b _assert_valid_role_bool_merge@8
diff --git a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.arc56.json b/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.arc56.json
deleted file mode 100644
index 49e9338c..00000000
--- a/smart_contracts/artifacts/fixed_coupon_bond/FixedCouponBond.arc56.json
+++ /dev/null
@@ -1,2048 +0,0 @@
-{
- "name": "FixedCouponBond",
- "structs": {
- "AccountInfo": [
- {
- "name": "payment_address",
- "type": "address"
- },
- {
- "name": "units",
- "type": "uint64"
- },
- {
- "name": "unit_value",
- "type": "uint64"
- },
- {
- "name": "paid_coupons",
- "type": "uint64"
- },
- {
- "name": "suspended",
- "type": "bool"
- }
- ],
- "AssetInfo": [
- {
- "name": "denomination_asset_id",
- "type": "uint64"
- },
- {
- "name": "settlement_asset_id",
- "type": "uint64"
- },
- {
- "name": "outstanding_principal",
- "type": "uint64"
- },
- {
- "name": "unit_value",
- "type": "uint64"
- },
- {
- "name": "day_count_convention",
- "type": "uint8"
- },
- {
- "name": "principal_discount",
- "type": "uint16"
- },
- {
- "name": "interest_rate",
- "type": "uint16"
- },
- {
- "name": "total_supply",
- "type": "uint64"
- },
- {
- "name": "circulating_supply",
- "type": "uint64"
- },
- {
- "name": "primary_distribution_opening_date",
- "type": "uint64"
- },
- {
- "name": "primary_distribution_closure_date",
- "type": "uint64"
- },
- {
- "name": "issuance_date",
- "type": "uint64"
- },
- {
- "name": "maturity_date",
- "type": "uint64"
- },
- {
- "name": "suspended",
- "type": "bool"
- },
- {
- "name": "performance",
- "type": "uint8"
- }
- ],
- "AssetMetadata": [
- {
- "name": "contract_type",
- "type": "uint8"
- },
- {
- "name": "calendar",
- "type": "uint8"
- },
- {
- "name": "business_day_convention",
- "type": "uint8"
- },
- {
- "name": "end_of_month_convention",
- "type": "uint8"
- },
- {
- "name": "prepayment_effect",
- "type": "uint8"
- },
- {
- "name": "penalty_type",
- "type": "uint8"
- },
- {
- "name": "prospectus_hash",
- "type": "byte[32]"
- },
- {
- "name": "prospectus_url",
- "type": "string"
- }
- ],
- "CouponsInfo": [
- {
- "name": "total_coupons",
- "type": "uint64"
- },
- {
- "name": "due_coupons",
- "type": "uint64"
- },
- {
- "name": "next_coupon_due_date",
- "type": "uint64"
- },
- {
- "name": "day_count_factor",
- "type": "DayCountFactor"
- },
- {
- "name": "all_due_coupons_paid",
- "type": "bool"
- }
- ],
- "CurrentUnitsValue": [
- {
- "name": "units_value",
- "type": "uint64"
- },
- {
- "name": "accrued_interest",
- "type": "uint64"
- },
- {
- "name": "day_count_factor",
- "type": "DayCountFactor"
- }
- ],
- "DayCountFactor": [
- {
- "name": "numerator",
- "type": "uint64"
- },
- {
- "name": "denominator",
- "type": "uint64"
- }
- ],
- "PaymentAmounts": [
- {
- "name": "interest",
- "type": "uint64"
- },
- {
- "name": "principal",
- "type": "uint64"
- }
- ],
- "PaymentResult": [
- {
- "name": "amount",
- "type": "uint64"
- },
- {
- "name": "timestamp",
- "type": "uint64"
- },
- {
- "name": "context",
- "type": "byte[]"
- }
- ],
- "RoleConfig": [
- {
- "name": "role_validity_start",
- "type": "uint64"
- },
- {
- "name": "role_validity_end",
- "type": "uint64"
- }
- ],
- "SecondaryMarketSchedule": [
- {
- "name": "secondary_market_opening_date",
- "type": "uint64"
- },
- {
- "name": "secondary_market_closure_date",
- "type": "uint64"
- }
- ]
- },
- "methods": [
- {
- "name": "asset_config",
- "args": [
- {
- "type": "uint64",
- "name": "denomination_asset_id",
- "desc": "Denomination asset identifier"
- },
- {
- "type": "uint64",
- "name": "settlement_asset_id",
- "desc": "Settlement asset identifier"
- },
- {
- "type": "uint64",
- "name": "principal",
- "desc": "Principal, expressed in denomination asset"
- },
- {
- "type": "uint64",
- "name": "principal_discount",
- "desc": "Principal discount in bps"
- },
- {
- "type": "uint64",
- "name": "minimum_denomination",
- "desc": "Minimum denomination, expressed in denomination asset"
- },
- {
- "type": "uint8",
- "name": "day_count_convention",
- "desc": "Day-count convention for interests calculation"
- },
- {
- "type": "uint16",
- "name": "interest_rate",
- "desc": "Interest rate in bps"
- },
- {
- "type": "uint16[]",
- "name": "coupon_rates",
- "desc": "Coupon interest rates in bps"
- },
- {
- "type": "uint64[]",
- "name": "time_events",
- "desc": "Time events (strictly ascending order)"
- },
- {
- "type": "(uint64,uint64)[]",
- "name": "time_periods",
- "desc": "Time periods of recurring time events"
- }
- ],
- "returns": {
- "type": "void"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Configure the Debt Algorand Standard Application",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_account_units_current_value",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Account's units for the current value calculation"
- }
- ],
- "returns": {
- "type": "(uint64,uint64,(uint64,uint64))",
- "struct": "CurrentUnitsValue",
- "desc": "Units current value in denomination asset, Accrued interest in denomination asset"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get account's units current value and accrued interest",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_coupon_rates",
- "args": [],
- "returns": {
- "type": "uint16[]",
- "desc": "Coupon rates"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get D-ASA coupon rates",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_payment_amount",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "struct": "PaymentAmounts",
- "desc": "Interest amount in denomination asset, Principal amount in denomination asset"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get the next payment amount",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_coupons_status",
- "args": [],
- "returns": {
- "type": "(uint64,uint64,uint64,(uint64,uint64),bool)",
- "struct": "CouponsInfo",
- "desc": "Total coupons, Due coupons, Next coupon due date, (Day count factor numerator, Day count factor denominator), All due coupons paid"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get D-ASA coupons status",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "pay_coupon",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "byte[]",
- "name": "payment_info",
- "desc": "Additional payment information (Optional)"
- }
- ],
- "returns": {
- "type": "(uint64,uint64,byte[])",
- "struct": "PaymentResult",
- "desc": "Paid coupon amount in denomination asset, Payment timestamp, Payment context"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Pay due coupon to an account",
- "events": [
- {
- "name": "Event",
- "args": [
- {
- "type": "uint64",
- "name": "contract_id"
- },
- {
- "type": "uint8",
- "name": "type"
- },
- {
- "type": "string",
- "name": "type_name"
- },
- {
- "type": "uint64",
- "name": "time"
- },
- {
- "type": "uint64",
- "name": "payoff"
- },
- {
- "type": "uint64",
- "name": "currency_id"
- },
- {
- "type": "byte[]",
- "name": "currency_unit"
- },
- {
- "type": "uint64",
- "name": "nominal_value"
- },
- {
- "type": "uint16",
- "name": "nominal_rate_bps"
- },
- {
- "type": "uint64",
- "name": "nominal_accrued"
- }
- ],
- "desc": "ACTUS Event."
- }
- ],
- "recommendations": {}
- },
- {
- "name": "pay_principal",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "byte[]",
- "name": "payment_info",
- "desc": "Additional payment information (Optional)"
- }
- ],
- "returns": {
- "type": "(uint64,uint64,byte[])",
- "struct": "PaymentResult",
- "desc": "Paid principal amount in denomination asset, Payment timestamp, Payment context"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Pay the outstanding principal to an account",
- "events": [
- {
- "name": "Event",
- "args": [
- {
- "type": "uint64",
- "name": "contract_id"
- },
- {
- "type": "uint8",
- "name": "type"
- },
- {
- "type": "string",
- "name": "type_name"
- },
- {
- "type": "uint64",
- "name": "time"
- },
- {
- "type": "uint64",
- "name": "payoff"
- },
- {
- "type": "uint64",
- "name": "currency_id"
- },
- {
- "type": "byte[]",
- "name": "currency_unit"
- },
- {
- "type": "uint64",
- "name": "nominal_value"
- },
- {
- "type": "uint16",
- "name": "nominal_rate_bps"
- },
- {
- "type": "uint64",
- "name": "nominal_accrued"
- }
- ],
- "desc": "ACTUS Event."
- }
- ],
- "recommendations": {}
- },
- {
- "name": "asset_transfer",
- "args": [
- {
- "type": "address",
- "name": "sender_holding_address",
- "desc": "Sender Account Holding Address"
- },
- {
- "type": "address",
- "name": "receiver_holding_address",
- "desc": "Receiver Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Amount of D-ASA units to transfer"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Transferred actualized value in denomination asset"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Transfer D-ASA units between accounts",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "asset_create",
- "args": [
- {
- "type": "address",
- "name": "arranger",
- "desc": "D-ASA Arranger Address"
- },
- {
- "type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- "struct": "AssetMetadata",
- "name": "metadata",
- "desc": "D-ASA metadata"
- }
- ],
- "returns": {
- "type": "void"
- },
- "actions": {
- "create": [
- "NoOp"
- ],
- "call": []
- },
- "readonly": false,
- "desc": "Create a new D-ASA",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "asset_update",
- "args": [
- {
- "type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- "struct": "AssetMetadata",
- "name": "metadata"
- }
- ],
- "returns": {
- "type": "void"
- },
- "actions": {
- "create": [],
- "call": [
- "UpdateApplication"
- ]
- },
- "readonly": false,
- "desc": "Update D-ASA application.",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "set_secondary_time_events",
- "args": [
- {
- "type": "uint64[]",
- "name": "secondary_market_time_events",
- "desc": "Secondary market time events (strictly ascending order)"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "struct": "SecondaryMarketSchedule",
- "desc": "Secondary Market Opening Date, Secondary Market Closure Date"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Set secondary market time schedule",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "set_default_status",
- "args": [
- {
- "type": "bool",
- "name": "defaulted",
- "desc": "Default status"
- }
- ],
- "returns": {
- "type": "uint64"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Set D-ASA default status",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "primary_distribution",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "uint64",
- "name": "units",
- "desc": "Amount of D-ASA units to distribute"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Remaining D-ASA units to be distributed"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Distribute D-ASA units to accounts according the primary market",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_asset_info",
- "args": [],
- "returns": {
- "type": "(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)",
- "struct": "AssetInfo",
- "desc": "Denomination asset ID, Settlement asset ID, Outstanding principal, Unit nominal value, Day-count convention, Interest rate, Total supply, Circulating supply, Primary distribution opening date, Primary distribution closure date, Issuance date, Maturity date, Suspended, Performance"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get D-ASA info",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_time_events",
- "args": [],
- "returns": {
- "type": "uint64[]",
- "desc": "Time events"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get D-ASA time events",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_secondary_market_schedule",
- "args": [],
- "returns": {
- "type": "uint64[]",
- "desc": "Secondary market schedule"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get secondary market schedule",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "get_asset_metadata",
- "args": [],
- "returns": {
- "type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- "struct": "AssetMetadata",
- "desc": "Contract type, Calendar, Business day convention, End of month convention, Early repayment effect, Early repayment penalty type, Prospectus hash, Prospectus URL"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get D-ASA metadata",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_gov_suspension",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "bool",
- "name": "suspended",
- "desc": "Suspension status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set account suspension status"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Set account suspension status",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_open",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "address",
- "name": "payment_address",
- "desc": "Account Payment Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the account opening"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Open D-ASA account",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_close",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "desc": "Closed units, Timestamp of the account closing"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Close D-ASA account",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_update_payment_address",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "address",
- "name": "payment_address",
- "desc": "Account Payment Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the account update"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Update the Payment Address of an account",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_get_info",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(address,uint64,uint64,uint64,bool)",
- "struct": "AccountInfo",
- "desc": "Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get account info",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_rotate_arranger",
- "args": [
- {
- "type": "address",
- "name": "new_arranger",
- "desc": "New Arranger address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Rotate the Arranger address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_set_op_daemon",
- "args": [
- {
- "type": "address",
- "name": "address",
- "desc": "Operation Daemon address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Non-Normative: Set the Operation Daemon address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_assign_role",
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- },
- {
- "type": "byte[]",
- "name": "config",
- "desc": "Role configuration (Optional)"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Assign a role to an address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_revoke_role",
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role revocation"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Revoke a role from an address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_gov_asset_suspension",
- "args": [
- {
- "type": "bool",
- "name": "suspended",
- "desc": "Suspension status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set asset suspension status"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Set asset suspension status",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_get_arranger",
- "args": [],
- "returns": {
- "type": "address",
- "desc": "Arranger address"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get Arranger address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_get_address_roles",
- "args": [
- {
- "type": "address",
- "name": "address",
- "desc": "Address to get roles for"
- }
- ],
- "returns": {
- "type": "(bool,bool,bool,bool,bool)",
- "desc": "Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Non-normative - Get roles assigned to an address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_get_role_config",
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "struct": "RoleConfig",
- "desc": "Role configuration"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get role configuration",
- "events": [],
- "recommendations": {}
- }
- ],
- "arcs": [
- 22,
- 28
- ],
- "networks": {},
- "state": {
- "schema": {
- "global": {
- "ints": 20,
- "bytes": 3
- },
- "local": {
- "ints": 0,
- "bytes": 0
- }
- },
- "keys": {
- "global": {
- "arranger": {
- "keyType": "AVMBytes",
- "valueType": "address",
- "key": "UjIwIw=="
- },
- "op_daemon": {
- "keyType": "AVMBytes",
- "valueType": "address",
- "key": "UjI1Iw=="
- },
- "asset_suspended": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "YXNzZXRfc3VzcGVuZGVk"
- },
- "asset_defaulted": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "YXNzZXRfZGVmYXVsdGVk"
- },
- "total_units": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "dG90YWxfdW5pdHM="
- },
- "circulating_units": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "Y2lyY3VsYXRpbmdfdW5pdHM="
- },
- "unit_value": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "dW5pdF92YWx1ZQ=="
- },
- "status": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "c3RhdHVz"
- },
- "denomination_asset_id": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "ZGVub21pbmF0aW9uX2Fzc2V0X2lk"
- },
- "settlement_asset_id": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "c2V0dGxlbWVudF9hc3NldF9pZA=="
- },
- "day_count_convention": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "ZGF5X2NvdW50X2NvbnZlbnRpb24="
- },
- "metadata": {
- "keyType": "AVMString",
- "valueType": "AVMBytes",
- "key": "bWV0YWRhdGE="
- },
- "principal_discount": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "cHJpbmNpcGFsX2Rpc2NvdW50"
- },
- "interest_rate": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "aW50ZXJlc3RfcmF0ZQ=="
- },
- "total_coupons": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "dG90YWxfY291cG9ucw=="
- },
- "primary_distribution_opening_date": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "cHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRl"
- },
- "primary_distribution_closure_date": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "cHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRl"
- },
- "issuance_date": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "aXNzdWFuY2VfZGF0ZQ=="
- },
- "secondary_market_opening_date": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "c2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGU="
- },
- "secondary_market_closure_date": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "c2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU="
- },
- "maturity_date": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "bWF0dXJpdHlfZGF0ZQ=="
- },
- "paid_coupon_units": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "cGFpZF9jb3Vwb25fdW5pdHM="
- },
- "due_coupons_watermark": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "ZHVlX2NvdXBvbnNfd2F0ZXJtYXJr"
- }
- },
- "local": {},
- "box": {
- "time_events": {
- "keyType": "AVMBytes",
- "valueType": "uint64[]",
- "key": "dGltZUV2ZW50cw=="
- },
- "coupon_rates": {
- "keyType": "AVMBytes",
- "valueType": "uint16[]",
- "key": "Y291cG9uUmF0ZXM="
- }
- }
- },
- "maps": {
- "global": {},
- "local": {},
- "box": {
- "account_manager": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjQwIw=="
- },
- "primary_dealer": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjUwIw=="
- },
- "trustee": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjYwIw=="
- },
- "authority": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjcwIw=="
- },
- "interest_oracle": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjgwIw=="
- },
- "account": {
- "keyType": "address",
- "valueType": "AccountInfo",
- "prefix": "UjMwIw=="
- }
- }
- }
- },
- "bareActions": {
- "create": [],
- "call": []
- },
- "sourceInfo": {
- "approval": {
- "sourceInfo": [
- {
- "pc": [
- 2798
- ],
- "errorMessage": "Can not distribute zero units"
- },
- {
- "pc": [
- 1182
- ],
- "errorMessage": "Coupon rates are not properly defined"
- },
- {
- "pc": [
- 1068
- ],
- "errorMessage": "D-ASA already configured"
- },
- {
- "pc": [
- 4833
- ],
- "errorMessage": "Defaulted"
- },
- {
- "pc": [
- 1075
- ],
- "errorMessage": "Denomination asset is not properly set"
- },
- {
- "pc": [
- 1086
- ],
- "errorMessage": "Different settlement asset not supported, must be equal to denomination asset"
- },
- {
- "pc": [
- 2814
- ],
- "errorMessage": "Insufficient remaining D-ASA units"
- },
- {
- "pc": [
- 2283,
- 2378
- ],
- "errorMessage": "Insufficient sender units to transfer"
- },
- {
- "pc": [
- 1173
- ],
- "errorMessage": "Interest rate is not properly defined"
- },
- {
- "pc": [
- 1328,
- 1484,
- 1679,
- 1941,
- 2237,
- 2252,
- 2788,
- 3171,
- 3242,
- 3294,
- 3365,
- 3394
- ],
- "errorMessage": "Invalid account holding address"
- },
- {
- "pc": [
- 3536,
- 3560,
- 3584,
- 3608,
- 3632,
- 3689,
- 3717,
- 3739,
- 3761,
- 3783,
- 3962,
- 3980,
- 3995,
- 4010,
- 4025
- ],
- "errorMessage": "Invalid account role address"
- },
- {
- "pc": [
- 1346
- ],
- "errorMessage": "Invalid amount of units for the account"
- },
- {
- "pc": [
- 1152
- ],
- "errorMessage": "Invalid day-count convention ID"
- },
- {
- "pc": [
- 3673,
- 3952,
- 4895
- ],
- "errorMessage": "Invalid role identifier"
- },
- {
- "pc": [
- 2659
- ],
- "errorMessage": "Invalid secondary market closure date"
- },
- {
- "pc": [
- 2625
- ],
- "errorMessage": "Invalid secondary market opening date"
- },
- {
- "pc": [
- 1119
- ],
- "errorMessage": "Minimum denomination is not a divisor of principal"
- },
- {
- "pc": [
- 1688,
- 1946
- ],
- "errorMessage": "No D-ASA units"
- },
- {
- "pc": [
- 1702
- ],
- "errorMessage": "No due coupon to pay"
- },
- {
- "pc": [
- 1661,
- 1923,
- 2219,
- 2588,
- 2702,
- 2779,
- 3162,
- 3217,
- 3226,
- 3283,
- 3350,
- 3806,
- 4502,
- 4825
- ],
- "errorMessage": "Not authorized"
- },
- {
- "pc": [
- 4567
- ],
- "errorMessage": "Not enough funds for the payment"
- },
- {
- "pc": [
- 1955
- ],
- "errorMessage": "Not mature"
- },
- {
- "pc": [
- 1707,
- 1962,
- 4451
- ],
- "errorMessage": "Pending due coupon payment"
- },
- {
- "pc": [
- 2771
- ],
- "errorMessage": "Primary distribution is closed"
- },
- {
- "pc": [
- 1317
- ],
- "errorMessage": "Primary distribution not yet executed"
- },
- {
- "pc": [
- 2210
- ],
- "errorMessage": "Secondary market is closed"
- },
- {
- "pc": [
- 2268
- ],
- "errorMessage": "Sender and receiver must be different"
- },
- {
- "pc": [
- 2333
- ],
- "errorMessage": "Sender and receiver units are not fungible"
- },
- {
- "pc": [
- 4717,
- 4841
- ],
- "errorMessage": "Suspended operations"
- },
- {
- "pc": [
- 1203,
- 2593
- ],
- "errorMessage": "Time events length is invalid"
- },
- {
- "pc": [
- 4618
- ],
- "errorMessage": "Time events must be set in the future"
- },
- {
- "pc": [
- 4669
- ],
- "errorMessage": "Time events must be sorted in strictly ascending order"
- },
- {
- "pc": [
- 1264
- ],
- "errorMessage": "Time periods are not properly defined"
- },
- {
- "pc": [
- 4690
- ],
- "errorMessage": "Time periods in Actual/Actual day count convention must be multiples of a day (in seconds)"
- },
- {
- "pc": [
- 2272
- ],
- "errorMessage": "Transfer units must be greater than zero"
- },
- {
- "pc": [
- 606
- ],
- "errorMessage": "Wrong Global Bytes allocation"
- },
- {
- "pc": [
- 612
- ],
- "errorMessage": "Wrong Global UInts allocation"
- },
- {
- "pc": [
- 616
- ],
- "errorMessage": "Wrong Local Bytes allocation"
- },
- {
- "pc": [
- 620
- ],
- "errorMessage": "Wrong Local UInts allocation"
- },
- {
- "pc": [
- 4563
- ],
- "errorMessage": "account opted into asset"
- },
- {
- "pc": [
- 1785,
- 2033
- ],
- "errorMessage": "asset exists"
- },
- {
- "pc": [
- 4785,
- 4800
- ],
- "errorMessage": "check BoxMap entry exists"
- },
- {
- "pc": [
- 1336,
- 1500,
- 1694,
- 1738,
- 1750,
- 1986,
- 2004,
- 2276,
- 2290,
- 2299,
- 2306,
- 2317,
- 2324,
- 2338,
- 2373,
- 2415,
- 2459,
- 2822,
- 4444,
- 4493,
- 4517,
- 4536,
- 4711,
- 4727,
- 4743
- ],
- "errorMessage": "check self.account entry exists"
- },
- {
- "pc": [
- 3824,
- 4823
- ],
- "errorMessage": "check self.arranger exists"
- },
- {
- "pc": [
- 2896,
- 4831
- ],
- "errorMessage": "check self.asset_defaulted exists"
- },
- {
- "pc": [
- 2998,
- 4839
- ],
- "errorMessage": "check self.asset_suspended exists"
- },
- {
- "pc": [
- 1789,
- 1997,
- 2037,
- 2802,
- 2917,
- 3306,
- 4430,
- 4756
- ],
- "errorMessage": "check self.circulating_units exists"
- },
- {
- "pc": [
- 1458
- ],
- "errorMessage": "check self.coupon_rates exists"
- },
- {
- "pc": [
- 2929,
- 4284,
- 4674
- ],
- "errorMessage": "check self.day_count_convention exists"
- },
- {
- "pc": [
- 1781,
- 2029,
- 2908
- ],
- "errorMessage": "check self.denomination_asset_id exists"
- },
- {
- "pc": [
- 4067,
- 4111
- ],
- "errorMessage": "check self.due_coupons_watermark exists"
- },
- {
- "pc": [
- 2958
- ],
- "errorMessage": "check self.interest_rate exists"
- },
- {
- "pc": [
- 2609,
- 2988,
- 4100,
- 4265,
- 4334,
- 4344
- ],
- "errorMessage": "check self.issuance_date exists"
- },
- {
- "pc": [
- 1953,
- 2634,
- 2642,
- 2879,
- 2993,
- 4072
- ],
- "errorMessage": "check self.maturity_date exists"
- },
- {
- "pc": [
- 3130
- ],
- "errorMessage": "check self.metadata exists"
- },
- {
- "pc": [
- 4460,
- 4473
- ],
- "errorMessage": "check self.op_daemon exists"
- },
- {
- "pc": [
- 1765,
- 4426
- ],
- "errorMessage": "check self.paid_coupon_units exists"
- },
- {
- "pc": [
- 2763,
- 2983
- ],
- "errorMessage": "check self.primary_distribution_closure_date exists"
- },
- {
- "pc": [
- 1301,
- 1311,
- 2749,
- 2978
- ],
- "errorMessage": "check self.primary_distribution_opening_date exists"
- },
- {
- "pc": [
- 1167,
- 2943
- ],
- "errorMessage": "check self.principal_discount exists"
- },
- {
- "pc": [
- 2194,
- 2204,
- 2673,
- 3108
- ],
- "errorMessage": "check self.secondary_market_closure_date exists"
- },
- {
- "pc": [
- 2183,
- 2668,
- 3103
- ],
- "errorMessage": "check self.secondary_market_opening_date exists"
- },
- {
- "pc": [
- 2913,
- 4525,
- 4560,
- 4579
- ],
- "errorMessage": "check self.settlement_asset_id exists"
- },
- {
- "pc": [
- 1066,
- 1445,
- 1490,
- 1657,
- 1919,
- 2172,
- 2583,
- 2738,
- 3078,
- 3221
- ],
- "errorMessage": "check self.status exists"
- },
- {
- "pc": [
- 3091
- ],
- "errorMessage": "check self.time_events exists"
- },
- {
- "pc": [
- 1511,
- 1595,
- 4084,
- 4202,
- 4353
- ],
- "errorMessage": "check self.total_coupons exists"
- },
- {
- "pc": [
- 2810,
- 2852,
- 2973
- ],
- "errorMessage": "check self.total_units exists"
- },
- {
- "pc": [
- 1794,
- 2042,
- 2839,
- 2922
- ],
- "errorMessage": "check self.unit_value exists"
- },
- {
- "pc": [
- 1006,
- 1028,
- 1046,
- 1251,
- 1641,
- 1903,
- 2504,
- 2543,
- 2565,
- 2646,
- 3474,
- 4622
- ],
- "errorMessage": "invalid array length header"
- },
- {
- "pc": [
- 2692,
- 3152,
- 3796
- ],
- "errorMessage": "invalid number of bytes for arc4.bool"
- },
- {
- "pc": [
- 1019
- ],
- "errorMessage": "invalid number of bytes for arc4.dynamic_array"
- },
- {
- "pc": [
- 1649,
- 1911,
- 3482
- ],
- "errorMessage": "invalid number of bytes for arc4.dynamic_array"
- },
- {
- "pc": [
- 1059
- ],
- "errorMessage": "invalid number of bytes for arc4.dynamic_array>"
- },
- {
- "pc": [
- 1040,
- 2576
- ],
- "errorMessage": "invalid number of bytes for arc4.dynamic_array"
- },
- {
- "pc": [
- 1287,
- 1476,
- 1635,
- 1897,
- 2151,
- 2159,
- 2481,
- 2725,
- 3144,
- 3201,
- 3209,
- 3275,
- 3336,
- 3344,
- 3386,
- 3410,
- 3434,
- 3468,
- 3656,
- 3838,
- 3922
- ],
- "errorMessage": "invalid number of bytes for arc4.static_array"
- },
- {
- "pc": [
- 997
- ],
- "errorMessage": "invalid number of bytes for arc4.uint16"
- },
- {
- "pc": [
- 941,
- 950,
- 959,
- 968,
- 977,
- 1295,
- 2167,
- 2733
- ],
- "errorMessage": "invalid number of bytes for arc4.uint64"
- },
- {
- "pc": [
- 986,
- 3458,
- 3646,
- 3912
- ],
- "errorMessage": "invalid number of bytes for arc4.uint8"
- },
- {
- "pc": [
- 2509,
- 2548
- ],
- "errorMessage": "invalid number of bytes for smart_contracts.abi_types.AssetMetadata"
- },
- {
- "pc": [
- 2496,
- 2535
- ],
- "errorMessage": "invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))"
- },
- {
- "pc": [
- 2491,
- 2530
- ],
- "errorMessage": "invalid tuple encoding"
- },
- {
- "pc": [
- 2935,
- 2950,
- 2965,
- 3006
- ],
- "errorMessage": "overflow"
- }
- ],
- "pcOffsetMethod": "none"
- },
- "clear": {
- "sourceInfo": [],
- "pcOffsetMethod": "none"
- }
- },
- "source": {
- "approval": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgOCAyNTUgMjAwIDg2NDAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHg1MjMzMzAyMyAic3RhdHVzIiAiY2lyY3VsYXRpbmdfdW5pdHMiICJpc3N1YW5jZV9kYXRlIiAibWF0dXJpdHlfZGF0ZSIgInVuaXRfdmFsdWUiICJ0b3RhbF9jb3Vwb25zIiAweDUyMzIzMDIzICJzZXR0bGVtZW50X2Fzc2V0X2lkIiAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIiAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMgMHg1MjM3MzAyMyAweDUyMzQzMDIzICJ0b3RhbF91bml0cyIgImRlbm9taW5hdGlvbl9hc3NldF9pZCIgImRheV9jb3VudF9jb252ZW50aW9uIiAic2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUiIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MyAweDUyMzYzMDIzIDB4NTIzNTMwMjMgMHg1MjMyMzUyMyAiYXNzZXRfc3VzcGVuZGVkIiAiYXNzZXRfZGVmYXVsdGVkIiAibWV0YWRhdGEiICJwcmluY2lwYWxfZGlzY291bnQiICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUiICJwYWlkX2NvdXBvbl91bml0cyIgImR1ZV9jb3Vwb25zX3dhdGVybWFyayIgMHgwMDAwIDB4MDAgMHg1MjM4MzAyMyAiaW50ZXJlc3RfcmF0ZSIgMHgwNjgxMDEgMHgwMDNiIDB4OGMyOTkwNGUgMHgwMDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzAtMzEKICAgIC8vICMgUkJBQyBSb2xlcwogICAgLy8gc2VsZi5hcnJhbmdlciA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNzdC5QUkVGSVhfSURfQVJSQU5HRVIpCiAgICBieXRlYyA4IC8vIDB4NTIzMjMwMjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMgogICAgLy8gc2VsZi5vcF9kYWVtb24gPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX09QX0RBRU1PTikKICAgIGJ5dGVjIDIyIC8vIDB4NTIzMjM1MjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo0Ny00OAogICAgLy8gIyBELUFTQSBHb3Zlcm5hbmNlCiAgICAvLyBzZWxmLmFzc2V0X3N1c3BlbmRlZCA9IEZhbHNlCiAgICBieXRlYyAyMyAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NDkKICAgIC8vIHNlbGYuYXNzZXRfZGVmYXVsdGVkID0gRmFsc2UKICAgIGJ5dGVjIDI0IC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxOQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IFVJbnQ2NCgpCiAgICBieXRlYyAxNSAvLyAidG90YWxfdW5pdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMAogICAgLy8gc2VsZi5jaXJjdWxhdGluZ191bml0cyA9IFVJbnQ2NCgpCiAgICBieXRlY18zIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIxCiAgICAvLyBzZWxmLnVuaXRfdmFsdWUgPSBVSW50NjQoKQogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIyCiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbm0uU1RBVFVTX0lOQUNUSVZFKQogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMS0zMgogICAgLy8gIyBBc3NldCBDb25maWd1cmF0aW9uCiAgICAvLyBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCA9IEFzc2V0KCkKICAgIGJ5dGVjIDE2IC8vICJkZW5vbWluYXRpb25fYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMzCiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgPSBBc3NldCgpCiAgICBieXRlYyA5IC8vICJzZXR0bGVtZW50X2Fzc2V0X2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozNAogICAgLy8gc2VsZi51bml0X3ZhbHVlID0gVUludDY0KCkKICAgIGJ5dGVjIDYgLy8gInVuaXRfdmFsdWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM1CiAgICAvLyBzZWxmLmRheV9jb3VudF9jb252ZW50aW9uID0gVUludDY0KCkKICAgIGJ5dGVjIDE3IC8vICJkYXlfY291bnRfY29udmVudGlvbiIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzctMzgKICAgIC8vICMgTWV0YWRhdGEKICAgIC8vIHNlbGYubWV0YWRhdGEgPSBCeXRlcygpCiAgICBieXRlYyAyNSAvLyAibWV0YWRhdGEiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MC00MQogICAgLy8gIyBQcmluY2lwYWwgLyBSYXRlcwogICAgLy8gc2VsZi5wcmluY2lwYWxfZGlzY291bnQgPSBVSW50NjQoKQogICAgYnl0ZWMgMjYgLy8gInByaW5jaXBhbF9kaXNjb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDIKICAgIC8vIHNlbGYuaW50ZXJlc3RfcmF0ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyAzMyAvLyAiaW50ZXJlc3RfcmF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDMKICAgIC8vIHNlbGYudG90YWxfY291cG9ucyA9IFVJbnQ2NCgpCiAgICBieXRlYyA3IC8vICJ0b3RhbF9jb3Vwb25zIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0NwogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDgKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gVUludDY0KCkKICAgIGJ5dGVjIDI3IC8vICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQ5CiAgICAvLyBzZWxmLmlzc3VhbmNlX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NTAKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgMTggLy8gInNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo1MQogICAgLy8gc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjUyCiAgICAvLyBzZWxmLm1hdHVyaXR5X2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgNSAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQKICAgIC8vIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgPSBVSW50NjQoKQogICAgYnl0ZWMgMjggLy8gInBhaWRfY291cG9uX3VuaXRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMDIKICAgIC8vIHNlbGYuZHVlX2NvdXBvbnNfd2F0ZXJtYXJrID0gVUludDY0KCkKICAgIGJ5dGVjIDI5IC8vICJkdWVfY291cG9uc193YXRlcm1hcmsiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhlZF9jb3Vwb25fYm9uZC9jb250cmFjdC5weTozMwogICAgLy8gYXNzZXJ0IFR4bi5nbG9iYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkdMT0JBTF9CWVRFUywgZXJyLldST05HX0dMT0JBTF9CWVRFUwogICAgdHhuIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGludCAzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBCeXRlcyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4ZWRfY291cG9uX2JvbmQvY29udHJhY3QucHk6MzQKICAgIC8vIGFzc2VydCBUeG4uZ2xvYmFsX251bV91aW50ID09IGNmZy5HTE9CQUxfVUlOVFMsIGVyci5XUk9OR19HTE9CQUxfVUlOVFMKICAgIHR4biBHbG9iYWxOdW1VaW50CiAgICBwdXNoaW50IDIwCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBVSW50cyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4ZWRfY291cG9uX2JvbmQvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhlZF9jb3Vwb25fYm9uZC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IFR4bi5sb2NhbF9udW1fdWludCA9PSBjZmcuTE9DQUxfVUlOVFMsIGVyci5XUk9OR19MT0NBTF9VSU5UUwogICAgdHhuIExvY2FsTnVtVWludAogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIFVJbnRzIGFsbG9jYXRpb24KCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGVkX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE3LTMwCiAgICAvLyBjbGFzcyBGaXhlZENvdXBvbkJvbmQoCiAgICAvLyAgICAgUEFNQ29yZU1peGluLAogICAgLy8gICAgIEZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbiwKICAgIC8vICAgICBDb3Vwb25QYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBQcmluY2lwYWxQYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBDb3Vwb25UcmFuc2ZlckFnZW50TWl4aW4sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTIsCiAgICAvLyApOgogICAgcHVzaGJ5dGVzIDB4MjVkYmE5NWIgLy8gbWV0aG9kICJhc3NldF91cGRhdGUoKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LGJ5dGVbMzJdLHN0cmluZykpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYXNzZXRfdXBkYXRlX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGVkX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE3LTMwCiAgICAvLyBjbGFzcyBGaXhlZENvdXBvbkJvbmQoCiAgICAvLyAgICAgUEFNQ29yZU1peGluLAogICAgLy8gICAgIEZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbiwKICAgIC8vICAgICBDb3Vwb25QYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBQcmluY2lwYWxQYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBDb3Vwb25UcmFuc2ZlckFnZW50TWl4aW4sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTIsCiAgICAvLyApOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzNgogICAgcHVzaGJ5dGVzcyAweDg5NDc0MTM0IDB4NDQzNjNkNDkgMHg1M2JlZjA0NSAweDY3ZGI0ZjIwIDB4ZjZhOTZjOGQgMHg4Y2YxNGI1MSAweDljNzZiNmEzIDB4NGZkNmEzY2MgMHgxZDZmYzI1NSAweDI1ZTk5OTdmIDB4NmM4NWUzZWUgMHg0MDJkYmE0NyAweGZhZDIxNzNlIDB4MDhlZmVhMzUgMHhlNGE1YWI1NCAweGRjMDYzYjM1IDB4MTRmYzEwZWYgMHg0YzExM2VkNSAweDc0YTcyOTdmIDB4MTA1YzE4NGUgMHg4MmY3MWIyZCAweGVmMDRmNWQzIDB4MDNiODMzMjkgMHgzZGJlODBiZCAweGRmNTRlODJjIDB4MDEwYzgyOTkgMHg3NDA2YWNkMiAweGMzZTRiMjk3IC8vIG1ldGhvZCAiYXNzZXRfY29uZmlnKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDE2LHVpbnQxNltdLHVpbnQ2NFtdLCh1aW50NjQsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUoYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCx1aW50NjQpKSIsIG1ldGhvZCAiZ2V0X2NvdXBvbl9yYXRlcygpdWludDE2W10iLCBtZXRob2QgImdldF9wYXltZW50X2Ftb3VudChhZGRyZXNzKSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiZ2V0X2NvdXBvbnNfc3RhdHVzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCx1aW50NjQpLGJvb2wpIiwgbWV0aG9kICJwYXlfY291cG9uKGFkZHJlc3MsYnl0ZVtdKSh1aW50NjQsdWludDY0LGJ5dGVbXSkiLCBtZXRob2QgInBheV9wcmluY2lwYWwoYWRkcmVzcyxieXRlW10pKHVpbnQ2NCx1aW50NjQsYnl0ZVtdKSIsIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInNldF9zZWNvbmRhcnlfdGltZV9ldmVudHModWludDY0W10pKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJzZXRfZGVmYXVsdF9zdGF0dXMoYm9vbCl1aW50NjQiLCBtZXRob2QgInByaW1hcnlfZGlzdHJpYnV0aW9uKGFkZHJlc3MsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2luZm8oKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDE2LHVpbnQxNix1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X3RpbWVfZXZlbnRzKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0X3NlY29uZGFyeV9tYXJrZXRfc2NoZWR1bGUoKXVpbnQ2NFtdIiwgbWV0aG9kICJnZXRfYXNzZXRfbWV0YWRhdGEoKSh1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCxieXRlWzMyXSxzdHJpbmcpIiwgbWV0aG9kICJhY2NvdW50X2dvdl9zdXNwZW5zaW9uKGFkZHJlc3MsYm9vbCl1aW50NjQiLCBtZXRob2QgImFjY291bnRfb3BlbihhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhY2NvdW50X2Nsb3NlKGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3MoYWRkcmVzcyxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiYWNjb3VudF9nZXRfaW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wpIiwgbWV0aG9kICJyYmFjX3JvdGF0ZV9hcnJhbmdlcihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19zZXRfb3BfZGFlbW9uKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2Fzc2lnbl9yb2xlKHVpbnQ4LGFkZHJlc3MsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19yZXZva2Vfcm9sZSh1aW50OCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbihib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV9jb25maWcodWludDgsYWRkcmVzcykodWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBhc3NldF9jb25maWcgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZSBnZXRfY291cG9uX3JhdGVzIGdldF9wYXltZW50X2Ftb3VudCBnZXRfY291cG9uc19zdGF0dXMgcGF5X2NvdXBvbiBwYXlfcHJpbmNpcGFsIGFzc2V0X3RyYW5zZmVyIHNldF9zZWNvbmRhcnlfdGltZV9ldmVudHMgc2V0X2RlZmF1bHRfc3RhdHVzIHByaW1hcnlfZGlzdHJpYnV0aW9uIGdldF9hc3NldF9pbmZvIGdldF90aW1lX2V2ZW50cyBnZXRfc2Vjb25kYXJ5X21hcmtldF9zY2hlZHVsZSBnZXRfYXNzZXRfbWV0YWRhdGEgYWNjb3VudF9nb3Zfc3VzcGVuc2lvbiBhY2NvdW50X29wZW4gYWNjb3VudF9jbG9zZSBhY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3MgYWNjb3VudF9nZXRfaW5mbyByYmFjX3JvdGF0ZV9hcnJhbmdlciByYmFjX3NldF9vcF9kYWVtb24gcmJhY19hc3NpZ25fcm9sZSByYmFjX3Jldm9rZV9yb2xlIHJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb24gcmJhY19nZXRfYXJyYW5nZXIgcmJhY19nZXRfYWRkcmVzc19yb2xlcyByYmFjX2dldF9yb2xlX2NvbmZpZwogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDM2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGVkX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE3LTMwCiAgICAvLyBjbGFzcyBGaXhlZENvdXBvbkJvbmQoCiAgICAvLyAgICAgUEFNQ29yZU1peGluLAogICAgLy8gICAgIEZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbiwKICAgIC8vICAgICBDb3Vwb25QYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBQcmluY2lwYWxQYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBDb3Vwb25UcmFuc2ZlckFnZW50TWl4aW4sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTIsCiAgICAvLyApOgogICAgcHVzaGJ5dGVzIDB4M2YwZWZjNmMgLy8gbWV0aG9kICJhc3NldF9jcmVhdGUoYWRkcmVzcywodWludDgsdWludDgsdWludDgsdWludDgsdWludDgsdWludDgsYnl0ZVszMl0sc3RyaW5nKSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggYXNzZXRfY3JlYXRlCiAgICBlcnIKCm1haW5fYXNzZXRfdXBkYXRlX3JvdXRlQDQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiVXBkYXRlQXBwbGljYXRpb24iXSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIGFzc2V0X3VwZGF0ZQoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDM0IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMzQgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmFjdHVzLnBhbS5QQU1Db3JlTWl4aW4uYXNzZXRfY29uZmlnW3JvdXRpbmddKCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgY292ZXIgNwogICAgbGVuCiAgICBwdXNoaW50IDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDE2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA4CiAgICBkdXAKICAgIGNvdmVyIDcKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgOAogICAgcHVzaGludCAyCiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDE2PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgZHVwCiAgICBjb3ZlciA3CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDgKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDgKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dHVwbGU8dWludDY0LHVpbnQ2ND4+CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyMjcKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjIyOAogICAgLy8gYXNzZXJ0IHNlbGYuc3RhdHVzID09IGVudW1zLlNUQVRVU19JTkFDVElWRSwgZXJyLkFMUkVBRFlfQ09ORklHVVJFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gRC1BU0EgYWxyZWFkeSBjb25maWd1cmVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo1NS01NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBkZW5vbWluYXRpb24gd2l0aCBBU0EKICAgIC8vIF9jcmVhdG9yLCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jcmVhdG9yKGRlbm9taW5hdGlvbl9hc3NldF9pZCkKICAgIGRpZyA1CiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo1NwogICAgLy8gYXNzZXJ0IGV4aXN0cywgZXJyLklOVkFMSURfREVOT01JTkFUSU9OCiAgICBhc3NlcnQgLy8gRGVub21pbmF0aW9uIGFzc2V0IGlzIG5vdCBwcm9wZXJseSBzZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjYwCiAgICAvLyBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCA9IGRlbm9taW5hdGlvbl9hc3NldF9pZAogICAgYnl0ZWMgMTYgLy8gImRlbm9taW5hdGlvbl9hc3NldF9pZCIKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NjUKICAgIC8vIHNldHRsZW1lbnRfYXNzZXRfaWQgPT0gc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQKICAgIGRpZyA0CiAgICB1bmNvdmVyIDYKICAgID09CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo2My02NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHNldHRsZW1lbnQgYXNzZXQgaXMgdGhlIGRlbm9taW5hdGlvbiBhc3NldAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZXR0bGVtZW50X2Fzc2V0X2lkID09IHNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkCiAgICAvLyApLCBlcnIuSU5WQUxJRF9TRVRUTEVNRU5UX0FTU0VUCiAgICBhc3NlcnQgLy8gRGlmZmVyZW50IHNldHRsZW1lbnQgYXNzZXQgbm90IHN1cHBvcnRlZCwgbXVzdCBiZSBlcXVhbCB0byBkZW5vbWluYXRpb24gYXNzZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjY5CiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgPSBzZXR0bGVtZW50X2Fzc2V0X2lkCiAgICBieXRlYyA5IC8vICJzZXR0bGVtZW50X2Fzc2V0X2lkIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MC03NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NzUKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3NAogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICB1bmNvdmVyIDUKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MC03MQogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MC03NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjIzOC0yMzkKICAgIC8vICMgU2V0IFByaW5jaXBhbCBhbmQgTWluaW11bSBEZW5vbWluYXRpb24KICAgIC8vIGFzc2VydCBwcmluY2lwYWwgJSBtaW5pbXVtX2Rlbm9taW5hdGlvbiA9PSAwLCBlcnIuSU5WQUxJRF9NSU5JTVVNX0RFTk9NSU5BVElPTgogICAgZGlnIDMKICAgIGRpZyAyCiAgICAlCiAgICAhCiAgICBhc3NlcnQgLy8gTWluaW11bSBkZW5vbWluYXRpb24gaXMgbm90IGEgZGl2aXNvciBvZiBwcmluY2lwYWwKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI0MAogICAgLy8gc2VsZi51bml0X3ZhbHVlID0gbWluaW11bV9kZW5vbWluYXRpb24KICAgIGJ5dGVjIDYgLy8gInVuaXRfdmFsdWUiCiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI0MQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IHByaW5jaXBhbCAvLyBtaW5pbXVtX2Rlbm9taW5hdGlvbgogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIC8KICAgIGJ5dGVjIDE1IC8vICJ0b3RhbF91bml0cyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNDIKICAgIC8vIHNlbGYucHJpbmNpcGFsX2Rpc2NvdW50ID0gcHJpbmNpcGFsX2Rpc2NvdW50CiAgICBieXRlYyAyNiAvLyAicHJpbmNpcGFsX2Rpc2NvdW50IgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjQ0LTI0NQogICAgLy8gIyBTZXQgRGF5LUNvdW50IENvbnZlbnRpb24KICAgIC8vIHNlbGYuYXNzZXJ0X2RheV9jb3VudF9jb252ZW50aW9uKGRheV9jb3VudF9jb252ZW50aW9uLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgZHVwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3OS04MwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIEFjdHVhbC9BY3R1YWwgYW5kIENvbnRpbnVvdXMgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgZGF5X2NvdW50X2NvbnZlbnRpb24gaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuRENDX0FfQSksCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQ09OVCksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9EQVlfQ09VTlRfQ09OVkVOVElPTgogICAgYnogYXNzZXRfY29uZmlnX2Jvb2xfdHJ1ZUAzCiAgICBkdXAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjgyCiAgICAvLyBVSW50NjQoY3N0LkRDQ19DT05UKSwKICAgIGludGMgNCAvLyAyNTUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5Ojc5LTgzCiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgQWN0dWFsL0FjdHVhbCBhbmQgQ29udGludW91cyBkYXktY291bnQgY29udmVudGlvbnMKICAgIC8vIGFzc2VydCBkYXlfY291bnRfY29udmVudGlvbiBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQV9BKSwKICAgIC8vICAgICBVSW50NjQoY3N0LkRDQ19DT05UKSwKICAgIC8vICksIGVyci5JTlZBTElEX0RBWV9DT1VOVF9DT05WRU5USU9OCiAgICA9PQogICAgYnogYXNzZXRfY29uZmlnX2Jvb2xfZmFsc2VANAoKYXNzZXRfY29uZmlnX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18xIC8vIDEKCmFzc2V0X2NvbmZpZ19ib29sX21lcmdlQDU6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3OS04MwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIEFjdHVhbC9BY3R1YWwgYW5kIENvbnRpbnVvdXMgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgZGF5X2NvdW50X2NvbnZlbnRpb24gaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuRENDX0FfQSksCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQ09OVCksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9EQVlfQ09VTlRfQ09OVkVOVElPTgogICAgYXNzZXJ0IC8vIEludmFsaWQgZGF5LWNvdW50IGNvbnZlbnRpb24gSUQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5Ojg2CiAgICAvLyBzZWxmLmRheV9jb3VudF9jb252ZW50aW9uID0gZGF5X2NvdW50X2NvbnZlbnRpb24KICAgIGJ5dGVjIDE3IC8vICJkYXlfY291bnRfY29udmVudGlvbiIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjQ4LTI0OQogICAgLy8gIyBTZXQgSW50ZXJlc3QgUmF0ZQogICAgLy8gc2VsZi5hc3NlcnRfaW50ZXJlc3RfcmF0ZShpbnRlcmVzdF9yYXRlLmFzX3VpbnQ2NCgpKQogICAgZGlnIDYKICAgIGJ0b2kKICAgIGJ1cnkgOAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6ODktOTAKICAgIC8vICMgVGhpcyBzdWJyb3V0aW5lIG11c3QgYmUgdXNlZCBhZnRlciB0aGUgcHJpbmNpcGFsIGRpc2NvdW50IGhhcyBiZWVuIHNldAogICAgLy8gaWYgbm90IHNlbGYucHJpbmNpcGFsX2Rpc2NvdW50OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI2IC8vICJwcmluY2lwYWxfZGlzY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJpbmNpcGFsX2Rpc2NvdW50IGV4aXN0cwogICAgYm56IGFzc2V0X2NvbmZpZ19hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjkxCiAgICAvLyBhc3NlcnQgaW50ZXJlc3RfcmF0ZSA+IFVJbnQ2NCgwKSwgZXJyLklOVkFMSURfSU5URVJFU1RfUkFURQogICAgZGlnIDcKICAgIGFzc2VydCAvLyBJbnRlcmVzdCByYXRlIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkCgphc3NldF9jb25maWdfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6OTQKICAgIC8vIHNlbGYuaW50ZXJlc3RfcmF0ZSA9IGludGVyZXN0X3JhdGUKICAgIGJ5dGVjIDMzIC8vICJpbnRlcmVzdF9yYXRlIgogICAgZGlnIDgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMDUKICAgIC8vIGFzc2VydCBjb3Vwb25fcmF0ZXMubGVuZ3RoLCBlcnIuSU5WQUxJRF9DT1VQT05fUkFURVMKICAgIGRpZyA0CiAgICBkdXAKICAgIGFzc2VydCAvLyBDb3Vwb24gcmF0ZXMgYXJlIG5vdCBwcm9wZXJseSBkZWZpbmVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMDgKICAgIC8vIHNlbGYudG90YWxfY291cG9ucyA9IGNvdXBvbl9yYXRlcy5sZW5ndGgKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEwOQogICAgLy8gc2VsZi5jb3Vwb25fcmF0ZXMudmFsdWUgPSBjb3Vwb25fcmF0ZXMuY29weSgpCiAgICBieXRlYyAxOSAvLyAweDYzNmY3NTcwNmY2ZTUyNjE3NDY1NzMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgMTkgLy8gMHg2MzZmNzU3MDZmNmU1MjYxNzQ2NTczCiAgICBkaWcgNwogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTA0CiAgICAvLyB0aW1lX2V2ZW50cy5sZW5ndGggPT0gc2VsZi50b3RhbF9jb3Vwb25zICsgY2ZnLlRJTUVfU0NIRURVTEVfTElNSVRTCiAgICBwdXNoaW50IDQKICAgICsKICAgIGRpZyAzCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICB0aW1lX2V2ZW50cy5sZW5ndGggPT0gc2VsZi50b3RhbF9jb3Vwb25zICsgY2ZnLlRJTUVfU0NIRURVTEVfTElNSVRTCiAgICAvLyApLCBlcnIuSU5WQUxJRF9USU1FX0VWRU5UU19MRU5HVEgKICAgIGFzc2VydCAvLyBUaW1lIGV2ZW50cyBsZW5ndGggaXMgaW52YWxpZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjU4CiAgICAvLyBzZWxmLmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQodGltZV9ldmVudHMpCiAgICBkaWcgMwogICAgY2FsbHN1YiBhc3NlcnRfdGltZV9ldmVudHNfc29ydGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMjcKICAgIC8vIHNlbGYudGltZV9ldmVudHMudmFsdWUgPSB0aW1lX2V2ZW50cy5jb3B5KCkKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgMTIgLy8gMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MwogICAgZGlnIDEKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyOC0xMzAKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0KICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBwdXNoaW50IDIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMjgKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlID0gdGltZV9ldmVudHNbCiAgICBieXRlYyAxMCAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTI4LTEzMAogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgPSB0aW1lX2V2ZW50c1sKICAgIC8vICAgICBjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWAogICAgLy8gXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEzMS0xMzMKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX0NMT1NVUkVfREFURV9JRFgKICAgIC8vIF0KICAgIGRpZyAxCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTMxCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSA9IHRpbWVfZXZlbnRzWwogICAgYnl0ZWMgMjcgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEzMS0xMzMKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX0NMT1NVUkVfREFURV9JRFgKICAgIC8vIF0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMzQKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSA9IHRpbWVfZXZlbnRzW2NmZy5JU1NVQU5DRV9EQVRFX0lEWF0KICAgIGRpZyAxCiAgICBwdXNoaW50IDE4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMzUKICAgIC8vIHNlbGYubWF0dXJpdHlfZGF0ZSA9IHRpbWVfZXZlbnRzW2NmZy5NQVRVUklUWV9EQVRFX0lEWF0KICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEzOAogICAgLy8gYXNzZXJ0IG5vdCB0aW1lX3BlcmlvZHMubGVuZ3RoLCBlcnIuSU5WQUxJRF9USU1FX1BFUklPRFMKICAgIGRpZyAxCiAgICAhCiAgICBhc3NlcnQgLy8gVGltZSBwZXJpb2RzIGFyZSBub3QgcHJvcGVybHkgZGVmaW5lZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjY1CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbnVtcy5TVEFUVVNfQUNUSVZFKQogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgcHVzaGludCAxMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphc3NldF9jb25maWdfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfY29uZmlnX2Jvb2xfbWVyZ2VANQoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5nZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjIyCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjIyLTIyMwogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIGFuZCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+PSBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIyMwogICAgLy8gYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICA+PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjIyLTIyMwogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIGFuZCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+PSBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgpnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfbWVyZ2VANToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIyMS0yMjQKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vICAgICBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vICksIGVyci5OT19QUklNQVJZX0RJU1RSSUJVVElPTgogICAgYXNzZXJ0IC8vIFByaW1hcnkgZGlzdHJpYnV0aW9uIG5vdCB5ZXQgZXhlY3V0ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjI2CiAgICAvLyBhc3NlcnQgMCA8IHVuaXRzIDw9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLCBlcnIuSU5WQUxJRF9VTklUUwogICAgZHVwCiAgICBieiBnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfZmFsc2VAOAogICAgZGlnIDcKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgPj0KICAgIGJ6IGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUA4CiAgICBpbnRjXzEgLy8gMQoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDk6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMjYKICAgIC8vIGFzc2VydCAwIDwgdW5pdHMgPD0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMsIGVyci5JTlZBTElEX1VOSVRTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhbW91bnQgb2YgdW5pdHMgZm9yIHRoZSBhY2NvdW50CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMjgtMjI5CiAgICAvLyAjIFZhbHVlIGR1cmluZyBwcmltYXJ5IGRpc3RyaWJ1dGlvbiBhbmQgYXQgbWF0dXJpdHkKICAgIC8vIGFjY291bnRfdW5pdHNfbm9taW5hbF92YWx1ZSA9IHNlbGYuYWNjb3VudF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MsIHVuaXRzKQogICAgZGlnIDEKICAgIGR1cAogICAgZGlnIDIKICAgIGNhbGxzdWIgYWNjb3VudF91bml0c192YWx1ZQogICAgYnVyeSA4CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMzAtMjMxCiAgICAvLyAjIEFjY3J1aW5nIGludGVyZXN0IGR1cmluZyBwcmltYXJ5IGRpc3RyaWJ1dGlvbiBhbmQgYXQgbWF0dXJpdHkKICAgIC8vIGFjY3J1ZWRfaW50ZXJlc3QgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjMyCiAgICAvLyBudW1lcmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjMzCiAgICAvLyBkZW5vbWluYXRvciA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA2CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMzUtMjM2CiAgICAvLyAjIEFjY3J1aW5nIGludGVyZXN0CiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYuY291bnRfZHVlX2NvdXBvbnMoKQogICAgY2FsbHN1YiBjb3VudF9kdWVfY291cG9ucwogICAgZHVwCiAgICBidXJ5IDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIzNwogICAgLy8gc2VsZi5hc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudChob2xkaW5nX2FkZHJlc3MsIGR1ZV9jb3Vwb25zKQogICAgc3dhcAogICAgZGlnIDEKICAgIGNhbGxzdWIgYXNzZXJ0X25vX3BlbmRpbmdfY291cG9uX3BheW1lbnQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIzOAogICAgLy8gaWYgc2VsZi5pc19hY2NydWluZ19pbnRlcmVzdChkdWVfY291cG9ucyk6CiAgICBjYWxsc3ViIGlzX2FjY3J1aW5nX2ludGVyZXN0CiAgICBieiBnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIzOQogICAgLy8gZGF5X2NvdW50X2ZhY3RvciA9IHNlbGYuZGF5X2NvdW50X2ZhY3RvcihkdWVfY291cG9ucykKICAgIGRpZyAzCiAgICBkdXAKICAgIGNhbGxzdWIgZGF5X2NvdW50X2ZhY3RvcgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQwLTI0MgogICAgLy8gYWNjcnVlZF9pbnRlcmVzdCA9IHNlbGYuYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoCiAgICAvLyAgICAgaG9sZGluZ19hZGRyZXNzLCB1bml0cywgZHVlX2NvdXBvbnMKICAgIC8vICkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50CiAgICBidXJ5IDcKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI0MwogICAgLy8gbnVtZXJhdG9yID0gZGF5X2NvdW50X2ZhY3Rvci5udW1lcmF0b3IKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI0NAogICAgLy8gZGVub21pbmF0b3IgPSBkYXlfY291bnRfZmFjdG9yLmRlbm9taW5hdG9yCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgNQoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQ5LTI1MgogICAgLy8gZGF5X2NvdW50X2ZhY3Rvcj10eXAuRGF5Q291bnRGYWN0b3IoCiAgICAvLyAgICAgbnVtZXJhdG9yPW51bWVyYXRvciwKICAgIC8vICAgICBkZW5vbWluYXRvcj1kZW5vbWluYXRvciwKICAgIC8vICksCiAgICBkaWcgMgogICAgaXRvYgogICAgZGlnIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQ2LTI1MwogICAgLy8gcmV0dXJuIHR5cC5DdXJyZW50VW5pdHNWYWx1ZSgKICAgIC8vICAgICB1bml0c192YWx1ZT1hY2NvdW50X3VuaXRzX25vbWluYWxfdmFsdWUsCiAgICAvLyAgICAgYWNjcnVlZF9pbnRlcmVzdD1hY2NydWVkX2ludGVyZXN0LAogICAgLy8gICAgIGRheV9jb3VudF9mYWN0b3I9dHlwLkRheUNvdW50RmFjdG9yKAogICAgLy8gICAgICAgICBudW1lcmF0b3I9bnVtZXJhdG9yLAogICAgLy8gICAgICAgICBkZW5vbWluYXRvcj1kZW5vbWluYXRvciwKICAgIC8vICAgICApLAogICAgLy8gKQogICAgZGlnIDcKICAgIGl0b2IKICAgIGRpZyA3CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUA4OgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDkKCmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDUKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5GaXhlZENvdXBvbkNhc2hmbG93TWl4aW4uZ2V0X2NvdXBvbl9yYXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9jb3Vwb25fcmF0ZXM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyNjMKICAgIC8vIGNvdXBvbl9yYXRlcyA9IHR5cC5Db3Vwb25SYXRlcygpCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjY0CiAgICAvLyBpZiBzZWxmLnN0YXR1c19pc19hY3RpdmUoKToKICAgIGJ6IGdldF9jb3Vwb25fcmF0ZXNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyNjUKICAgIC8vIGNvdXBvbl9yYXRlcyA9IHNlbGYuY291cG9uX3JhdGVzLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgMTkgLy8gMHg2MzZmNzU3MDZmNmU1MjYxNzQ2NTczCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidXJ5IDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvdXBvbl9yYXRlcyBleGlzdHMKCmdldF9jb3Vwb25fcmF0ZXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLmdldF9wYXltZW50X2Ftb3VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9wYXltZW50X2Ftb3VudDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyODMKICAgIC8vIGludGVyZXN0X2Ftb3VudCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6Mjg0CiAgICAvLyBwcmluY2lwYWxfYW1vdW50ID0gVUludDY0KCkKICAgIGR1cG4gMgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjI1CiAgICAvLyByZXR1cm4gc2VsZi5zdGF0dXMgPT0gZW5tLlNUQVRVU19BQ1RJVkUKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMAogICAgPT0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI4NQogICAgLy8gaWYgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCk6CiAgICBieiBnZXRfcGF5bWVudF9hbW91bnRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyODYKICAgIC8vIHBhaWRfY291cG9ucyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucwogICAgZGlnIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI4NwogICAgLy8gaWYgcGFpZF9jb3Vwb25zIDwgc2VsZi50b3RhbF9jb3Vwb25zOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfY291cG9ucyBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wYXltZW50X2Ftb3VudF9lbHNlX2JvZHlANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjkwCiAgICAvLyBzZWxmLmFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzKSwKICAgIGRpZyAzCiAgICBjYWxsc3ViIGFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI5MQogICAgLy8gcGFpZF9jb3Vwb25zICsgMSwKICAgIGRpZyA1CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6Mjg4LTI5MgogICAgLy8gIyBDb3Vwb24gUGF5bWVudAogICAgLy8gaW50ZXJlc3RfYW1vdW50ID0gc2VsZi5jb3Vwb25faW50ZXJlc3RfYW1vdW50KAogICAgLy8gICAgIHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpLAogICAgLy8gICAgIHBhaWRfY291cG9ucyArIDEsCiAgICAvLyApCiAgICBjYWxsc3ViIGNvdXBvbl9pbnRlcmVzdF9hbW91bnQKICAgIGJ1cnkgMgoKZ2V0X3BheW1lbnRfYW1vdW50X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI5Ni0yOTkKICAgIC8vIHJldHVybiB0eXAuUGF5bWVudEFtb3VudHMoCiAgICAvLyAgICAgaW50ZXJlc3Q9aW50ZXJlc3RfYW1vdW50LAogICAgLy8gICAgIHByaW5jaXBhbD1wcmluY2lwYWxfYW1vdW50LAogICAgLy8gKQogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfcGF5bWVudF9hbW91bnRfZWxzZV9ib2R5QDQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyOTQtMjk1CiAgICAvLyAjIFByaW5jaXBhbCBQYXltZW50CiAgICAvLyBwcmluY2lwYWxfYW1vdW50ID0gc2VsZi5hY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcykKICAgIGRpZyAzCiAgICBjYWxsc3ViIGFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUKICAgIGJ1cnkgMQogICAgYiBnZXRfcGF5bWVudF9hbW91bnRfYWZ0ZXJfaWZfZWxzZUA2CgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLmdldF9jb3Vwb25zX3N0YXR1c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9jb3Vwb25zX3N0YXR1czoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxMAogICAgLy8gZHVlX2NvdXBvbnMgPSBzZWxmLmNvdW50X2R1ZV9jb3Vwb25zKCkKICAgIGNhbGxzdWIgY291bnRfZHVlX2NvdXBvbnMKICAgIGR1cG4gMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzExCiAgICAvLyBuZXh0X2NvdXBvbl9kdWVfZGF0ZSA9IHNlbGYubmV4dF9jb3Vwb25fZHVlX2RhdGUoZHVlX2NvdXBvbnMpCiAgICBjYWxsc3ViIG5leHRfY291cG9uX2R1ZV9kYXRlCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTIKICAgIC8vIGFsbF9kdWVfY291cG9uc19wYWlkID0gc2VsZi5hbGxfZHVlX2NvdXBvbnNfcGFpZChkdWVfY291cG9ucykKICAgIGR1cAogICAgY2FsbHN1YiBhbGxfZHVlX2NvdXBvbnNfcGFpZAogICAgc3dhcAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzEzCiAgICAvLyBudW1lcmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxNAogICAgLy8gZGVub21pbmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxNQogICAgLy8gaWYgc2VsZi5pc19hY2NydWluZ19pbnRlcmVzdChkdWVfY291cG9ucyk6CiAgICBjYWxsc3ViIGlzX2FjY3J1aW5nX2ludGVyZXN0CiAgICBieiBnZXRfY291cG9uc19zdGF0dXNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTYKICAgIC8vIGRheV9jb3VudF9mYWN0b3IgPSBzZWxmLmRheV9jb3VudF9mYWN0b3IoZHVlX2NvdXBvbnMpCiAgICBkaWcgNAogICAgY2FsbHN1YiBkYXlfY291bnRfZmFjdG9yCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTcKICAgIC8vIG51bWVyYXRvciA9IGRheV9jb3VudF9mYWN0b3IubnVtZXJhdG9yCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnVyeSAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTgKICAgIC8vIGRlbm9taW5hdG9yID0gZGF5X2NvdW50X2ZhY3Rvci5kZW5vbWluYXRvcgogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDEKCmdldF9jb3Vwb25zX3N0YXR1c19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMjAKICAgIC8vIHRvdGFsX2NvdXBvbnM9c2VsZi50b3RhbF9jb3Vwb25zLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfY291cG9ucyBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMyMy0zMjYKICAgIC8vIGRheV9jb3VudF9mYWN0b3I9dHlwLkRheUNvdW50RmFjdG9yKAogICAgLy8gICAgIG51bWVyYXRvcj1udW1lcmF0b3IsCiAgICAvLyAgICAgZGVub21pbmF0b3I9ZGVub21pbmF0b3IsCiAgICAvLyApLAogICAgZGlnIDIKICAgIGl0b2IKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxOS0zMjgKICAgIC8vIHJldHVybiB0eXAuQ291cG9uc0luZm8oCiAgICAvLyAgICAgdG90YWxfY291cG9ucz1zZWxmLnRvdGFsX2NvdXBvbnMsCiAgICAvLyAgICAgZHVlX2NvdXBvbnM9ZHVlX2NvdXBvbnMsCiAgICAvLyAgICAgbmV4dF9jb3Vwb25fZHVlX2RhdGU9bmV4dF9jb3Vwb25fZHVlX2RhdGUsCiAgICAvLyAgICAgZGF5X2NvdW50X2ZhY3Rvcj10eXAuRGF5Q291bnRGYWN0b3IoCiAgICAvLyAgICAgICAgIG51bWVyYXRvcj1udW1lcmF0b3IsCiAgICAvLyAgICAgICAgIGRlbm9taW5hdG9yPWRlbm9taW5hdG9yLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYWxsX2R1ZV9jb3Vwb25zX3BhaWQ9YWxsX2R1ZV9jb3Vwb25zX3BhaWQsCiAgICAvLyApCiAgICBzd2FwCiAgICBpdG9iCiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNQogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDMxIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgNQogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5wYXltZW50X2FnZW50LmNvdXBvbi5Db3Vwb25QYXltZW50QWdlbnRNaXhpbi5wYXlfY291cG9uW3JvdXRpbmddKCkgLT4gdm9pZDoKcGF5X2NvdXBvbjoKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzkKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1c19pc19hY3RpdmUoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo0MAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo0MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjQ0CiAgICAvLyB1bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo0NQogICAgLy8gYXNzZXJ0IHVuaXRzID4gMCwgZXJyLk5PX1VOSVRTCiAgICBhc3NlcnQgLy8gTm8gRC1BU0EgdW5pdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjQ3CiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYuY291bnRfZHVlX2NvdXBvbnMoKQogICAgY2FsbHN1YiBjb3VudF9kdWVfY291cG9ucwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NDgKICAgIC8vIGFjY291bnRfcGFpZF9jb3Vwb25zID0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGFpZF9jb3Vwb25zCiAgICBzd2FwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjQ5CiAgICAvLyBhc3NlcnQgZHVlX2NvdXBvbnMgPiBhY2NvdW50X3BhaWRfY291cG9ucywgZXJyLk5PX0RVRV9DT1VQT04KICAgIHN3YXAKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQgLy8gTm8gZHVlIGNvdXBvbiB0byBwYXkKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjUwLTUzCiAgICAvLyAjIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyB2ZXJpZnkgaWYgb3RoZXIgYWNjb3VudHMgYXJlIHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBwYXltZW50IG9mIHByZXZpb3VzIGNvdXBvbnMKICAgIC8vIGFzc2VydCBzZWxmLmFsbF9kdWVfY291cG9uc19wYWlkKAogICAgLy8gICAgIGFjY291bnRfcGFpZF9jb3Vwb25zCiAgICAvLyApLCBlcnIuUEVORElOR19DT1VQT05fUEFZTUVOVAogICAgZHVwCiAgICBjYWxsc3ViIGFsbF9kdWVfY291cG9uc19wYWlkCiAgICBhc3NlcnQgLy8gUGVuZGluZyBkdWUgY291cG9uIHBheW1lbnQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE5NwogICAgLy8gc2VsZi5hY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcyksCiAgICBkaWcgMQogICAgY2FsbHN1YiBhY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxOTgKICAgIC8vIGFjY291bnRfcGFpZF9jb3Vwb25zICsgMSwKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxOTYtMTk5CiAgICAvLyByZXR1cm4gc2VsZi5jb3Vwb25faW50ZXJlc3RfYW1vdW50KAogICAgLy8gICAgIHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpLAogICAgLy8gICAgIGFjY291bnRfcGFpZF9jb3Vwb25zICsgMSwKICAgIC8vICkKICAgIGNhbGxzdWIgY291cG9uX2ludGVyZXN0X2Ftb3VudAogICAgc3dhcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo1NAogICAgLy8gc2VsZi5hc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uKGhvbGRpbmdfYWRkcmVzcykKICAgIGR1cAogICAgY2FsbHN1YiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjU3CiAgICAvLyBpZiBzZWxmLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3MpOgogICAgY2FsbHN1YiBpc19wYXltZW50X2V4ZWN1dGFibGUKICAgIGJ6IHBheV9jb3Vwb25fZWxzZV9ib2R5QDMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6NTgtNTkKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgb24tY2hhaW4gcGF5bWVudCBhZ2VudAogICAgLy8gc2VsZi5hc3NlcnRfZW5vdWdoX2Z1bmRzKHBheW1lbnRfYW1vdW50KQogICAgZHVwbiAyCiAgICBjYWxsc3ViIGFzc2VydF9lbm91Z2hfZnVuZHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6NjAtNjEKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgdGhlIHNhbWUgYXNzZXQgZm9yIGRlbm9taW5hdGlvbiBhbmQgc2V0dGxlbWVudCwgbm8gY29udmVyc2lvbiBuZWVkZWQKICAgIC8vIHNlbGYucGF5KHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcywgcGF5bWVudF9hbW91bnQpCiAgICBkaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMgogICAgc3dhcAogICAgY2FsbHN1YiBwYXkKCnBheV9jb3Vwb25fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NjMKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyArPSAxCiAgICBkaWcgMgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBwdXNoaW50IDQ4CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NjQKICAgIC8vIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgKz0gdW5pdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAicGFpZF9jb3Vwb25fdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgZXhpc3RzCiAgICBkaWcgMgogICAgKwogICAgYnl0ZWMgMjggLy8gInBhaWRfY291cG9uX3VuaXRzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MTcKICAgIC8vIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjIwCiAgICAvLyB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToyMgogICAgLy8gY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gImRlbm9taW5hdGlvbl9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjIzCiAgICAvLyBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjI0CiAgICAvLyBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgKgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToxNi0yNwogICAgLy8gRXZlbnQoCiAgICAvLyAgICAgY29udHJhY3RfaWQ9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQsCiAgICAvLyAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX0lQKSwKICAgIC8vICAgICB0eXBlX25hbWU9U3RyaW5nKCJJUCIpLAogICAgLy8gICAgIHRpbWU9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICBjdXJyZW5jeV9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIC8vICAgICBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIC8vICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgbm9taW5hbF9yYXRlX2Jwcz1hcmM0LlVJbnQxNigwKSwgICMgVE9ETzogQWRkIGludGVyZXN0IHJhdGUKICAgIC8vICAgICBub21pbmFsX2FjY3J1ZWQ9VUludDY0KDApLAogICAgLy8gKQogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgwODAwMzcKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAzNSAvLyAweDAwM2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MjUKICAgIC8vIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksICAjIFRPRE86IEFkZCBpbnRlcmVzdCByYXRlCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MTYtMjcKICAgIC8vIEV2ZW50KAogICAgLy8gICAgIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgLy8gICAgIHR5cGU9YXJjNC5VSW50OChlbnVtcy5FVlRfVFlQRV9JUCksCiAgICAvLyAgICAgdHlwZV9uYW1lPVN0cmluZygiSVAiKSwKICAgIC8vICAgICB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgLy8gICAgIHBheW9mZj1wYXlvZmYsCiAgICAvLyAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgY3VycmVuY3lfdW5pdD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC51bml0X25hbWUsCiAgICAvLyAgICAgbm9taW5hbF92YWx1ZT1zZWxmLmNpcmN1bGF0aW5nX3VuaXRzICogc2VsZi51bml0X3ZhbHVlLAogICAgLy8gICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksICAjIFRPRE86IEFkZCBpbnRlcmVzdCByYXRlCiAgICAvLyAgICAgbm9taW5hbF9hY2NydWVkPVVJbnQ2NCgwKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToyNgogICAgLy8gbm9taW5hbF9hY2NydWVkPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjE2LTI3CiAgICAvLyBFdmVudCgKICAgIC8vICAgICBjb250cmFjdF9pZD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCwKICAgIC8vICAgICB0eXBlPWFyYzQuVUludDgoZW51bXMuRVZUX1RZUEVfSVApLAogICAgLy8gICAgIHR5cGVfbmFtZT1TdHJpbmcoIklQIiksCiAgICAvLyAgICAgdGltZT1HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIC8vICAgICBwYXlvZmY9cGF5b2ZmLAogICAgLy8gICAgIGN1cnJlbmN5X2lkPXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLmlkLAogICAgLy8gICAgIGN1cnJlbmN5X3VuaXQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQudW5pdF9uYW1lLAogICAgLy8gICAgIG5vbWluYWxfdmFsdWU9c2VsZi5jaXJjdWxhdGluZ191bml0cyAqIHNlbGYudW5pdF92YWx1ZSwKICAgIC8vICAgICBub21pbmFsX3JhdGVfYnBzPWFyYzQuVUludDE2KDApLCAgIyBUT0RPOiBBZGQgaW50ZXJlc3QgcmF0ZQogICAgLy8gICAgIG5vbWluYWxfYWNjcnVlZD1VSW50NjQoMCksCiAgICAvLyApCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMDI0OTUwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToxNS0yOAogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIEV2ZW50KAogICAgLy8gICAgICAgICBjb250cmFjdF9pZD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCwKICAgIC8vICAgICAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX0lQKSwKICAgIC8vICAgICAgICAgdHlwZV9uYW1lPVN0cmluZygiSVAiKSwKICAgIC8vICAgICAgICAgdGltZT1HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIC8vICAgICAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgICAgIGN1cnJlbmN5X3VuaXQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQudW5pdF9uYW1lLAogICAgLy8gICAgICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksICAjIFRPRE86IEFkZCBpbnRlcmVzdCByYXRlCiAgICAvLyAgICAgICAgIG5vbWluYWxfYWNjcnVlZD1VSW50NjQoMCksCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgYnl0ZWMgMzYgLy8gbWV0aG9kICJFdmVudCh1aW50NjQsdWludDgsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50NjQsdWludDE2LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo3MAogICAgLy8gdGltZXN0YW1wPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo2OC03MgogICAgLy8gcmV0dXJuIHR5cC5QYXltZW50UmVzdWx0KAogICAgLy8gICAgIGFtb3VudD1wYXltZW50X2Ftb3VudCwKICAgIC8vICAgICB0aW1lc3RhbXA9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgY29udGV4dD1wYXltZW50X2luZm8sICAjIFRPRE86IEFkZCBpbmZvIG9uIGZhaWxlZCBwYXltZW50CiAgICAvLyApCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMzcgLy8gMHgwMDEyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTozMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpwYXlfY291cG9uX2Vsc2VfYm9keUAzOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo2My02NAogICAgLy8gIyBBY2NvdW50cyBzdXNwZW5kZWQgb3Igbm90IG9wdGVkIGluIGF0IHRoZSB0aW1lIG9mIHBheW1lbnRzIG11c3Qgbm90IHN0YWxsIHRoZSBELUFTQQogICAgLy8gcGF5bWVudF9hbW91bnQgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMQogICAgYiBwYXlfY291cG9uX2FmdGVyX2lmX2Vsc2VANAoKCi8vIG1vZHVsZXMucGF5bWVudF9hZ2VudC5wcmluY2lwYWwuUHJpbmNpcGFsUGF5bWVudEFnZW50TWl4aW4ucGF5X3ByaW5jaXBhbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnBheV9wcmluY2lwYWw6CiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjUKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0FDVElWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMAogICAgPT0KICAgIC8vIG1vZHVsZXMvYWN0dXMvcGFtLnB5OjE2LTE3CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmVzdHJpY3QgY2FsbGVyIGF1dGhvcml6YXRpb24KICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1c19pc19hY3RpdmUoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToxOAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToxOQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWN0dXMvcGFtLnB5OjIxCiAgICAvLyB1bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvYWN0dXMvcGFtLnB5OjIyCiAgICAvLyBhc3NlcnQgdW5pdHMgPiAwLCBlcnIuTk9fVU5JVFMKICAgIGFzc2VydCAvLyBObyBELUFTQSB1bml0cwogICAgLy8gbW9kdWxlcy9hY3R1cy9wYW0ucHk6MjMKICAgIC8vIGFzc2VydCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+PSBzZWxmLm1hdHVyaXR5X2RhdGUsIGVyci5OT1RfTUFUVVJFCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgPj0KICAgIGFzc2VydCAvLyBOb3QgbWF0dXJlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3OAogICAgLy8gc2VsZi5jb3VudF9kdWVfY291cG9ucygpCiAgICBjYWxsc3ViIGNvdW50X2R1ZV9jb3Vwb25zCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3Ni03OQogICAgLy8gIyBQcmluY2lwYWwgcGF5bWVudCBpcyBmb3JiaWRkZW4gaW4gY2FzZSBvZiBwZW5kaW5nIGNvdXBvbiBwYXltZW50cwogICAgLy8gYXNzZXJ0IHNlbGYuYWxsX2R1ZV9jb3Vwb25zX3BhaWQoCiAgICAvLyAgICAgc2VsZi5jb3VudF9kdWVfY291cG9ucygpCiAgICAvLyApLCBlcnIuUEVORElOR19DT1VQT05fUEFZTUVOVAogICAgY2FsbHN1YiBhbGxfZHVlX2NvdXBvbnNfcGFpZAogICAgYXNzZXJ0IC8vIFBlbmRpbmcgZHVlIGNvdXBvbiBwYXltZW50CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo4MAogICAgLy8gcmV0dXJuIHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpCiAgICBkdXAKICAgIGNhbGxzdWIgYWNjb3VudF90b3RhbF91bml0c192YWx1ZQogICAgc3dhcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo1MwogICAgLy8gc2VsZi5hc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uKGhvbGRpbmdfYWRkcmVzcykKICAgIGR1cAogICAgY2FsbHN1YiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjU2CiAgICAvLyBpZiBzZWxmLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3MpOgogICAgY2FsbHN1YiBpc19wYXltZW50X2V4ZWN1dGFibGUKICAgIGJ6IHBheV9wcmluY2lwYWxfZWxzZV9ib2R5QDMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6NTctNTgKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgb24tY2hhaW4gcGF5bWVudCBhZ2VudAogICAgLy8gc2VsZi5hc3NlcnRfZW5vdWdoX2Z1bmRzKHBheW1lbnRfYW1vdW50KQogICAgZHVwbiAyCiAgICBjYWxsc3ViIGFzc2VydF9lbm91Z2hfZnVuZHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6NTktNjAKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgdGhlIHNhbWUgYXNzZXQgZm9yIGRlbm9taW5hdGlvbiBhbmQgc2V0dGxlbWVudCwgbm8gY29udmVyc2lvbiBuZWVkZWQKICAgIC8vIHNlbGYucGF5KHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcywgcGF5bWVudF9hbW91bnQpCiAgICBkaWcgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMgogICAgc3dhcAogICAgY2FsbHN1YiBwYXkKCnBheV9wcmluY2lwYWxfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTk5CiAgICAvLyBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIC09IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLQogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjAwCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgc3dhcAogICAgaW50Y18yIC8vIDMyCiAgICBkaWcgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjIwMQogICAgLy8gc2VsZi5lbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMoKQogICAgY2FsbHN1YiBlbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6MTcKICAgIC8vIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjIwCiAgICAvLyB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weToyMgogICAgLy8gY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gImRlbm9taW5hdGlvbl9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjIzCiAgICAvLyBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjI0CiAgICAvLyBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgKgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weToxNi0yNwogICAgLy8gRXZlbnQoCiAgICAvLyAgICAgY29udHJhY3RfaWQ9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQsCiAgICAvLyAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX1BSKSwKICAgIC8vICAgICB0eXBlX25hbWU9U3RyaW5nKCJQUiIpLAogICAgLy8gICAgIHRpbWU9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICBjdXJyZW5jeV9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIC8vICAgICBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIC8vICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgbm9taW5hbF9yYXRlX2Jwcz1hcmM0LlVJbnQxNigwKSwKICAgIC8vICAgICBub21pbmFsX2FjY3J1ZWQ9VUludDY0KDApLAogICAgLy8gKQogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgwMzAwMzcKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAzNSAvLyAweDAwM2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6MjUKICAgIC8vIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6MTYtMjcKICAgIC8vIEV2ZW50KAogICAgLy8gICAgIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgLy8gICAgIHR5cGU9YXJjNC5VSW50OChlbnVtcy5FVlRfVFlQRV9QUiksCiAgICAvLyAgICAgdHlwZV9uYW1lPVN0cmluZygiUFIiKSwKICAgIC8vICAgICB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgLy8gICAgIHBheW9mZj1wYXlvZmYsCiAgICAvLyAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgY3VycmVuY3lfdW5pdD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC51bml0X25hbWUsCiAgICAvLyAgICAgbm9taW5hbF92YWx1ZT1zZWxmLmNpcmN1bGF0aW5nX3VuaXRzICogc2VsZi51bml0X3ZhbHVlLAogICAgLy8gICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgbm9taW5hbF9hY2NydWVkPVVJbnQ2NCgwKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMDI1MDUyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weToxNS0yOAogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIEV2ZW50KAogICAgLy8gICAgICAgICBjb250cmFjdF9pZD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCwKICAgIC8vICAgICAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX1BSKSwKICAgIC8vICAgICAgICAgdHlwZV9uYW1lPVN0cmluZygiUFIiKSwKICAgIC8vICAgICAgICAgdGltZT1HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIC8vICAgICAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgICAgIGN1cnJlbmN5X3VuaXQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQudW5pdF9uYW1lLAogICAgLy8gICAgICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgICAgIG5vbWluYWxfYWNjcnVlZD1VSW50NjQoMCksCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgYnl0ZWMgMzYgLy8gbWV0aG9kICJFdmVudCh1aW50NjQsdWludDgsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50NjQsdWludDE2LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo2OQogICAgLy8gdGltZXN0YW1wPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo2Ny03MQogICAgLy8gcmV0dXJuIHR5cC5QYXltZW50UmVzdWx0KAogICAgLy8gICAgIGFtb3VudD1wYXltZW50X2Ftb3VudCwKICAgIC8vICAgICB0aW1lc3RhbXA9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgY29udGV4dD1wYXltZW50X2luZm8sICAjIFRPRE86IEFkZCBpbmZvIG9uIGZhaWxlZCBwYXltZW50CiAgICAvLyApCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMzcgLy8gMHgwMDEyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTozMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpwYXlfcHJpbmNpcGFsX2Vsc2VfYm9keUAzOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo2Mi02MwogICAgLy8gIyBBY2NvdW50cyBzdXNwZW5kZWQgb3Igbm90IG9wdGVkIGluIGF0IHRoZSB0aW1lIG9mIHBheW1lbnRzIG11c3Qgbm90IHN0YWxsIHRoZSBELUFTQQogICAgLy8gcGF5bWVudF9hbW91bnQgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMQogICAgYiBwYXlfcHJpbmNpcGFsX2FmdGVyX2lmX2Vsc2VANAoKCi8vIG1vZHVsZXMudHJhbnNmZXJfYWdlbnQuY291cG9uLkNvdXBvblRyYW5zZmVyQWdlbnRNaXhpbi5hc3NldF90cmFuc2Zlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIG1vZHVsZXMvdHJhbnNmZXJfYWdlbnQvY291cG9uLnB5OjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTUzLTE1OAogICAgLy8gc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vIGFuZCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyBhbmQgKAogICAgLy8gICAgIG5vdCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyApCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE1NAogICAgLy8gYW5kIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOCAvLyAic2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICA8PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTUzLTE1OAogICAgLy8gc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vIGFuZCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyBhbmQgKAogICAgLy8gICAgIG5vdCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyApCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE1NgogICAgLy8gbm90IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNTYtMTU3CiAgICAvLyBub3Qgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX3RydWVANQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTU3CiAgICAvLyBvciBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA8IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICA8CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNTYtMTU3CiAgICAvLyBub3Qgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDYKCmFzc2V0X3RyYW5zZmVyX2Jvb2xfdHJ1ZUA1OgogICAgaW50Y18xIC8vIDEKCmFzc2V0X3RyYW5zZmVyX2Jvb2xfbWVyZ2VANzoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE1Mi0xNTkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vICAgICBhbmQgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIGFuZCAoCiAgICAvLyAgICAgICAgIG5vdCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgICAgIG9yIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIDwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gICAgICkKICAgIC8vICksIGVyci5TRUNPTkRBUllfTUFSS0VUX0NMT1NFRAogICAgYXNzZXJ0IC8vIFNlY29uZGFyeSBtYXJrZXQgaXMgY2xvc2VkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNjktMTcxCiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZ3JhbnRzIHRyYW5zZmVyIHJpZ2h0IHRvIEQtQVNBIG93bmVycy4gT3RoZXIgaW1wbGVtZW50YXRpb25zIG1heSByZWxheSBvbiBvdGhlcgogICAgLy8gIyByb2xlcywgZXh0ZXJuYWwgQXBwcyB0aHJvdWdoIEMyQyBjYWxscyAoZS5nLiwgYW4gb3JkZXIgYm9vayksIG9yIG9mZi1jaGFpbiB0cmFuc2ZlciBhZ2VudHMuCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZW5kZXJfaG9sZGluZ19hZGRyZXNzLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNzIKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTczCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDEwCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE3NgogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkKHNlbmRlcl9ob2xkaW5nX2FkZHJlc3MpCiAgICBkaWcgMwogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNzcKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hY2NvdW50X3N1c3BlbmRlZChyZWNlaXZlcl9ob2xkaW5nX2FkZHJlc3MpCiAgICBkaWcgMQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxOTAKICAgIC8vIGFzc2VydCBzZW5kZXJfaG9sZGluZ19hZGRyZXNzICE9IHJlY2VpdmVyX2hvbGRpbmdfYWRkcmVzcywgZXJyLlNFTEZfVFJBTlNGRVIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICAhPQogICAgYXNzZXJ0IC8vIFNlbmRlciBhbmQgcmVjZWl2ZXIgbXVzdCBiZSBkaWZmZXJlbnQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE5MQogICAgLy8gYXNzZXJ0IHVuaXRzID4gMCwgZXJyLk5VTExfVFJBTlNGRVIKICAgIGRpZyAyCiAgICBkdXAKICAgIGFzc2VydCAvLyBUcmFuc2ZlciB1bml0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxOTIKICAgIC8vIGFzc2VydCB1bml0cyA8PSBzZWxmLmFjY291bnRbc2VuZGVyX2hvbGRpbmdfYWRkcmVzc10udW5pdHMsIGVyci5PVkVSX1RSQU5TRkVSCiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMgogICAgPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgc2VuZGVyIHVuaXRzIHRvIHRyYW5zZmVyCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NjMKICAgIC8vIHNlbmRlcl91bml0X3ZhbHVlID0gc2VsZi5hY2NvdW50W3NlbmRlcl0udW5pdF92YWx1ZQogICAgZXh0cmFjdCA0MCA4CiAgICBidXJ5IDkKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo2NAogICAgLy8gaWYgc2VsZi5hY2NvdW50W3JlY2VpdmVyXS51bml0cyA+IFVJbnQ2NCgwKToKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBieiBhc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlAOQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjU4CiAgICAvLyBzZWxmLmFjY291bnRbc2VuZGVyXS51bml0X3ZhbHVlID09IHNlbGYuYWNjb3VudFtyZWNlaXZlcl0udW5pdF92YWx1ZQogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1OC01OQogICAgLy8gc2VsZi5hY2NvdW50W3NlbmRlcl0udW5pdF92YWx1ZSA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnVuaXRfdmFsdWUKICAgIC8vIGFuZCBzZWxmLmFjY291bnRbc2VuZGVyXS5wYWlkX2NvdXBvbnMgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS5wYWlkX2NvdXBvbnMKICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Jvb2xfZmFsc2VAMjAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1OQogICAgLy8gYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1OC01OQogICAgLy8gc2VsZi5hY2NvdW50W3NlbmRlcl0udW5pdF92YWx1ZSA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnVuaXRfdmFsdWUKICAgIC8vIGFuZCBzZWxmLmFjY291bnRbc2VuZGVyXS5wYWlkX2NvdXBvbnMgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS5wYWlkX2NvdXBvbnMKICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Jvb2xfZmFsc2VAMjAKICAgIGludGNfMSAvLyAxCgphc3NldF90cmFuc2Zlcl9ib29sX21lcmdlQDIxOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjU3LTYwCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudFtzZW5kZXJdLnVuaXRfdmFsdWUgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS51bml0X3ZhbHVlCiAgICAvLyAgICAgYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgLy8gKSwgZXJyLk5PTl9GVU5HSUJMRV9VTklUUwogICAgYXNzZXJ0IC8vIFNlbmRlciBhbmQgcmVjZWl2ZXIgdW5pdHMgYXJlIG5vdCBmdW5naWJsZQoKYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIG1vZHVsZXMvdHJhbnNmZXJfYWdlbnQvY291cG9uLnB5OjQ2LTQ3CiAgICAvLyAjIFRyYW5zZmVycmVkIHVuaXRzIHZhbHVlIChtdXN0IGJlIGNvbXB1dGVkIGJlZm9yZSB0aGUgdHJhbnNmZXIpCiAgICAvLyBzZW5kZXJfdW5pdF92YWx1ZSA9IHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlCiAgICBkaWcgNgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0MAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgNQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NjktNzAKICAgIC8vICMgVHJhbnNmZXIgaXMgZm9yYmlkZGVuIGluIGNhc2Ugb2YgcGVuZGluZyBjb3Vwb24gcGF5bWVudHMKICAgIC8vIGR1ZV9jb3Vwb25zID0gc2VsZi5jb3VudF9kdWVfY291cG9ucygpCiAgICBjYWxsc3ViIGNvdW50X2R1ZV9jb3Vwb25zCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3MQogICAgLy8gc2VsZi5hc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudChzZW5kZXJfaG9sZGluZ19hZGRyZXNzLCBkdWVfY291cG9ucykKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGRpZyAxCiAgICBjYWxsc3ViIGFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3MgogICAgLy8gcmV0dXJuIHNlbGYuYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoc2VuZGVyX2hvbGRpbmdfYWRkcmVzcywgdW5pdHMsIGR1ZV9jb3Vwb25zKQogICAgc3dhcAogICAgZGlnIDMKICAgIGR1cAogICAgY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIGFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50CiAgICBidXJ5IDcKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo3MQogICAgLy8gYXNzZXJ0IHVuaXRzIDw9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLCBlcnIuT1ZFUl9UUkFOU0ZFUgogICAgZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAyCiAgICA8PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBzZW5kZXIgdW5pdHMgdG8gdHJhbnNmZXIKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo3MgogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMgLT0gdW5pdHMKICAgIHN3YXAKICAgIC0KICAgIGl0b2IKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMzIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1MgogICAgLy8gaWYgc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMgPT0gVUludDY0KDApOgogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBibnogYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxNgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjUzCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA0MAogICAgZGlnIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NTQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyA9IFVJbnQ2NCgwKQogICAgcHVzaGludCA0OAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKCmFzc2V0X3RyYW5zZmVyX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NzYKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzICs9IHVuaXRzCiAgICBkaWcgNQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgKwogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzIgLy8gMzIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvdHJhbnNmZXJfYWdlbnQvY291cG9uLnB5OjUzCiAgICAvLyByZXR1cm4gdW5pdHMgKiBzZW5kZXJfdW5pdF92YWx1ZSArIGFjY3J1ZWRfaW50ZXJlc3QKICAgIGRpZyA0CiAgICAqCiAgICBkaWcgNQogICAgKwogICAgLy8gbW9kdWxlcy90cmFuc2Zlcl9hZ2VudC9jb3Vwb24ucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDIwOgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUAyMQoKYXNzZXRfdHJhbnNmZXJfZWxzZV9ib2R5QDk6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NjcKICAgIC8vIHNlbGYuYWNjb3VudFtyZWNlaXZlcl0udW5pdF92YWx1ZSA9IHNlbmRlcl91bml0X3ZhbHVlCiAgICBkaWcgNQogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICBkaWcgMTAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NjgKICAgIC8vIHNlbGYuYWNjb3VudFtyZWNlaXZlcl0ucGFpZF9jb3Vwb25zID0gc2VsZi5hY2NvdW50W3NlbmRlcl0ucGFpZF9jb3Vwb25zCiAgICBkaWcgNwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgNDggOAogICAgcHVzaGludCA0OAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIGIgYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxMAoKYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUA2OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUA3CgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmFzc2V0X2NyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X2NyZWF0ZToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMQogICAgcHVzaGludCAzOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCA0MAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCA3IG9mICh1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OFszMl0sKGxlbit1dGY4W10pKQogICAgZGlnIDIKICAgIHN3YXAKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA0MgogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3Igc21hcnRfY29udHJhY3RzLmFiaV90eXBlcy5Bc3NldE1ldGFkYXRhCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNzYKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSBhcnJhbmdlcgogICAgYnl0ZWMgOCAvLyAweDUyMzIzMDIzCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNzcKICAgIC8vIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YS5ieXRlcwogICAgYnl0ZWMgMjUgLy8gIm1ldGFkYXRhIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmFzc2V0X3VwZGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X3VwZGF0ZToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBwdXNoaW50IDM4CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDcgb2YgKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4WzMyXSwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDQyCiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBzbWFydF9jb250cmFjdHMuYWJpX3R5cGVzLkFzc2V0TWV0YWRhdGEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI4NC0yODcKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBncmFudHMgdGhlIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byB0aGUgQXJyYW5nZXIuCiAgICAvLyAjIE90aGVyIGltcGxlbWVudGF0aW9ucyBtYXkgZGlzYWJsZSBELUFTQSBhcHBsaWNhdGlvbiB1cGRhdGFiaWxpdHkgb3IgY2hhbmdlIGl0cyBhdXRob3JpemF0aW9ucy4KICAgIC8vICMg4pqg77iPIFdBUk5JTkc6IEFwcGxpY2F0aW9uIHVwZGF0ZXMgbXVzdCBiZSBleGVjdXRlZCBWRVJZIGNhcmVmdWxseSwgYXMgdGhleSBtaWdodCBpbnRyb2R1Y2UgYnJlYWtpbmcgY2hhbmdlcy4KICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI4OAogICAgLy8gc2VsZi5tZXRhZGF0YSA9IG1ldGFkYXRhLmJ5dGVzCiAgICBieXRlYyAyNSAvLyAibWV0YWRhdGEiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6Mjc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIlVwZGF0ZUFwcGxpY2F0aW9uIl0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLnNldF9zZWNvbmRhcnlfdGltZV9ldmVudHNbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzOgogICAgaW50Y18wIC8vIDAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzExCiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjgKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0VOREVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGMgNSAvLyAyMDAKICAgID09CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMTIKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5zdGF0dXNfaXNfZW5kZWQoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgIQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMTMKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzE1CiAgICAvLyBhc3NlcnQgc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50cy5sZW5ndGggPj0gMSwgZXJyLklOVkFMSURfVElNRV9FVkVOVFNfTEVOR1RICiAgICBkdXAKICAgIGFzc2VydCAvLyBUaW1lIGV2ZW50cyBsZW5ndGggaXMgaW52YWxpZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzE2CiAgICAvLyBpZiBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzLmxlbmd0aCA+IDE6CiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYnogc2V0X3NlY29uZGFyeV90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMxNwogICAgLy8gc2VsZi5hc3NlcnRfdGltZV9ldmVudHNfc29ydGVkKHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHMpCiAgICBkdXAKICAgIGNhbGxzdWIgYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZAogICAgYnVyeSAxCgpzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMyMAogICAgLy8gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzIxCiAgICAvLyA8PSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzW2NmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFhdCiAgICBkaWcgMQogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgYnVyeSA0CiAgICBwdXNoaW50IDIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjAtMzIxCiAgICAvLyBzZWxmLmlzc3VhbmNlX2RhdGUKICAgIC8vIDw9IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbY2ZnLlNFQ09OREFSWV9NQVJLRVRfT1BFTklOR19EQVRFX0lEWF0KICAgIHN3YXAKICAgIGRpZyAxCiAgICA8PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzE5LTMyMgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmlzc3VhbmNlX2RhdGUKICAgIC8vICAgICA8PSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzW2NmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFhdCiAgICAvLyApLCBlcnIuSU5WQUxJRF9TRUNPTkRBUllfT1BFTklOR19EQVRFCiAgICBhc3NlcnQgLy8gSW52YWxpZCBzZWNvbmRhcnkgbWFya2V0IG9wZW5pbmcgZGF0ZQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzIzCiAgICAvLyBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlID0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIGJ5dGVjIDE4IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMyMy0zMjUKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgLy8gICAgIGNmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjYKICAgIC8vIGlmIHNlbGYubWF0dXJpdHlfZGF0ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICBieiBzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzI4CiAgICAvLyBzZWxmLm1hdHVyaXR5X2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjkKICAgIC8vID49IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWF0KICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBkaWcgMwogICAgc3dhcAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMyOC0zMjkKICAgIC8vIHNlbGYubWF0dXJpdHlfZGF0ZQogICAgLy8gPj0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1tjZmcuU0VDT05EQVJZX01BUktFVF9DTE9TVVJFX0RBVEVfSURYXQogICAgc3dhcAogICAgZGlnIDEKICAgID49CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjctMzMwCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYubWF0dXJpdHlfZGF0ZQogICAgLy8gICAgID49IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWF0KICAgIC8vICksIGVyci5JTlZBTElEX1NFQ09OREFSWV9DTE9TVVJFX0RBVEUKICAgIGFzc2VydCAvLyBJbnZhbGlkIHNlY29uZGFyeSBtYXJrZXQgY2xvc3VyZSBkYXRlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMzEKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgPSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgYnl0ZWMgMTEgLy8gInNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzMxLTMzMwogICAgLy8gc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSA9IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWAogICAgLy8gXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCnNldF9zZWNvbmRhcnlfdGltZV9ldmVudHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzM1CiAgICAvLyBzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZT1zZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMzNgogICAgLy8gc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU9c2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMzQtMzM3CiAgICAvLyByZXR1cm4gdHlwLlNlY29uZGFyeU1hcmtldFNjaGVkdWxlKAogICAgLy8gICAgIHNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlPXNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUsCiAgICAvLyAgICAgc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU9c2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSwKICAgIC8vICkKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvbW1vbi5Db3JlRmluYW5jaWFsQ29tbW9uTWl4aW4uc2V0X2RlZmF1bHRfc3RhdHVzW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2RlZmF1bHRfc3RhdHVzOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzQKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnRydXN0ZWUsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlYyAyMCAvLyAweDUyMzYzMDIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozNTIKICAgIC8vIHNlbGYuYXNzZXRfZGVmYXVsdGVkID0gZGVmYXVsdGVkCiAgICBieXRlYyAyNCAvLyAiYXNzZXRfZGVmYXVsdGVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM1MwogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY29tbW9uLkNvcmVGaW5hbmNpYWxDb21tb25NaXhpbi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnByaW1hcnlfZGlzdHJpYnV0aW9uOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjUKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0FDVElWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMAogICAgPT0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0NS0xNDgKICAgIC8vIHNlbGYuc3RhdHVzX2lzX2FjdGl2ZSgpCiAgICAvLyBhbmQgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICBieiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0NgogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNDcKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTQ2LTE0NwogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgPD0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0Ni0xNDgKICAgIC8vIGFuZCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIGJ6IHByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfZmFsc2VANQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTQ4CiAgICAvLyA8IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjcgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNDctMTQ4CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZQogICAgZGlnIDMKICAgID4KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0Ni0xNDgKICAgIC8vIGFuZCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIGJ6IHByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfZmFsc2VANQogICAgaW50Y18xIC8vIDEKCnByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfbWVyZ2VANjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0NC0xNDkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vICAgICBhbmQgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIC8vICksIGVyci5QUklNQVJZX0RJU1RSSUJVVElPTl9DTE9TRUQKICAgIGFzc2VydCAvLyBQcmltYXJ5IGRpc3RyaWJ1dGlvbiBpcyBjbG9zZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo3MQogICAgLy8gYXNzZXJ0IHNlbGYuX3JvbGVfaXNfYWN0aXZlKHNlbGYucHJpbWFyeV9kZWFsZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlYyAyMSAvLyAweDUyMzUzMDIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozODMKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6Mzg0CiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM4NQogICAgLy8gYXNzZXJ0IHVuaXRzID4gMCwgZXJyLlpFUk9fVU5JVFMKICAgIGRpZyAxCiAgICBkdXAKICAgIGFzc2VydCAvLyBDYW4gbm90IGRpc3RyaWJ1dGUgemVybyB1bml0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6Mzg2CiAgICAvLyBhc3NlcnQgc2VsZi5jaXJjdWxhdGluZ191bml0cyArIHVuaXRzIDw9IHNlbGYudG90YWxfdW5pdHMsIGVyci5PVkVSX0RJU1RSSUJVVElPTgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIGV4aXN0cwogICAgZGlnIDEKICAgICsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAidG90YWxfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfdW5pdHMgZXhpc3RzCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgcmVtYWluaW5nIEQtQVNBIHVuaXRzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozODgKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKz0gdW5pdHMKICAgIGJ5dGVjXzMgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozODkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzICs9IHVuaXRzCiAgICBkaWcgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgZGlnIDIKICAgIGludGNfMiAvLyAzMgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzkwCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlID0gc2VsZi51bml0X3ZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDQwCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozOTEKICAgIC8vIHJldHVybiBzZWxmLnRvdGFsX3VuaXRzIC0gc2VsZi5jaXJjdWxhdGluZ191bml0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJ0b3RhbF91bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF91bml0cyBleGlzdHMKICAgIHN3YXAKICAgIC0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDU6CiAgICBpbnRjXzAgLy8gMAogICAgYiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX21lcmdlQDYKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvbW1vbi5Db3JlRmluYW5jaWFsQ29tbW9uTWl4aW4uZ2V0X2Fzc2V0X2luZm9bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXNzZXRfaW5mbzoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQwMwogICAgLy8gcGVyZm9ybWFuY2UgPSBVSW50NjQoY3N0LlBSRl9QRVJGT1JNQU5UKQogICAgaW50Y18wIC8vIDAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQwNAogICAgLy8gaWYgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPiBzZWxmLm1hdHVyaXR5X2RhdGUgPiAwOgogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgPgogICAgYnogZ2V0X2Fzc2V0X2luZm9fYWZ0ZXJfaWZfZWxzZUA0CiAgICBkdXAKICAgIGJ6IGdldF9hc3NldF9pbmZvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDA1CiAgICAvLyBwZXJmb3JtYW5jZSA9IFVJbnQ2NChjc3QuUFJGX01BVFVSRUQpCiAgICBwdXNoaW50IDQKICAgIGJ1cnkgMgoKZ2V0X2Fzc2V0X2luZm9fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDA2LTQwNwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBubyBncmFjZSBvciBkZWxpbnF1ZW5jeSBwZXJpb2RzCiAgICAvLyBpZiBzZWxmLmFzc2V0X2RlZmF1bHRlZDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNCAvLyAiYXNzZXRfZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2RlZmF1bHRlZCBleGlzdHMKICAgIGJ6IGdldF9hc3NldF9pbmZvX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDA4CiAgICAvLyBwZXJmb3JtYW5jZSA9IFVJbnQ2NChjc3QuUFJGX0RFRkFVTFRFRCkKICAgIHB1c2hpbnQgMwogICAgYnVyeSAyCgpnZXRfYXNzZXRfaW5mb19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MTEKICAgIC8vIGRlbm9taW5hdGlvbl9hc3NldF9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiZGVub21pbmF0aW9uX2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxMgogICAgLy8gc2V0dGxlbWVudF9hc3NldF9pZD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQuaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjQ1CiAgICAvLyByZXR1cm4gc2VsZi5jaXJjdWxhdGluZ191bml0cyAqIHNlbGYudW5pdF92YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInVuaXRfdmFsdWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudW5pdF92YWx1ZSBleGlzdHMKICAgIGR1cDIKICAgICoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxNQogICAgLy8gZGF5X2NvdW50X2NvbnZlbnRpb249YXJjNC5VSW50OChzZWxmLmRheV9jb3VudF9jb252ZW50aW9uKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MTYKICAgIC8vIHByaW5jaXBhbF9kaXNjb3VudD1hcmM0LlVJbnQxNihzZWxmLnByaW5jaXBhbF9kaXNjb3VudCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjYgLy8gInByaW5jaXBhbF9kaXNjb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmluY2lwYWxfZGlzY291bnQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxNwogICAgLy8gaW50ZXJlc3RfcmF0ZT1hcmM0LlVJbnQxNihzZWxmLmludGVyZXN0X3JhdGUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDMzIC8vICJpbnRlcmVzdF9yYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmludGVyZXN0X3JhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxOAogICAgLy8gdG90YWxfc3VwcGx5PXNlbGYudG90YWxfdW5pdHMsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gInRvdGFsX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3VuaXRzIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDIwCiAgICAvLyBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGU9c2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MjEKICAgIC8vIHByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZT1zZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNyAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQyMgogICAgLy8gaXNzdWFuY2VfZGF0ZT1zZWxmLmlzc3VhbmNlX2RhdGUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDIzCiAgICAvLyBtYXR1cml0eV9kYXRlPXNlbGYubWF0dXJpdHlfZGF0ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MjQKICAgIC8vIHN1c3BlbmRlZD1zZWxmLmFzc2V0X3N1c3BlbmRlZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X3N1c3BlbmRlZCBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQyNQogICAgLy8gcGVyZm9ybWFuY2U9YXJjNC5VSW50OChwZXJmb3JtYW5jZSksCiAgICBkaWcgMTUKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxMC00MjYKICAgIC8vIHJldHVybiB0eXAuQXNzZXRJbmZvKAogICAgLy8gICAgIGRlbm9taW5hdGlvbl9hc3NldF9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIC8vICAgICBzZXR0bGVtZW50X2Fzc2V0X2lkPXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZC5pZCwKICAgIC8vICAgICBvdXRzdGFuZGluZ19wcmluY2lwYWw9c2VsZi5vdXRzdGFuZGluZ19wcmluY2lwYWwoKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPXNlbGYudW5pdF92YWx1ZSwKICAgIC8vICAgICBkYXlfY291bnRfY29udmVudGlvbj1hcmM0LlVJbnQ4KHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24pLAogICAgLy8gICAgIHByaW5jaXBhbF9kaXNjb3VudD1hcmM0LlVJbnQxNihzZWxmLnByaW5jaXBhbF9kaXNjb3VudCksCiAgICAvLyAgICAgaW50ZXJlc3RfcmF0ZT1hcmM0LlVJbnQxNihzZWxmLmludGVyZXN0X3JhdGUpLAogICAgLy8gICAgIHRvdGFsX3N1cHBseT1zZWxmLnRvdGFsX3VuaXRzLAogICAgLy8gICAgIGNpcmN1bGF0aW5nX3N1cHBseT1zZWxmLmNpcmN1bGF0aW5nX3VuaXRzLAogICAgLy8gICAgIHByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZT1zZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSwKICAgIC8vICAgICBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGU9c2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUsCiAgICAvLyAgICAgaXNzdWFuY2VfZGF0ZT1zZWxmLmlzc3VhbmNlX2RhdGUsCiAgICAvLyAgICAgbWF0dXJpdHlfZGF0ZT1zZWxmLm1hdHVyaXR5X2RhdGUsCiAgICAvLyAgICAgc3VzcGVuZGVkPXNlbGYuYXNzZXRfc3VzcGVuZGVkLAogICAgLy8gICAgIHBlcmZvcm1hbmNlPWFyYzQuVUludDgocGVyZm9ybWFuY2UpLAogICAgLy8gKQogICAgdW5jb3ZlciAxNAogICAgaXRvYgogICAgdW5jb3ZlciAxNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDExCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDcKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDMxIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmdldF90aW1lX2V2ZW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF90aW1lX2V2ZW50czoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQzNgogICAgLy8gdGltZV9ldmVudHMgPSB0eXAuVGltZUV2ZW50cygpCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDM3CiAgICAvLyBpZiBzZWxmLnN0YXR1c19pc19hY3RpdmUoKToKICAgIGJ6IGdldF90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQzOAogICAgLy8gdGltZV9ldmVudHMgPSBzZWxmLnRpbWVfZXZlbnRzLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgMTIgLy8gMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MwogICAgYm94X2dldAogICAgc3dhcAogICAgYnVyeSAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50aW1lX2V2ZW50cyBleGlzdHMKCmdldF90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvbW1vbi5Db3JlRmluYW5jaWFsQ29tbW9uTWl4aW4uZ2V0X3NlY29uZGFyeV9tYXJrZXRfc2NoZWR1bGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfc2Vjb25kYXJ5X21hcmtldF9zY2hlZHVsZToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQ1MAogICAgLy8gKHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUsIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gInNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJzZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQ0OS00NTEKICAgIC8vIHJldHVybiB0eXAuVGltZUV2ZW50cygKICAgIC8vICAgICAoc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSkKICAgIC8vICkKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY29tbW9uLkNvcmVGaW5hbmNpYWxDb21tb25NaXhpbi5nZXRfYXNzZXRfbWV0YWRhdGFbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXNzZXRfbWV0YWRhdGE6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0NjIKICAgIC8vIHJldHVybiB0eXAuQXNzZXRNZXRhZGF0YS5mcm9tX2J5dGVzKHNlbGYubWV0YWRhdGEpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gIm1ldGFkYXRhIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1ldGFkYXRhIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmFjY291bnRpbmcuQWNjb3VudGluZ01vZHVsZS5hY2NvdW50X2dvdl9zdXNwZW5zaW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9nb3Zfc3VzcGVuc2lvbjoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjIDEzIC8vIDB4NTIzNzMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE0CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGR1cAogICAgcHVzaGludCA1NgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNTYKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9vcGVuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9vcGVuOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlYyAxNCAvLyAweDUyMzQzMDIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjgKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0VOREVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGMgNSAvLyAyMDAKICAgID09CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTM5CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuc3RhdHVzX2lzX2VuZGVkKCksIGVyci5VTkFVVEhPUklaRUQKICAgICEKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE0MAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQxCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNDIKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNDYKICAgIC8vIHVuaXRzPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQ0LTE1MAogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10gPSB0eXAuQWNjb3VudEluZm8oCiAgICAvLyAgICAgcGF5bWVudF9hZGRyZXNzPXBheW1lbnRfYWRkcmVzcywKICAgIC8vICAgICB1bml0cz1VSW50NjQoMCksCiAgICAvLyAgICAgdW5pdF92YWx1ZT1VSW50NjQoMCksCiAgICAvLyAgICAgcGFpZF9jb3Vwb25zPVVJbnQ2NCgwKSwKICAgIC8vICAgICBzdXNwZW5kZWQ9RmFsc2UsCiAgICAvLyApCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMzEgLy8gMHgwMAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUxCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmFjY291bnRfY2xvc2Vbcm91dGluZ10oKSAtPiB2b2lkOgphY2NvdW50X2Nsb3NlOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2OAogICAgLy8gYXNzZXJ0IHNlbGYuX3JvbGVfaXNfYWN0aXZlKHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYnl0ZWMgMTQgLy8gMHg1MjM0MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzQKICAgIC8vIGNsb3NlZF91bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3NQogICAgLy8gZGVsIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdCiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzYKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgLT0gY2xvc2VkX3VuaXRzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBkaWcgMQogICAgLQogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3NwogICAgLy8gc2VsZi5lbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMoKQogICAgY2FsbHN1YiBlbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzgKICAgIC8vIHJldHVybiBjbG9zZWRfdW5pdHMsIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmFjY291bnRfdXBkYXRlX3BheW1lbnRfYWRkcmVzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfdXBkYXRlX3BheW1lbnRfYWRkcmVzczoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IGhvbGRpbmdfYWRkcmVzcywgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDEKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwMgogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwNAogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzID0gcGF5bWVudF9hZGRyZXNzCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwNQogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmFjY291bnRpbmcuQWNjb3VudGluZ01vZHVsZS5hY2NvdW50X2dldF9pbmZvW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9nZXRfaW5mbzoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMjIKICAgIC8vIHJldHVybiBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3JvdGF0ZV9hcnJhbmdlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfcm90YXRlX2FycmFuZ2VyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTgKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTkKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSBuZXdfYXJyYW5nZXIKICAgIGJ5dGVjIDggLy8gMHg1MjMyMzAyMwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjAKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19zZXRfb3BfZGFlbW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19zZXRfb3BfZGFlbW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzMKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzQKICAgIC8vIHNlbGYub3BfZGFlbW9uLnZhbHVlID0gYWRkcmVzcwogICAgYnl0ZWMgMjIgLy8gMHg1MjMyMzUyMwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzUKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19hc3NpZ25fcm9sZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfYXNzaWduX3JvbGU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxOTkKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDAKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMQogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDEKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIHB1c2hpbnQgMjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwMgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgOCAvLyAweDUyMzIzMDIzCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAzCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDE0IC8vIDB4NTIzNDMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwNwogICAgLy8gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDkKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKToKICAgIGR1cAogICAgcHVzaGludCA1MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTEwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLnByaW1hcnlfZGVhbGVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDIxIC8vIDB4NTIzNTMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExMQogICAgLy8gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gc2VsZi5fdXBzZXJ0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCBjb25maWcpCiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExMwogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNAogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi50cnVzdGVlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDIwIC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNQogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgZHVwCiAgICBwdXNoaW50IDcwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmF1dGhvcml0eSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyAxMyAvLyAweDUyMzczMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTkKICAgIC8vIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIGR1cAogICAgcHVzaGludCA4MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjIKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDMyIC8vIDB4NTIzODMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMwogICAgLy8gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfcmV2b2tlX3JvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX3Jldm9rZV9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNAogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI2CiAgICAvLyBzZWxmLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgZHVwbiAyCiAgICBjYWxsc3ViIF9hc3NlcnRfdmFsaWRfcm9sZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyNgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgIT0gVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwgZXJyLklOVkFMSURfUk9MRQogICAgZHVwCiAgICBwdXNoaW50IDIwCiAgICAhPQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDE0IC8vIDB4NTIzNDMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyOQogICAgLy8gZGVsIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAoKcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzEKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKToKICAgIGR1cAogICAgcHVzaGludCA1MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTMyCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgMjEgLy8gMHg1MjM1MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTMzCiAgICAvLyBkZWwgc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjcKICAgIC8vIHNlbGYuX2RlbGV0ZV9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcykKICAgIGIgcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgoKcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTM1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIGR1cAogICAgcHVzaGludCA2MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTM2CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyAyMCAvLyAweDUyMzYzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzcKICAgIC8vIGRlbCBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDEzIC8vIDB4NTIzNzMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0MQogICAgLy8gZGVsIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNwogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDMKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgODAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQ0CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDMyIC8vIDB4NTIzODMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NQogICAgLy8gZGVsIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb246CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QgICMgVE9ETzogVXBkYXRlIHNwZWNzIGFuZCBhZGQgdGVzdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo3NwogICAgLy8gYXNzZXJ0IHNlbGYuX3JvbGVfaXNfYWN0aXZlKHNlbGYuYXV0aG9yaXR5LCBUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYnl0ZWMgMTMgLy8gMHg1MjM3MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NgogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGJ5dGVjIDIzIC8vICJhc3NldF9zdXNwZW5kZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NwogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QgICMgVE9ETzogVXBkYXRlIHNwZWNzIGFuZCBhZGQgdGVzdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X2FycmFuZ2VyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU3CiAgICAvLyByZXR1cm4gc2VsZi5hcnJhbmdlci52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gMHg1MjMyMzAyMwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFycmFuZ2VyIGV4aXN0cwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYWRkcmVzc19yb2xlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3MwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIGFkZHJlc3MpLAogICAgYnl0ZWMgMTQgLy8gMHg1MjM0MzAyMwogICAgZGlnIDEKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc0CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnByaW1hcnlfZGVhbGVyLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDIxIC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDIwIC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NgogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hdXRob3JpdHksIGFkZHJlc3MpLAogICAgYnl0ZWMgMTMgLy8gMHg1MjM3MzAyMwogICAgZGlnIDQKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc3CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmludGVyZXN0X29yYWNsZSwgYWRkcmVzcyksCiAgICBieXRlYyAzMiAvLyAweDUyMzgzMDIzCiAgICB1bmNvdmVyIDUKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDMxIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDYKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNQogICAgc2V0Yml0CiAgICBwdXNoaW50IDIKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBwdXNoaW50IDMKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoaW50IDQKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9yb2xlX2NvbmZpZzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTQKICAgIC8vIHJvbGUgPSByb2xlX2lkLmFzX3VpbnQ2NCgpCiAgICBidG9pCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk1CiAgICAvLyBzZWxmLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlKQogICAgZHVwCiAgICBjYWxsc3ViIF9hc3NlcnRfdmFsaWRfcm9sZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5NwogICAgLy8gY2FzZSBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpOgogICAgcHVzaGludHMgMjAgNDAgNTAgNjAgNzAgODAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTYtMzI3CiAgICAvLyBtYXRjaCByb2xlOgogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIC8vICAgICAgICAgcmV0dXJuIHR5cC5Sb2xlQ29uZmlnKAogICAgLy8gICAgICAgICAgICAgcm9sZV92YWxpZGl0eV9zdGFydD1VSW50NjQoMCksIHJvbGVfdmFsaWRpdHlfZW5kPVVJbnQ2NCgwKQogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5hY2NvdW50X21hbmFnZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYucHJpbWFyeV9kZWFsZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYudHJ1c3RlZVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5hdXRob3JpdHksIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyAgICAgICAgICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgXzoKICAgIC8vICAgICAgICAgb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICB1bmNvdmVyIDYKICAgIG1hdGNoIHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzBAMiByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8xQDMgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMkA0IHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzNANSByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV80QDYgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNUA3CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI3CiAgICAvLyBvcC5lcnIoZXJyLklOVkFMSURfUk9MRSkKICAgIGVyciAvLyBJbnZhbGlkIHJvbGUgaWRlbnRpZmllcgoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMwogICAgLy8gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgMzIgLy8gMHg1MjM4MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMi0zMjQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTgKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDEzIC8vIDB4NTIzNzMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTctMzE5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hdXRob3JpdHksIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMAogICAgLy8gcmV0dXJuIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfM0A1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMxMwogICAgLy8gc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDIwIC8vIDB4NTIzNjMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTItMzE0CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTUKICAgIC8vIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8yQDQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzA4CiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDIxIC8vIDB4NTIzNTMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEwCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDkKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDE0IC8vIDB4NTIzNDMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDItMzA0CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X21hbmFnZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwNQogICAgLy8gcmV0dXJuIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMEAyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5OC0zMDAKICAgIC8vIHJldHVybiB0eXAuUm9sZUNvbmZpZygKICAgIC8vICAgICByb2xlX3ZhbGlkaXR5X3N0YXJ0PVVJbnQ2NCgwKSwgcm9sZV92YWxpZGl0eV9lbmQ9VUludDY0KDApCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5jb3VudF9kdWVfY291cG9ucygpIC0+IHVpbnQ2NDoKY291bnRfZHVlX2NvdXBvbnM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTEKICAgIC8vIGRlZiBjb3VudF9kdWVfY291cG9ucyhzZWxmKSAtPiBVSW50NjQ6CiAgICBwcm90byAwIDEKICAgIHB1c2hieXRlcyAiIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTEyCiAgICAvLyBjdXJyZW50X3RzID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTEzCiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYuZHVlX2NvdXBvbnNfd2F0ZXJtYXJrCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImR1ZV9jb3Vwb25zX3dhdGVybWFyayIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdWVfY291cG9uc193YXRlcm1hcmsgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTQKICAgIC8vIGlmIGN1cnJlbnRfdHMgPj0gc2VsZi5tYXR1cml0eV9kYXRlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0dXJpdHlfZGF0ZSBleGlzdHMKICAgID49CiAgICBieiBjb3VudF9kdWVfY291cG9uc19lbHNlX2JvZHlAMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTE1CiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYudG90YWxfY291cG9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZnJhbWVfYnVyeSAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jb3Vwb25zIGV4aXN0cwoKY291bnRfZHVlX2NvdXBvbnNfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTI5CiAgICAvLyBzZWxmLmR1ZV9jb3Vwb25zX3dhdGVybWFyayA9IGR1ZV9jb3Vwb25zCiAgICBieXRlYyAyOSAvLyAiZHVlX2NvdXBvbnNfd2F0ZXJtYXJrIgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzMAogICAgLy8gcmV0dXJuIGR1ZV9jb3Vwb25zCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY291bnRfZHVlX2NvdXBvbnNfZWxzZV9ib2R5QDI6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTYKICAgIC8vIGVsaWYgY3VycmVudF90cyA+IHNlbGYuaXNzdWFuY2VfZGF0ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJpc3N1YW5jZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlzc3VhbmNlX2RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogY291bnRfZHVlX2NvdXBvbnNfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTgKICAgIC8vIFVJbnQ2NChmaXhlZF9jZmcuRklSU1RfQ09VUE9OX0RBVEVfSURYKSArIHNlbGYuZHVlX2NvdXBvbnNfd2F0ZXJtYXJrCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImR1ZV9jb3Vwb25zX3dhdGVybWFyayIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdWVfY291cG9uc193YXRlcm1hcmsgZXhpc3RzCiAgICBwdXNoaW50IDMKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjAKICAgIC8vIGNvdXBvbl9kdWVfZGF0ZSA9IHNlbGYudGltZV9ldmVudHMudmFsdWVbY291cG9uX2lkeF0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQoKY291bnRfZHVlX2NvdXBvbnNfd2hpbGVfdG9wQDQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjEKICAgIC8vIHdoaWxlIGN1cnJlbnRfdHMgPj0gY291cG9uX2R1ZV9kYXRlOgogICAgZnJhbWVfZGlnIDEKICAgIDw9CiAgICBieiBjb3VudF9kdWVfY291cG9uc19hZnRlcl93aGlsZUA2CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjMKICAgIC8vIHJlcXVpcmVkX2J1ZGdldD1VSW50NjQoZml4ZWRfY2ZnLk9QX1VQX0NPVVBPTl9EVUVfQ09VTlRJTkcpLAogICAgaW50YyA0IC8vIDI1NQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTI0CiAgICAvLyBmZWVfc291cmNlPU9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTIyLTEyNQogICAgLy8gZW5zdXJlX2J1ZGdldCgKICAgIC8vICAgICByZXF1aXJlZF9idWRnZXQ9VUludDY0KGZpeGVkX2NmZy5PUF9VUF9DT1VQT05fRFVFX0NPVU5USU5HKSwKICAgIC8vICAgICBmZWVfc291cmNlPU9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQsCiAgICAvLyApCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEyNgogICAgLy8gY291cG9uX2lkeCArPSAxCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjcKICAgIC8vIGNvdXBvbl9kdWVfZGF0ZSA9IHNlbGYudGltZV9ldmVudHMudmFsdWVbY291cG9uX2lkeF0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgYiBjb3VudF9kdWVfY291cG9uc193aGlsZV90b3BANAoKY291bnRfZHVlX2NvdXBvbnNfYWZ0ZXJfd2hpbGVANjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEyOAogICAgLy8gZHVlX2NvdXBvbnMgPSBjb3Vwb25faWR4IC0gZml4ZWRfY2ZnLkZJUlNUX0NPVVBPTl9EQVRFX0lEWAogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgMwogICAgLQogICAgZnJhbWVfYnVyeSAyCiAgICBiIGNvdW50X2R1ZV9jb3Vwb25zX2FmdGVyX2lmX2Vsc2VAOAoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5jb3Vwb25fZHVlX2RhdGUoY291cG9uOiB1aW50NjQpIC0+IHVpbnQ2NDoKY291cG9uX2R1ZV9kYXRlOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTMyCiAgICAvLyBkZWYgY291cG9uX2R1ZV9kYXRlKHNlbGYsIGNvdXBvbjogVUludDY0KSAtPiBVSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYudGltZV9ldmVudHMudmFsdWVbZml4ZWRfY2ZnLkZJUlNUX0NPVVBPTl9EQVRFX0lEWCArIGNvdXBvbiAtIDFdCiAgICBwdXNoaW50IDMKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLm5leHRfY291cG9uX2R1ZV9kYXRlKGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHVpbnQ2NDoKbmV4dF9jb3Vwb25fZHVlX2RhdGU6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDEKICAgIC8vIGRlZiBuZXh0X2NvdXBvbl9kdWVfZGF0ZShzZWxmLCBkdWVfY291cG9uczogVUludDY0KSAtPiBVSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE0MgogICAgLy8gY291cG9uX2R1ZV9kYXRlID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDMKICAgIC8vIGlmIGR1ZV9jb3Vwb25zIDwgc2VsZi50b3RhbF9jb3Vwb25zOgogICAgZHVwCiAgICBieXRlYyA3IC8vICJ0b3RhbF9jb3Vwb25zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NvdXBvbnMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID4KICAgIGJ6IG5leHRfY291cG9uX2R1ZV9kYXRlX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTQ0CiAgICAvLyBjb3Vwb25fZHVlX2RhdGUgPSBzZWxmLmNvdXBvbl9kdWVfZGF0ZShkdWVfY291cG9ucyArIDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBjYWxsc3ViIGNvdXBvbl9kdWVfZGF0ZQogICAgZnJhbWVfYnVyeSAwCgpuZXh0X2NvdXBvbl9kdWVfZGF0ZV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDUKICAgIC8vIHJldHVybiBjb3Vwb25fZHVlX2RhdGUKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5GaXhlZENvdXBvbkNhc2hmbG93TWl4aW4uY291cG9uX2ludGVyZXN0X2Ftb3VudChwcmluY2lwYWxfYW1vdW50OiB1aW50NjQsIGNvdXBvbjogdWludDY0KSAtPiB1aW50NjQ6CmNvdXBvbl9pbnRlcmVzdF9hbW91bnQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDctMTQ5CiAgICAvLyBkZWYgY291cG9uX2ludGVyZXN0X2Ftb3VudCgKICAgIC8vICAgICBzZWxmLCBwcmluY2lwYWxfYW1vdW50OiBVSW50NjQsIGNvdXBvbjogVUludDY0CiAgICAvLyApIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTUwCiAgICAvLyBjb3Vwb25fcmF0ZV9icHMgPSBzZWxmLmNvdXBvbl9yYXRlcy52YWx1ZVtjb3Vwb24gLSAxXS5hc191aW50NjQoKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgcHVzaGludCAyCiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDE5IC8vIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MwogICAgc3dhcAogICAgcHVzaGludCAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTUxCiAgICAvLyByZXR1cm4gcHJpbmNpcGFsX2Ftb3VudCAqIGNvdXBvbl9yYXRlX2JwcyAvLyBjc3QuQlBTCiAgICBmcmFtZV9kaWcgLTIKICAgICoKICAgIHB1c2hpbnQgMTAwMDAKICAgIC8KICAgIHJldHN1YgoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5kYXlfY291bnRfZmFjdG9yKGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IGJ5dGVzOgpkYXlfY291bnRfZmFjdG9yOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTUzCiAgICAvLyBkZWYgZGF5X2NvdW50X2ZhY3RvcihzZWxmLCBkdWVfY291cG9uczogVUludDY0KSAtPiB0eXAuRGF5Q291bnRGYWN0b3I6CiAgICBwcm90byAxIDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNTQtMTU1CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgQWN0dWFsL0FjdHVhbCBhbmQgQ29udGludW91cyBkYXktY291bnQgY29udmVudGlvbnMKICAgIC8vIGlmIG5vdCBkdWVfY291cG9uczoKICAgIGZyYW1lX2RpZyAtMQogICAgYm56IGRheV9jb3VudF9mYWN0b3JfZWxzZV9ib2R5QDIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE1NgogICAgLy8gYWNjcnVpbmdfc3RhcnRfdGltZSA9IHNlbGYuaXNzdWFuY2VfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKCmRheV9jb3VudF9mYWN0b3JfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTU5CiAgICAvLyBjb3Vwb25fYWNjcnVlZF9wZXJpb2QgPSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCAtIGFjY3J1aW5nX3N0YXJ0X3RpbWUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE2MAogICAgLy8gY291cG9uX3BlcmlvZCA9IHNlbGYubmV4dF9jb3Vwb25fZHVlX2RhdGUoZHVlX2NvdXBvbnMpIC0gYWNjcnVpbmdfc3RhcnRfdGltZQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG5leHRfY291cG9uX2R1ZV9kYXRlCiAgICBzd2FwCiAgICAtCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNjEKICAgIC8vIGlmIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gPT0gVUludDY0KGNzdC5EQ0NfQV9BKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBibnogZGF5X2NvdW50X2ZhY3Rvcl9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE2MgogICAgLy8gcmV0dXJuIHRpbWVfcGVyaW9kIC8vIFVJbnQ2NChjc3QuREFZXzJfU0VDKQogICAgZnJhbWVfZGlnIDAKICAgIGludGMgNiAvLyA4NjQwMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjIDYgLy8gODY0MDAKICAgIC8KCmRheV9jb3VudF9mYWN0b3JfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTY0LTE2NwogICAgLy8gcmV0dXJuIHR5cC5EYXlDb3VudEZhY3RvcigKICAgIC8vICAgICBudW1lcmF0b3I9Y291cG9uX2FjY3J1ZWRfcGVyaW9kLAogICAgLy8gICAgIGRlbm9taW5hdG9yPWNvdXBvbl9wZXJpb2QsCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZGF5X2NvdW50X2ZhY3Rvcl9lbHNlX2JvZHlAMjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzNgogICAgLy8gY291cG9uX2R1ZV9kYXRlID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzNwogICAgLy8gaWYgZHVlX2NvdXBvbnMgPj0gVUludDY0KDEpOgogICAgZnJhbWVfZGlnIC0xCiAgICBieiBkYXlfY291bnRfZmFjdG9yX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTM4CiAgICAvLyBjb3Vwb25fZHVlX2RhdGUgPSBzZWxmLmNvdXBvbl9kdWVfZGF0ZShkdWVfY291cG9ucykKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBjb3Vwb25fZHVlX2RhdGUKICAgIGZyYW1lX2J1cnkgMQoKZGF5X2NvdW50X2ZhY3Rvcl9hZnRlcl9pZl9lbHNlQDg6CiAgICBmcmFtZV9kaWcgMQogICAgYiBkYXlfY291bnRfZmFjdG9yX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5pc19hY2NydWluZ19pbnRlcmVzdChkdWVfY291cG9uczogdWludDY0KSAtPiB1aW50NjQ6CmlzX2FjY3J1aW5nX2ludGVyZXN0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTY5CiAgICAvLyBkZWYgaXNfYWNjcnVpbmdfaW50ZXJlc3Qoc2VsZiwgZHVlX2NvdXBvbnM6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTcxCiAgICAvLyBzZWxmLmlzc3VhbmNlX2RhdGUgIT0gMAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MS0xNzMKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGJ6IGlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTcyCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgPj0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MS0xNzMKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGJ6IGlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTczCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJ0b3RhbF9jb3Vwb25zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NvdXBvbnMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID4KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MS0xNzMKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGJ6IGlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MC0xNzQKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgc2VsZi5pc3N1YW5jZV9kYXRlICE9IDAKICAgIC8vICAgICBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyAgICAgYW5kIGR1ZV9jb3Vwb25zIDwgc2VsZi50b3RhbF9jb3Vwb25zCiAgICAvLyApCiAgICByZXRzdWIKCmlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNzAtMTc0CiAgICAvLyByZXR1cm4gKAogICAgLy8gICAgIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyAgICAgYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYuaXNzdWFuY2VfZGF0ZQogICAgLy8gICAgIGFuZCBkdWVfY291cG9ucyA8IHNlbGYudG90YWxfY291cG9ucwogICAgLy8gKQogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLmFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMsIHVuaXRzOiB1aW50NjQsIGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHVpbnQ2NDoKYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNzYtMTc4CiAgICAvLyBkZWYgYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoCiAgICAvLyAgICAgc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBBY2NvdW50LCB1bml0czogVUludDY0LCBkdWVfY291cG9uczogVUludDY0CiAgICAvLyApIC0+IFVJbnQ2NDoKICAgIHByb3RvIDMgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTc5LTE4MAogICAgLy8gIyBUaGUgZm9sbG93aW5nIGFzc2VydCBzYWZlZ3VhcmRzIHRoZSBzdWJyb3V0aW5lIGZyb20gZm9yYmlkZGVuIGludm9jYXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50KGhvbGRpbmdfYWRkcmVzcywgZHVlX2NvdXBvbnMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTgxCiAgICAvLyBkYXlfY291bnRfZmFjdG9yID0gc2VsZi5kYXlfY291bnRfZmFjdG9yKGR1ZV9jb3Vwb25zKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGRheV9jb3VudF9mYWN0b3IKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE4MgogICAgLy8gY291cG9uX2FjY3J1ZWRfcGVyaW9kID0gZGF5X2NvdW50X2ZhY3Rvci5udW1lcmF0b3IKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxODMKICAgIC8vIGNvdXBvbl9wZXJpb2QgPSBkYXlfY291bnRfZmFjdG9yLmRlbm9taW5hdG9yCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE4NAogICAgLy8gbmV4dF9jb3Vwb25fcmF0ZV9icHMgPSBzZWxmLmNvdXBvbl9yYXRlcy52YWx1ZVtkdWVfY291cG9uc10uYXNfdWludDY0KCkKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyCiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDE5IC8vIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MwogICAgc3dhcAogICAgcHVzaGludCAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg3CiAgICAvLyBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGFjY291bnRfdW5pdHNfdmFsdWUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE4Ny0xODgKICAgIC8vIHNlbGYuYWNjb3VudF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MsIHVuaXRzKQogICAgLy8gKiBuZXh0X2NvdXBvbl9yYXRlX2JwcwogICAgKgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg3LTE4OQogICAgLy8gc2VsZi5hY2NvdW50X3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcywgdW5pdHMpCiAgICAvLyAqIG5leHRfY291cG9uX3JhdGVfYnBzCiAgICAvLyAqIGNvdXBvbl9hY2NydWVkX3BlcmlvZAogICAgdW5jb3ZlciAyCiAgICAqCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxOTAKICAgIC8vIC8vIChjc3QuQlBTICogY291cG9uX3BlcmlvZCkKICAgIHB1c2hpbnQgMTAwMDAKICAgIHVuY292ZXIgMgogICAgKgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg3LTE5MAogICAgLy8gc2VsZi5hY2NvdW50X3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcywgdW5pdHMpCiAgICAvLyAqIG5leHRfY291cG9uX3JhdGVfYnBzCiAgICAvLyAqIGNvdXBvbl9hY2NydWVkX3BlcmlvZAogICAgLy8gLy8gKGNzdC5CUFMgKiBjb3Vwb25fcGVyaW9kKQogICAgLwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg1LTE5MQogICAgLy8gIyBkdWVfY291cG9ucyBpcyBlcXVhbCB0byB0aGUgMC1iYXNlIGlkeCBvZiBuZXh0IGNvdXBvbgogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIC8vICAgICAqIG5leHRfY291cG9uX3JhdGVfYnBzCiAgICAvLyAgICAgKiBjb3Vwb25fYWNjcnVlZF9wZXJpb2QKICAgIC8vICAgICAvLyAoY3N0LkJQUyAqIGNvdXBvbl9wZXJpb2QpCiAgICAvLyApICAjIGRpdi1ieS16ZXJvOiBjb3Vwb25fcGVyaW9kICE9IDAgZHVlIHRvIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQgY2hlY2tzCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5Db3Vwb25DYXNoZmxvd01peGluLmFsbF9kdWVfY291cG9uc19wYWlkKGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHVpbnQ2NDoKYWxsX2R1ZV9jb3Vwb25zX3BhaWQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyNgogICAgLy8gZGVmIGFsbF9kdWVfY291cG9uc19wYWlkKHNlbGYsIGR1ZV9jb3Vwb25zOiBVSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI3CiAgICAvLyByZXR1cm4gc2VsZi5wYWlkX2NvdXBvbl91bml0cyA+PSBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzICogZHVlX2NvdXBvbnMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAicGFpZF9jb3Vwb25fdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgID49CiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5Db3Vwb25DYXNoZmxvd01peGluLmFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMsIGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHZvaWQ6CmFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjktMzEKICAgIC8vIGRlZiBhc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudCgKICAgIC8vICAgICBzZWxmLCBob2xkaW5nX2FkZHJlc3M6IEFjY291bnQsIGR1ZV9jb3Vwb25zOiBVSW50NjQKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzMKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyA9PSBkdWVfY291cG9ucwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMi0zNAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYWlkX2NvdXBvbnMgPT0gZHVlX2NvdXBvbnMKICAgIC8vICksIGVyci5QRU5ESU5HX0NPVVBPTl9QQVlNRU5UCiAgICBhc3NlcnQgLy8gUGVuZGluZyBkdWUgY291cG9uIHBheW1lbnQKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMucGF5bWVudF9hZ2VudC5jb21tb24uUGF5bWVudEFnZW50Q29tbW9uTWl4aW4uYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbihob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB2b2lkOgphc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxMgogICAgLy8gZGVmIGFzc2VydF9wYXltZW50X2F1dGhvcml6YXRpb24oc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjEzCiAgICAvLyBpZiBzZWxmLm9wX2RhZW1vbi52YWx1ZSAhPSBHbG9iYWwuemVyb19hZGRyZXNzOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vIDB4NTIzMjM1MjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcF9kYWVtb24gZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNQogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vIDB4NTIzMjM1MjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcF9kYWVtb24gZXhpc3RzCiAgICA9PQogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNS0xNwogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzCiAgICBibnogYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9ib29sX3RydWVANAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNgogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MTUtMTcKICAgIC8vIFR4bi5zZW5kZXIgPT0gc2VsZi5vcF9kYWVtb24udmFsdWUKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gaG9sZGluZ19hZGRyZXNzCiAgICAvLyBvciBUeG4uc2VuZGVyID09IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcwogICAgYm56IGFzc2VydF9wYXltZW50X2F1dGhvcml6YXRpb25fYm9vbF90cnVlQDQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MTcKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAwIDMyCiAgICA9PQogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNS0xNwogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzCiAgICBieiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uX2Jvb2xfZmFsc2VANQoKYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9ib29sX3RydWVANDoKICAgIGludGNfMSAvLyAxCgphc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uX2Jvb2xfbWVyZ2VANjoKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MTQtMTgKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgLy8gICAgIG9yIFR4bi5zZW5kZXIgPT0gaG9sZGluZ19hZGRyZXNzCiAgICAvLyAgICAgb3IgVHhuLnNlbmRlciA9PSBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MKICAgIC8vICksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAoKYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9hZnRlcl9pZl9lbHNlQDc6CiAgICByZXRzdWIKCmFzc2VydF9wYXltZW50X2F1dGhvcml6YXRpb25fYm9vbF9mYWxzZUA1OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9ib29sX21lcmdlQDYKCgovLyBtb2R1bGVzLnBheW1lbnRfYWdlbnQuY29tbW9uLlBheW1lbnRBZ2VudENvbW1vbk1peGluLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmlzX3BheW1lbnRfZXhlY3V0YWJsZToKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjAKICAgIC8vIGRlZiBpc19wYXltZW50X2V4ZWN1dGFibGUoc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjIyCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjMKICAgIC8vIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gInNldHRsZW1lbnRfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCBleGlzdHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjItMjQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcy5pc19vcHRlZF9pbigKICAgIC8vICAgICBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQKICAgIC8vICkKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjIyLTI1CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkCiAgICAvLyApCiAgICAvLyBhbmQgbm90IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnN1c3BlbmRlZAogICAgYnogaXNfcGF5bWVudF9leGVjdXRhYmxlX2Jvb2xfZmFsc2VAMwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToyNQogICAgLy8gYW5kIG5vdCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0NDgKICAgIGdldGJpdAogICAgYm56IGlzX3BheW1lbnRfZXhlY3V0YWJsZV9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCgppc19wYXltZW50X2V4ZWN1dGFibGVfYm9vbF9tZXJnZUA0OgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToyMS0yNgogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgICAgIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZAogICAgLy8gICAgICkKICAgIC8vICAgICBhbmQgbm90IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnN1c3BlbmRlZAogICAgLy8gKQogICAgc3dhcAogICAgcmV0c3ViCgppc19wYXltZW50X2V4ZWN1dGFibGVfYm9vbF9mYWxzZUAzOgogICAgaW50Y18wIC8vIDAKICAgIGIgaXNfcGF5bWVudF9leGVjdXRhYmxlX2Jvb2xfbWVyZ2VANAoKCi8vIG1vZHVsZXMucGF5bWVudF9hZ2VudC5jb21tb24uUGF5bWVudEFnZW50Q29tbW9uTWl4aW4uYXNzZXJ0X2Vub3VnaF9mdW5kcyhwYXltZW50X2Ftb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NlcnRfZW5vdWdoX2Z1bmRzOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToyOAogICAgLy8gZGVmIGFzc2VydF9lbm91Z2hfZnVuZHMoc2VsZiwgcGF5bWVudF9hbW91bnQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weTozMAogICAgLy8gc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLmJhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcykKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjMwLTMxCiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQuYmFsYW5jZShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzKQogICAgLy8gPj0gcGF5bWVudF9hbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgPj0KICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjktMzIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLmJhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcykKICAgIC8vICAgICA+PSBwYXltZW50X2Ftb3VudAogICAgLy8gKSwgZXJyLk5PVF9FTk9VR0hfRlVORFMKICAgIGFzc2VydCAvLyBOb3QgZW5vdWdoIGZ1bmRzIGZvciB0aGUgcGF5bWVudAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5wYXltZW50X2FnZW50LmNvbW1vbi5QYXltZW50QWdlbnRDb21tb25NaXhpbi5wYXkocmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKcGF5OgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weTozNAogICAgLy8gZGVmIHBheShzZWxmLCByZWNlaXZlcjogQWNjb3VudCwgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MzUtNDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjM5CiAgICAvLyBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weTozNgogICAgLy8geGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MzUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MzUtNDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQodGltZV9ldmVudHM6IGJ5dGVzKSAtPiBieXRlczoKYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZDoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEwNwogICAgLy8gZGVmIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQoc2VsZiwgdGltZV9ldmVudHM6IHR5cC5UaW1lRXZlbnRzKSAtPiBOb25lOgogICAgcHJvdG8gMSAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTA5CiAgICAvLyB0aW1lX2V2ZW50c1tjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWF0KICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTEwCiAgICAvLyA+IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMDktMTEwCiAgICAvLyB0aW1lX2V2ZW50c1tjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWF0KICAgIC8vID4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgID4KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEwOC0xMTEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgdGltZV9ldmVudHNbY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX09QRU5JTkdfREFURV9JRFhdCiAgICAvLyAgICAgPiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gKSwgZXJyLklOVkFMSURfVElNRQogICAgYXNzZXJ0IC8vIFRpbWUgZXZlbnRzIG11c3QgYmUgc2V0IGluIHRoZSBmdXR1cmUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjExMgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodGltZV9ldmVudHMubGVuZ3RoIC0gMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaW50Y18wIC8vIDAKCmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfZm9yX2hlYWRlckAxOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTEyCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0aW1lX2V2ZW50cy5sZW5ndGggLSAxKToKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9hZnRlcl9mb3JANgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTE0CiAgICAvLyByZXF1aXJlZF9idWRnZXQ9VUludDY0KGNmZy5PUF9VUF9USU1FX0VWRU5UX1NPUlRJTkcpLAogICAgcHVzaGludCA2NQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTE1CiAgICAvLyBmZWVfc291cmNlPU9wVXBGZWVTb3VyY2UuQXBwQWNjb3VudCwKICAgIGludGNfMSAvLyAxCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMTMtMTE2CiAgICAvLyBlbnN1cmVfYnVkZ2V0KAogICAgLy8gICAgIHJlcXVpcmVkX2J1ZGdldD1VSW50NjQoY2ZnLk9QX1VQX1RJTUVfRVZFTlRfU09SVElORyksCiAgICAvLyAgICAgZmVlX3NvdXJjZT1PcFVwRmVlU291cmNlLkFwcEFjY291bnQsCiAgICAvLyApCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjExNwogICAgLy8gdGltZV9pID0gdGltZV9ldmVudHNbaWR4XQogICAgZnJhbWVfZGlnIDUKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTE4CiAgICAvLyB0aW1lX2YgPSB0aW1lX2V2ZW50c1tpZHggKyAxXQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMTkKICAgIC8vIGFzc2VydCB0aW1lX2YgPiB0aW1lX2ksIGVyci5JTlZBTElEX1NPUlRJTkcKICAgIDwKICAgIGFzc2VydCAvLyBUaW1lIGV2ZW50cyBtdXN0IGJlIHNvcnRlZCBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyMAogICAgLy8gaWYgc2VsZi5kYXlfY291bnRfY29udmVudGlvbiAhPSBVSW50NjQoY3N0LkRDQ19DT05UKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBpbnRjIDQgLy8gMjU1CiAgICAhPQogICAgYnogYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyMS0xMjIKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aW1lIHBlcmlvZHMgZXhwcmVzc2VkIGluIGRheXMgZm9yIHJlZ3VsYXIgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgKHRpbWVfZiAtIHRpbWVfaSkgJSBVSW50NjQoCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDEKICAgIC0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyMS0xMjQKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aW1lIHBlcmlvZHMgZXhwcmVzc2VkIGluIGRheXMgZm9yIHJlZ3VsYXIgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgKHRpbWVfZiAtIHRpbWVfaSkgJSBVSW50NjQoCiAgICAvLyAgICAgY3N0LkRBWV8yX1NFQwogICAgLy8gKSA9PSAwLCBlcnIuSU5WQUxJRF9USU1FX1BFUklPRAogICAgaW50YyA2IC8vIDg2NDAwCiAgICAlCiAgICAhCiAgICBhc3NlcnQgLy8gVGltZSBwZXJpb2RzIGluIEFjdHVhbC9BY3R1YWwgZGF5IGNvdW50IGNvbnZlbnRpb24gbXVzdCBiZSBtdWx0aXBsZXMgb2YgYSBkYXkgKGluIHNlY29uZHMpCgphc3NlcnRfdGltZV9ldmVudHNfc29ydGVkX2FmdGVyX2lmX2Vsc2VANDoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9mb3JfaGVhZGVyQDEKCmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfYWZ0ZXJfZm9yQDY6CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYXNzZXJ0X2lzX25vdF9hY2NvdW50X3N1c3BlbmRlZChob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMzCiAgICAvLyBkZWYgYXNzZXJ0X2lzX25vdF9hY2NvdW50X3N1c3BlbmRlZChzZWxmLCBob2xkaW5nX2FkZHJlc3M6IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozNAogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQsIGVyci5TVVNQRU5ERUQKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ0OAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gU3VzcGVuZGVkIG9wZXJhdGlvbnMKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzOiBieXRlcywgdW5pdHM6IHVpbnQ2NCkgLT4gdWludDY0OgphY2NvdW50X3VuaXRzX3ZhbHVlOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjM2CiAgICAvLyBkZWYgYWNjb3VudF91bml0c192YWx1ZShzZWxmLCBob2xkaW5nX2FkZHJlc3M6IEFjY291bnQsIHVuaXRzOiBVSW50NjQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjM3CiAgICAvLyByZXR1cm4gdW5pdHMgKiBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0MAogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmFjY291bnRfdG90YWxfdW5pdHNfdmFsdWU6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzkKICAgIC8vIGRlZiBhY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKHNlbGYsIGhvbGRpbmdfYWRkcmVzczogQWNjb3VudCkgLT4gVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDEKICAgIC8vIGhvbGRpbmdfYWRkcmVzcywgc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDAtNDIKICAgIC8vIHJldHVybiBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoCiAgICAvLyAgICAgaG9sZGluZ19hZGRyZXNzLCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cwogICAgLy8gKQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBjYWxsc3ViIGFjY291bnRfdW5pdHNfdmFsdWUKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0cygpIC0+IHZvaWQ6CmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0czoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo0OAogICAgLy8gaWYgc2VsZi5jaXJjdWxhdGluZ191bml0cyA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBibnogZW5kX2lmX25vX2NpcmN1bGF0aW5nX3VuaXRzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjQ5CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbm0uU1RBVFVTX0VOREVEKQogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgaW50YyA1IC8vIDIwMAogICAgYXBwX2dsb2JhbF9wdXQKCmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0c19hZnRlcl9pZl9lbHNlQDI6CiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fcm9sZV9pc19hY3RpdmUocm9sZV9tYXA6IGJ5dGVzLCByb2xlX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6Cl9yb2xlX2lzX2FjdGl2ZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gZGVmIF9yb2xlX2lzX2FjdGl2ZShzZWxmLCByb2xlX21hcDogdHlwLlJiYWNSb2xlLCByb2xlX2FkZHJlc3M6IEFjY291bnQpIC0+IGJvb2w6CiAgICBwcm90byAyIDEKICAgIHB1c2hieXRlcyAiIgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU4LTYyCiAgICAvLyByZXR1cm4gc2VsZi5faGFzX3JvbGUocm9sZV9tYXAsIHJvbGVfYWRkcmVzcykgYW5kICgKICAgIC8vICAgICByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICkKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveE1hcCBlbnRyeSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYwCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MAogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgPD0KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveE1hcCBlbnRyeSBleGlzdHMKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYwLTYxCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjEKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU4LTYyCiAgICAvLyByZXR1cm4gc2VsZi5faGFzX3JvbGUocm9sZV9tYXAsIHJvbGVfYWRkcmVzcykgYW5kICgKICAgIC8vICAgICByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgX3JvbGVfaXNfYWN0aXZlX2Jvb2xfbWVyZ2VANQoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKSAtPiB2b2lkOgphc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY1CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfYXJyYW5nZXIoVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1MgogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyA9PSBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICA9PQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY1CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfYXJyYW5nZXIoVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZDoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4MwogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFzc2V0X2RlZmF1bHRlZCwgZXJyLkRFRkFVTFRFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfZGVmYXVsdGVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIERlZmF1bHRlZAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQoKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZDoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4NgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFzc2V0X3N1c3BlbmRlZCwgZXJyLlNVU1BFTkRFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIzIC8vICJhc3NldF9zdXNwZW5kZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfc3VzcGVuZGVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFN1c3BlbmRlZCBvcGVyYXRpb25zCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZDogdWludDY0KSAtPiB2b2lkOgpfYXNzZXJ0X3ZhbGlkX3JvbGU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODgKICAgIC8vIGRlZiBfYXNzZXJ0X3ZhbGlkX3JvbGUoc2VsZiwgcm9sZV9pZDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTAKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICBwdXNoaW50IDIwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkxCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTIKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkzCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk0CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTUKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgcHVzaGludCA4MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9mYWxzZUA3CgpfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDY6CiAgICBpbnRjXzEgLy8gMQoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfbWVyZ2VAODoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBhc3NlcnQgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKICAgIHJldHN1YgoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMCAvLyAwCiAgICBiIF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX21lcmdlQDgK",
- "clear": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="
- },
- "byteCode": {
- "approval": "DCAHAAEgCP8ByAGAowUmJgQVH3x1BFIzMCMGc3RhdHVzEWNpcmN1bGF0aW5nX3VuaXRzDWlzc3VhbmNlX2RhdGUNbWF0dXJpdHlfZGF0ZQp1bml0X3ZhbHVlDXRvdGFsX2NvdXBvbnMEUjIwIxNzZXR0bGVtZW50X2Fzc2V0X2lkIXByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZR1zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQp0aW1lRXZlbnRzBFI3MCMEUjQwIwt0b3RhbF91bml0cxVkZW5vbWluYXRpb25fYXNzZXRfaWQUZGF5X2NvdW50X2NvbnZlbnRpb24dc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGULY291cG9uUmF0ZXMEUjYwIwRSNTAjBFIyNSMPYXNzZXRfc3VzcGVuZGVkD2Fzc2V0X2RlZmF1bHRlZAhtZXRhZGF0YRJwcmluY2lwYWxfZGlzY291bnQhcHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlEXBhaWRfY291cG9uX3VuaXRzFWR1ZV9jb3Vwb25zX3dhdGVybWFyawIAAAEABFI4MCMNaW50ZXJlc3RfcmF0ZQMGgQECADsEjCmQTgIAEjEYQAB1JwgyA2cnFjIDZycXImcnGCJnJw8iZysiZycGImcqImcnECJnJwkiZycGImcnESJnJxmAAGcnGiJnJyEiZycHImcnCiJnJxsiZycEImcnEiJnJwsiZycFImcnHCJnJx0iZzE1gQMSRDE0gRQSRDE3FEQxNhREgAQl26lbNhoAjgEA4zEZFEQxGEEAzIIcBIlHQTQERDY9SQRTvvBFBGfbTyAE9qlsjQSM8UtRBJx2tqMET9ajzAQdb8JVBCXpmX8EbIXj7gRALbpHBPrSFz4ECO/qNQTkpatUBNwGOzUEFPwQ7wRMET7VBHSnKX8EEFwYTgSC9xstBO8E9dMEA7gzKQQ9voC9BN9U6CwEAQyCmQR0BqzSBMPkspc2GgCOHABWAa0CUgJsAsMDDgQUBQwGsAcvB04H5AizCM0I6AjzCSwJdgmzCeUJ/QoVCi0K6Qt/C54LqQvzAIAEPw78bDYaAI4BBk4AMRmBBBIxGBBEQgZwigIAi/6BCgiLADIMDUEAKrGBBrIQgQWyGScish4nIrIfi/+NAgALAASzQv/bMgCyAUL/9SKyAUL/74mAADYaAUkVJRJEFzYaAkkVJRJEFzYaA0kVJRJEFzYaBEkVJRJEFzYaBUkVJRJEFzYaBkkVIxJENhoHSU4HFYECEkQ2GghJTgdJIllJTgiBAguBAghMFRJENhoJSU4HSSJZSU4IJQuBAghMFRJENhoKSSJZSU4IgRALgQIITBUSRIgOqiIqZUQUREsFcQtFAUQnEEsGZ0sETwYSRCcJSwVnsTIAMgoishKyFE8FshGBBLIQsgGzSwNLAhgURCcGSwJnTwNPAgonD0xnJxpPAmcXSUEAB0khBBJBAHgjRCcRSwFnSwYXRQgiJxplREAAA0sHRCchSwhnSwRJRCcHSwFnJxO8SCcTSwe/gQQISwMSREsDiA09Jwy8SCcMSwG/SVcCAEsBgQJbJwpMZ0sBgQpbJxtMZ0sBgRJbJwRMZ0wiWSMJJQtbJwVMZ0sBFEQqgWRnI0MiQv+FIoAARwQ2GgFJFSQSRDYaAkkVJRJEFyInCmVEQQCDMgciJwplRA9BAHgjRClLAlBJRQm9RQFESUEAY0sHvkQkW0sBD0EAVyNESwFJSwKIDSRFCCJFByJFBCJFBogKe0lFBkxLAYgL8ogLgkEAGksDSYgLLEsDSwNPA4gLlUUHSSJbRQQlW0UFSwIWSwUWUEsHFksHFlBMUChMULAjQyJC/6YiQv+FJx4iKmVEgWQSQQAHJxO+TEUCRChLAVCwI0OAADYaAUcCFSQSRClMUEm9RQFEIkcCKmVEgWQSQQAhSwK+RIEwW0lFBiInB2VEDEEAG0sDiAyOSwUjCIgKhkUCSwEWSwEWUChMULAjQ0sDiAxzRQFC/+mICcBHAogKSUxJiAslTCJMIkyICsFBAA5LBIgKbEkiW0UDJVtFASInB2VESwIWSwIWUEwWSwYWUEsFFlBMUCcfIksFVFAoTFCwI0M2GgFJFSQSRDYaAkkiWYECCEsBFRJEVwIATCIqZUSBZBJEiAxaiAxfKUsBUElOAkm9RQFESb5IJFtJTgNEiAk4TL5EgTBbTEsBDURJiAqYREsBiAvOTCMIiAnHTEmICqmICt1BAJpHAogLAEsDvkRXACBMiAsHSwJJvkSBMFsjCBaBMEy7IiccZURLAggnHExnMggyByInEGVESXEDRCIrZUQiJwZlRAtPBBaAAwgAN1BPBBZQSwQWTEsBUE8EFlBLAxUWVwYCTwRQTCcjUE8DFlAnHlAiFlCABAACSVBQTFAnJExQsDIHFlBLBEkVFlcGAkxQTCclUExQKExQsCNDIkUBQv9wNhoBSRUkEkQ2GgJJIlmBAghLARUSRFcCAEwiKmVEgWQSRIgLVIgLWSlLAVBJTgJJvUUBRL5IJFtEMgciJwVlRA9EiAgtiAmZREmICtBMSYgJsYgJ5UEAmkcCiAoISwK+RFcAIEyICg8iK2VESwJJTgK+RCRbCStMZyIWTCRLAruICqwyCDIHIicQZURJcQNEIitlRCInBmVEC08EFoADAwA3UE8EFlBLBRZMSwFQTwQWUEsDFRZXBgJPBFBMJyNQTwMWUCceUE8DUIAEAAJQUlBMUCckTFCwMgcWUEsDSRUWVwYCTFBMJyVQTFAoTFCwI0MiRQFC/3AiRwKAAEk2GgFJFSQSRDYaAkkVJBJENhoDSRUlEkQXIiplRIFkEkEBIyInEmVEMgcOQQEYIicLZURBAAsyByInC2VEDEEBBSNEMQBLA0lOAhJEiAosiAoxKUsBUElFCUm9RQFEKUsESU4CUElFCkm9RQFESwOICY1LAYgJiE8DTwITREsCSURPAr5ESSRbTwIPRFcoCEUJvkQkW0EAmEsGvkSBKFtLBr5EgShbEkEAgksGvkSBMFtLBr5EgTBbEkEAcCNESwZJvkSBKFtFBYgGqUsESU4CSwGICB9MSwNJTgNPAogHzEUHSwG+RCRbSg5ETAkWSwEkTwK7vkgkW0AAECIWSwdJTgKBKEsCu4EwTLtLBUm+RCRbSwJJTgIIFk8CJE8Cu0sEC0sFCBYoTFCwI0MiQv+NSwVJgShLCrtLB75EVzAIgTBMu0L/eCJC/vg2GgFJFSQSRDYaAkkVSwGBJllJgSgSREsCTEsCUiJZgSoIEkQnCE8CZycZTGcjQzYaAUkVSwGBJllJgSgSREsCTEsCUiJZgSoIEkSICNknGUxnI0MiNhoBRwIiWUklC4ECCE8CFRJEiAi9IiplRCEFEhREiAi7SUQjDUEABkmIB8tFASInBGVESwFJVwIARQSBAltMSwEORCcSTGciJwVlREEAGiInBWVESwEiWSMJJQtLA0xbTEsBD0QnC0xnIicSZUQiJwtlREwWTBZQKExQsCNDNhoBSRUjEkQiUycUMQCICA9EJxhMZzIHFihMULAjQ4AANhoBSRUkEkQ2GgJJFSUSRBciKmVEgWQSQQB1IicKZUQyB0lFBQ5BAGciJxtlREsDDUEAXCNEJxUxAIgHwkQpSwJQSb1FAUSIB/OIB/hLAUlEIitlREsBCCInD2VESwEPRCtLAWdLAr5EJFtPAggWSwIkTwK7IicGZUQWTwKBKE8CuyInD2VETAkWKExQsCNDIkL/oSIyByInBWVMSU4CTgNEDUEACElBAASBBEUCIicYZURBAASBA0UCIicQZUQiJwllRCIrZUQiJwZlREoLIicRZUQWSZMlDkRXBwEiJxplRBZJk4EQDkRXBgIiJyFlRBZJk4EQDkRXBgIiJw9lRCInCmVEIicbZUQiJwRlRCInBWVEIicXZURLDxZJkyUORFcHAU8OFk8OFlBPCxZQTwsWUE8KUE8JUE8IUE8HFlBPBxZQTwYWUE8FFlBPBBZQTwMWUCcfIk8EVFBMUChMULAjQyceIiplRIFkEkEABycMvkxFAkQoSwFQsCNDIicSZUQiJwtlREwWgAIAAkxQTBZQKExQsCNDIicZZUQoTFCwI0M2GgFJFSQSRDYaAkkVIxJEIlMnDTEAiAZDRClPAlBJvUUBREmBOCO6Ik8DVIE4TLsyBxYoTFCwI0M2GgFJFSQSRDYaAkkVJBJEJw4xAIgGDEQiKmVEIQUSFESIBj2IBkIpTwJQSb1FARREIhZPAksBUEsBUExQJx9QvzIHFihMULAjQzYaAUkVJBJEJw4xAIgFykSIBgQpTFBJvUUBREm+SCRbTLxIIitlREsBCStMZ4gFnTIHTBZMFlAoTFCwI0M2GgFJFSQSRDYaAkkVJBJEMQBLAhJEiAXBiAXGKU8CUEm9RQFEIk8CuzIHFihMULAjQzYaAUkVJBJEKUxQSb1FAUS+SChMULAjQzYaAUkVJBJEiAV7JwhMZzIHFihMULAjQzYaAUkVJBJEiAVjJxZMZzIHFihMULAjQzYaAUkVIxJENhoCSU4CFSQSRDYaA0kiWYECCEsBFRJEVwIATIgFL4gFNhdHAogFQIEUEkEADicISwNnMgcWKExQsCNDSYEoEkEAEScOSwNQSb1FARRESwK/Qv/fSYEyEkEAEScVSwNQSb1FARRESwK/Qv/HSYE8EkEAEScUSwNQSb1FARRESwK/Qv+vSYFGEkEAEScNSwNQSb1FARRESwK/Qv+XSYFQEkH/kCcgSwNQSb1FARRESwK/Qv9/NhoBSRUjEkQ2GgJJTgIVJBJEiASFiASMF0cCiASWSYEUE0SBKBJBABUnDksCUEm9RQFEvEgyBxYoTFCwI0NJgTISQQAPJxVLAlBJvUUBRLxIQv/hSYE8EkEADycUSwJQSb1FAUS8SEL/y0mBRhJBAA8nDUsCUEm9RQFEvEhC/7VJgVASQf+uJyBLAlBJvUUBRLxIQv+fNhoBSRUjEkQiUycNMQCIA79EJxdMZzIHFihMULAjQyInCGVEKExQsCNDNhoBSRUkEkQnDksBiAOXJxVLAogDkCcUSwOIA4knDUsEiAOCJyBPBYgDeycfIk8GVCNPBVSBAk8EVIEDTwNUgQRPAlQoTFCwI0M2GgFJFSMSRDYaAklOAhUkEkQXSYgDk4MGFCgyPEZQTwaOBgBPAEAAMQAiABMAAQAnIEsBUEm9RQFEvkgoTFCwI0MnDUsBUEm9RQFEvkhC/+snFEsBUEm9RQFEvkhC/9wnFUsBUEm9RQFEvkhC/80nDksBUEm9RQFEvkhC/76AEAAAAAAAAAAAAAAAAAAAAABC/6mKAAGAADIHSSInHWVMTgJEIicFZUQPQQATIicHZUyMAkQnHYsCSU4CZ4wAiSInBGVEiwEMQf/qIicdZUSBAwhJjAAlC4ECCCcMTCW6F4sBDkEAGyEEIojzPIsAIwhJjAAlC4ECCCcMTCW6F0L/34sAgQMJjAJC/6mKAQGBA4v/CCMJJQuBAggnDEwluheJigEBIkknB2VEi/8NQQAJi/8jCIj/1IwAiwBMiYoCAYv/IwmBAguBAggnE0yBAroXi/4LgZBOComKAQGAAEmL/0AALiInBGVEMgdLAQmMAIv/iP+sTAkiJxFlREAACosAIQYKjAAhBgqLABZMFlCMAIkijAGL/0EAB4v/iP9sjAGLAUL/w4oBASInBGVEQQAYMgciJwRlRA9BAA0iJwdlRIv/DUEAAiOJIomKAwGL/Yv/iAA+i/+I/39JIltMJVuL/4ECC4ECCCcTTIECuheL/Yv+iAE4C08CC4GQTk8CCwqJigEBIiccZUQiK2VEi/8LD4mKAgApi/5QvkSBMFuL/xJEiYoBACInFmVEMgMTQQAkMQAiJxZlRBJAABcxAIv/EkAADzEAKYv/UL5EVwAgEkEAAyNEiSJC//qKAQEpi/9QSb5EVwAgIicJZURwAEUBQQAOiwC+RIHAA1NAAAMjTIkiQv/6igEAMgoiJwllRHAARIv/D0SJigIAsTIAIicJZUSL/7ISi/6yFLIRgQSyELIBs4mKAQGAAEcCi/9XAgCL/4ECWzIHDUSL/yJZIwkiiwWLBAxBAECBQSOI8UmLBUklC4sDSU4DTFtJTgOMASMISYwCJQtbSYwADEQiJxFlRCEEE0EACosAiwEJIQYYFESLAowFQv+4i/+MAImKAQApi/9QvkSBwANTFESJigIBKYv+UL5EgShbi/8LiYoBASmL/1C+RCRbi/9MiP/fiSIrZURAAAQqIQVniYoCAYAAi/6L/1BJvUUBQQAfiwG+RCJbMgdJjAAOQQAQiwG+RCVbiwAPQQAEI4wAiSJC//kxACInCGVEEkSJIicYZUQURIkiJxdlRBREiYoBAIv/gRQSQAAoi/+BKBJAACCL/4EyEkAAGIv/gTwSQAAQi/+BRhJAAAiL/4FQEkEAAyNEiSJC//o=",
- "clear": "DIEBQw=="
- },
- "compilerInfo": {
- "compiler": "puya",
- "compilerVersion": {
- "major": 5,
- "minor": 7,
- "patch": 1
- }
- },
- "events": [
- {
- "name": "Event",
- "args": [
- {
- "type": "uint64",
- "name": "contract_id"
- },
- {
- "type": "uint8",
- "name": "type"
- },
- {
- "type": "string",
- "name": "type_name"
- },
- {
- "type": "uint64",
- "name": "time"
- },
- {
- "type": "uint64",
- "name": "payoff"
- },
- {
- "type": "uint64",
- "name": "currency_id"
- },
- {
- "type": "byte[]",
- "name": "currency_unit"
- },
- {
- "type": "uint64",
- "name": "nominal_value"
- },
- {
- "type": "uint16",
- "name": "nominal_rate_bps"
- },
- {
- "type": "uint64",
- "name": "nominal_accrued"
- }
- ],
- "desc": "ACTUS Event."
- }
- ],
- "templateVariables": {}
-}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/fixed_coupon_bond/fixed_coupon_bond_client.py b/smart_contracts/artifacts/fixed_coupon_bond/fixed_coupon_bond_client.py
deleted file mode 100644
index 2fe8cab0..00000000
--- a/smart_contracts/artifacts/fixed_coupon_bond/fixed_coupon_bond_client.py
+++ /dev/null
@@ -1,3966 +0,0 @@
-# flake8: noqa
-# fmt: off
-# mypy: ignore-errors
-# This file was automatically generated by algokit-client-generator.
-# DO NOT MODIFY IT BY HAND.
-# requires: algokit-utils@^3.0.0
-
-# common
-import dataclasses
-import typing
-# core algosdk
-import algosdk
-from algosdk.transaction import OnComplete
-from algosdk.atomic_transaction_composer import TransactionSigner
-from algosdk.source_map import SourceMap
-from algosdk.transaction import Transaction
-from algosdk.v2client.models import SimulateTraceConfig
-# utils
-import algokit_utils
-from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient
-
-_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": []}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "desc": "Denomination asset identifier", "name": "denomination_asset_id"}, {"type": "uint64", "desc": "Settlement asset identifier", "name": "settlement_asset_id"}, {"type": "uint64", "desc": "Principal, expressed in denomination asset", "name": "principal"}, {"type": "uint64", "desc": "Principal discount in bps", "name": "principal_discount"}, {"type": "uint64", "desc": "Minimum denomination, expressed in denomination asset", "name": "minimum_denomination"}, {"type": "uint8", "desc": "Day-count convention for interests calculation", "name": "day_count_convention"}, {"type": "uint16", "desc": "Interest rate in bps", "name": "interest_rate"}, {"type": "uint16[]", "desc": "Coupon interest rates in bps", "name": "coupon_rates"}, {"type": "uint64[]", "desc": "Time events (strictly ascending order)", "name": "time_events"}, {"type": "(uint64,uint64)[]", "desc": "Time periods of recurring time events", "name": "time_periods"}], "name": "asset_config", "returns": {"type": "void"}, "desc": "Configure the Debt Algorand Standard Application", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "uint64", "desc": "Account's units for the current value calculation", "name": "units"}], "name": "get_account_units_current_value", "returns": {"type": "(uint64,uint64,(uint64,uint64))", "desc": "Units current value in denomination asset, Accrued interest in denomination asset", "struct": "CurrentUnitsValue"}, "desc": "Get account's units current value and accrued interest", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_coupon_rates", "returns": {"type": "uint16[]", "desc": "Coupon rates"}, "desc": "Get D-ASA coupon rates", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}], "name": "get_payment_amount", "returns": {"type": "(uint64,uint64)", "desc": "Interest amount in denomination asset, Principal amount in denomination asset", "struct": "PaymentAmounts"}, "desc": "Get the next payment amount", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_coupons_status", "returns": {"type": "(uint64,uint64,uint64,(uint64,uint64),bool)", "desc": "Total coupons, Due coupons, Next coupon due date, (Day count factor numerator, Day count factor denominator), All due coupons paid", "struct": "CouponsInfo"}, "desc": "Get D-ASA coupons status", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "byte[]", "desc": "Additional payment information (Optional)", "name": "payment_info"}], "name": "pay_coupon", "returns": {"type": "(uint64,uint64,byte[])", "desc": "Paid coupon amount in denomination asset, Payment timestamp, Payment context", "struct": "PaymentResult"}, "desc": "Pay due coupon to an account", "events": [{"args": [{"type": "uint64", "name": "contract_id"}, {"type": "uint8", "name": "type"}, {"type": "string", "name": "type_name"}, {"type": "uint64", "name": "time"}, {"type": "uint64", "name": "payoff"}, {"type": "uint64", "name": "currency_id"}, {"type": "byte[]", "name": "currency_unit"}, {"type": "uint64", "name": "nominal_value"}, {"type": "uint16", "name": "nominal_rate_bps"}, {"type": "uint64", "name": "nominal_accrued"}], "name": "Event", "desc": "ACTUS Event."}], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "byte[]", "desc": "Additional payment information (Optional)", "name": "payment_info"}], "name": "pay_principal", "returns": {"type": "(uint64,uint64,byte[])", "desc": "Paid principal amount in denomination asset, Payment timestamp, Payment context", "struct": "PaymentResult"}, "desc": "Pay the outstanding principal to an account", "events": [{"args": [{"type": "uint64", "name": "contract_id"}, {"type": "uint8", "name": "type"}, {"type": "string", "name": "type_name"}, {"type": "uint64", "name": "time"}, {"type": "uint64", "name": "payoff"}, {"type": "uint64", "name": "currency_id"}, {"type": "byte[]", "name": "currency_unit"}, {"type": "uint64", "name": "nominal_value"}, {"type": "uint16", "name": "nominal_rate_bps"}, {"type": "uint64", "name": "nominal_accrued"}], "name": "Event", "desc": "ACTUS Event."}], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Sender Account Holding Address", "name": "sender_holding_address"}, {"type": "address", "desc": "Receiver Account Holding Address", "name": "receiver_holding_address"}, {"type": "uint64", "desc": "Amount of D-ASA units to transfer", "name": "units"}], "name": "asset_transfer", "returns": {"type": "uint64", "desc": "Transferred actualized value in denomination asset"}, "desc": "Transfer D-ASA units between accounts", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": [], "create": ["NoOp"]}, "args": [{"type": "address", "desc": "D-ASA Arranger Address", "name": "arranger"}, {"type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", "desc": "D-ASA metadata", "name": "metadata", "struct": "AssetMetadata"}], "name": "asset_create", "returns": {"type": "void"}, "desc": "Create a new D-ASA", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["UpdateApplication"], "create": []}, "args": [{"type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", "name": "metadata", "struct": "AssetMetadata"}], "name": "asset_update", "returns": {"type": "void"}, "desc": "Update D-ASA application.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64[]", "desc": "Secondary market time events (strictly ascending order)", "name": "secondary_market_time_events"}], "name": "set_secondary_time_events", "returns": {"type": "(uint64,uint64)", "desc": "Secondary Market Opening Date, Secondary Market Closure Date", "struct": "SecondaryMarketSchedule"}, "desc": "Set secondary market time schedule", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "bool", "desc": "Default status", "name": "defaulted"}], "name": "set_default_status", "returns": {"type": "uint64"}, "desc": "Set D-ASA default status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "uint64", "desc": "Amount of D-ASA units to distribute", "name": "units"}], "name": "primary_distribution", "returns": {"type": "uint64", "desc": "Remaining D-ASA units to be distributed"}, "desc": "Distribute D-ASA units to accounts according the primary market", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_asset_info", "returns": {"type": "(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)", "desc": "Denomination asset ID, Settlement asset ID, Outstanding principal, Unit nominal value, Day-count convention, Interest rate, Total supply, Circulating supply, Primary distribution opening date, Primary distribution closure date, Issuance date, Maturity date, Suspended, Performance", "struct": "AssetInfo"}, "desc": "Get D-ASA info", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_time_events", "returns": {"type": "uint64[]", "desc": "Time events"}, "desc": "Get D-ASA time events", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_secondary_market_schedule", "returns": {"type": "uint64[]", "desc": "Secondary market schedule"}, "desc": "Get secondary market schedule", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_asset_metadata", "returns": {"type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", "desc": "Contract type, Calendar, Business day convention, End of month convention, Early repayment effect, Early repayment penalty type, Prospectus hash, Prospectus URL", "struct": "AssetMetadata"}, "desc": "Get D-ASA metadata", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "bool", "desc": "Suspension status", "name": "suspended"}], "name": "account_gov_suspension", "returns": {"type": "uint64", "desc": "Timestamp of the set account suspension status"}, "desc": "Set account suspension status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "address", "desc": "Account Payment Address", "name": "payment_address"}], "name": "account_open", "returns": {"type": "uint64", "desc": "Timestamp of the account opening"}, "desc": "Open D-ASA account", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}], "name": "account_close", "returns": {"type": "(uint64,uint64)", "desc": "Closed units, Timestamp of the account closing"}, "desc": "Close D-ASA account", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "address", "desc": "Account Payment Address", "name": "payment_address"}], "name": "account_update_payment_address", "returns": {"type": "uint64", "desc": "Timestamp of the account update"}, "desc": "Update the Payment Address of an account", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}], "name": "account_get_info", "returns": {"type": "(address,uint64,uint64,uint64,bool)", "desc": "Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended", "struct": "AccountInfo"}, "desc": "Get account info", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "New Arranger address", "name": "new_arranger"}], "name": "rbac_rotate_arranger", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Rotate the Arranger address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Operation Daemon address", "name": "address"}], "name": "rbac_set_op_daemon", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Non-Normative: Set the Operation Daemon address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}, {"type": "byte[]", "desc": "Role configuration (Optional)", "name": "config"}], "name": "rbac_assign_role", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Assign a role to an address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}], "name": "rbac_revoke_role", "returns": {"type": "uint64", "desc": "Timestamp of the role revocation"}, "desc": "Revoke a role from an address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "bool", "desc": "Suspension status", "name": "suspended"}], "name": "rbac_gov_asset_suspension", "returns": {"type": "uint64", "desc": "Timestamp of the set asset suspension status"}, "desc": "Set asset suspension status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "rbac_get_arranger", "returns": {"type": "address", "desc": "Arranger address"}, "desc": "Get Arranger address", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Address to get roles for", "name": "address"}], "name": "rbac_get_address_roles", "returns": {"type": "(bool,bool,bool,bool,bool)", "desc": "Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)"}, "desc": "Non-normative - Get roles assigned to an address", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}], "name": "rbac_get_role_config", "returns": {"type": "(uint64,uint64)", "desc": "Role configuration", "struct": "RoleConfig"}, "desc": "Get role configuration", "events": [], "readonly": true, "recommendations": {}}], "name": "FixedCouponBond", "state": {"keys": {"box": {"time_events": {"key": "dGltZUV2ZW50cw==", "keyType": "AVMBytes", "valueType": "uint64[]"}, "coupon_rates": {"key": "Y291cG9uUmF0ZXM=", "keyType": "AVMBytes", "valueType": "uint16[]"}}, "global": {"arranger": {"key": "UjIwIw==", "keyType": "AVMBytes", "valueType": "address"}, "op_daemon": {"key": "UjI1Iw==", "keyType": "AVMBytes", "valueType": "address"}, "asset_suspended": {"key": "YXNzZXRfc3VzcGVuZGVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "asset_defaulted": {"key": "YXNzZXRfZGVmYXVsdGVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_units": {"key": "dG90YWxfdW5pdHM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "circulating_units": {"key": "Y2lyY3VsYXRpbmdfdW5pdHM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "unit_value": {"key": "dW5pdF92YWx1ZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "status": {"key": "c3RhdHVz", "keyType": "AVMString", "valueType": "AVMUint64"}, "denomination_asset_id": {"key": "ZGVub21pbmF0aW9uX2Fzc2V0X2lk", "keyType": "AVMString", "valueType": "AVMUint64"}, "settlement_asset_id": {"key": "c2V0dGxlbWVudF9hc3NldF9pZA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "day_count_convention": {"key": "ZGF5X2NvdW50X2NvbnZlbnRpb24=", "keyType": "AVMString", "valueType": "AVMUint64"}, "metadata": {"key": "bWV0YWRhdGE=", "keyType": "AVMString", "valueType": "AVMBytes"}, "principal_discount": {"key": "cHJpbmNpcGFsX2Rpc2NvdW50", "keyType": "AVMString", "valueType": "AVMUint64"}, "interest_rate": {"key": "aW50ZXJlc3RfcmF0ZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_coupons": {"key": "dG90YWxfY291cG9ucw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "primary_distribution_opening_date": {"key": "cHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRl", "keyType": "AVMString", "valueType": "AVMUint64"}, "primary_distribution_closure_date": {"key": "cHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRl", "keyType": "AVMString", "valueType": "AVMUint64"}, "issuance_date": {"key": "aXNzdWFuY2VfZGF0ZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "secondary_market_opening_date": {"key": "c2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGU=", "keyType": "AVMString", "valueType": "AVMUint64"}, "secondary_market_closure_date": {"key": "c2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU=", "keyType": "AVMString", "valueType": "AVMUint64"}, "maturity_date": {"key": "bWF0dXJpdHlfZGF0ZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "paid_coupon_units": {"key": "cGFpZF9jb3Vwb25fdW5pdHM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "due_coupons_watermark": {"key": "ZHVlX2NvdXBvbnNfd2F0ZXJtYXJr", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"account_manager": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjQwIw=="}, "primary_dealer": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjUwIw=="}, "trustee": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjYwIw=="}, "authority": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjcwIw=="}, "interest_oracle": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjgwIw=="}, "account": {"keyType": "address", "valueType": "AccountInfo", "prefix": "UjMwIw=="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 3, "ints": 20}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"AccountInfo": [{"name": "payment_address", "type": "address"}, {"name": "units", "type": "uint64"}, {"name": "unit_value", "type": "uint64"}, {"name": "paid_coupons", "type": "uint64"}, {"name": "suspended", "type": "bool"}], "AssetInfo": [{"name": "denomination_asset_id", "type": "uint64"}, {"name": "settlement_asset_id", "type": "uint64"}, {"name": "outstanding_principal", "type": "uint64"}, {"name": "unit_value", "type": "uint64"}, {"name": "day_count_convention", "type": "uint8"}, {"name": "principal_discount", "type": "uint16"}, {"name": "interest_rate", "type": "uint16"}, {"name": "total_supply", "type": "uint64"}, {"name": "circulating_supply", "type": "uint64"}, {"name": "primary_distribution_opening_date", "type": "uint64"}, {"name": "primary_distribution_closure_date", "type": "uint64"}, {"name": "issuance_date", "type": "uint64"}, {"name": "maturity_date", "type": "uint64"}, {"name": "suspended", "type": "bool"}, {"name": "performance", "type": "uint8"}], "AssetMetadata": [{"name": "contract_type", "type": "uint8"}, {"name": "calendar", "type": "uint8"}, {"name": "business_day_convention", "type": "uint8"}, {"name": "end_of_month_convention", "type": "uint8"}, {"name": "prepayment_effect", "type": "uint8"}, {"name": "penalty_type", "type": "uint8"}, {"name": "prospectus_hash", "type": "byte[32]"}, {"name": "prospectus_url", "type": "string"}], "CouponsInfo": [{"name": "total_coupons", "type": "uint64"}, {"name": "due_coupons", "type": "uint64"}, {"name": "next_coupon_due_date", "type": "uint64"}, {"name": "day_count_factor", "type": "DayCountFactor"}, {"name": "all_due_coupons_paid", "type": "bool"}], "CurrentUnitsValue": [{"name": "units_value", "type": "uint64"}, {"name": "accrued_interest", "type": "uint64"}, {"name": "day_count_factor", "type": "DayCountFactor"}], "DayCountFactor": [{"name": "numerator", "type": "uint64"}, {"name": "denominator", "type": "uint64"}], "PaymentAmounts": [{"name": "interest", "type": "uint64"}, {"name": "principal", "type": "uint64"}], "PaymentResult": [{"name": "amount", "type": "uint64"}, {"name": "timestamp", "type": "uint64"}, {"name": "context", "type": "byte[]"}], "RoleConfig": [{"name": "role_validity_start", "type": "uint64"}, {"name": "role_validity_end", "type": "uint64"}], "SecondaryMarketSchedule": [{"name": "secondary_market_opening_date", "type": "uint64"}, {"name": "secondary_market_closure_date", "type": "uint64"}]}, "byteCode": {"approval": "DCAHAAEgCP8ByAGAowUmJgQVH3x1BFIzMCMGc3RhdHVzEWNpcmN1bGF0aW5nX3VuaXRzDWlzc3VhbmNlX2RhdGUNbWF0dXJpdHlfZGF0ZQp1bml0X3ZhbHVlDXRvdGFsX2NvdXBvbnMEUjIwIxNzZXR0bGVtZW50X2Fzc2V0X2lkIXByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZR1zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQp0aW1lRXZlbnRzBFI3MCMEUjQwIwt0b3RhbF91bml0cxVkZW5vbWluYXRpb25fYXNzZXRfaWQUZGF5X2NvdW50X2NvbnZlbnRpb24dc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGULY291cG9uUmF0ZXMEUjYwIwRSNTAjBFIyNSMPYXNzZXRfc3VzcGVuZGVkD2Fzc2V0X2RlZmF1bHRlZAhtZXRhZGF0YRJwcmluY2lwYWxfZGlzY291bnQhcHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlEXBhaWRfY291cG9uX3VuaXRzFWR1ZV9jb3Vwb25zX3dhdGVybWFyawIAAAEABFI4MCMNaW50ZXJlc3RfcmF0ZQMGgQECADsEjCmQTgIAEjEYQAB1JwgyA2cnFjIDZycXImcnGCJnJw8iZysiZycGImcqImcnECJnJwkiZycGImcnESJnJxmAAGcnGiJnJyEiZycHImcnCiJnJxsiZycEImcnEiJnJwsiZycFImcnHCJnJx0iZzE1gQMSRDE0gRQSRDE3FEQxNhREgAQl26lbNhoAjgEA4zEZFEQxGEEAzIIcBIlHQTQERDY9SQRTvvBFBGfbTyAE9qlsjQSM8UtRBJx2tqMET9ajzAQdb8JVBCXpmX8EbIXj7gRALbpHBPrSFz4ECO/qNQTkpatUBNwGOzUEFPwQ7wRMET7VBHSnKX8EEFwYTgSC9xstBO8E9dMEA7gzKQQ9voC9BN9U6CwEAQyCmQR0BqzSBMPkspc2GgCOHABWAa0CUgJsAsMDDgQUBQwGsAcvB04H5AizCM0I6AjzCSwJdgmzCeUJ/QoVCi0K6Qt/C54LqQvzAIAEPw78bDYaAI4BBk4AMRmBBBIxGBBEQgZwigIAi/6BCgiLADIMDUEAKrGBBrIQgQWyGScish4nIrIfi/+NAgALAASzQv/bMgCyAUL/9SKyAUL/74mAADYaAUkVJRJEFzYaAkkVJRJEFzYaA0kVJRJEFzYaBEkVJRJEFzYaBUkVJRJEFzYaBkkVIxJENhoHSU4HFYECEkQ2GghJTgdJIllJTgiBAguBAghMFRJENhoJSU4HSSJZSU4IJQuBAghMFRJENhoKSSJZSU4IgRALgQIITBUSRIgOqiIqZUQUREsFcQtFAUQnEEsGZ0sETwYSRCcJSwVnsTIAMgoishKyFE8FshGBBLIQsgGzSwNLAhgURCcGSwJnTwNPAgonD0xnJxpPAmcXSUEAB0khBBJBAHgjRCcRSwFnSwYXRQgiJxplREAAA0sHRCchSwhnSwRJRCcHSwFnJxO8SCcTSwe/gQQISwMSREsDiA09Jwy8SCcMSwG/SVcCAEsBgQJbJwpMZ0sBgQpbJxtMZ0sBgRJbJwRMZ0wiWSMJJQtbJwVMZ0sBFEQqgWRnI0MiQv+FIoAARwQ2GgFJFSQSRDYaAkkVJRJEFyInCmVEQQCDMgciJwplRA9BAHgjRClLAlBJRQm9RQFESUEAY0sHvkQkW0sBD0EAVyNESwFJSwKIDSRFCCJFByJFBCJFBogKe0lFBkxLAYgL8ogLgkEAGksDSYgLLEsDSwNPA4gLlUUHSSJbRQQlW0UFSwIWSwUWUEsHFksHFlBMUChMULAjQyJC/6YiQv+FJx4iKmVEgWQSQQAHJxO+TEUCRChLAVCwI0OAADYaAUcCFSQSRClMUEm9RQFEIkcCKmVEgWQSQQAhSwK+RIEwW0lFBiInB2VEDEEAG0sDiAyOSwUjCIgKhkUCSwEWSwEWUChMULAjQ0sDiAxzRQFC/+mICcBHAogKSUxJiAslTCJMIkyICsFBAA5LBIgKbEkiW0UDJVtFASInB2VESwIWSwIWUEwWSwYWUEsFFlBMUCcfIksFVFAoTFCwI0M2GgFJFSQSRDYaAkkiWYECCEsBFRJEVwIATCIqZUSBZBJEiAxaiAxfKUsBUElOAkm9RQFESb5IJFtJTgNEiAk4TL5EgTBbTEsBDURJiAqYREsBiAvOTCMIiAnHTEmICqmICt1BAJpHAogLAEsDvkRXACBMiAsHSwJJvkSBMFsjCBaBMEy7IiccZURLAggnHExnMggyByInEGVESXEDRCIrZUQiJwZlRAtPBBaAAwgAN1BPBBZQSwQWTEsBUE8EFlBLAxUWVwYCTwRQTCcjUE8DFlAnHlAiFlCABAACSVBQTFAnJExQsDIHFlBLBEkVFlcGAkxQTCclUExQKExQsCNDIkUBQv9wNhoBSRUkEkQ2GgJJIlmBAghLARUSRFcCAEwiKmVEgWQSRIgLVIgLWSlLAVBJTgJJvUUBRL5IJFtEMgciJwVlRA9EiAgtiAmZREmICtBMSYgJsYgJ5UEAmkcCiAoISwK+RFcAIEyICg8iK2VESwJJTgK+RCRbCStMZyIWTCRLAruICqwyCDIHIicQZURJcQNEIitlRCInBmVEC08EFoADAwA3UE8EFlBLBRZMSwFQTwQWUEsDFRZXBgJPBFBMJyNQTwMWUCceUE8DUIAEAAJQUlBMUCckTFCwMgcWUEsDSRUWVwYCTFBMJyVQTFAoTFCwI0MiRQFC/3AiRwKAAEk2GgFJFSQSRDYaAkkVJBJENhoDSRUlEkQXIiplRIFkEkEBIyInEmVEMgcOQQEYIicLZURBAAsyByInC2VEDEEBBSNEMQBLA0lOAhJEiAosiAoxKUsBUElFCUm9RQFEKUsESU4CUElFCkm9RQFESwOICY1LAYgJiE8DTwITREsCSURPAr5ESSRbTwIPRFcoCEUJvkQkW0EAmEsGvkSBKFtLBr5EgShbEkEAgksGvkSBMFtLBr5EgTBbEkEAcCNESwZJvkSBKFtFBYgGqUsESU4CSwGICB9MSwNJTgNPAogHzEUHSwG+RCRbSg5ETAkWSwEkTwK7vkgkW0AAECIWSwdJTgKBKEsCu4EwTLtLBUm+RCRbSwJJTgIIFk8CJE8Cu0sEC0sFCBYoTFCwI0MiQv+NSwVJgShLCrtLB75EVzAIgTBMu0L/eCJC/vg2GgFJFSQSRDYaAkkVSwGBJllJgSgSREsCTEsCUiJZgSoIEkQnCE8CZycZTGcjQzYaAUkVSwGBJllJgSgSREsCTEsCUiJZgSoIEkSICNknGUxnI0MiNhoBRwIiWUklC4ECCE8CFRJEiAi9IiplRCEFEhREiAi7SUQjDUEABkmIB8tFASInBGVESwFJVwIARQSBAltMSwEORCcSTGciJwVlREEAGiInBWVESwEiWSMJJQtLA0xbTEsBD0QnC0xnIicSZUQiJwtlREwWTBZQKExQsCNDNhoBSRUjEkQiUycUMQCICA9EJxhMZzIHFihMULAjQ4AANhoBSRUkEkQ2GgJJFSUSRBciKmVEgWQSQQB1IicKZUQyB0lFBQ5BAGciJxtlREsDDUEAXCNEJxUxAIgHwkQpSwJQSb1FAUSIB/OIB/hLAUlEIitlREsBCCInD2VESwEPRCtLAWdLAr5EJFtPAggWSwIkTwK7IicGZUQWTwKBKE8CuyInD2VETAkWKExQsCNDIkL/oSIyByInBWVMSU4CTgNEDUEACElBAASBBEUCIicYZURBAASBA0UCIicQZUQiJwllRCIrZUQiJwZlREoLIicRZUQWSZMlDkRXBwEiJxplRBZJk4EQDkRXBgIiJyFlRBZJk4EQDkRXBgIiJw9lRCInCmVEIicbZUQiJwRlRCInBWVEIicXZURLDxZJkyUORFcHAU8OFk8OFlBPCxZQTwsWUE8KUE8JUE8IUE8HFlBPBxZQTwYWUE8FFlBPBBZQTwMWUCcfIk8EVFBMUChMULAjQyceIiplRIFkEkEABycMvkxFAkQoSwFQsCNDIicSZUQiJwtlREwWgAIAAkxQTBZQKExQsCNDIicZZUQoTFCwI0M2GgFJFSQSRDYaAkkVIxJEIlMnDTEAiAZDRClPAlBJvUUBREmBOCO6Ik8DVIE4TLsyBxYoTFCwI0M2GgFJFSQSRDYaAkkVJBJEJw4xAIgGDEQiKmVEIQUSFESIBj2IBkIpTwJQSb1FARREIhZPAksBUEsBUExQJx9QvzIHFihMULAjQzYaAUkVJBJEJw4xAIgFykSIBgQpTFBJvUUBREm+SCRbTLxIIitlREsBCStMZ4gFnTIHTBZMFlAoTFCwI0M2GgFJFSQSRDYaAkkVJBJEMQBLAhJEiAXBiAXGKU8CUEm9RQFEIk8CuzIHFihMULAjQzYaAUkVJBJEKUxQSb1FAUS+SChMULAjQzYaAUkVJBJEiAV7JwhMZzIHFihMULAjQzYaAUkVJBJEiAVjJxZMZzIHFihMULAjQzYaAUkVIxJENhoCSU4CFSQSRDYaA0kiWYECCEsBFRJEVwIATIgFL4gFNhdHAogFQIEUEkEADicISwNnMgcWKExQsCNDSYEoEkEAEScOSwNQSb1FARRESwK/Qv/fSYEyEkEAEScVSwNQSb1FARRESwK/Qv/HSYE8EkEAEScUSwNQSb1FARRESwK/Qv+vSYFGEkEAEScNSwNQSb1FARRESwK/Qv+XSYFQEkH/kCcgSwNQSb1FARRESwK/Qv9/NhoBSRUjEkQ2GgJJTgIVJBJEiASFiASMF0cCiASWSYEUE0SBKBJBABUnDksCUEm9RQFEvEgyBxYoTFCwI0NJgTISQQAPJxVLAlBJvUUBRLxIQv/hSYE8EkEADycUSwJQSb1FAUS8SEL/y0mBRhJBAA8nDUsCUEm9RQFEvEhC/7VJgVASQf+uJyBLAlBJvUUBRLxIQv+fNhoBSRUjEkQiUycNMQCIA79EJxdMZzIHFihMULAjQyInCGVEKExQsCNDNhoBSRUkEkQnDksBiAOXJxVLAogDkCcUSwOIA4knDUsEiAOCJyBPBYgDeycfIk8GVCNPBVSBAk8EVIEDTwNUgQRPAlQoTFCwI0M2GgFJFSMSRDYaAklOAhUkEkQXSYgDk4MGFCgyPEZQTwaOBgBPAEAAMQAiABMAAQAnIEsBUEm9RQFEvkgoTFCwI0MnDUsBUEm9RQFEvkhC/+snFEsBUEm9RQFEvkhC/9wnFUsBUEm9RQFEvkhC/80nDksBUEm9RQFEvkhC/76AEAAAAAAAAAAAAAAAAAAAAABC/6mKAAGAADIHSSInHWVMTgJEIicFZUQPQQATIicHZUyMAkQnHYsCSU4CZ4wAiSInBGVEiwEMQf/qIicdZUSBAwhJjAAlC4ECCCcMTCW6F4sBDkEAGyEEIojzPIsAIwhJjAAlC4ECCCcMTCW6F0L/34sAgQMJjAJC/6mKAQGBA4v/CCMJJQuBAggnDEwluheJigEBIkknB2VEi/8NQQAJi/8jCIj/1IwAiwBMiYoCAYv/IwmBAguBAggnE0yBAroXi/4LgZBOComKAQGAAEmL/0AALiInBGVEMgdLAQmMAIv/iP+sTAkiJxFlREAACosAIQYKjAAhBgqLABZMFlCMAIkijAGL/0EAB4v/iP9sjAGLAUL/w4oBASInBGVEQQAYMgciJwRlRA9BAA0iJwdlRIv/DUEAAiOJIomKAwGL/Yv/iAA+i/+I/39JIltMJVuL/4ECC4ECCCcTTIECuheL/Yv+iAE4C08CC4GQTk8CCwqJigEBIiccZUQiK2VEi/8LD4mKAgApi/5QvkSBMFuL/xJEiYoBACInFmVEMgMTQQAkMQAiJxZlRBJAABcxAIv/EkAADzEAKYv/UL5EVwAgEkEAAyNEiSJC//qKAQEpi/9QSb5EVwAgIicJZURwAEUBQQAOiwC+RIHAA1NAAAMjTIkiQv/6igEAMgoiJwllRHAARIv/D0SJigIAsTIAIicJZUSL/7ISi/6yFLIRgQSyELIBs4mKAQGAAEcCi/9XAgCL/4ECWzIHDUSL/yJZIwkiiwWLBAxBAECBQSOI8UmLBUklC4sDSU4DTFtJTgOMASMISYwCJQtbSYwADEQiJxFlRCEEE0EACosAiwEJIQYYFESLAowFQv+4i/+MAImKAQApi/9QvkSBwANTFESJigIBKYv+UL5EgShbi/8LiYoBASmL/1C+RCRbi/9MiP/fiSIrZURAAAQqIQVniYoCAYAAi/6L/1BJvUUBQQAfiwG+RCJbMgdJjAAOQQAQiwG+RCVbiwAPQQAEI4wAiSJC//kxACInCGVEEkSJIicYZUQURIkiJxdlRBREiYoBAIv/gRQSQAAoi/+BKBJAACCL/4EyEkAAGIv/gTwSQAAQi/+BRhJAAAiL/4FQEkEAAyNEiSJC//o=", "clear": "DIEBQw=="}, "events": [{"args": [{"type": "uint64", "name": "contract_id"}, {"type": "uint8", "name": "type"}, {"type": "string", "name": "type_name"}, {"type": "uint64", "name": "time"}, {"type": "uint64", "name": "payoff"}, {"type": "uint64", "name": "currency_id"}, {"type": "byte[]", "name": "currency_unit"}, {"type": "uint64", "name": "nominal_value"}, {"type": "uint16", "name": "nominal_rate_bps"}, {"type": "uint64", "name": "nominal_accrued"}], "name": "Event", "desc": "ACTUS Event."}], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgOCAyNTUgMjAwIDg2NDAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHg1MjMzMzAyMyAic3RhdHVzIiAiY2lyY3VsYXRpbmdfdW5pdHMiICJpc3N1YW5jZV9kYXRlIiAibWF0dXJpdHlfZGF0ZSIgInVuaXRfdmFsdWUiICJ0b3RhbF9jb3Vwb25zIiAweDUyMzIzMDIzICJzZXR0bGVtZW50X2Fzc2V0X2lkIiAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIiAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMgMHg1MjM3MzAyMyAweDUyMzQzMDIzICJ0b3RhbF91bml0cyIgImRlbm9taW5hdGlvbl9hc3NldF9pZCIgImRheV9jb3VudF9jb252ZW50aW9uIiAic2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUiIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MyAweDUyMzYzMDIzIDB4NTIzNTMwMjMgMHg1MjMyMzUyMyAiYXNzZXRfc3VzcGVuZGVkIiAiYXNzZXRfZGVmYXVsdGVkIiAibWV0YWRhdGEiICJwcmluY2lwYWxfZGlzY291bnQiICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUiICJwYWlkX2NvdXBvbl91bml0cyIgImR1ZV9jb3Vwb25zX3dhdGVybWFyayIgMHgwMDAwIDB4MDAgMHg1MjM4MzAyMyAiaW50ZXJlc3RfcmF0ZSIgMHgwNjgxMDEgMHgwMDNiIDB4OGMyOTkwNGUgMHgwMDEyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzAtMzEKICAgIC8vICMgUkJBQyBSb2xlcwogICAgLy8gc2VsZi5hcnJhbmdlciA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNzdC5QUkVGSVhfSURfQVJSQU5HRVIpCiAgICBieXRlYyA4IC8vIDB4NTIzMjMwMjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMgogICAgLy8gc2VsZi5vcF9kYWVtb24gPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX09QX0RBRU1PTikKICAgIGJ5dGVjIDIyIC8vIDB4NTIzMjM1MjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo0Ny00OAogICAgLy8gIyBELUFTQSBHb3Zlcm5hbmNlCiAgICAvLyBzZWxmLmFzc2V0X3N1c3BlbmRlZCA9IEZhbHNlCiAgICBieXRlYyAyMyAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NDkKICAgIC8vIHNlbGYuYXNzZXRfZGVmYXVsdGVkID0gRmFsc2UKICAgIGJ5dGVjIDI0IC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxOQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IFVJbnQ2NCgpCiAgICBieXRlYyAxNSAvLyAidG90YWxfdW5pdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMAogICAgLy8gc2VsZi5jaXJjdWxhdGluZ191bml0cyA9IFVJbnQ2NCgpCiAgICBieXRlY18zIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIxCiAgICAvLyBzZWxmLnVuaXRfdmFsdWUgPSBVSW50NjQoKQogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIyCiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbm0uU1RBVFVTX0lOQUNUSVZFKQogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMS0zMgogICAgLy8gIyBBc3NldCBDb25maWd1cmF0aW9uCiAgICAvLyBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCA9IEFzc2V0KCkKICAgIGJ5dGVjIDE2IC8vICJkZW5vbWluYXRpb25fYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMzCiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgPSBBc3NldCgpCiAgICBieXRlYyA5IC8vICJzZXR0bGVtZW50X2Fzc2V0X2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozNAogICAgLy8gc2VsZi51bml0X3ZhbHVlID0gVUludDY0KCkKICAgIGJ5dGVjIDYgLy8gInVuaXRfdmFsdWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM1CiAgICAvLyBzZWxmLmRheV9jb3VudF9jb252ZW50aW9uID0gVUludDY0KCkKICAgIGJ5dGVjIDE3IC8vICJkYXlfY291bnRfY29udmVudGlvbiIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzctMzgKICAgIC8vICMgTWV0YWRhdGEKICAgIC8vIHNlbGYubWV0YWRhdGEgPSBCeXRlcygpCiAgICBieXRlYyAyNSAvLyAibWV0YWRhdGEiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MC00MQogICAgLy8gIyBQcmluY2lwYWwgLyBSYXRlcwogICAgLy8gc2VsZi5wcmluY2lwYWxfZGlzY291bnQgPSBVSW50NjQoKQogICAgYnl0ZWMgMjYgLy8gInByaW5jaXBhbF9kaXNjb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDIKICAgIC8vIHNlbGYuaW50ZXJlc3RfcmF0ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyAzMyAvLyAiaW50ZXJlc3RfcmF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDMKICAgIC8vIHNlbGYudG90YWxfY291cG9ucyA9IFVJbnQ2NCgpCiAgICBieXRlYyA3IC8vICJ0b3RhbF9jb3Vwb25zIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0NwogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDgKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gVUludDY0KCkKICAgIGJ5dGVjIDI3IC8vICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQ5CiAgICAvLyBzZWxmLmlzc3VhbmNlX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NTAKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgMTggLy8gInNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo1MQogICAgLy8gc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjUyCiAgICAvLyBzZWxmLm1hdHVyaXR5X2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgNSAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQKICAgIC8vIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgPSBVSW50NjQoKQogICAgYnl0ZWMgMjggLy8gInBhaWRfY291cG9uX3VuaXRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMDIKICAgIC8vIHNlbGYuZHVlX2NvdXBvbnNfd2F0ZXJtYXJrID0gVUludDY0KCkKICAgIGJ5dGVjIDI5IC8vICJkdWVfY291cG9uc193YXRlcm1hcmsiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhlZF9jb3Vwb25fYm9uZC9jb250cmFjdC5weTozMwogICAgLy8gYXNzZXJ0IFR4bi5nbG9iYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkdMT0JBTF9CWVRFUywgZXJyLldST05HX0dMT0JBTF9CWVRFUwogICAgdHhuIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGludCAzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBCeXRlcyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4ZWRfY291cG9uX2JvbmQvY29udHJhY3QucHk6MzQKICAgIC8vIGFzc2VydCBUeG4uZ2xvYmFsX251bV91aW50ID09IGNmZy5HTE9CQUxfVUlOVFMsIGVyci5XUk9OR19HTE9CQUxfVUlOVFMKICAgIHR4biBHbG9iYWxOdW1VaW50CiAgICBwdXNoaW50IDIwCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBVSW50cyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4ZWRfY291cG9uX2JvbmQvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhlZF9jb3Vwb25fYm9uZC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IFR4bi5sb2NhbF9udW1fdWludCA9PSBjZmcuTE9DQUxfVUlOVFMsIGVyci5XUk9OR19MT0NBTF9VSU5UUwogICAgdHhuIExvY2FsTnVtVWludAogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIFVJbnRzIGFsbG9jYXRpb24KCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGVkX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE3LTMwCiAgICAvLyBjbGFzcyBGaXhlZENvdXBvbkJvbmQoCiAgICAvLyAgICAgUEFNQ29yZU1peGluLAogICAgLy8gICAgIEZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbiwKICAgIC8vICAgICBDb3Vwb25QYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBQcmluY2lwYWxQYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBDb3Vwb25UcmFuc2ZlckFnZW50TWl4aW4sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTIsCiAgICAvLyApOgogICAgcHVzaGJ5dGVzIDB4MjVkYmE5NWIgLy8gbWV0aG9kICJhc3NldF91cGRhdGUoKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LGJ5dGVbMzJdLHN0cmluZykpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYXNzZXRfdXBkYXRlX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGVkX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE3LTMwCiAgICAvLyBjbGFzcyBGaXhlZENvdXBvbkJvbmQoCiAgICAvLyAgICAgUEFNQ29yZU1peGluLAogICAgLy8gICAgIEZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbiwKICAgIC8vICAgICBDb3Vwb25QYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBQcmluY2lwYWxQYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBDb3Vwb25UcmFuc2ZlckFnZW50TWl4aW4sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTIsCiAgICAvLyApOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzNgogICAgcHVzaGJ5dGVzcyAweDg5NDc0MTM0IDB4NDQzNjNkNDkgMHg1M2JlZjA0NSAweDY3ZGI0ZjIwIDB4ZjZhOTZjOGQgMHg4Y2YxNGI1MSAweDljNzZiNmEzIDB4NGZkNmEzY2MgMHgxZDZmYzI1NSAweDI1ZTk5OTdmIDB4NmM4NWUzZWUgMHg0MDJkYmE0NyAweGZhZDIxNzNlIDB4MDhlZmVhMzUgMHhlNGE1YWI1NCAweGRjMDYzYjM1IDB4MTRmYzEwZWYgMHg0YzExM2VkNSAweDc0YTcyOTdmIDB4MTA1YzE4NGUgMHg4MmY3MWIyZCAweGVmMDRmNWQzIDB4MDNiODMzMjkgMHgzZGJlODBiZCAweGRmNTRlODJjIDB4MDEwYzgyOTkgMHg3NDA2YWNkMiAweGMzZTRiMjk3IC8vIG1ldGhvZCAiYXNzZXRfY29uZmlnKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDE2LHVpbnQxNltdLHVpbnQ2NFtdLCh1aW50NjQsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUoYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCx1aW50NjQpKSIsIG1ldGhvZCAiZ2V0X2NvdXBvbl9yYXRlcygpdWludDE2W10iLCBtZXRob2QgImdldF9wYXltZW50X2Ftb3VudChhZGRyZXNzKSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiZ2V0X2NvdXBvbnNfc3RhdHVzKCkodWludDY0LHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCx1aW50NjQpLGJvb2wpIiwgbWV0aG9kICJwYXlfY291cG9uKGFkZHJlc3MsYnl0ZVtdKSh1aW50NjQsdWludDY0LGJ5dGVbXSkiLCBtZXRob2QgInBheV9wcmluY2lwYWwoYWRkcmVzcyxieXRlW10pKHVpbnQ2NCx1aW50NjQsYnl0ZVtdKSIsIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInNldF9zZWNvbmRhcnlfdGltZV9ldmVudHModWludDY0W10pKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJzZXRfZGVmYXVsdF9zdGF0dXMoYm9vbCl1aW50NjQiLCBtZXRob2QgInByaW1hcnlfZGlzdHJpYnV0aW9uKGFkZHJlc3MsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2luZm8oKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDE2LHVpbnQxNix1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X3RpbWVfZXZlbnRzKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0X3NlY29uZGFyeV9tYXJrZXRfc2NoZWR1bGUoKXVpbnQ2NFtdIiwgbWV0aG9kICJnZXRfYXNzZXRfbWV0YWRhdGEoKSh1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCxieXRlWzMyXSxzdHJpbmcpIiwgbWV0aG9kICJhY2NvdW50X2dvdl9zdXNwZW5zaW9uKGFkZHJlc3MsYm9vbCl1aW50NjQiLCBtZXRob2QgImFjY291bnRfb3BlbihhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhY2NvdW50X2Nsb3NlKGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3MoYWRkcmVzcyxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiYWNjb3VudF9nZXRfaW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wpIiwgbWV0aG9kICJyYmFjX3JvdGF0ZV9hcnJhbmdlcihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19zZXRfb3BfZGFlbW9uKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2Fzc2lnbl9yb2xlKHVpbnQ4LGFkZHJlc3MsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19yZXZva2Vfcm9sZSh1aW50OCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbihib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV9jb25maWcodWludDgsYWRkcmVzcykodWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBhc3NldF9jb25maWcgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZSBnZXRfY291cG9uX3JhdGVzIGdldF9wYXltZW50X2Ftb3VudCBnZXRfY291cG9uc19zdGF0dXMgcGF5X2NvdXBvbiBwYXlfcHJpbmNpcGFsIGFzc2V0X3RyYW5zZmVyIHNldF9zZWNvbmRhcnlfdGltZV9ldmVudHMgc2V0X2RlZmF1bHRfc3RhdHVzIHByaW1hcnlfZGlzdHJpYnV0aW9uIGdldF9hc3NldF9pbmZvIGdldF90aW1lX2V2ZW50cyBnZXRfc2Vjb25kYXJ5X21hcmtldF9zY2hlZHVsZSBnZXRfYXNzZXRfbWV0YWRhdGEgYWNjb3VudF9nb3Zfc3VzcGVuc2lvbiBhY2NvdW50X29wZW4gYWNjb3VudF9jbG9zZSBhY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3MgYWNjb3VudF9nZXRfaW5mbyByYmFjX3JvdGF0ZV9hcnJhbmdlciByYmFjX3NldF9vcF9kYWVtb24gcmJhY19hc3NpZ25fcm9sZSByYmFjX3Jldm9rZV9yb2xlIHJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb24gcmJhY19nZXRfYXJyYW5nZXIgcmJhY19nZXRfYWRkcmVzc19yb2xlcyByYmFjX2dldF9yb2xlX2NvbmZpZwogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDM2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGVkX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE3LTMwCiAgICAvLyBjbGFzcyBGaXhlZENvdXBvbkJvbmQoCiAgICAvLyAgICAgUEFNQ29yZU1peGluLAogICAgLy8gICAgIEZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbiwKICAgIC8vICAgICBDb3Vwb25QYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBQcmluY2lwYWxQYXltZW50QWdlbnRNaXhpbiwKICAgIC8vICAgICBDb3Vwb25UcmFuc2ZlckFnZW50TWl4aW4sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTIsCiAgICAvLyApOgogICAgcHVzaGJ5dGVzIDB4M2YwZWZjNmMgLy8gbWV0aG9kICJhc3NldF9jcmVhdGUoYWRkcmVzcywodWludDgsdWludDgsdWludDgsdWludDgsdWludDgsdWludDgsYnl0ZVszMl0sc3RyaW5nKSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggYXNzZXRfY3JlYXRlCiAgICBlcnIKCm1haW5fYXNzZXRfdXBkYXRlX3JvdXRlQDQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiVXBkYXRlQXBwbGljYXRpb24iXSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIGFzc2V0X3VwZGF0ZQoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDM0IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMzQgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmFjdHVzLnBhbS5QQU1Db3JlTWl4aW4uYXNzZXRfY29uZmlnW3JvdXRpbmddKCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgY292ZXIgNwogICAgbGVuCiAgICBwdXNoaW50IDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDE2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA4CiAgICBkdXAKICAgIGNvdmVyIDcKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgOAogICAgcHVzaGludCAyCiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDE2PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgZHVwCiAgICBjb3ZlciA3CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDgKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDgKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dHVwbGU8dWludDY0LHVpbnQ2ND4+CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyMjcKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjIyOAogICAgLy8gYXNzZXJ0IHNlbGYuc3RhdHVzID09IGVudW1zLlNUQVRVU19JTkFDVElWRSwgZXJyLkFMUkVBRFlfQ09ORklHVVJFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gRC1BU0EgYWxyZWFkeSBjb25maWd1cmVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo1NS01NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBkZW5vbWluYXRpb24gd2l0aCBBU0EKICAgIC8vIF9jcmVhdG9yLCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jcmVhdG9yKGRlbm9taW5hdGlvbl9hc3NldF9pZCkKICAgIGRpZyA1CiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo1NwogICAgLy8gYXNzZXJ0IGV4aXN0cywgZXJyLklOVkFMSURfREVOT01JTkFUSU9OCiAgICBhc3NlcnQgLy8gRGVub21pbmF0aW9uIGFzc2V0IGlzIG5vdCBwcm9wZXJseSBzZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjYwCiAgICAvLyBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCA9IGRlbm9taW5hdGlvbl9hc3NldF9pZAogICAgYnl0ZWMgMTYgLy8gImRlbm9taW5hdGlvbl9hc3NldF9pZCIKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NjUKICAgIC8vIHNldHRsZW1lbnRfYXNzZXRfaWQgPT0gc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQKICAgIGRpZyA0CiAgICB1bmNvdmVyIDYKICAgID09CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo2My02NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHNldHRsZW1lbnQgYXNzZXQgaXMgdGhlIGRlbm9taW5hdGlvbiBhc3NldAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZXR0bGVtZW50X2Fzc2V0X2lkID09IHNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkCiAgICAvLyApLCBlcnIuSU5WQUxJRF9TRVRUTEVNRU5UX0FTU0VUCiAgICBhc3NlcnQgLy8gRGlmZmVyZW50IHNldHRsZW1lbnQgYXNzZXQgbm90IHN1cHBvcnRlZCwgbXVzdCBiZSBlcXVhbCB0byBkZW5vbWluYXRpb24gYXNzZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjY5CiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgPSBzZXR0bGVtZW50X2Fzc2V0X2lkCiAgICBieXRlYyA5IC8vICJzZXR0bGVtZW50X2Fzc2V0X2lkIgogICAgZGlnIDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MC03NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NzUKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3NAogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICB1bmNvdmVyIDUKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MC03MQogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3MC03NgogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjIzOC0yMzkKICAgIC8vICMgU2V0IFByaW5jaXBhbCBhbmQgTWluaW11bSBEZW5vbWluYXRpb24KICAgIC8vIGFzc2VydCBwcmluY2lwYWwgJSBtaW5pbXVtX2Rlbm9taW5hdGlvbiA9PSAwLCBlcnIuSU5WQUxJRF9NSU5JTVVNX0RFTk9NSU5BVElPTgogICAgZGlnIDMKICAgIGRpZyAyCiAgICAlCiAgICAhCiAgICBhc3NlcnQgLy8gTWluaW11bSBkZW5vbWluYXRpb24gaXMgbm90IGEgZGl2aXNvciBvZiBwcmluY2lwYWwKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI0MAogICAgLy8gc2VsZi51bml0X3ZhbHVlID0gbWluaW11bV9kZW5vbWluYXRpb24KICAgIGJ5dGVjIDYgLy8gInVuaXRfdmFsdWUiCiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI0MQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IHByaW5jaXBhbCAvLyBtaW5pbXVtX2Rlbm9taW5hdGlvbgogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIC8KICAgIGJ5dGVjIDE1IC8vICJ0b3RhbF91bml0cyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNDIKICAgIC8vIHNlbGYucHJpbmNpcGFsX2Rpc2NvdW50ID0gcHJpbmNpcGFsX2Rpc2NvdW50CiAgICBieXRlYyAyNiAvLyAicHJpbmNpcGFsX2Rpc2NvdW50IgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjQ0LTI0NQogICAgLy8gIyBTZXQgRGF5LUNvdW50IENvbnZlbnRpb24KICAgIC8vIHNlbGYuYXNzZXJ0X2RheV9jb3VudF9jb252ZW50aW9uKGRheV9jb3VudF9jb252ZW50aW9uLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgZHVwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3OS04MwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIEFjdHVhbC9BY3R1YWwgYW5kIENvbnRpbnVvdXMgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgZGF5X2NvdW50X2NvbnZlbnRpb24gaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuRENDX0FfQSksCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQ09OVCksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9EQVlfQ09VTlRfQ09OVkVOVElPTgogICAgYnogYXNzZXRfY29uZmlnX2Jvb2xfdHJ1ZUAzCiAgICBkdXAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjgyCiAgICAvLyBVSW50NjQoY3N0LkRDQ19DT05UKSwKICAgIGludGMgNCAvLyAyNTUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5Ojc5LTgzCiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgQWN0dWFsL0FjdHVhbCBhbmQgQ29udGludW91cyBkYXktY291bnQgY29udmVudGlvbnMKICAgIC8vIGFzc2VydCBkYXlfY291bnRfY29udmVudGlvbiBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQV9BKSwKICAgIC8vICAgICBVSW50NjQoY3N0LkRDQ19DT05UKSwKICAgIC8vICksIGVyci5JTlZBTElEX0RBWV9DT1VOVF9DT05WRU5USU9OCiAgICA9PQogICAgYnogYXNzZXRfY29uZmlnX2Jvb2xfZmFsc2VANAoKYXNzZXRfY29uZmlnX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18xIC8vIDEKCmFzc2V0X2NvbmZpZ19ib29sX21lcmdlQDU6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo3OS04MwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIEFjdHVhbC9BY3R1YWwgYW5kIENvbnRpbnVvdXMgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgZGF5X2NvdW50X2NvbnZlbnRpb24gaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuRENDX0FfQSksCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQ09OVCksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9EQVlfQ09VTlRfQ09OVkVOVElPTgogICAgYXNzZXJ0IC8vIEludmFsaWQgZGF5LWNvdW50IGNvbnZlbnRpb24gSUQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5Ojg2CiAgICAvLyBzZWxmLmRheV9jb3VudF9jb252ZW50aW9uID0gZGF5X2NvdW50X2NvbnZlbnRpb24KICAgIGJ5dGVjIDE3IC8vICJkYXlfY291bnRfY29udmVudGlvbiIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjQ4LTI0OQogICAgLy8gIyBTZXQgSW50ZXJlc3QgUmF0ZQogICAgLy8gc2VsZi5hc3NlcnRfaW50ZXJlc3RfcmF0ZShpbnRlcmVzdF9yYXRlLmFzX3VpbnQ2NCgpKQogICAgZGlnIDYKICAgIGJ0b2kKICAgIGJ1cnkgOAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6ODktOTAKICAgIC8vICMgVGhpcyBzdWJyb3V0aW5lIG11c3QgYmUgdXNlZCBhZnRlciB0aGUgcHJpbmNpcGFsIGRpc2NvdW50IGhhcyBiZWVuIHNldAogICAgLy8gaWYgbm90IHNlbGYucHJpbmNpcGFsX2Rpc2NvdW50OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI2IC8vICJwcmluY2lwYWxfZGlzY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJpbmNpcGFsX2Rpc2NvdW50IGV4aXN0cwogICAgYm56IGFzc2V0X2NvbmZpZ19hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjkxCiAgICAvLyBhc3NlcnQgaW50ZXJlc3RfcmF0ZSA+IFVJbnQ2NCgwKSwgZXJyLklOVkFMSURfSU5URVJFU1RfUkFURQogICAgZGlnIDcKICAgIGFzc2VydCAvLyBJbnRlcmVzdCByYXRlIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkCgphc3NldF9jb25maWdfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6OTQKICAgIC8vIHNlbGYuaW50ZXJlc3RfcmF0ZSA9IGludGVyZXN0X3JhdGUKICAgIGJ5dGVjIDMzIC8vICJpbnRlcmVzdF9yYXRlIgogICAgZGlnIDgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMDUKICAgIC8vIGFzc2VydCBjb3Vwb25fcmF0ZXMubGVuZ3RoLCBlcnIuSU5WQUxJRF9DT1VQT05fUkFURVMKICAgIGRpZyA0CiAgICBkdXAKICAgIGFzc2VydCAvLyBDb3Vwb24gcmF0ZXMgYXJlIG5vdCBwcm9wZXJseSBkZWZpbmVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMDgKICAgIC8vIHNlbGYudG90YWxfY291cG9ucyA9IGNvdXBvbl9yYXRlcy5sZW5ndGgKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEwOQogICAgLy8gc2VsZi5jb3Vwb25fcmF0ZXMudmFsdWUgPSBjb3Vwb25fcmF0ZXMuY29weSgpCiAgICBieXRlYyAxOSAvLyAweDYzNmY3NTcwNmY2ZTUyNjE3NDY1NzMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgMTkgLy8gMHg2MzZmNzU3MDZmNmU1MjYxNzQ2NTczCiAgICBkaWcgNwogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTA0CiAgICAvLyB0aW1lX2V2ZW50cy5sZW5ndGggPT0gc2VsZi50b3RhbF9jb3Vwb25zICsgY2ZnLlRJTUVfU0NIRURVTEVfTElNSVRTCiAgICBwdXNoaW50IDQKICAgICsKICAgIGRpZyAzCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICB0aW1lX2V2ZW50cy5sZW5ndGggPT0gc2VsZi50b3RhbF9jb3Vwb25zICsgY2ZnLlRJTUVfU0NIRURVTEVfTElNSVRTCiAgICAvLyApLCBlcnIuSU5WQUxJRF9USU1FX0VWRU5UU19MRU5HVEgKICAgIGFzc2VydCAvLyBUaW1lIGV2ZW50cyBsZW5ndGggaXMgaW52YWxpZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjU4CiAgICAvLyBzZWxmLmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQodGltZV9ldmVudHMpCiAgICBkaWcgMwogICAgY2FsbHN1YiBhc3NlcnRfdGltZV9ldmVudHNfc29ydGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMjcKICAgIC8vIHNlbGYudGltZV9ldmVudHMudmFsdWUgPSB0aW1lX2V2ZW50cy5jb3B5KCkKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgMTIgLy8gMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MwogICAgZGlnIDEKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyOC0xMzAKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0KICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBwdXNoaW50IDIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMjgKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlID0gdGltZV9ldmVudHNbCiAgICBieXRlYyAxMCAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTI4LTEzMAogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgPSB0aW1lX2V2ZW50c1sKICAgIC8vICAgICBjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWAogICAgLy8gXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEzMS0xMzMKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX0NMT1NVUkVfREFURV9JRFgKICAgIC8vIF0KICAgIGRpZyAxCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTMxCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSA9IHRpbWVfZXZlbnRzWwogICAgYnl0ZWMgMjcgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEzMS0xMzMKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX0NMT1NVUkVfREFURV9JRFgKICAgIC8vIF0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMzQKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSA9IHRpbWVfZXZlbnRzW2NmZy5JU1NVQU5DRV9EQVRFX0lEWF0KICAgIGRpZyAxCiAgICBwdXNoaW50IDE4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMzUKICAgIC8vIHNlbGYubWF0dXJpdHlfZGF0ZSA9IHRpbWVfZXZlbnRzW2NmZy5NQVRVUklUWV9EQVRFX0lEWF0KICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEzOAogICAgLy8gYXNzZXJ0IG5vdCB0aW1lX3BlcmlvZHMubGVuZ3RoLCBlcnIuSU5WQUxJRF9USU1FX1BFUklPRFMKICAgIGRpZyAxCiAgICAhCiAgICBhc3NlcnQgLy8gVGltZSBwZXJpb2RzIGFyZSBub3QgcHJvcGVybHkgZGVmaW5lZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjY1CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbnVtcy5TVEFUVVNfQUNUSVZFKQogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgcHVzaGludCAxMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphc3NldF9jb25maWdfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfY29uZmlnX2Jvb2xfbWVyZ2VANQoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5nZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjIyCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjIyLTIyMwogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIGFuZCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+PSBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIyMwogICAgLy8gYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICA+PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjIyLTIyMwogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIGFuZCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+PSBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgpnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfbWVyZ2VANToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIyMS0yMjQKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vICAgICBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vICksIGVyci5OT19QUklNQVJZX0RJU1RSSUJVVElPTgogICAgYXNzZXJ0IC8vIFByaW1hcnkgZGlzdHJpYnV0aW9uIG5vdCB5ZXQgZXhlY3V0ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjI2CiAgICAvLyBhc3NlcnQgMCA8IHVuaXRzIDw9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLCBlcnIuSU5WQUxJRF9VTklUUwogICAgZHVwCiAgICBieiBnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfZmFsc2VAOAogICAgZGlnIDcKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgPj0KICAgIGJ6IGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUA4CiAgICBpbnRjXzEgLy8gMQoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDk6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMjYKICAgIC8vIGFzc2VydCAwIDwgdW5pdHMgPD0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMsIGVyci5JTlZBTElEX1VOSVRTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhbW91bnQgb2YgdW5pdHMgZm9yIHRoZSBhY2NvdW50CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMjgtMjI5CiAgICAvLyAjIFZhbHVlIGR1cmluZyBwcmltYXJ5IGRpc3RyaWJ1dGlvbiBhbmQgYXQgbWF0dXJpdHkKICAgIC8vIGFjY291bnRfdW5pdHNfbm9taW5hbF92YWx1ZSA9IHNlbGYuYWNjb3VudF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MsIHVuaXRzKQogICAgZGlnIDEKICAgIGR1cAogICAgZGlnIDIKICAgIGNhbGxzdWIgYWNjb3VudF91bml0c192YWx1ZQogICAgYnVyeSA4CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMzAtMjMxCiAgICAvLyAjIEFjY3J1aW5nIGludGVyZXN0IGR1cmluZyBwcmltYXJ5IGRpc3RyaWJ1dGlvbiBhbmQgYXQgbWF0dXJpdHkKICAgIC8vIGFjY3J1ZWRfaW50ZXJlc3QgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjMyCiAgICAvLyBudW1lcmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjMzCiAgICAvLyBkZW5vbWluYXRvciA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA2CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyMzUtMjM2CiAgICAvLyAjIEFjY3J1aW5nIGludGVyZXN0CiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYuY291bnRfZHVlX2NvdXBvbnMoKQogICAgY2FsbHN1YiBjb3VudF9kdWVfY291cG9ucwogICAgZHVwCiAgICBidXJ5IDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIzNwogICAgLy8gc2VsZi5hc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudChob2xkaW5nX2FkZHJlc3MsIGR1ZV9jb3Vwb25zKQogICAgc3dhcAogICAgZGlnIDEKICAgIGNhbGxzdWIgYXNzZXJ0X25vX3BlbmRpbmdfY291cG9uX3BheW1lbnQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIzOAogICAgLy8gaWYgc2VsZi5pc19hY2NydWluZ19pbnRlcmVzdChkdWVfY291cG9ucyk6CiAgICBjYWxsc3ViIGlzX2FjY3J1aW5nX2ludGVyZXN0CiAgICBieiBnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjIzOQogICAgLy8gZGF5X2NvdW50X2ZhY3RvciA9IHNlbGYuZGF5X2NvdW50X2ZhY3RvcihkdWVfY291cG9ucykKICAgIGRpZyAzCiAgICBkdXAKICAgIGNhbGxzdWIgZGF5X2NvdW50X2ZhY3RvcgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQwLTI0MgogICAgLy8gYWNjcnVlZF9pbnRlcmVzdCA9IHNlbGYuYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoCiAgICAvLyAgICAgaG9sZGluZ19hZGRyZXNzLCB1bml0cywgZHVlX2NvdXBvbnMKICAgIC8vICkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50CiAgICBidXJ5IDcKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI0MwogICAgLy8gbnVtZXJhdG9yID0gZGF5X2NvdW50X2ZhY3Rvci5udW1lcmF0b3IKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI0NAogICAgLy8gZGVub21pbmF0b3IgPSBkYXlfY291bnRfZmFjdG9yLmRlbm9taW5hdG9yCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgNQoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQ5LTI1MgogICAgLy8gZGF5X2NvdW50X2ZhY3Rvcj10eXAuRGF5Q291bnRGYWN0b3IoCiAgICAvLyAgICAgbnVtZXJhdG9yPW51bWVyYXRvciwKICAgIC8vICAgICBkZW5vbWluYXRvcj1kZW5vbWluYXRvciwKICAgIC8vICksCiAgICBkaWcgMgogICAgaXRvYgogICAgZGlnIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjQ2LTI1MwogICAgLy8gcmV0dXJuIHR5cC5DdXJyZW50VW5pdHNWYWx1ZSgKICAgIC8vICAgICB1bml0c192YWx1ZT1hY2NvdW50X3VuaXRzX25vbWluYWxfdmFsdWUsCiAgICAvLyAgICAgYWNjcnVlZF9pbnRlcmVzdD1hY2NydWVkX2ludGVyZXN0LAogICAgLy8gICAgIGRheV9jb3VudF9mYWN0b3I9dHlwLkRheUNvdW50RmFjdG9yKAogICAgLy8gICAgICAgICBudW1lcmF0b3I9bnVtZXJhdG9yLAogICAgLy8gICAgICAgICBkZW5vbWluYXRvcj1kZW5vbWluYXRvciwKICAgIC8vICAgICApLAogICAgLy8gKQogICAgZGlnIDcKICAgIGl0b2IKICAgIGRpZyA3CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUA4OgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDkKCmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDUKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5GaXhlZENvdXBvbkNhc2hmbG93TWl4aW4uZ2V0X2NvdXBvbl9yYXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9jb3Vwb25fcmF0ZXM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyNjMKICAgIC8vIGNvdXBvbl9yYXRlcyA9IHR5cC5Db3Vwb25SYXRlcygpCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjY0CiAgICAvLyBpZiBzZWxmLnN0YXR1c19pc19hY3RpdmUoKToKICAgIGJ6IGdldF9jb3Vwb25fcmF0ZXNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyNjUKICAgIC8vIGNvdXBvbl9yYXRlcyA9IHNlbGYuY291cG9uX3JhdGVzLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgMTkgLy8gMHg2MzZmNzU3MDZmNmU1MjYxNzQ2NTczCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidXJ5IDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvdXBvbl9yYXRlcyBleGlzdHMKCmdldF9jb3Vwb25fcmF0ZXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLmdldF9wYXltZW50X2Ftb3VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9wYXltZW50X2Ftb3VudDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyODMKICAgIC8vIGludGVyZXN0X2Ftb3VudCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6Mjg0CiAgICAvLyBwcmluY2lwYWxfYW1vdW50ID0gVUludDY0KCkKICAgIGR1cG4gMgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjI1CiAgICAvLyByZXR1cm4gc2VsZi5zdGF0dXMgPT0gZW5tLlNUQVRVU19BQ1RJVkUKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMAogICAgPT0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI4NQogICAgLy8gaWYgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCk6CiAgICBieiBnZXRfcGF5bWVudF9hbW91bnRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyODYKICAgIC8vIHBhaWRfY291cG9ucyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucwogICAgZGlnIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI4NwogICAgLy8gaWYgcGFpZF9jb3Vwb25zIDwgc2VsZi50b3RhbF9jb3Vwb25zOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfY291cG9ucyBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wYXltZW50X2Ftb3VudF9lbHNlX2JvZHlANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjkwCiAgICAvLyBzZWxmLmFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzKSwKICAgIGRpZyAzCiAgICBjYWxsc3ViIGFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI5MQogICAgLy8gcGFpZF9jb3Vwb25zICsgMSwKICAgIGRpZyA1CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6Mjg4LTI5MgogICAgLy8gIyBDb3Vwb24gUGF5bWVudAogICAgLy8gaW50ZXJlc3RfYW1vdW50ID0gc2VsZi5jb3Vwb25faW50ZXJlc3RfYW1vdW50KAogICAgLy8gICAgIHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpLAogICAgLy8gICAgIHBhaWRfY291cG9ucyArIDEsCiAgICAvLyApCiAgICBjYWxsc3ViIGNvdXBvbl9pbnRlcmVzdF9hbW91bnQKICAgIGJ1cnkgMgoKZ2V0X3BheW1lbnRfYW1vdW50X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI5Ni0yOTkKICAgIC8vIHJldHVybiB0eXAuUGF5bWVudEFtb3VudHMoCiAgICAvLyAgICAgaW50ZXJlc3Q9aW50ZXJlc3RfYW1vdW50LAogICAgLy8gICAgIHByaW5jaXBhbD1wcmluY2lwYWxfYW1vdW50LAogICAgLy8gKQogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyAxCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfcGF5bWVudF9hbW91bnRfZWxzZV9ib2R5QDQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyOTQtMjk1CiAgICAvLyAjIFByaW5jaXBhbCBQYXltZW50CiAgICAvLyBwcmluY2lwYWxfYW1vdW50ID0gc2VsZi5hY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcykKICAgIGRpZyAzCiAgICBjYWxsc3ViIGFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUKICAgIGJ1cnkgMQogICAgYiBnZXRfcGF5bWVudF9hbW91bnRfYWZ0ZXJfaWZfZWxzZUA2CgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLmdldF9jb3Vwb25zX3N0YXR1c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9jb3Vwb25zX3N0YXR1czoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxMAogICAgLy8gZHVlX2NvdXBvbnMgPSBzZWxmLmNvdW50X2R1ZV9jb3Vwb25zKCkKICAgIGNhbGxzdWIgY291bnRfZHVlX2NvdXBvbnMKICAgIGR1cG4gMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzExCiAgICAvLyBuZXh0X2NvdXBvbl9kdWVfZGF0ZSA9IHNlbGYubmV4dF9jb3Vwb25fZHVlX2RhdGUoZHVlX2NvdXBvbnMpCiAgICBjYWxsc3ViIG5leHRfY291cG9uX2R1ZV9kYXRlCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTIKICAgIC8vIGFsbF9kdWVfY291cG9uc19wYWlkID0gc2VsZi5hbGxfZHVlX2NvdXBvbnNfcGFpZChkdWVfY291cG9ucykKICAgIGR1cAogICAgY2FsbHN1YiBhbGxfZHVlX2NvdXBvbnNfcGFpZAogICAgc3dhcAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzEzCiAgICAvLyBudW1lcmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxNAogICAgLy8gZGVub21pbmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxNQogICAgLy8gaWYgc2VsZi5pc19hY2NydWluZ19pbnRlcmVzdChkdWVfY291cG9ucyk6CiAgICBjYWxsc3ViIGlzX2FjY3J1aW5nX2ludGVyZXN0CiAgICBieiBnZXRfY291cG9uc19zdGF0dXNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTYKICAgIC8vIGRheV9jb3VudF9mYWN0b3IgPSBzZWxmLmRheV9jb3VudF9mYWN0b3IoZHVlX2NvdXBvbnMpCiAgICBkaWcgNAogICAgY2FsbHN1YiBkYXlfY291bnRfZmFjdG9yCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTcKICAgIC8vIG51bWVyYXRvciA9IGRheV9jb3VudF9mYWN0b3IubnVtZXJhdG9yCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnVyeSAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMTgKICAgIC8vIGRlbm9taW5hdG9yID0gZGF5X2NvdW50X2ZhY3Rvci5kZW5vbWluYXRvcgogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDEKCmdldF9jb3Vwb25zX3N0YXR1c19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMjAKICAgIC8vIHRvdGFsX2NvdXBvbnM9c2VsZi50b3RhbF9jb3Vwb25zLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfY291cG9ucyBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMyMy0zMjYKICAgIC8vIGRheV9jb3VudF9mYWN0b3I9dHlwLkRheUNvdW50RmFjdG9yKAogICAgLy8gICAgIG51bWVyYXRvcj1udW1lcmF0b3IsCiAgICAvLyAgICAgZGVub21pbmF0b3I9ZGVub21pbmF0b3IsCiAgICAvLyApLAogICAgZGlnIDIKICAgIGl0b2IKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMxOS0zMjgKICAgIC8vIHJldHVybiB0eXAuQ291cG9uc0luZm8oCiAgICAvLyAgICAgdG90YWxfY291cG9ucz1zZWxmLnRvdGFsX2NvdXBvbnMsCiAgICAvLyAgICAgZHVlX2NvdXBvbnM9ZHVlX2NvdXBvbnMsCiAgICAvLyAgICAgbmV4dF9jb3Vwb25fZHVlX2RhdGU9bmV4dF9jb3Vwb25fZHVlX2RhdGUsCiAgICAvLyAgICAgZGF5X2NvdW50X2ZhY3Rvcj10eXAuRGF5Q291bnRGYWN0b3IoCiAgICAvLyAgICAgICAgIG51bWVyYXRvcj1udW1lcmF0b3IsCiAgICAvLyAgICAgICAgIGRlbm9taW5hdG9yPWRlbm9taW5hdG9yLAogICAgLy8gICAgICksCiAgICAvLyAgICAgYWxsX2R1ZV9jb3Vwb25zX3BhaWQ9YWxsX2R1ZV9jb3Vwb25zX3BhaWQsCiAgICAvLyApCiAgICBzd2FwCiAgICBpdG9iCiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNQogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDMxIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgNQogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjMwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5wYXltZW50X2FnZW50LmNvdXBvbi5Db3Vwb25QYXltZW50QWdlbnRNaXhpbi5wYXlfY291cG9uW3JvdXRpbmddKCkgLT4gdm9pZDoKcGF5X2NvdXBvbjoKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzkKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1c19pc19hY3RpdmUoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo0MAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo0MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjQ0CiAgICAvLyB1bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo0NQogICAgLy8gYXNzZXJ0IHVuaXRzID4gMCwgZXJyLk5PX1VOSVRTCiAgICBhc3NlcnQgLy8gTm8gRC1BU0EgdW5pdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjQ3CiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYuY291bnRfZHVlX2NvdXBvbnMoKQogICAgY2FsbHN1YiBjb3VudF9kdWVfY291cG9ucwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NDgKICAgIC8vIGFjY291bnRfcGFpZF9jb3Vwb25zID0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGFpZF9jb3Vwb25zCiAgICBzd2FwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjQ5CiAgICAvLyBhc3NlcnQgZHVlX2NvdXBvbnMgPiBhY2NvdW50X3BhaWRfY291cG9ucywgZXJyLk5PX0RVRV9DT1VQT04KICAgIHN3YXAKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQgLy8gTm8gZHVlIGNvdXBvbiB0byBwYXkKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjUwLTUzCiAgICAvLyAjIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyB2ZXJpZnkgaWYgb3RoZXIgYWNjb3VudHMgYXJlIHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBwYXltZW50IG9mIHByZXZpb3VzIGNvdXBvbnMKICAgIC8vIGFzc2VydCBzZWxmLmFsbF9kdWVfY291cG9uc19wYWlkKAogICAgLy8gICAgIGFjY291bnRfcGFpZF9jb3Vwb25zCiAgICAvLyApLCBlcnIuUEVORElOR19DT1VQT05fUEFZTUVOVAogICAgZHVwCiAgICBjYWxsc3ViIGFsbF9kdWVfY291cG9uc19wYWlkCiAgICBhc3NlcnQgLy8gUGVuZGluZyBkdWUgY291cG9uIHBheW1lbnQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE5NwogICAgLy8gc2VsZi5hY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcyksCiAgICBkaWcgMQogICAgY2FsbHN1YiBhY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxOTgKICAgIC8vIGFjY291bnRfcGFpZF9jb3Vwb25zICsgMSwKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxOTYtMTk5CiAgICAvLyByZXR1cm4gc2VsZi5jb3Vwb25faW50ZXJlc3RfYW1vdW50KAogICAgLy8gICAgIHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpLAogICAgLy8gICAgIGFjY291bnRfcGFpZF9jb3Vwb25zICsgMSwKICAgIC8vICkKICAgIGNhbGxzdWIgY291cG9uX2ludGVyZXN0X2Ftb3VudAogICAgc3dhcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo1NAogICAgLy8gc2VsZi5hc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uKGhvbGRpbmdfYWRkcmVzcykKICAgIGR1cAogICAgY2FsbHN1YiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjU3CiAgICAvLyBpZiBzZWxmLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3MpOgogICAgY2FsbHN1YiBpc19wYXltZW50X2V4ZWN1dGFibGUKICAgIGJ6IHBheV9jb3Vwb25fZWxzZV9ib2R5QDMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6NTgtNTkKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgb24tY2hhaW4gcGF5bWVudCBhZ2VudAogICAgLy8gc2VsZi5hc3NlcnRfZW5vdWdoX2Z1bmRzKHBheW1lbnRfYW1vdW50KQogICAgZHVwbiAyCiAgICBjYWxsc3ViIGFzc2VydF9lbm91Z2hfZnVuZHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6NjAtNjEKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgdGhlIHNhbWUgYXNzZXQgZm9yIGRlbm9taW5hdGlvbiBhbmQgc2V0dGxlbWVudCwgbm8gY29udmVyc2lvbiBuZWVkZWQKICAgIC8vIHNlbGYucGF5KHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcywgcGF5bWVudF9hbW91bnQpCiAgICBkaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMgogICAgc3dhcAogICAgY2FsbHN1YiBwYXkKCnBheV9jb3Vwb25fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NjMKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyArPSAxCiAgICBkaWcgMgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBwdXNoaW50IDQ4CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NjQKICAgIC8vIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgKz0gdW5pdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAicGFpZF9jb3Vwb25fdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgZXhpc3RzCiAgICBkaWcgMgogICAgKwogICAgYnl0ZWMgMjggLy8gInBhaWRfY291cG9uX3VuaXRzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MTcKICAgIC8vIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjIwCiAgICAvLyB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToyMgogICAgLy8gY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gImRlbm9taW5hdGlvbl9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjIzCiAgICAvLyBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjI0CiAgICAvLyBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgKgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToxNi0yNwogICAgLy8gRXZlbnQoCiAgICAvLyAgICAgY29udHJhY3RfaWQ9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQsCiAgICAvLyAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX0lQKSwKICAgIC8vICAgICB0eXBlX25hbWU9U3RyaW5nKCJJUCIpLAogICAgLy8gICAgIHRpbWU9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICBjdXJyZW5jeV9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIC8vICAgICBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIC8vICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgbm9taW5hbF9yYXRlX2Jwcz1hcmM0LlVJbnQxNigwKSwgICMgVE9ETzogQWRkIGludGVyZXN0IHJhdGUKICAgIC8vICAgICBub21pbmFsX2FjY3J1ZWQ9VUludDY0KDApLAogICAgLy8gKQogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgwODAwMzcKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAzNSAvLyAweDAwM2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MjUKICAgIC8vIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksICAjIFRPRE86IEFkZCBpbnRlcmVzdCByYXRlCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb3Vwb24ucHk6MTYtMjcKICAgIC8vIEV2ZW50KAogICAgLy8gICAgIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgLy8gICAgIHR5cGU9YXJjNC5VSW50OChlbnVtcy5FVlRfVFlQRV9JUCksCiAgICAvLyAgICAgdHlwZV9uYW1lPVN0cmluZygiSVAiKSwKICAgIC8vICAgICB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgLy8gICAgIHBheW9mZj1wYXlvZmYsCiAgICAvLyAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgY3VycmVuY3lfdW5pdD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC51bml0X25hbWUsCiAgICAvLyAgICAgbm9taW5hbF92YWx1ZT1zZWxmLmNpcmN1bGF0aW5nX3VuaXRzICogc2VsZi51bml0X3ZhbHVlLAogICAgLy8gICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksICAjIFRPRE86IEFkZCBpbnRlcmVzdCByYXRlCiAgICAvLyAgICAgbm9taW5hbF9hY2NydWVkPVVJbnQ2NCgwKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToyNgogICAgLy8gbm9taW5hbF9hY2NydWVkPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY291cG9uLnB5OjE2LTI3CiAgICAvLyBFdmVudCgKICAgIC8vICAgICBjb250cmFjdF9pZD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCwKICAgIC8vICAgICB0eXBlPWFyYzQuVUludDgoZW51bXMuRVZUX1RZUEVfSVApLAogICAgLy8gICAgIHR5cGVfbmFtZT1TdHJpbmcoIklQIiksCiAgICAvLyAgICAgdGltZT1HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIC8vICAgICBwYXlvZmY9cGF5b2ZmLAogICAgLy8gICAgIGN1cnJlbmN5X2lkPXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLmlkLAogICAgLy8gICAgIGN1cnJlbmN5X3VuaXQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQudW5pdF9uYW1lLAogICAgLy8gICAgIG5vbWluYWxfdmFsdWU9c2VsZi5jaXJjdWxhdGluZ191bml0cyAqIHNlbGYudW5pdF92YWx1ZSwKICAgIC8vICAgICBub21pbmFsX3JhdGVfYnBzPWFyYzQuVUludDE2KDApLCAgIyBUT0RPOiBBZGQgaW50ZXJlc3QgcmF0ZQogICAgLy8gICAgIG5vbWluYWxfYWNjcnVlZD1VSW50NjQoMCksCiAgICAvLyApCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMDI0OTUwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weToxNS0yOAogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIEV2ZW50KAogICAgLy8gICAgICAgICBjb250cmFjdF9pZD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCwKICAgIC8vICAgICAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX0lQKSwKICAgIC8vICAgICAgICAgdHlwZV9uYW1lPVN0cmluZygiSVAiKSwKICAgIC8vICAgICAgICAgdGltZT1HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIC8vICAgICAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgICAgIGN1cnJlbmN5X3VuaXQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQudW5pdF9uYW1lLAogICAgLy8gICAgICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksICAjIFRPRE86IEFkZCBpbnRlcmVzdCByYXRlCiAgICAvLyAgICAgICAgIG5vbWluYWxfYWNjcnVlZD1VSW50NjQoMCksCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgYnl0ZWMgMzYgLy8gbWV0aG9kICJFdmVudCh1aW50NjQsdWludDgsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50NjQsdWludDE2LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo3MAogICAgLy8gdGltZXN0YW1wPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo2OC03MgogICAgLy8gcmV0dXJuIHR5cC5QYXltZW50UmVzdWx0KAogICAgLy8gICAgIGFtb3VudD1wYXltZW50X2Ftb3VudCwKICAgIC8vICAgICB0aW1lc3RhbXA9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgY29udGV4dD1wYXltZW50X2luZm8sICAjIFRPRE86IEFkZCBpbmZvIG9uIGZhaWxlZCBwYXltZW50CiAgICAvLyApCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMzcgLy8gMHgwMDEyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTozMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpwYXlfY291cG9uX2Vsc2VfYm9keUAzOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvdXBvbi5weTo2My02NAogICAgLy8gIyBBY2NvdW50cyBzdXNwZW5kZWQgb3Igbm90IG9wdGVkIGluIGF0IHRoZSB0aW1lIG9mIHBheW1lbnRzIG11c3Qgbm90IHN0YWxsIHRoZSBELUFTQQogICAgLy8gcGF5bWVudF9hbW91bnQgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMQogICAgYiBwYXlfY291cG9uX2FmdGVyX2lmX2Vsc2VANAoKCi8vIG1vZHVsZXMucGF5bWVudF9hZ2VudC5wcmluY2lwYWwuUHJpbmNpcGFsUGF5bWVudEFnZW50TWl4aW4ucGF5X3ByaW5jaXBhbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnBheV9wcmluY2lwYWw6CiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjUKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0FDVElWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMAogICAgPT0KICAgIC8vIG1vZHVsZXMvYWN0dXMvcGFtLnB5OjE2LTE3CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcmVzdHJpY3QgY2FsbGVyIGF1dGhvcml6YXRpb24KICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1c19pc19hY3RpdmUoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToxOAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2FjdHVzL3BhbS5weToxOQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWN0dXMvcGFtLnB5OjIxCiAgICAvLyB1bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvYWN0dXMvcGFtLnB5OjIyCiAgICAvLyBhc3NlcnQgdW5pdHMgPiAwLCBlcnIuTk9fVU5JVFMKICAgIGFzc2VydCAvLyBObyBELUFTQSB1bml0cwogICAgLy8gbW9kdWxlcy9hY3R1cy9wYW0ucHk6MjMKICAgIC8vIGFzc2VydCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+PSBzZWxmLm1hdHVyaXR5X2RhdGUsIGVyci5OT1RfTUFUVVJFCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgPj0KICAgIGFzc2VydCAvLyBOb3QgbWF0dXJlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3OAogICAgLy8gc2VsZi5jb3VudF9kdWVfY291cG9ucygpCiAgICBjYWxsc3ViIGNvdW50X2R1ZV9jb3Vwb25zCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3Ni03OQogICAgLy8gIyBQcmluY2lwYWwgcGF5bWVudCBpcyBmb3JiaWRkZW4gaW4gY2FzZSBvZiBwZW5kaW5nIGNvdXBvbiBwYXltZW50cwogICAgLy8gYXNzZXJ0IHNlbGYuYWxsX2R1ZV9jb3Vwb25zX3BhaWQoCiAgICAvLyAgICAgc2VsZi5jb3VudF9kdWVfY291cG9ucygpCiAgICAvLyApLCBlcnIuUEVORElOR19DT1VQT05fUEFZTUVOVAogICAgY2FsbHN1YiBhbGxfZHVlX2NvdXBvbnNfcGFpZAogICAgYXNzZXJ0IC8vIFBlbmRpbmcgZHVlIGNvdXBvbiBwYXltZW50CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo4MAogICAgLy8gcmV0dXJuIHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpCiAgICBkdXAKICAgIGNhbGxzdWIgYWNjb3VudF90b3RhbF91bml0c192YWx1ZQogICAgc3dhcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo1MwogICAgLy8gc2VsZi5hc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uKGhvbGRpbmdfYWRkcmVzcykKICAgIGR1cAogICAgY2FsbHN1YiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjU2CiAgICAvLyBpZiBzZWxmLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3MpOgogICAgY2FsbHN1YiBpc19wYXltZW50X2V4ZWN1dGFibGUKICAgIGJ6IHBheV9wcmluY2lwYWxfZWxzZV9ib2R5QDMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6NTctNTgKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgb24tY2hhaW4gcGF5bWVudCBhZ2VudAogICAgLy8gc2VsZi5hc3NlcnRfZW5vdWdoX2Z1bmRzKHBheW1lbnRfYW1vdW50KQogICAgZHVwbiAyCiAgICBjYWxsc3ViIGFzc2VydF9lbm91Z2hfZnVuZHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6NTktNjAKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgdGhlIHNhbWUgYXNzZXQgZm9yIGRlbm9taW5hdGlvbiBhbmQgc2V0dGxlbWVudCwgbm8gY29udmVyc2lvbiBuZWVkZWQKICAgIC8vIHNlbGYucGF5KHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcywgcGF5bWVudF9hbW91bnQpCiAgICBkaWcgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMgogICAgc3dhcAogICAgY2FsbHN1YiBwYXkKCnBheV9wcmluY2lwYWxfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTk5CiAgICAvLyBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIC09IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLQogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjAwCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgc3dhcAogICAgaW50Y18yIC8vIDMyCiAgICBkaWcgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjIwMQogICAgLy8gc2VsZi5lbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMoKQogICAgY2FsbHN1YiBlbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6MTcKICAgIC8vIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjIwCiAgICAvLyB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weToyMgogICAgLy8gY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gImRlbm9taW5hdGlvbl9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjIzCiAgICAvLyBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIGR1cAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvcHJpbmNpcGFsLnB5OjI0CiAgICAvLyBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgKgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weToxNi0yNwogICAgLy8gRXZlbnQoCiAgICAvLyAgICAgY29udHJhY3RfaWQ9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQsCiAgICAvLyAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX1BSKSwKICAgIC8vICAgICB0eXBlX25hbWU9U3RyaW5nKCJQUiIpLAogICAgLy8gICAgIHRpbWU9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICBjdXJyZW5jeV9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIC8vICAgICBjdXJyZW5jeV91bml0PXNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkLnVuaXRfbmFtZSwKICAgIC8vICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgbm9taW5hbF9yYXRlX2Jwcz1hcmM0LlVJbnQxNigwKSwKICAgIC8vICAgICBub21pbmFsX2FjY3J1ZWQ9VUludDY0KDApLAogICAgLy8gKQogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgwMzAwMzcKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA1CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAzNSAvLyAweDAwM2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6MjUKICAgIC8vIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9wcmluY2lwYWwucHk6MTYtMjcKICAgIC8vIEV2ZW50KAogICAgLy8gICAgIGNvbnRyYWN0X2lkPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkLAogICAgLy8gICAgIHR5cGU9YXJjNC5VSW50OChlbnVtcy5FVlRfVFlQRV9QUiksCiAgICAvLyAgICAgdHlwZV9uYW1lPVN0cmluZygiUFIiKSwKICAgIC8vICAgICB0aW1lPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgLy8gICAgIHBheW9mZj1wYXlvZmYsCiAgICAvLyAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgY3VycmVuY3lfdW5pdD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC51bml0X25hbWUsCiAgICAvLyAgICAgbm9taW5hbF92YWx1ZT1zZWxmLmNpcmN1bGF0aW5nX3VuaXRzICogc2VsZi51bml0X3ZhbHVlLAogICAgLy8gICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgbm9taW5hbF9hY2NydWVkPVVJbnQ2NCgwKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMDI1MDUyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weToxNS0yOAogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIEV2ZW50KAogICAgLy8gICAgICAgICBjb250cmFjdF9pZD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCwKICAgIC8vICAgICAgICAgdHlwZT1hcmM0LlVJbnQ4KGVudW1zLkVWVF9UWVBFX1BSKSwKICAgIC8vICAgICAgICAgdHlwZV9uYW1lPVN0cmluZygiUFIiKSwKICAgIC8vICAgICAgICAgdGltZT1HbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIC8vICAgICAgICAgcGF5b2ZmPXBheW9mZiwKICAgIC8vICAgICAgICAgY3VycmVuY3lfaWQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQuaWQsCiAgICAvLyAgICAgICAgIGN1cnJlbmN5X3VuaXQ9c2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQudW5pdF9uYW1lLAogICAgLy8gICAgICAgICBub21pbmFsX3ZhbHVlPXNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUsCiAgICAvLyAgICAgICAgIG5vbWluYWxfcmF0ZV9icHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgICAgIG5vbWluYWxfYWNjcnVlZD1VSW50NjQoMCksCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgYnl0ZWMgMzYgLy8gbWV0aG9kICJFdmVudCh1aW50NjQsdWludDgsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50NjQsdWludDE2LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo2OQogICAgLy8gdGltZXN0YW1wPUdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo2Ny03MQogICAgLy8gcmV0dXJuIHR5cC5QYXltZW50UmVzdWx0KAogICAgLy8gICAgIGFtb3VudD1wYXltZW50X2Ftb3VudCwKICAgIC8vICAgICB0aW1lc3RhbXA9R2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyAgICAgY29udGV4dD1wYXltZW50X2luZm8sICAjIFRPRE86IEFkZCBpbmZvIG9uIGZhaWxlZCBwYXltZW50CiAgICAvLyApCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMzcgLy8gMHgwMDEyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTozMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpwYXlfcHJpbmNpcGFsX2Vsc2VfYm9keUAzOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L3ByaW5jaXBhbC5weTo2Mi02MwogICAgLy8gIyBBY2NvdW50cyBzdXNwZW5kZWQgb3Igbm90IG9wdGVkIGluIGF0IHRoZSB0aW1lIG9mIHBheW1lbnRzIG11c3Qgbm90IHN0YWxsIHRoZSBELUFTQQogICAgLy8gcGF5bWVudF9hbW91bnQgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMQogICAgYiBwYXlfcHJpbmNpcGFsX2FmdGVyX2lmX2Vsc2VANAoKCi8vIG1vZHVsZXMudHJhbnNmZXJfYWdlbnQuY291cG9uLkNvdXBvblRyYW5zZmVyQWdlbnRNaXhpbi5hc3NldF90cmFuc2Zlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIG1vZHVsZXMvdHJhbnNmZXJfYWdlbnQvY291cG9uLnB5OjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTUzLTE1OAogICAgLy8gc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vIGFuZCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyBhbmQgKAogICAgLy8gICAgIG5vdCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyApCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE1NAogICAgLy8gYW5kIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOCAvLyAic2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICA8PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTUzLTE1OAogICAgLy8gc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vIGFuZCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyBhbmQgKAogICAgLy8gICAgIG5vdCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyApCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDYKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE1NgogICAgLy8gbm90IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNTYtMTU3CiAgICAvLyBub3Qgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX3RydWVANQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTU3CiAgICAvLyBvciBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA8IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICA8CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNTYtMTU3CiAgICAvLyBub3Qgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gb3IgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICBieiBhc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDYKCmFzc2V0X3RyYW5zZmVyX2Jvb2xfdHJ1ZUA1OgogICAgaW50Y18xIC8vIDEKCmFzc2V0X3RyYW5zZmVyX2Jvb2xfbWVyZ2VANzoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE1Mi0xNTkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vICAgICBhbmQgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIGFuZCAoCiAgICAvLyAgICAgICAgIG5vdCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgICAgIG9yIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIDwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gICAgICkKICAgIC8vICksIGVyci5TRUNPTkRBUllfTUFSS0VUX0NMT1NFRAogICAgYXNzZXJ0IC8vIFNlY29uZGFyeSBtYXJrZXQgaXMgY2xvc2VkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNjktMTcxCiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZ3JhbnRzIHRyYW5zZmVyIHJpZ2h0IHRvIEQtQVNBIG93bmVycy4gT3RoZXIgaW1wbGVtZW50YXRpb25zIG1heSByZWxheSBvbiBvdGhlcgogICAgLy8gIyByb2xlcywgZXh0ZXJuYWwgQXBwcyB0aHJvdWdoIEMyQyBjYWxscyAoZS5nLiwgYW4gb3JkZXIgYm9vayksIG9yIG9mZi1jaGFpbiB0cmFuc2ZlciBhZ2VudHMuCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZW5kZXJfaG9sZGluZ19hZGRyZXNzLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNzIKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTczCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDEwCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE3NgogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkKHNlbmRlcl9ob2xkaW5nX2FkZHJlc3MpCiAgICBkaWcgMwogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNzcKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hY2NvdW50X3N1c3BlbmRlZChyZWNlaXZlcl9ob2xkaW5nX2FkZHJlc3MpCiAgICBkaWcgMQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxOTAKICAgIC8vIGFzc2VydCBzZW5kZXJfaG9sZGluZ19hZGRyZXNzICE9IHJlY2VpdmVyX2hvbGRpbmdfYWRkcmVzcywgZXJyLlNFTEZfVFJBTlNGRVIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICAhPQogICAgYXNzZXJ0IC8vIFNlbmRlciBhbmQgcmVjZWl2ZXIgbXVzdCBiZSBkaWZmZXJlbnQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE5MQogICAgLy8gYXNzZXJ0IHVuaXRzID4gMCwgZXJyLk5VTExfVFJBTlNGRVIKICAgIGRpZyAyCiAgICBkdXAKICAgIGFzc2VydCAvLyBUcmFuc2ZlciB1bml0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxOTIKICAgIC8vIGFzc2VydCB1bml0cyA8PSBzZWxmLmFjY291bnRbc2VuZGVyX2hvbGRpbmdfYWRkcmVzc10udW5pdHMsIGVyci5PVkVSX1RSQU5TRkVSCiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMgogICAgPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgc2VuZGVyIHVuaXRzIHRvIHRyYW5zZmVyCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NjMKICAgIC8vIHNlbmRlcl91bml0X3ZhbHVlID0gc2VsZi5hY2NvdW50W3NlbmRlcl0udW5pdF92YWx1ZQogICAgZXh0cmFjdCA0MCA4CiAgICBidXJ5IDkKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo2NAogICAgLy8gaWYgc2VsZi5hY2NvdW50W3JlY2VpdmVyXS51bml0cyA+IFVJbnQ2NCgwKToKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBieiBhc3NldF90cmFuc2Zlcl9lbHNlX2JvZHlAOQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjU4CiAgICAvLyBzZWxmLmFjY291bnRbc2VuZGVyXS51bml0X3ZhbHVlID09IHNlbGYuYWNjb3VudFtyZWNlaXZlcl0udW5pdF92YWx1ZQogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1OC01OQogICAgLy8gc2VsZi5hY2NvdW50W3NlbmRlcl0udW5pdF92YWx1ZSA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnVuaXRfdmFsdWUKICAgIC8vIGFuZCBzZWxmLmFjY291bnRbc2VuZGVyXS5wYWlkX2NvdXBvbnMgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS5wYWlkX2NvdXBvbnMKICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Jvb2xfZmFsc2VAMjAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1OQogICAgLy8gYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1OC01OQogICAgLy8gc2VsZi5hY2NvdW50W3NlbmRlcl0udW5pdF92YWx1ZSA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnVuaXRfdmFsdWUKICAgIC8vIGFuZCBzZWxmLmFjY291bnRbc2VuZGVyXS5wYWlkX2NvdXBvbnMgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS5wYWlkX2NvdXBvbnMKICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Jvb2xfZmFsc2VAMjAKICAgIGludGNfMSAvLyAxCgphc3NldF90cmFuc2Zlcl9ib29sX21lcmdlQDIxOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjU3LTYwCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudFtzZW5kZXJdLnVuaXRfdmFsdWUgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS51bml0X3ZhbHVlCiAgICAvLyAgICAgYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgLy8gKSwgZXJyLk5PTl9GVU5HSUJMRV9VTklUUwogICAgYXNzZXJ0IC8vIFNlbmRlciBhbmQgcmVjZWl2ZXIgdW5pdHMgYXJlIG5vdCBmdW5naWJsZQoKYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIG1vZHVsZXMvdHJhbnNmZXJfYWdlbnQvY291cG9uLnB5OjQ2LTQ3CiAgICAvLyAjIFRyYW5zZmVycmVkIHVuaXRzIHZhbHVlIChtdXN0IGJlIGNvbXB1dGVkIGJlZm9yZSB0aGUgdHJhbnNmZXIpCiAgICAvLyBzZW5kZXJfdW5pdF92YWx1ZSA9IHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlCiAgICBkaWcgNgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0MAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgNQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6NjktNzAKICAgIC8vICMgVHJhbnNmZXIgaXMgZm9yYmlkZGVuIGluIGNhc2Ugb2YgcGVuZGluZyBjb3Vwb24gcGF5bWVudHMKICAgIC8vIGR1ZV9jb3Vwb25zID0gc2VsZi5jb3VudF9kdWVfY291cG9ucygpCiAgICBjYWxsc3ViIGNvdW50X2R1ZV9jb3Vwb25zCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3MQogICAgLy8gc2VsZi5hc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudChzZW5kZXJfaG9sZGluZ19hZGRyZXNzLCBkdWVfY291cG9ucykKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGRpZyAxCiAgICBjYWxsc3ViIGFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTo3MgogICAgLy8gcmV0dXJuIHNlbGYuYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoc2VuZGVyX2hvbGRpbmdfYWRkcmVzcywgdW5pdHMsIGR1ZV9jb3Vwb25zKQogICAgc3dhcAogICAgZGlnIDMKICAgIGR1cAogICAgY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIGFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50CiAgICBidXJ5IDcKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo3MQogICAgLy8gYXNzZXJ0IHVuaXRzIDw9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLCBlcnIuT1ZFUl9UUkFOU0ZFUgogICAgZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAyCiAgICA8PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBzZW5kZXIgdW5pdHMgdG8gdHJhbnNmZXIKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo3MgogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMgLT0gdW5pdHMKICAgIHN3YXAKICAgIC0KICAgIGl0b2IKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMzIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo1MgogICAgLy8gaWYgc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMgPT0gVUludDY0KDApOgogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBibnogYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxNgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjUzCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA0MAogICAgZGlnIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NTQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyA9IFVJbnQ2NCgwKQogICAgcHVzaGludCA0OAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKCmFzc2V0X3RyYW5zZmVyX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NzYKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzICs9IHVuaXRzCiAgICBkaWcgNQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgKwogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzIgLy8gMzIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvdHJhbnNmZXJfYWdlbnQvY291cG9uLnB5OjUzCiAgICAvLyByZXR1cm4gdW5pdHMgKiBzZW5kZXJfdW5pdF92YWx1ZSArIGFjY3J1ZWRfaW50ZXJlc3QKICAgIGRpZyA0CiAgICAqCiAgICBkaWcgNQogICAgKwogICAgLy8gbW9kdWxlcy90cmFuc2Zlcl9hZ2VudC9jb3Vwb24ucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDIwOgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUAyMQoKYXNzZXRfdHJhbnNmZXJfZWxzZV9ib2R5QDk6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NjcKICAgIC8vIHNlbGYuYWNjb3VudFtyZWNlaXZlcl0udW5pdF92YWx1ZSA9IHNlbmRlcl91bml0X3ZhbHVlCiAgICBkaWcgNQogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICBkaWcgMTAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NjgKICAgIC8vIHNlbGYuYWNjb3VudFtyZWNlaXZlcl0ucGFpZF9jb3Vwb25zID0gc2VsZi5hY2NvdW50W3NlbmRlcl0ucGFpZF9jb3Vwb25zCiAgICBkaWcgNwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgNDggOAogICAgcHVzaGludCA0OAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIGIgYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxMAoKYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUA2OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUA3CgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmFzc2V0X2NyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X2NyZWF0ZToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMQogICAgcHVzaGludCAzOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCA0MAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCA3IG9mICh1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OCx1aW50OFszMl0sKGxlbit1dGY4W10pKQogICAgZGlnIDIKICAgIHN3YXAKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA0MgogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3Igc21hcnRfY29udHJhY3RzLmFiaV90eXBlcy5Bc3NldE1ldGFkYXRhCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNzYKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSBhcnJhbmdlcgogICAgYnl0ZWMgOCAvLyAweDUyMzIzMDIzCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToyNzcKICAgIC8vIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YS5ieXRlcwogICAgYnl0ZWMgMjUgLy8gIm1ldGFkYXRhIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmFzc2V0X3VwZGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2V0X3VwZGF0ZToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBwdXNoaW50IDM4CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDcgb2YgKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4WzMyXSwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDQyCiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBzbWFydF9jb250cmFjdHMuYWJpX3R5cGVzLkFzc2V0TWV0YWRhdGEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI4NC0yODcKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBncmFudHMgdGhlIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byB0aGUgQXJyYW5nZXIuCiAgICAvLyAjIE90aGVyIGltcGxlbWVudGF0aW9ucyBtYXkgZGlzYWJsZSBELUFTQSBhcHBsaWNhdGlvbiB1cGRhdGFiaWxpdHkgb3IgY2hhbmdlIGl0cyBhdXRob3JpemF0aW9ucy4KICAgIC8vICMg4pqg77iPIFdBUk5JTkc6IEFwcGxpY2F0aW9uIHVwZGF0ZXMgbXVzdCBiZSBleGVjdXRlZCBWRVJZIGNhcmVmdWxseSwgYXMgdGhleSBtaWdodCBpbnRyb2R1Y2UgYnJlYWtpbmcgY2hhbmdlcy4KICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI4OAogICAgLy8gc2VsZi5tZXRhZGF0YSA9IG1ldGFkYXRhLmJ5dGVzCiAgICBieXRlYyAyNSAvLyAibWV0YWRhdGEiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6Mjc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIlVwZGF0ZUFwcGxpY2F0aW9uIl0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLnNldF9zZWNvbmRhcnlfdGltZV9ldmVudHNbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzOgogICAgaW50Y18wIC8vIDAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzExCiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjgKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0VOREVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGMgNSAvLyAyMDAKICAgID09CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMTIKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5zdGF0dXNfaXNfZW5kZWQoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgIQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMTMKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzE1CiAgICAvLyBhc3NlcnQgc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50cy5sZW5ndGggPj0gMSwgZXJyLklOVkFMSURfVElNRV9FVkVOVFNfTEVOR1RICiAgICBkdXAKICAgIGFzc2VydCAvLyBUaW1lIGV2ZW50cyBsZW5ndGggaXMgaW52YWxpZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzE2CiAgICAvLyBpZiBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzLmxlbmd0aCA+IDE6CiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYnogc2V0X3NlY29uZGFyeV90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMxNwogICAgLy8gc2VsZi5hc3NlcnRfdGltZV9ldmVudHNfc29ydGVkKHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHMpCiAgICBkdXAKICAgIGNhbGxzdWIgYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZAogICAgYnVyeSAxCgpzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMyMAogICAgLy8gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzIxCiAgICAvLyA8PSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzW2NmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFhdCiAgICBkaWcgMQogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgYnVyeSA0CiAgICBwdXNoaW50IDIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjAtMzIxCiAgICAvLyBzZWxmLmlzc3VhbmNlX2RhdGUKICAgIC8vIDw9IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbY2ZnLlNFQ09OREFSWV9NQVJLRVRfT1BFTklOR19EQVRFX0lEWF0KICAgIHN3YXAKICAgIGRpZyAxCiAgICA8PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzE5LTMyMgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmlzc3VhbmNlX2RhdGUKICAgIC8vICAgICA8PSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzW2NmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFhdCiAgICAvLyApLCBlcnIuSU5WQUxJRF9TRUNPTkRBUllfT1BFTklOR19EQVRFCiAgICBhc3NlcnQgLy8gSW52YWxpZCBzZWNvbmRhcnkgbWFya2V0IG9wZW5pbmcgZGF0ZQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzIzCiAgICAvLyBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlID0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIGJ5dGVjIDE4IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMyMy0zMjUKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgLy8gICAgIGNmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjYKICAgIC8vIGlmIHNlbGYubWF0dXJpdHlfZGF0ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICBieiBzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzI4CiAgICAvLyBzZWxmLm1hdHVyaXR5X2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjkKICAgIC8vID49IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWF0KICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBkaWcgMwogICAgc3dhcAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMyOC0zMjkKICAgIC8vIHNlbGYubWF0dXJpdHlfZGF0ZQogICAgLy8gPj0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1tjZmcuU0VDT05EQVJZX01BUktFVF9DTE9TVVJFX0RBVEVfSURYXQogICAgc3dhcAogICAgZGlnIDEKICAgID49CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMjctMzMwCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYubWF0dXJpdHlfZGF0ZQogICAgLy8gICAgID49IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWF0KICAgIC8vICksIGVyci5JTlZBTElEX1NFQ09OREFSWV9DTE9TVVJFX0RBVEUKICAgIGFzc2VydCAvLyBJbnZhbGlkIHNlY29uZGFyeSBtYXJrZXQgY2xvc3VyZSBkYXRlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMzEKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgPSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgYnl0ZWMgMTEgLy8gInNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzMxLTMzMwogICAgLy8gc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSA9IHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWAogICAgLy8gXQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCnNldF9zZWNvbmRhcnlfdGltZV9ldmVudHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzM1CiAgICAvLyBzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZT1zZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjMzNgogICAgLy8gc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU9c2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMzQtMzM3CiAgICAvLyByZXR1cm4gdHlwLlNlY29uZGFyeU1hcmtldFNjaGVkdWxlKAogICAgLy8gICAgIHNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlPXNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUsCiAgICAvLyAgICAgc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU9c2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSwKICAgIC8vICkKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvbW1vbi5Db3JlRmluYW5jaWFsQ29tbW9uTWl4aW4uc2V0X2RlZmF1bHRfc3RhdHVzW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2RlZmF1bHRfc3RhdHVzOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzQKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnRydXN0ZWUsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlYyAyMCAvLyAweDUyMzYzMDIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozNTIKICAgIC8vIHNlbGYuYXNzZXRfZGVmYXVsdGVkID0gZGVmYXVsdGVkCiAgICBieXRlYyAyNCAvLyAiYXNzZXRfZGVmYXVsdGVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM1MwogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY29tbW9uLkNvcmVGaW5hbmNpYWxDb21tb25NaXhpbi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnByaW1hcnlfZGlzdHJpYnV0aW9uOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjUKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0FDVElWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMAogICAgPT0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0NS0xNDgKICAgIC8vIHNlbGYuc3RhdHVzX2lzX2FjdGl2ZSgpCiAgICAvLyBhbmQgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICBieiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0NgogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNDcKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTQ2LTE0NwogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgPD0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0Ni0xNDgKICAgIC8vIGFuZCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIGJ6IHByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfZmFsc2VANQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTQ4CiAgICAvLyA8IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjcgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxNDctMTQ4CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZQogICAgZGlnIDMKICAgID4KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0Ni0xNDgKICAgIC8vIGFuZCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIGJ6IHByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfZmFsc2VANQogICAgaW50Y18xIC8vIDEKCnByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfbWVyZ2VANjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE0NC0xNDkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCkKICAgIC8vICAgICBhbmQgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIC8vICksIGVyci5QUklNQVJZX0RJU1RSSUJVVElPTl9DTE9TRUQKICAgIGFzc2VydCAvLyBQcmltYXJ5IGRpc3RyaWJ1dGlvbiBpcyBjbG9zZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo3MQogICAgLy8gYXNzZXJ0IHNlbGYuX3JvbGVfaXNfYWN0aXZlKHNlbGYucHJpbWFyeV9kZWFsZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlYyAyMSAvLyAweDUyMzUzMDIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozODMKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6Mzg0CiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM4NQogICAgLy8gYXNzZXJ0IHVuaXRzID4gMCwgZXJyLlpFUk9fVU5JVFMKICAgIGRpZyAxCiAgICBkdXAKICAgIGFzc2VydCAvLyBDYW4gbm90IGRpc3RyaWJ1dGUgemVybyB1bml0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6Mzg2CiAgICAvLyBhc3NlcnQgc2VsZi5jaXJjdWxhdGluZ191bml0cyArIHVuaXRzIDw9IHNlbGYudG90YWxfdW5pdHMsIGVyci5PVkVSX0RJU1RSSUJVVElPTgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIGV4aXN0cwogICAgZGlnIDEKICAgICsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAidG90YWxfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfdW5pdHMgZXhpc3RzCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgcmVtYWluaW5nIEQtQVNBIHVuaXRzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozODgKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKz0gdW5pdHMKICAgIGJ5dGVjXzMgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozODkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzICs9IHVuaXRzCiAgICBkaWcgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgZGlnIDIKICAgIGludGNfMiAvLyAzMgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MzkwCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlID0gc2VsZi51bml0X3ZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDQwCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTozOTEKICAgIC8vIHJldHVybiBzZWxmLnRvdGFsX3VuaXRzIC0gc2VsZi5jaXJjdWxhdGluZ191bml0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJ0b3RhbF91bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF91bml0cyBleGlzdHMKICAgIHN3YXAKICAgIC0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDU6CiAgICBpbnRjXzAgLy8gMAogICAgYiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX21lcmdlQDYKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvbW1vbi5Db3JlRmluYW5jaWFsQ29tbW9uTWl4aW4uZ2V0X2Fzc2V0X2luZm9bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXNzZXRfaW5mbzoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQwMwogICAgLy8gcGVyZm9ybWFuY2UgPSBVSW50NjQoY3N0LlBSRl9QRVJGT1JNQU5UKQogICAgaW50Y18wIC8vIDAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQwNAogICAgLy8gaWYgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPiBzZWxmLm1hdHVyaXR5X2RhdGUgPiAwOgogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgPgogICAgYnogZ2V0X2Fzc2V0X2luZm9fYWZ0ZXJfaWZfZWxzZUA0CiAgICBkdXAKICAgIGJ6IGdldF9hc3NldF9pbmZvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDA1CiAgICAvLyBwZXJmb3JtYW5jZSA9IFVJbnQ2NChjc3QuUFJGX01BVFVSRUQpCiAgICBwdXNoaW50IDQKICAgIGJ1cnkgMgoKZ2V0X2Fzc2V0X2luZm9fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDA2LTQwNwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBubyBncmFjZSBvciBkZWxpbnF1ZW5jeSBwZXJpb2RzCiAgICAvLyBpZiBzZWxmLmFzc2V0X2RlZmF1bHRlZDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNCAvLyAiYXNzZXRfZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2RlZmF1bHRlZCBleGlzdHMKICAgIGJ6IGdldF9hc3NldF9pbmZvX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDA4CiAgICAvLyBwZXJmb3JtYW5jZSA9IFVJbnQ2NChjc3QuUFJGX0RFRkFVTFRFRCkKICAgIHB1c2hpbnQgMwogICAgYnVyeSAyCgpnZXRfYXNzZXRfaW5mb19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MTEKICAgIC8vIGRlbm9taW5hdGlvbl9hc3NldF9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiZGVub21pbmF0aW9uX2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxMgogICAgLy8gc2V0dGxlbWVudF9hc3NldF9pZD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQuaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjQ1CiAgICAvLyByZXR1cm4gc2VsZi5jaXJjdWxhdGluZ191bml0cyAqIHNlbGYudW5pdF92YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInVuaXRfdmFsdWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudW5pdF92YWx1ZSBleGlzdHMKICAgIGR1cDIKICAgICoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxNQogICAgLy8gZGF5X2NvdW50X2NvbnZlbnRpb249YXJjNC5VSW50OChzZWxmLmRheV9jb3VudF9jb252ZW50aW9uKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MTYKICAgIC8vIHByaW5jaXBhbF9kaXNjb3VudD1hcmM0LlVJbnQxNihzZWxmLnByaW5jaXBhbF9kaXNjb3VudCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjYgLy8gInByaW5jaXBhbF9kaXNjb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmluY2lwYWxfZGlzY291bnQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxNwogICAgLy8gaW50ZXJlc3RfcmF0ZT1hcmM0LlVJbnQxNihzZWxmLmludGVyZXN0X3JhdGUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDMzIC8vICJpbnRlcmVzdF9yYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmludGVyZXN0X3JhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxOAogICAgLy8gdG90YWxfc3VwcGx5PXNlbGYudG90YWxfdW5pdHMsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gInRvdGFsX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3VuaXRzIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDIwCiAgICAvLyBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGU9c2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MjEKICAgIC8vIHByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZT1zZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNyAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQyMgogICAgLy8gaXNzdWFuY2VfZGF0ZT1zZWxmLmlzc3VhbmNlX2RhdGUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDIzCiAgICAvLyBtYXR1cml0eV9kYXRlPXNlbGYubWF0dXJpdHlfZGF0ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MjQKICAgIC8vIHN1c3BlbmRlZD1zZWxmLmFzc2V0X3N1c3BlbmRlZCwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X3N1c3BlbmRlZCBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQyNQogICAgLy8gcGVyZm9ybWFuY2U9YXJjNC5VSW50OChwZXJmb3JtYW5jZSksCiAgICBkaWcgMTUKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQxMC00MjYKICAgIC8vIHJldHVybiB0eXAuQXNzZXRJbmZvKAogICAgLy8gICAgIGRlbm9taW5hdGlvbl9hc3NldF9pZD1zZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZC5pZCwKICAgIC8vICAgICBzZXR0bGVtZW50X2Fzc2V0X2lkPXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZC5pZCwKICAgIC8vICAgICBvdXRzdGFuZGluZ19wcmluY2lwYWw9c2VsZi5vdXRzdGFuZGluZ19wcmluY2lwYWwoKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPXNlbGYudW5pdF92YWx1ZSwKICAgIC8vICAgICBkYXlfY291bnRfY29udmVudGlvbj1hcmM0LlVJbnQ4KHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24pLAogICAgLy8gICAgIHByaW5jaXBhbF9kaXNjb3VudD1hcmM0LlVJbnQxNihzZWxmLnByaW5jaXBhbF9kaXNjb3VudCksCiAgICAvLyAgICAgaW50ZXJlc3RfcmF0ZT1hcmM0LlVJbnQxNihzZWxmLmludGVyZXN0X3JhdGUpLAogICAgLy8gICAgIHRvdGFsX3N1cHBseT1zZWxmLnRvdGFsX3VuaXRzLAogICAgLy8gICAgIGNpcmN1bGF0aW5nX3N1cHBseT1zZWxmLmNpcmN1bGF0aW5nX3VuaXRzLAogICAgLy8gICAgIHByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZT1zZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSwKICAgIC8vICAgICBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGU9c2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUsCiAgICAvLyAgICAgaXNzdWFuY2VfZGF0ZT1zZWxmLmlzc3VhbmNlX2RhdGUsCiAgICAvLyAgICAgbWF0dXJpdHlfZGF0ZT1zZWxmLm1hdHVyaXR5X2RhdGUsCiAgICAvLyAgICAgc3VzcGVuZGVkPXNlbGYuYXNzZXRfc3VzcGVuZGVkLAogICAgLy8gICAgIHBlcmZvcm1hbmNlPWFyYzQuVUludDgocGVyZm9ybWFuY2UpLAogICAgLy8gKQogICAgdW5jb3ZlciAxNAogICAgaXRvYgogICAgdW5jb3ZlciAxNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDExCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDcKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDMxIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjM5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmdldF90aW1lX2V2ZW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF90aW1lX2V2ZW50czoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQzNgogICAgLy8gdGltZV9ldmVudHMgPSB0eXAuVGltZUV2ZW50cygpCiAgICBieXRlYyAzMCAvLyAweDAwMDAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyNQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDM3CiAgICAvLyBpZiBzZWxmLnN0YXR1c19pc19hY3RpdmUoKToKICAgIGJ6IGdldF90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQzOAogICAgLy8gdGltZV9ldmVudHMgPSBzZWxmLnRpbWVfZXZlbnRzLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgMTIgLy8gMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MwogICAgYm94X2dldAogICAgc3dhcAogICAgYnVyeSAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50aW1lX2V2ZW50cyBleGlzdHMKCmdldF90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0MjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvbW1vbi5Db3JlRmluYW5jaWFsQ29tbW9uTWl4aW4uZ2V0X3NlY29uZGFyeV9tYXJrZXRfc2NoZWR1bGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfc2Vjb25kYXJ5X21hcmtldF9zY2hlZHVsZToKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQ1MAogICAgLy8gKHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUsIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gInNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJzZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjQ0OS00NTEKICAgIC8vIHJldHVybiB0eXAuVGltZUV2ZW50cygKICAgIC8vICAgICAoc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSkKICAgIC8vICkKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY29tbW9uLkNvcmVGaW5hbmNpYWxDb21tb25NaXhpbi5nZXRfYXNzZXRfbWV0YWRhdGFbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXNzZXRfbWV0YWRhdGE6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weTo0NjIKICAgIC8vIHJldHVybiB0eXAuQXNzZXRNZXRhZGF0YS5mcm9tX2J5dGVzKHNlbGYubWV0YWRhdGEpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gIm1ldGFkYXRhIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1ldGFkYXRhIGV4aXN0cwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6NDUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmFjY291bnRpbmcuQWNjb3VudGluZ01vZHVsZS5hY2NvdW50X2dvdl9zdXNwZW5zaW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9nb3Zfc3VzcGVuc2lvbjoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjIDEzIC8vIDB4NTIzNzMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE0CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGR1cAogICAgcHVzaGludCA1NgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNTYKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9vcGVuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9vcGVuOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlYyAxNCAvLyAweDUyMzQzMDIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjgKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBlbm0uU1RBVFVTX0VOREVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGMgNSAvLyAyMDAKICAgID09CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTM5CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuc3RhdHVzX2lzX2VuZGVkKCksIGVyci5VTkFVVEhPUklaRUQKICAgICEKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE0MAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQxCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNDIKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNDYKICAgIC8vIHVuaXRzPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQ0LTE1MAogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10gPSB0eXAuQWNjb3VudEluZm8oCiAgICAvLyAgICAgcGF5bWVudF9hZGRyZXNzPXBheW1lbnRfYWRkcmVzcywKICAgIC8vICAgICB1bml0cz1VSW50NjQoMCksCiAgICAvLyAgICAgdW5pdF92YWx1ZT1VSW50NjQoMCksCiAgICAvLyAgICAgcGFpZF9jb3Vwb25zPVVJbnQ2NCgwKSwKICAgIC8vICAgICBzdXNwZW5kZWQ9RmFsc2UsCiAgICAvLyApCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMzEgLy8gMHgwMAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUxCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmFjY291bnRfY2xvc2Vbcm91dGluZ10oKSAtPiB2b2lkOgphY2NvdW50X2Nsb3NlOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2OAogICAgLy8gYXNzZXJ0IHNlbGYuX3JvbGVfaXNfYWN0aXZlKHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYnl0ZWMgMTQgLy8gMHg1MjM0MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzQKICAgIC8vIGNsb3NlZF91bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3NQogICAgLy8gZGVsIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdCiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzYKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgLT0gY2xvc2VkX3VuaXRzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBkaWcgMQogICAgLQogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3NwogICAgLy8gc2VsZi5lbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMoKQogICAgY2FsbHN1YiBlbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzgKICAgIC8vIHJldHVybiBjbG9zZWRfdW5pdHMsIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmFjY291bnRfdXBkYXRlX3BheW1lbnRfYWRkcmVzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfdXBkYXRlX3BheW1lbnRfYWRkcmVzczoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IGhvbGRpbmdfYWRkcmVzcywgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDEKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwMgogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwNAogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzID0gcGF5bWVudF9hZGRyZXNzCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwNQogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmFjY291bnRpbmcuQWNjb3VudGluZ01vZHVsZS5hY2NvdW50X2dldF9pbmZvW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9nZXRfaW5mbzoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMjIKICAgIC8vIHJldHVybiBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3JvdGF0ZV9hcnJhbmdlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfcm90YXRlX2FycmFuZ2VyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTgKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTkKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSBuZXdfYXJyYW5nZXIKICAgIGJ5dGVjIDggLy8gMHg1MjMyMzAyMwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjAKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19zZXRfb3BfZGFlbW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19zZXRfb3BfZGFlbW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzMKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzQKICAgIC8vIHNlbGYub3BfZGFlbW9uLnZhbHVlID0gYWRkcmVzcwogICAgYnl0ZWMgMjIgLy8gMHg1MjMyMzUyMwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzUKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19hc3NpZ25fcm9sZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfYXNzaWduX3JvbGU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxOTkKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDAKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMQogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDEKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIHB1c2hpbnQgMjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwMgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgOCAvLyAweDUyMzIzMDIzCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAzCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDE0IC8vIDB4NTIzNDMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwNwogICAgLy8gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDkKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKToKICAgIGR1cAogICAgcHVzaGludCA1MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTEwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLnByaW1hcnlfZGVhbGVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDIxIC8vIDB4NTIzNTMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExMQogICAgLy8gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gc2VsZi5fdXBzZXJ0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCBjb25maWcpCiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExMwogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNAogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi50cnVzdGVlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDIwIC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNQogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgZHVwCiAgICBwdXNoaW50IDcwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmF1dGhvcml0eSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyAxMyAvLyAweDUyMzczMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTkKICAgIC8vIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIGR1cAogICAgcHVzaGludCA4MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjIKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDMyIC8vIDB4NTIzODMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMwogICAgLy8gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfcmV2b2tlX3JvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX3Jldm9rZV9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNAogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI2CiAgICAvLyBzZWxmLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgZHVwbiAyCiAgICBjYWxsc3ViIF9hc3NlcnRfdmFsaWRfcm9sZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyNgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgIT0gVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwgZXJyLklOVkFMSURfUk9MRQogICAgZHVwCiAgICBwdXNoaW50IDIwCiAgICAhPQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDE0IC8vIDB4NTIzNDMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyOQogICAgLy8gZGVsIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAoKcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzEKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKToKICAgIGR1cAogICAgcHVzaGludCA1MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTMyCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgMjEgLy8gMHg1MjM1MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTMzCiAgICAvLyBkZWwgc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjcKICAgIC8vIHNlbGYuX2RlbGV0ZV9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcykKICAgIGIgcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgoKcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTM1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIGR1cAogICAgcHVzaGludCA2MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTM2CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyAyMCAvLyAweDUyMzYzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzcKICAgIC8vIGRlbCBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDEzIC8vIDB4NTIzNzMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0MQogICAgLy8gZGVsIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNwogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDMKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgODAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQ0CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDMyIC8vIDB4NTIzODMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NQogICAgLy8gZGVsIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb246CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QgICMgVE9ETzogVXBkYXRlIHNwZWNzIGFuZCBhZGQgdGVzdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo3NwogICAgLy8gYXNzZXJ0IHNlbGYuX3JvbGVfaXNfYWN0aXZlKHNlbGYuYXV0aG9yaXR5LCBUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYnl0ZWMgMTMgLy8gMHg1MjM3MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NgogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGJ5dGVjIDIzIC8vICJhc3NldF9zdXNwZW5kZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NwogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QgICMgVE9ETzogVXBkYXRlIHNwZWNzIGFuZCBhZGQgdGVzdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X2FycmFuZ2VyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU3CiAgICAvLyByZXR1cm4gc2VsZi5hcnJhbmdlci52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gMHg1MjMyMzAyMwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFycmFuZ2VyIGV4aXN0cwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYWRkcmVzc19yb2xlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3MwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIGFkZHJlc3MpLAogICAgYnl0ZWMgMTQgLy8gMHg1MjM0MzAyMwogICAgZGlnIDEKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc0CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnByaW1hcnlfZGVhbGVyLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDIxIC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDIwIC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NgogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hdXRob3JpdHksIGFkZHJlc3MpLAogICAgYnl0ZWMgMTMgLy8gMHg1MjM3MzAyMwogICAgZGlnIDQKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc3CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmludGVyZXN0X29yYWNsZSwgYWRkcmVzcyksCiAgICBieXRlYyAzMiAvLyAweDUyMzgzMDIzCiAgICB1bmNvdmVyIDUKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDMxIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDYKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNQogICAgc2V0Yml0CiAgICBwdXNoaW50IDIKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBwdXNoaW50IDMKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoaW50IDQKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9yb2xlX2NvbmZpZzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTQKICAgIC8vIHJvbGUgPSByb2xlX2lkLmFzX3VpbnQ2NCgpCiAgICBidG9pCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk1CiAgICAvLyBzZWxmLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlKQogICAgZHVwCiAgICBjYWxsc3ViIF9hc3NlcnRfdmFsaWRfcm9sZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5NwogICAgLy8gY2FzZSBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpOgogICAgcHVzaGludHMgMjAgNDAgNTAgNjAgNzAgODAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTYtMzI3CiAgICAvLyBtYXRjaCByb2xlOgogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIC8vICAgICAgICAgcmV0dXJuIHR5cC5Sb2xlQ29uZmlnKAogICAgLy8gICAgICAgICAgICAgcm9sZV92YWxpZGl0eV9zdGFydD1VSW50NjQoMCksIHJvbGVfdmFsaWRpdHlfZW5kPVVJbnQ2NCgwKQogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5hY2NvdW50X21hbmFnZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYucHJpbWFyeV9kZWFsZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYudHJ1c3RlZVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5hdXRob3JpdHksIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyAgICAgICAgICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgXzoKICAgIC8vICAgICAgICAgb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICB1bmNvdmVyIDYKICAgIG1hdGNoIHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzBAMiByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8xQDMgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMkA0IHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzNANSByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV80QDYgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNUA3CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI3CiAgICAvLyBvcC5lcnIoZXJyLklOVkFMSURfUk9MRSkKICAgIGVyciAvLyBJbnZhbGlkIHJvbGUgaWRlbnRpZmllcgoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMwogICAgLy8gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgMzIgLy8gMHg1MjM4MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMi0zMjQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTgKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDEzIC8vIDB4NTIzNzMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTctMzE5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hdXRob3JpdHksIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMAogICAgLy8gcmV0dXJuIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfM0A1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMxMwogICAgLy8gc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDIwIC8vIDB4NTIzNjMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTItMzE0CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTUKICAgIC8vIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8yQDQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzA4CiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDIxIC8vIDB4NTIzNTMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEwCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDkKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDE0IC8vIDB4NTIzNDMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDItMzA0CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X21hbmFnZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwNQogICAgLy8gcmV0dXJuIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMEAyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5OC0zMDAKICAgIC8vIHJldHVybiB0eXAuUm9sZUNvbmZpZygKICAgIC8vICAgICByb2xlX3ZhbGlkaXR5X3N0YXJ0PVVJbnQ2NCgwKSwgcm9sZV92YWxpZGl0eV9lbmQ9VUludDY0KDApCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5jb3VudF9kdWVfY291cG9ucygpIC0+IHVpbnQ2NDoKY291bnRfZHVlX2NvdXBvbnM6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTEKICAgIC8vIGRlZiBjb3VudF9kdWVfY291cG9ucyhzZWxmKSAtPiBVSW50NjQ6CiAgICBwcm90byAwIDEKICAgIHB1c2hieXRlcyAiIgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTEyCiAgICAvLyBjdXJyZW50X3RzID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTEzCiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYuZHVlX2NvdXBvbnNfd2F0ZXJtYXJrCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImR1ZV9jb3Vwb25zX3dhdGVybWFyayIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdWVfY291cG9uc193YXRlcm1hcmsgZXhpc3RzCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTQKICAgIC8vIGlmIGN1cnJlbnRfdHMgPj0gc2VsZi5tYXR1cml0eV9kYXRlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0dXJpdHlfZGF0ZSBleGlzdHMKICAgID49CiAgICBieiBjb3VudF9kdWVfY291cG9uc19lbHNlX2JvZHlAMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTE1CiAgICAvLyBkdWVfY291cG9ucyA9IHNlbGYudG90YWxfY291cG9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZnJhbWVfYnVyeSAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jb3Vwb25zIGV4aXN0cwoKY291bnRfZHVlX2NvdXBvbnNfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTI5CiAgICAvLyBzZWxmLmR1ZV9jb3Vwb25zX3dhdGVybWFyayA9IGR1ZV9jb3Vwb25zCiAgICBieXRlYyAyOSAvLyAiZHVlX2NvdXBvbnNfd2F0ZXJtYXJrIgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzMAogICAgLy8gcmV0dXJuIGR1ZV9jb3Vwb25zCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY291bnRfZHVlX2NvdXBvbnNfZWxzZV9ib2R5QDI6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTYKICAgIC8vIGVsaWYgY3VycmVudF90cyA+IHNlbGYuaXNzdWFuY2VfZGF0ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJpc3N1YW5jZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlzc3VhbmNlX2RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogY291bnRfZHVlX2NvdXBvbnNfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMTgKICAgIC8vIFVJbnQ2NChmaXhlZF9jZmcuRklSU1RfQ09VUE9OX0RBVEVfSURYKSArIHNlbGYuZHVlX2NvdXBvbnNfd2F0ZXJtYXJrCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gImR1ZV9jb3Vwb25zX3dhdGVybWFyayIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdWVfY291cG9uc193YXRlcm1hcmsgZXhpc3RzCiAgICBwdXNoaW50IDMKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjAKICAgIC8vIGNvdXBvbl9kdWVfZGF0ZSA9IHNlbGYudGltZV9ldmVudHMudmFsdWVbY291cG9uX2lkeF0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQoKY291bnRfZHVlX2NvdXBvbnNfd2hpbGVfdG9wQDQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjEKICAgIC8vIHdoaWxlIGN1cnJlbnRfdHMgPj0gY291cG9uX2R1ZV9kYXRlOgogICAgZnJhbWVfZGlnIDEKICAgIDw9CiAgICBieiBjb3VudF9kdWVfY291cG9uc19hZnRlcl93aGlsZUA2CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjMKICAgIC8vIHJlcXVpcmVkX2J1ZGdldD1VSW50NjQoZml4ZWRfY2ZnLk9QX1VQX0NPVVBPTl9EVUVfQ09VTlRJTkcpLAogICAgaW50YyA0IC8vIDI1NQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTI0CiAgICAvLyBmZWVfc291cmNlPU9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTIyLTEyNQogICAgLy8gZW5zdXJlX2J1ZGdldCgKICAgIC8vICAgICByZXF1aXJlZF9idWRnZXQ9VUludDY0KGZpeGVkX2NmZy5PUF9VUF9DT1VQT05fRFVFX0NPVU5USU5HKSwKICAgIC8vICAgICBmZWVfc291cmNlPU9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQsCiAgICAvLyApCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEyNgogICAgLy8gY291cG9uX2lkeCArPSAxCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxMjcKICAgIC8vIGNvdXBvbl9kdWVfZGF0ZSA9IHNlbGYudGltZV9ldmVudHMudmFsdWVbY291cG9uX2lkeF0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgYiBjb3VudF9kdWVfY291cG9uc193aGlsZV90b3BANAoKY291bnRfZHVlX2NvdXBvbnNfYWZ0ZXJfd2hpbGVANjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEyOAogICAgLy8gZHVlX2NvdXBvbnMgPSBjb3Vwb25faWR4IC0gZml4ZWRfY2ZnLkZJUlNUX0NPVVBPTl9EQVRFX0lEWAogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgMwogICAgLQogICAgZnJhbWVfYnVyeSAyCiAgICBiIGNvdW50X2R1ZV9jb3Vwb25zX2FmdGVyX2lmX2Vsc2VAOAoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5jb3Vwb25fZHVlX2RhdGUoY291cG9uOiB1aW50NjQpIC0+IHVpbnQ2NDoKY291cG9uX2R1ZV9kYXRlOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTMyCiAgICAvLyBkZWYgY291cG9uX2R1ZV9kYXRlKHNlbGYsIGNvdXBvbjogVUludDY0KSAtPiBVSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzMwogICAgLy8gcmV0dXJuIHNlbGYudGltZV9ldmVudHMudmFsdWVbZml4ZWRfY2ZnLkZJUlNUX0NPVVBPTl9EQVRFX0lEWCArIGNvdXBvbiAtIDFdCiAgICBwdXNoaW50IDMKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzQ2OTZkNjU0NTc2NjU2ZTc0NzMKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLm5leHRfY291cG9uX2R1ZV9kYXRlKGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHVpbnQ2NDoKbmV4dF9jb3Vwb25fZHVlX2RhdGU6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDEKICAgIC8vIGRlZiBuZXh0X2NvdXBvbl9kdWVfZGF0ZShzZWxmLCBkdWVfY291cG9uczogVUludDY0KSAtPiBVSW50NjQ6CiAgICBwcm90byAxIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE0MgogICAgLy8gY291cG9uX2R1ZV9kYXRlID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDMKICAgIC8vIGlmIGR1ZV9jb3Vwb25zIDwgc2VsZi50b3RhbF9jb3Vwb25zOgogICAgZHVwCiAgICBieXRlYyA3IC8vICJ0b3RhbF9jb3Vwb25zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NvdXBvbnMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID4KICAgIGJ6IG5leHRfY291cG9uX2R1ZV9kYXRlX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTQ0CiAgICAvLyBjb3Vwb25fZHVlX2RhdGUgPSBzZWxmLmNvdXBvbl9kdWVfZGF0ZShkdWVfY291cG9ucyArIDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBjYWxsc3ViIGNvdXBvbl9kdWVfZGF0ZQogICAgZnJhbWVfYnVyeSAwCgpuZXh0X2NvdXBvbl9kdWVfZGF0ZV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDUKICAgIC8vIHJldHVybiBjb3Vwb25fZHVlX2RhdGUKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5GaXhlZENvdXBvbkNhc2hmbG93TWl4aW4uY291cG9uX2ludGVyZXN0X2Ftb3VudChwcmluY2lwYWxfYW1vdW50OiB1aW50NjQsIGNvdXBvbjogdWludDY0KSAtPiB1aW50NjQ6CmNvdXBvbl9pbnRlcmVzdF9hbW91bnQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNDctMTQ5CiAgICAvLyBkZWYgY291cG9uX2ludGVyZXN0X2Ftb3VudCgKICAgIC8vICAgICBzZWxmLCBwcmluY2lwYWxfYW1vdW50OiBVSW50NjQsIGNvdXBvbjogVUludDY0CiAgICAvLyApIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTUwCiAgICAvLyBjb3Vwb25fcmF0ZV9icHMgPSBzZWxmLmNvdXBvbl9yYXRlcy52YWx1ZVtjb3Vwb24gLSAxXS5hc191aW50NjQoKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgcHVzaGludCAyCiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDE5IC8vIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MwogICAgc3dhcAogICAgcHVzaGludCAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTUxCiAgICAvLyByZXR1cm4gcHJpbmNpcGFsX2Ftb3VudCAqIGNvdXBvbl9yYXRlX2JwcyAvLyBjc3QuQlBTCiAgICBmcmFtZV9kaWcgLTIKICAgICoKICAgIHB1c2hpbnQgMTAwMDAKICAgIC8KICAgIHJldHN1YgoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5kYXlfY291bnRfZmFjdG9yKGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IGJ5dGVzOgpkYXlfY291bnRfZmFjdG9yOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTUzCiAgICAvLyBkZWYgZGF5X2NvdW50X2ZhY3RvcihzZWxmLCBkdWVfY291cG9uczogVUludDY0KSAtPiB0eXAuRGF5Q291bnRGYWN0b3I6CiAgICBwcm90byAxIDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNTQtMTU1CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgQWN0dWFsL0FjdHVhbCBhbmQgQ29udGludW91cyBkYXktY291bnQgY29udmVudGlvbnMKICAgIC8vIGlmIG5vdCBkdWVfY291cG9uczoKICAgIGZyYW1lX2RpZyAtMQogICAgYm56IGRheV9jb3VudF9mYWN0b3JfZWxzZV9ib2R5QDIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE1NgogICAgLy8gYWNjcnVpbmdfc3RhcnRfdGltZSA9IHNlbGYuaXNzdWFuY2VfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKCmRheV9jb3VudF9mYWN0b3JfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTU5CiAgICAvLyBjb3Vwb25fYWNjcnVlZF9wZXJpb2QgPSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCAtIGFjY3J1aW5nX3N0YXJ0X3RpbWUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE2MAogICAgLy8gY291cG9uX3BlcmlvZCA9IHNlbGYubmV4dF9jb3Vwb25fZHVlX2RhdGUoZHVlX2NvdXBvbnMpIC0gYWNjcnVpbmdfc3RhcnRfdGltZQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG5leHRfY291cG9uX2R1ZV9kYXRlCiAgICBzd2FwCiAgICAtCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNjEKICAgIC8vIGlmIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gPT0gVUludDY0KGNzdC5EQ0NfQV9BKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBibnogZGF5X2NvdW50X2ZhY3Rvcl9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjE2MgogICAgLy8gcmV0dXJuIHRpbWVfcGVyaW9kIC8vIFVJbnQ2NChjc3QuREFZXzJfU0VDKQogICAgZnJhbWVfZGlnIDAKICAgIGludGMgNiAvLyA4NjQwMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjIDYgLy8gODY0MDAKICAgIC8KCmRheV9jb3VudF9mYWN0b3JfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTY0LTE2NwogICAgLy8gcmV0dXJuIHR5cC5EYXlDb3VudEZhY3RvcigKICAgIC8vICAgICBudW1lcmF0b3I9Y291cG9uX2FjY3J1ZWRfcGVyaW9kLAogICAgLy8gICAgIGRlbm9taW5hdG9yPWNvdXBvbl9wZXJpb2QsCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZGF5X2NvdW50X2ZhY3Rvcl9lbHNlX2JvZHlAMjoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzNgogICAgLy8gY291cG9uX2R1ZV9kYXRlID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjEzNwogICAgLy8gaWYgZHVlX2NvdXBvbnMgPj0gVUludDY0KDEpOgogICAgZnJhbWVfZGlnIC0xCiAgICBieiBkYXlfY291bnRfZmFjdG9yX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTM4CiAgICAvLyBjb3Vwb25fZHVlX2RhdGUgPSBzZWxmLmNvdXBvbl9kdWVfZGF0ZShkdWVfY291cG9ucykKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBjb3Vwb25fZHVlX2RhdGUKICAgIGZyYW1lX2J1cnkgMQoKZGF5X2NvdW50X2ZhY3Rvcl9hZnRlcl9pZl9lbHNlQDg6CiAgICBmcmFtZV9kaWcgMQogICAgYiBkYXlfY291bnRfZmFjdG9yX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIG1vZHVsZXMuY29yZV9maW5hbmNpYWwuY291cG9uLkZpeGVkQ291cG9uQ2FzaGZsb3dNaXhpbi5pc19hY2NydWluZ19pbnRlcmVzdChkdWVfY291cG9uczogdWludDY0KSAtPiB1aW50NjQ6CmlzX2FjY3J1aW5nX2ludGVyZXN0OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTY5CiAgICAvLyBkZWYgaXNfYWNjcnVpbmdfaW50ZXJlc3Qoc2VsZiwgZHVlX2NvdXBvbnM6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTcxCiAgICAvLyBzZWxmLmlzc3VhbmNlX2RhdGUgIT0gMAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MS0xNzMKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGJ6IGlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTcyCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgPj0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MS0xNzMKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGJ6IGlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTczCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJ0b3RhbF9jb3Vwb25zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NvdXBvbnMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID4KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MS0xNzMKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyBhbmQgZHVlX2NvdXBvbnMgPCBzZWxmLnRvdGFsX2NvdXBvbnMKICAgIGJ6IGlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE3MC0xNzQKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgc2VsZi5pc3N1YW5jZV9kYXRlICE9IDAKICAgIC8vICAgICBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyAgICAgYW5kIGR1ZV9jb3Vwb25zIDwgc2VsZi50b3RhbF9jb3Vwb25zCiAgICAvLyApCiAgICByZXRzdWIKCmlzX2FjY3J1aW5nX2ludGVyZXN0X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNzAtMTc0CiAgICAvLyByZXR1cm4gKAogICAgLy8gICAgIHNlbGYuaXNzdWFuY2VfZGF0ZSAhPSAwCiAgICAvLyAgICAgYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYuaXNzdWFuY2VfZGF0ZQogICAgLy8gICAgIGFuZCBkdWVfY291cG9ucyA8IHNlbGYudG90YWxfY291cG9ucwogICAgLy8gKQogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb3Vwb24uRml4ZWRDb3Vwb25DYXNoZmxvd01peGluLmFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMsIHVuaXRzOiB1aW50NjQsIGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHVpbnQ2NDoKYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxNzYtMTc4CiAgICAvLyBkZWYgYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoCiAgICAvLyAgICAgc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBBY2NvdW50LCB1bml0czogVUludDY0LCBkdWVfY291cG9uczogVUludDY0CiAgICAvLyApIC0+IFVJbnQ2NDoKICAgIHByb3RvIDMgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTc5LTE4MAogICAgLy8gIyBUaGUgZm9sbG93aW5nIGFzc2VydCBzYWZlZ3VhcmRzIHRoZSBzdWJyb3V0aW5lIGZyb20gZm9yYmlkZGVuIGludm9jYXRpb25zCiAgICAvLyBzZWxmLmFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50KGhvbGRpbmdfYWRkcmVzcywgZHVlX2NvdXBvbnMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTgxCiAgICAvLyBkYXlfY291bnRfZmFjdG9yID0gc2VsZi5kYXlfY291bnRfZmFjdG9yKGR1ZV9jb3Vwb25zKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGRheV9jb3VudF9mYWN0b3IKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE4MgogICAgLy8gY291cG9uX2FjY3J1ZWRfcGVyaW9kID0gZGF5X2NvdW50X2ZhY3Rvci5udW1lcmF0b3IKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxODMKICAgIC8vIGNvdXBvbl9wZXJpb2QgPSBkYXlfY291bnRfZmFjdG9yLmRlbm9taW5hdG9yCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE4NAogICAgLy8gbmV4dF9jb3Vwb25fcmF0ZV9icHMgPSBzZWxmLmNvdXBvbl9yYXRlcy52YWx1ZVtkdWVfY291cG9uc10uYXNfdWludDY0KCkKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyCiAgICAqCiAgICBwdXNoaW50IDIKICAgICsKICAgIGJ5dGVjIDE5IC8vIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MwogICAgc3dhcAogICAgcHVzaGludCAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg3CiAgICAvLyBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGFjY291bnRfdW5pdHNfdmFsdWUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjE4Ny0xODgKICAgIC8vIHNlbGYuYWNjb3VudF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MsIHVuaXRzKQogICAgLy8gKiBuZXh0X2NvdXBvbl9yYXRlX2JwcwogICAgKgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg3LTE4OQogICAgLy8gc2VsZi5hY2NvdW50X3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcywgdW5pdHMpCiAgICAvLyAqIG5leHRfY291cG9uX3JhdGVfYnBzCiAgICAvLyAqIGNvdXBvbl9hY2NydWVkX3BlcmlvZAogICAgdW5jb3ZlciAyCiAgICAqCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToxOTAKICAgIC8vIC8vIChjc3QuQlBTICogY291cG9uX3BlcmlvZCkKICAgIHB1c2hpbnQgMTAwMDAKICAgIHVuY292ZXIgMgogICAgKgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg3LTE5MAogICAgLy8gc2VsZi5hY2NvdW50X3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcywgdW5pdHMpCiAgICAvLyAqIG5leHRfY291cG9uX3JhdGVfYnBzCiAgICAvLyAqIGNvdXBvbl9hY2NydWVkX3BlcmlvZAogICAgLy8gLy8gKGNzdC5CUFMgKiBjb3Vwb25fcGVyaW9kKQogICAgLwogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MTg1LTE5MQogICAgLy8gIyBkdWVfY291cG9ucyBpcyBlcXVhbCB0byB0aGUgMC1iYXNlIGlkeCBvZiBuZXh0IGNvdXBvbgogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIC8vICAgICAqIG5leHRfY291cG9uX3JhdGVfYnBzCiAgICAvLyAgICAgKiBjb3Vwb25fYWNjcnVlZF9wZXJpb2QKICAgIC8vICAgICAvLyAoY3N0LkJQUyAqIGNvdXBvbl9wZXJpb2QpCiAgICAvLyApICAjIGRpdi1ieS16ZXJvOiBjb3Vwb25fcGVyaW9kICE9IDAgZHVlIHRvIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQgY2hlY2tzCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5Db3Vwb25DYXNoZmxvd01peGluLmFsbF9kdWVfY291cG9uc19wYWlkKGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHVpbnQ2NDoKYWxsX2R1ZV9jb3Vwb25zX3BhaWQ6CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weToyNgogICAgLy8gZGVmIGFsbF9kdWVfY291cG9uc19wYWlkKHNlbGYsIGR1ZV9jb3Vwb25zOiBVSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY291cG9uLnB5OjI3CiAgICAvLyByZXR1cm4gc2VsZi5wYWlkX2NvdXBvbl91bml0cyA+PSBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzICogZHVlX2NvdXBvbnMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAicGFpZF9jb3Vwb25fdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGFpZF9jb3Vwb25fdW5pdHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgID49CiAgICByZXRzdWIKCgovLyBtb2R1bGVzLmNvcmVfZmluYW5jaWFsLmNvdXBvbi5Db3Vwb25DYXNoZmxvd01peGluLmFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMsIGR1ZV9jb3Vwb25zOiB1aW50NjQpIC0+IHZvaWQ6CmFzc2VydF9ub19wZW5kaW5nX2NvdXBvbl9wYXltZW50OgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MjktMzEKICAgIC8vIGRlZiBhc3NlcnRfbm9fcGVuZGluZ19jb3Vwb25fcGF5bWVudCgKICAgIC8vICAgICBzZWxmLCBob2xkaW5nX2FkZHJlc3M6IEFjY291bnQsIGR1ZV9jb3Vwb25zOiBVSW50NjQKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb3Vwb24ucHk6MzMKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyA9PSBkdWVfY291cG9ucwogICAgYnl0ZWNfMSAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvdXBvbi5weTozMi0zNAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYWlkX2NvdXBvbnMgPT0gZHVlX2NvdXBvbnMKICAgIC8vICksIGVyci5QRU5ESU5HX0NPVVBPTl9QQVlNRU5UCiAgICBhc3NlcnQgLy8gUGVuZGluZyBkdWUgY291cG9uIHBheW1lbnQKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMucGF5bWVudF9hZ2VudC5jb21tb24uUGF5bWVudEFnZW50Q29tbW9uTWl4aW4uYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbihob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB2b2lkOgphc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxMgogICAgLy8gZGVmIGFzc2VydF9wYXltZW50X2F1dGhvcml6YXRpb24oc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjEzCiAgICAvLyBpZiBzZWxmLm9wX2RhZW1vbi52YWx1ZSAhPSBHbG9iYWwuemVyb19hZGRyZXNzOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vIDB4NTIzMjM1MjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcF9kYWVtb24gZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNQogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vIDB4NTIzMjM1MjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcF9kYWVtb24gZXhpc3RzCiAgICA9PQogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNS0xNwogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzCiAgICBibnogYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9ib29sX3RydWVANAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNgogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MTUtMTcKICAgIC8vIFR4bi5zZW5kZXIgPT0gc2VsZi5vcF9kYWVtb24udmFsdWUKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gaG9sZGluZ19hZGRyZXNzCiAgICAvLyBvciBUeG4uc2VuZGVyID09IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcwogICAgYm56IGFzc2VydF9wYXltZW50X2F1dGhvcml6YXRpb25fYm9vbF90cnVlQDQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MTcKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAwIDMyCiAgICA9PQogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToxNS0xNwogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzCiAgICBieiBhc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uX2Jvb2xfZmFsc2VANQoKYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9ib29sX3RydWVANDoKICAgIGludGNfMSAvLyAxCgphc3NlcnRfcGF5bWVudF9hdXRob3JpemF0aW9uX2Jvb2xfbWVyZ2VANjoKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MTQtMTgKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgVHhuLnNlbmRlciA9PSBzZWxmLm9wX2RhZW1vbi52YWx1ZQogICAgLy8gICAgIG9yIFR4bi5zZW5kZXIgPT0gaG9sZGluZ19hZGRyZXNzCiAgICAvLyAgICAgb3IgVHhuLnNlbmRlciA9PSBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MKICAgIC8vICksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAoKYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9hZnRlcl9pZl9lbHNlQDc6CiAgICByZXRzdWIKCmFzc2VydF9wYXltZW50X2F1dGhvcml6YXRpb25fYm9vbF9mYWxzZUA1OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXJ0X3BheW1lbnRfYXV0aG9yaXphdGlvbl9ib29sX21lcmdlQDYKCgovLyBtb2R1bGVzLnBheW1lbnRfYWdlbnQuY29tbW9uLlBheW1lbnRBZ2VudENvbW1vbk1peGluLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmlzX3BheW1lbnRfZXhlY3V0YWJsZToKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjAKICAgIC8vIGRlZiBpc19wYXltZW50X2V4ZWN1dGFibGUoc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjIyCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjMKICAgIC8vIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gInNldHRsZW1lbnRfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCBleGlzdHMKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjItMjQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcy5pc19vcHRlZF9pbigKICAgIC8vICAgICBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQKICAgIC8vICkKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjIyLTI1CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkCiAgICAvLyApCiAgICAvLyBhbmQgbm90IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnN1c3BlbmRlZAogICAgYnogaXNfcGF5bWVudF9leGVjdXRhYmxlX2Jvb2xfZmFsc2VAMwogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToyNQogICAgLy8gYW5kIG5vdCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0NDgKICAgIGdldGJpdAogICAgYm56IGlzX3BheW1lbnRfZXhlY3V0YWJsZV9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCgppc19wYXltZW50X2V4ZWN1dGFibGVfYm9vbF9tZXJnZUA0OgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToyMS0yNgogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgICAgIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZAogICAgLy8gICAgICkKICAgIC8vICAgICBhbmQgbm90IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnN1c3BlbmRlZAogICAgLy8gKQogICAgc3dhcAogICAgcmV0c3ViCgppc19wYXltZW50X2V4ZWN1dGFibGVfYm9vbF9mYWxzZUAzOgogICAgaW50Y18wIC8vIDAKICAgIGIgaXNfcGF5bWVudF9leGVjdXRhYmxlX2Jvb2xfbWVyZ2VANAoKCi8vIG1vZHVsZXMucGF5bWVudF9hZ2VudC5jb21tb24uUGF5bWVudEFnZW50Q29tbW9uTWl4aW4uYXNzZXJ0X2Vub3VnaF9mdW5kcyhwYXltZW50X2Ftb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NlcnRfZW5vdWdoX2Z1bmRzOgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weToyOAogICAgLy8gZGVmIGFzc2VydF9lbm91Z2hfZnVuZHMoc2VsZiwgcGF5bWVudF9hbW91bnQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weTozMAogICAgLy8gc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLmJhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcykKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjMwLTMxCiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQuYmFsYW5jZShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzKQogICAgLy8gPj0gcGF5bWVudF9hbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgPj0KICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MjktMzIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLmJhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcykKICAgIC8vICAgICA+PSBwYXltZW50X2Ftb3VudAogICAgLy8gKSwgZXJyLk5PVF9FTk9VR0hfRlVORFMKICAgIGFzc2VydCAvLyBOb3QgZW5vdWdoIGZ1bmRzIGZvciB0aGUgcGF5bWVudAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5wYXltZW50X2FnZW50LmNvbW1vbi5QYXltZW50QWdlbnRDb21tb25NaXhpbi5wYXkocmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKcGF5OgogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weTozNAogICAgLy8gZGVmIHBheShzZWxmLCByZWNlaXZlcjogQWNjb3VudCwgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MzUtNDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBtb2R1bGVzL3BheW1lbnRfYWdlbnQvY29tbW9uLnB5OjM5CiAgICAvLyBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgLy8gbW9kdWxlcy9wYXltZW50X2FnZW50L2NvbW1vbi5weTozNgogICAgLy8geGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MzUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIG1vZHVsZXMvcGF5bWVudF9hZ2VudC9jb21tb24ucHk6MzUtNDAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5jb3JlX2ZpbmFuY2lhbC5jb21tb24uQ29yZUZpbmFuY2lhbENvbW1vbk1peGluLmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQodGltZV9ldmVudHM6IGJ5dGVzKSAtPiBieXRlczoKYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZDoKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEwNwogICAgLy8gZGVmIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQoc2VsZiwgdGltZV9ldmVudHM6IHR5cC5UaW1lRXZlbnRzKSAtPiBOb25lOgogICAgcHJvdG8gMSAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gMgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTA5CiAgICAvLyB0aW1lX2V2ZW50c1tjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWF0KICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTEwCiAgICAvLyA+IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMDktMTEwCiAgICAvLyB0aW1lX2V2ZW50c1tjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWF0KICAgIC8vID4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgID4KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEwOC0xMTEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgdGltZV9ldmVudHNbY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX09QRU5JTkdfREFURV9JRFhdCiAgICAvLyAgICAgPiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gKSwgZXJyLklOVkFMSURfVElNRQogICAgYXNzZXJ0IC8vIFRpbWUgZXZlbnRzIG11c3QgYmUgc2V0IGluIHRoZSBmdXR1cmUKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjExMgogICAgLy8gZm9yIGlkeCBpbiB1cmFuZ2UodGltZV9ldmVudHMubGVuZ3RoIC0gMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaW50Y18wIC8vIDAKCmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfZm9yX2hlYWRlckAxOgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTEyCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0aW1lX2V2ZW50cy5sZW5ndGggLSAxKToKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9hZnRlcl9mb3JANgogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTE0CiAgICAvLyByZXF1aXJlZF9idWRnZXQ9VUludDY0KGNmZy5PUF9VUF9USU1FX0VWRU5UX1NPUlRJTkcpLAogICAgcHVzaGludCA2NQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTE1CiAgICAvLyBmZWVfc291cmNlPU9wVXBGZWVTb3VyY2UuQXBwQWNjb3VudCwKICAgIGludGNfMSAvLyAxCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMTMtMTE2CiAgICAvLyBlbnN1cmVfYnVkZ2V0KAogICAgLy8gICAgIHJlcXVpcmVkX2J1ZGdldD1VSW50NjQoY2ZnLk9QX1VQX1RJTUVfRVZFTlRfU09SVElORyksCiAgICAvLyAgICAgZmVlX3NvdXJjZT1PcFVwRmVlU291cmNlLkFwcEFjY291bnQsCiAgICAvLyApCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjExNwogICAgLy8gdGltZV9pID0gdGltZV9ldmVudHNbaWR4XQogICAgZnJhbWVfZGlnIDUKICAgIGR1cAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gbW9kdWxlcy9jb3JlX2ZpbmFuY2lhbC9jb21tb24ucHk6MTE4CiAgICAvLyB0aW1lX2YgPSB0aW1lX2V2ZW50c1tpZHggKyAxXQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL2NvcmVfZmluYW5jaWFsL2NvbW1vbi5weToxMTkKICAgIC8vIGFzc2VydCB0aW1lX2YgPiB0aW1lX2ksIGVyci5JTlZBTElEX1NPUlRJTkcKICAgIDwKICAgIGFzc2VydCAvLyBUaW1lIGV2ZW50cyBtdXN0IGJlIHNvcnRlZCBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyMAogICAgLy8gaWYgc2VsZi5kYXlfY291bnRfY29udmVudGlvbiAhPSBVSW50NjQoY3N0LkRDQ19DT05UKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBpbnRjIDQgLy8gMjU1CiAgICAhPQogICAgYnogYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyMS0xMjIKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aW1lIHBlcmlvZHMgZXhwcmVzc2VkIGluIGRheXMgZm9yIHJlZ3VsYXIgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgKHRpbWVfZiAtIHRpbWVfaSkgJSBVSW50NjQoCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDEKICAgIC0KICAgIC8vIG1vZHVsZXMvY29yZV9maW5hbmNpYWwvY29tbW9uLnB5OjEyMS0xMjQKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aW1lIHBlcmlvZHMgZXhwcmVzc2VkIGluIGRheXMgZm9yIHJlZ3VsYXIgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgKHRpbWVfZiAtIHRpbWVfaSkgJSBVSW50NjQoCiAgICAvLyAgICAgY3N0LkRBWV8yX1NFQwogICAgLy8gKSA9PSAwLCBlcnIuSU5WQUxJRF9USU1FX1BFUklPRAogICAgaW50YyA2IC8vIDg2NDAwCiAgICAlCiAgICAhCiAgICBhc3NlcnQgLy8gVGltZSBwZXJpb2RzIGluIEFjdHVhbC9BY3R1YWwgZGF5IGNvdW50IGNvbnZlbnRpb24gbXVzdCBiZSBtdWx0aXBsZXMgb2YgYSBkYXkgKGluIHNlY29uZHMpCgphc3NlcnRfdGltZV9ldmVudHNfc29ydGVkX2FmdGVyX2lmX2Vsc2VANDoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9mb3JfaGVhZGVyQDEKCmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfYWZ0ZXJfZm9yQDY6CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYXNzZXJ0X2lzX25vdF9hY2NvdW50X3N1c3BlbmRlZChob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2FjY291bnRfc3VzcGVuZGVkOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMzCiAgICAvLyBkZWYgYXNzZXJ0X2lzX25vdF9hY2NvdW50X3N1c3BlbmRlZChzZWxmLCBob2xkaW5nX2FkZHJlc3M6IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozNAogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQsIGVyci5TVVNQRU5ERUQKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDQ0OAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gU3VzcGVuZGVkIG9wZXJhdGlvbnMKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzOiBieXRlcywgdW5pdHM6IHVpbnQ2NCkgLT4gdWludDY0OgphY2NvdW50X3VuaXRzX3ZhbHVlOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjM2CiAgICAvLyBkZWYgYWNjb3VudF91bml0c192YWx1ZShzZWxmLCBob2xkaW5nX2FkZHJlc3M6IEFjY291bnQsIHVuaXRzOiBVSW50NjQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjM3CiAgICAvLyByZXR1cm4gdW5pdHMgKiBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlCiAgICBieXRlY18xIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA0MAogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmFjY291bnRfdG90YWxfdW5pdHNfdmFsdWU6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MzkKICAgIC8vIGRlZiBhY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKHNlbGYsIGhvbGRpbmdfYWRkcmVzczogQWNjb3VudCkgLT4gVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDEKICAgIC8vIGhvbGRpbmdfYWRkcmVzcywgc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMKICAgIGJ5dGVjXzEgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDAtNDIKICAgIC8vIHJldHVybiBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoCiAgICAvLyAgICAgaG9sZGluZ19hZGRyZXNzLCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cwogICAgLy8gKQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBjYWxsc3ViIGFjY291bnRfdW5pdHNfdmFsdWUKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMuYWNjb3VudGluZy5BY2NvdW50aW5nTW9kdWxlLmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0cygpIC0+IHZvaWQ6CmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0czoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo0OAogICAgLy8gaWYgc2VsZi5jaXJjdWxhdGluZ191bml0cyA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBibnogZW5kX2lmX25vX2NpcmN1bGF0aW5nX3VuaXRzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjQ5CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbm0uU1RBVFVTX0VOREVEKQogICAgYnl0ZWNfMiAvLyAic3RhdHVzIgogICAgaW50YyA1IC8vIDIwMAogICAgYXBwX2dsb2JhbF9wdXQKCmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0c19hZnRlcl9pZl9lbHNlQDI6CiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fcm9sZV9pc19hY3RpdmUocm9sZV9tYXA6IGJ5dGVzLCByb2xlX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6Cl9yb2xlX2lzX2FjdGl2ZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gZGVmIF9yb2xlX2lzX2FjdGl2ZShzZWxmLCByb2xlX21hcDogdHlwLlJiYWNSb2xlLCByb2xlX2FkZHJlc3M6IEFjY291bnQpIC0+IGJvb2w6CiAgICBwcm90byAyIDEKICAgIHB1c2hieXRlcyAiIgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU4LTYyCiAgICAvLyByZXR1cm4gc2VsZi5faGFzX3JvbGUocm9sZV9tYXAsIHJvbGVfYWRkcmVzcykgYW5kICgKICAgIC8vICAgICByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICkKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveE1hcCBlbnRyeSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYwCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MAogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgPD0KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveE1hcCBlbnRyeSBleGlzdHMKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYwLTYxCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjEKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU4LTYyCiAgICAvLyByZXR1cm4gc2VsZi5faGFzX3JvbGUocm9sZV9tYXAsIHJvbGVfYWRkcmVzcykgYW5kICgKICAgIC8vICAgICByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgX3JvbGVfaXNfYWN0aXZlX2Jvb2xfbWVyZ2VANQoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKSAtPiB2b2lkOgphc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY1CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfYXJyYW5nZXIoVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1MgogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyA9PSBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICA9PQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY1CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfYXJyYW5nZXIoVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZDoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4MwogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFzc2V0X2RlZmF1bHRlZCwgZXJyLkRFRkFVTFRFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfZGVmYXVsdGVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIERlZmF1bHRlZAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQoKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZDoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4NgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmFzc2V0X3N1c3BlbmRlZCwgZXJyLlNVU1BFTkRFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIzIC8vICJhc3NldF9zdXNwZW5kZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfc3VzcGVuZGVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFN1c3BlbmRlZCBvcGVyYXRpb25zCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZDogdWludDY0KSAtPiB2b2lkOgpfYXNzZXJ0X3ZhbGlkX3JvbGU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODgKICAgIC8vIGRlZiBfYXNzZXJ0X3ZhbGlkX3JvbGUoc2VsZiwgcm9sZV9pZDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTAKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICBwdXNoaW50IDIwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkxCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTIKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkzCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk0CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTUKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgcHVzaGludCA4MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9mYWxzZUA3CgpfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDY6CiAgICBpbnRjXzEgLy8gMQoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfbWVyZ2VAODoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBhc3NlcnQgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKICAgIHJldHN1YgoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMCAvLyAwCiAgICBiIF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX21lcmdlQDgK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [2798], "errorMessage": "Can not distribute zero units"}, {"pc": [1182], "errorMessage": "Coupon rates are not properly defined"}, {"pc": [1068], "errorMessage": "D-ASA already configured"}, {"pc": [4833], "errorMessage": "Defaulted"}, {"pc": [1075], "errorMessage": "Denomination asset is not properly set"}, {"pc": [1086], "errorMessage": "Different settlement asset not supported, must be equal to denomination asset"}, {"pc": [2814], "errorMessage": "Insufficient remaining D-ASA units"}, {"pc": [2283, 2378], "errorMessage": "Insufficient sender units to transfer"}, {"pc": [1173], "errorMessage": "Interest rate is not properly defined"}, {"pc": [1328, 1484, 1679, 1941, 2237, 2252, 2788, 3171, 3242, 3294, 3365, 3394], "errorMessage": "Invalid account holding address"}, {"pc": [3536, 3560, 3584, 3608, 3632, 3689, 3717, 3739, 3761, 3783, 3962, 3980, 3995, 4010, 4025], "errorMessage": "Invalid account role address"}, {"pc": [1346], "errorMessage": "Invalid amount of units for the account"}, {"pc": [1152], "errorMessage": "Invalid day-count convention ID"}, {"pc": [3673, 3952, 4895], "errorMessage": "Invalid role identifier"}, {"pc": [2659], "errorMessage": "Invalid secondary market closure date"}, {"pc": [2625], "errorMessage": "Invalid secondary market opening date"}, {"pc": [1119], "errorMessage": "Minimum denomination is not a divisor of principal"}, {"pc": [1688, 1946], "errorMessage": "No D-ASA units"}, {"pc": [1702], "errorMessage": "No due coupon to pay"}, {"pc": [1661, 1923, 2219, 2588, 2702, 2779, 3162, 3217, 3226, 3283, 3350, 3806, 4502, 4825], "errorMessage": "Not authorized"}, {"pc": [4567], "errorMessage": "Not enough funds for the payment"}, {"pc": [1955], "errorMessage": "Not mature"}, {"pc": [1707, 1962, 4451], "errorMessage": "Pending due coupon payment"}, {"pc": [2771], "errorMessage": "Primary distribution is closed"}, {"pc": [1317], "errorMessage": "Primary distribution not yet executed"}, {"pc": [2210], "errorMessage": "Secondary market is closed"}, {"pc": [2268], "errorMessage": "Sender and receiver must be different"}, {"pc": [2333], "errorMessage": "Sender and receiver units are not fungible"}, {"pc": [4717, 4841], "errorMessage": "Suspended operations"}, {"pc": [1203, 2593], "errorMessage": "Time events length is invalid"}, {"pc": [4618], "errorMessage": "Time events must be set in the future"}, {"pc": [4669], "errorMessage": "Time events must be sorted in strictly ascending order"}, {"pc": [1264], "errorMessage": "Time periods are not properly defined"}, {"pc": [4690], "errorMessage": "Time periods in Actual/Actual day count convention must be multiples of a day (in seconds)"}, {"pc": [2272], "errorMessage": "Transfer units must be greater than zero"}, {"pc": [606], "errorMessage": "Wrong Global Bytes allocation"}, {"pc": [612], "errorMessage": "Wrong Global UInts allocation"}, {"pc": [616], "errorMessage": "Wrong Local Bytes allocation"}, {"pc": [620], "errorMessage": "Wrong Local UInts allocation"}, {"pc": [4563], "errorMessage": "account opted into asset"}, {"pc": [1785, 2033], "errorMessage": "asset exists"}, {"pc": [4785, 4800], "errorMessage": "check BoxMap entry exists"}, {"pc": [1336, 1500, 1694, 1738, 1750, 1986, 2004, 2276, 2290, 2299, 2306, 2317, 2324, 2338, 2373, 2415, 2459, 2822, 4444, 4493, 4517, 4536, 4711, 4727, 4743], "errorMessage": "check self.account entry exists"}, {"pc": [3824, 4823], "errorMessage": "check self.arranger exists"}, {"pc": [2896, 4831], "errorMessage": "check self.asset_defaulted exists"}, {"pc": [2998, 4839], "errorMessage": "check self.asset_suspended exists"}, {"pc": [1789, 1997, 2037, 2802, 2917, 3306, 4430, 4756], "errorMessage": "check self.circulating_units exists"}, {"pc": [1458], "errorMessage": "check self.coupon_rates exists"}, {"pc": [2929, 4284, 4674], "errorMessage": "check self.day_count_convention exists"}, {"pc": [1781, 2029, 2908], "errorMessage": "check self.denomination_asset_id exists"}, {"pc": [4067, 4111], "errorMessage": "check self.due_coupons_watermark exists"}, {"pc": [2958], "errorMessage": "check self.interest_rate exists"}, {"pc": [2609, 2988, 4100, 4265, 4334, 4344], "errorMessage": "check self.issuance_date exists"}, {"pc": [1953, 2634, 2642, 2879, 2993, 4072], "errorMessage": "check self.maturity_date exists"}, {"pc": [3130], "errorMessage": "check self.metadata exists"}, {"pc": [4460, 4473], "errorMessage": "check self.op_daemon exists"}, {"pc": [1765, 4426], "errorMessage": "check self.paid_coupon_units exists"}, {"pc": [2763, 2983], "errorMessage": "check self.primary_distribution_closure_date exists"}, {"pc": [1301, 1311, 2749, 2978], "errorMessage": "check self.primary_distribution_opening_date exists"}, {"pc": [1167, 2943], "errorMessage": "check self.principal_discount exists"}, {"pc": [2194, 2204, 2673, 3108], "errorMessage": "check self.secondary_market_closure_date exists"}, {"pc": [2183, 2668, 3103], "errorMessage": "check self.secondary_market_opening_date exists"}, {"pc": [2913, 4525, 4560, 4579], "errorMessage": "check self.settlement_asset_id exists"}, {"pc": [1066, 1445, 1490, 1657, 1919, 2172, 2583, 2738, 3078, 3221], "errorMessage": "check self.status exists"}, {"pc": [3091], "errorMessage": "check self.time_events exists"}, {"pc": [1511, 1595, 4084, 4202, 4353], "errorMessage": "check self.total_coupons exists"}, {"pc": [2810, 2852, 2973], "errorMessage": "check self.total_units exists"}, {"pc": [1794, 2042, 2839, 2922], "errorMessage": "check self.unit_value exists"}, {"pc": [1006, 1028, 1046, 1251, 1641, 1903, 2504, 2543, 2565, 2646, 3474, 4622], "errorMessage": "invalid array length header"}, {"pc": [2692, 3152, 3796], "errorMessage": "invalid number of bytes for arc4.bool"}, {"pc": [1019], "errorMessage": "invalid number of bytes for arc4.dynamic_array"}, {"pc": [1649, 1911, 3482], "errorMessage": "invalid number of bytes for arc4.dynamic_array"}, {"pc": [1059], "errorMessage": "invalid number of bytes for arc4.dynamic_array>"}, {"pc": [1040, 2576], "errorMessage": "invalid number of bytes for arc4.dynamic_array"}, {"pc": [1287, 1476, 1635, 1897, 2151, 2159, 2481, 2725, 3144, 3201, 3209, 3275, 3336, 3344, 3386, 3410, 3434, 3468, 3656, 3838, 3922], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [997], "errorMessage": "invalid number of bytes for arc4.uint16"}, {"pc": [941, 950, 959, 968, 977, 1295, 2167, 2733], "errorMessage": "invalid number of bytes for arc4.uint64"}, {"pc": [986, 3458, 3646, 3912], "errorMessage": "invalid number of bytes for arc4.uint8"}, {"pc": [2509, 2548], "errorMessage": "invalid number of bytes for smart_contracts.abi_types.AssetMetadata"}, {"pc": [2496, 2535], "errorMessage": "invalid tail pointer at index 7 of (uint8,uint8,uint8,uint8,uint8,uint8,uint8[32],(len+utf8[]))"}, {"pc": [2491, 2530], "errorMessage": "invalid tuple encoding"}, {"pc": [2935, 2950, 2965, 3006], "errorMessage": "overflow"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}"""
-APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON)
-
-def _parse_abi_args(args: object | None = None) -> list[object] | None:
- """Helper to parse ABI args into the format expected by underlying client"""
- if args is None:
- return None
-
- def convert_dataclass(value: object) -> object:
- if dataclasses.is_dataclass(value):
- return tuple(convert_dataclass(getattr(value, field.name)) for field in dataclasses.fields(value))
- elif isinstance(value, (list, tuple)):
- return type(value)(convert_dataclass(item) for item in value)
- return value
-
- match args:
- case tuple():
- method_args = list(args)
- case _ if dataclasses.is_dataclass(args):
- method_args = [getattr(args, field.name) for field in dataclasses.fields(args)]
- case _:
- raise ValueError("Invalid 'args' type. Expected 'tuple' or 'TypedDict' for respective typed arguments.")
-
- return [
- convert_dataclass(arg) if not isinstance(arg, algokit_utils.AppMethodCallTransactionArgument) else arg
- for arg in method_args
- ] if method_args else None
-
-def _init_dataclass(cls: type, data: dict) -> object:
- """
- Recursively instantiate a dataclass of type `cls` from `data`.
-
- For each field on the dataclass, if the field type is also a dataclass
- and the corresponding data is a dict, instantiate that field recursively.
- """
- field_values = {}
- for field in dataclasses.fields(cls):
- field_value = data.get(field.name)
- # Check if the field expects another dataclass and the value is a dict.
- if dataclasses.is_dataclass(field.type) and isinstance(field_value, dict):
- field_values[field.name] = _init_dataclass(typing.cast(type, field.type), field_value)
- else:
- field_values[field.name] = field_value
- return cls(**field_values)
-
-@dataclasses.dataclass(frozen=True)
-class AccountInfo:
- """Struct for AccountInfo"""
- payment_address: str
- units: int
- unit_value: int
- paid_coupons: int
- suspended: bool
-
-@dataclasses.dataclass(frozen=True)
-class AssetInfo:
- """Struct for AssetInfo"""
- denomination_asset_id: int
- settlement_asset_id: int
- outstanding_principal: int
- unit_value: int
- day_count_convention: int
- principal_discount: int
- interest_rate: int
- total_supply: int
- circulating_supply: int
- primary_distribution_opening_date: int
- primary_distribution_closure_date: int
- issuance_date: int
- maturity_date: int
- suspended: bool
- performance: int
-
-@dataclasses.dataclass(frozen=True)
-class AssetMetadata:
- """Struct for AssetMetadata"""
- contract_type: int
- calendar: int
- business_day_convention: int
- end_of_month_convention: int
- prepayment_effect: int
- penalty_type: int
- prospectus_hash: bytes
- prospectus_url: str
-
-@dataclasses.dataclass(frozen=True)
-class DayCountFactor:
- """Struct for DayCountFactor"""
- numerator: int
- denominator: int
-
-@dataclasses.dataclass(frozen=True)
-class CouponsInfo:
- """Struct for CouponsInfo"""
- total_coupons: int
- due_coupons: int
- next_coupon_due_date: int
- day_count_factor: DayCountFactor
- all_due_coupons_paid: bool
-
-@dataclasses.dataclass(frozen=True)
-class CurrentUnitsValue:
- """Struct for CurrentUnitsValue"""
- units_value: int
- accrued_interest: int
- day_count_factor: DayCountFactor
-
-@dataclasses.dataclass(frozen=True)
-class PaymentAmounts:
- """Struct for PaymentAmounts"""
- interest: int
- principal: int
-
-@dataclasses.dataclass(frozen=True)
-class PaymentResult:
- """Struct for PaymentResult"""
- amount: int
- timestamp: int
- context: bytes
-
-@dataclasses.dataclass(frozen=True)
-class RoleConfig:
- """Struct for RoleConfig"""
- role_validity_start: int
- role_validity_end: int
-
-@dataclasses.dataclass(frozen=True)
-class SecondaryMarketSchedule:
- """Struct for SecondaryMarketSchedule"""
- secondary_market_opening_date: int
- secondary_market_closure_date: int
-
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AssetConfigArgs:
- """Dataclass for asset_config arguments"""
- denomination_asset_id: int
- settlement_asset_id: int
- principal: int
- principal_discount: int
- minimum_denomination: int
- day_count_convention: int
- interest_rate: int
- coupon_rates: list[int]
- time_events: list[int]
- time_periods: list[tuple[int, int]]
-
- @property
- def abi_method_signature(self) -> str:
- return "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class GetAccountUnitsCurrentValueArgs:
- """Dataclass for get_account_units_current_value arguments"""
- holding_address: str
- units: int
-
- @property
- def abi_method_signature(self) -> str:
- return "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class GetPaymentAmountArgs:
- """Dataclass for get_payment_amount arguments"""
- holding_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "get_payment_amount(address)(uint64,uint64)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class PayCouponArgs:
- """Dataclass for pay_coupon arguments"""
- holding_address: str
- payment_info: bytes | str
-
- @property
- def abi_method_signature(self) -> str:
- return "pay_coupon(address,byte[])(uint64,uint64,byte[])"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class PayPrincipalArgs:
- """Dataclass for pay_principal arguments"""
- holding_address: str
- payment_info: bytes | str
-
- @property
- def abi_method_signature(self) -> str:
- return "pay_principal(address,byte[])(uint64,uint64,byte[])"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AssetTransferArgs:
- """Dataclass for asset_transfer arguments"""
- sender_holding_address: str
- receiver_holding_address: str
- units: int
-
- @property
- def abi_method_signature(self) -> str:
- return "asset_transfer(address,address,uint64)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class SetSecondaryTimeEventsArgs:
- """Dataclass for set_secondary_time_events arguments"""
- secondary_market_time_events: list[int]
-
- @property
- def abi_method_signature(self) -> str:
- return "set_secondary_time_events(uint64[])(uint64,uint64)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class SetDefaultStatusArgs:
- """Dataclass for set_default_status arguments"""
- defaulted: bool
-
- @property
- def abi_method_signature(self) -> str:
- return "set_default_status(bool)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class PrimaryDistributionArgs:
- """Dataclass for primary_distribution arguments"""
- holding_address: str
- units: int
-
- @property
- def abi_method_signature(self) -> str:
- return "primary_distribution(address,uint64)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountGovSuspensionArgs:
- """Dataclass for account_gov_suspension arguments"""
- holding_address: str
- suspended: bool
-
- @property
- def abi_method_signature(self) -> str:
- return "account_gov_suspension(address,bool)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountOpenArgs:
- """Dataclass for account_open arguments"""
- holding_address: str
- payment_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_open(address,address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountCloseArgs:
- """Dataclass for account_close arguments"""
- holding_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_close(address)(uint64,uint64)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountUpdatePaymentAddressArgs:
- """Dataclass for account_update_payment_address arguments"""
- holding_address: str
- payment_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_update_payment_address(address,address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountGetInfoArgs:
- """Dataclass for account_get_info arguments"""
- holding_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_get_info(address)(address,uint64,uint64,uint64,bool)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacRotateArrangerArgs:
- """Dataclass for rbac_rotate_arranger arguments"""
- new_arranger: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_rotate_arranger(address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacSetOpDaemonArgs:
- """Dataclass for rbac_set_op_daemon arguments"""
- address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_set_op_daemon(address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacAssignRoleArgs:
- """Dataclass for rbac_assign_role arguments"""
- role_id: int
- role_address: str
- config: bytes | str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_assign_role(uint8,address,byte[])uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacRevokeRoleArgs:
- """Dataclass for rbac_revoke_role arguments"""
- role_id: int
- role_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_revoke_role(uint8,address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGovAssetSuspensionArgs:
- """Dataclass for rbac_gov_asset_suspension arguments"""
- suspended: bool
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_gov_asset_suspension(bool)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGetAddressRolesArgs:
- """Dataclass for rbac_get_address_roles arguments"""
- address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGetRoleConfigArgs:
- """Dataclass for rbac_get_role_config arguments"""
- role_id: int
- role_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_get_role_config(uint8,address)(uint64,uint64)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AssetCreateArgs:
- """Dataclass for asset_create arguments"""
- arranger: str
- metadata: AssetMetadata
-
- @property
- def abi_method_signature(self) -> str:
- return "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AssetUpdateArgs:
- """Dataclass for asset_update arguments"""
- metadata: AssetMetadata
-
- @property
- def abi_method_signature(self) -> str:
- return "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void"
-
-
-class _FixedCouponBondUpdate:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- def asset_update(
- self,
- args: tuple[AssetMetadata] | AssetUpdateArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppUpdateMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- compilation_params = compilation_params or algokit_utils.AppClientCompilationParams()
- return self.app_client.params.update(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": method_args,
- }))
-
-
-class FixedCouponBondParams:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- @property
- def update(self) -> "_FixedCouponBondUpdate":
- return _FixedCouponBondUpdate(self.app_client)
-
- def asset_config(
- self,
- args: tuple[int, int, int, int, int, int, int, list[int], list[int], list[tuple[int, int]]] | AssetConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void",
- "args": method_args,
- }))
-
- def get_account_units_current_value(
- self,
- args: tuple[str, int] | GetAccountUnitsCurrentValueArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))",
- "args": method_args,
- }))
-
- def get_coupon_rates(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_coupon_rates()uint16[]",
- }))
-
- def get_payment_amount(
- self,
- args: tuple[str] | GetPaymentAmountArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_payment_amount(address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def get_coupons_status(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)",
- }))
-
- def pay_coupon(
- self,
- args: tuple[str, bytes | str] | PayCouponArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "pay_coupon(address,byte[])(uint64,uint64,byte[])",
- "args": method_args,
- }))
-
- def pay_principal(
- self,
- args: tuple[str, bytes | str] | PayPrincipalArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "pay_principal(address,byte[])(uint64,uint64,byte[])",
- "args": method_args,
- }))
-
- def asset_transfer(
- self,
- args: tuple[str, str, int] | AssetTransferArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_transfer(address,address,uint64)uint64",
- "args": method_args,
- }))
-
- def set_secondary_time_events(
- self,
- args: tuple[list[int]] | SetSecondaryTimeEventsArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "set_secondary_time_events(uint64[])(uint64,uint64)",
- "args": method_args,
- }))
-
- def set_default_status(
- self,
- args: tuple[bool] | SetDefaultStatusArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "set_default_status(bool)uint64",
- "args": method_args,
- }))
-
- def primary_distribution(
- self,
- args: tuple[str, int] | PrimaryDistributionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "primary_distribution(address,uint64)uint64",
- "args": method_args,
- }))
-
- def get_asset_info(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)",
- }))
-
- def get_time_events(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_time_events()uint64[]",
- }))
-
- def get_secondary_market_schedule(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_secondary_market_schedule()uint64[]",
- }))
-
- def get_asset_metadata(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- }))
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": method_args,
- }))
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": method_args,
- }))
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": method_args,
- }))
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": method_args,
- }))
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": method_args,
- }))
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": method_args,
- }))
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": method_args,
- }))
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": method_args,
- }))
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": method_args,
- }))
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- }))
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": method_args,
- }))
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def asset_create(
- self,
- args: tuple[str, AssetMetadata] | AssetCreateArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": method_args,
- }))
-
- def clear_state(
- self,
- params: algokit_utils.AppClientBareCallParams | None = None,
-
- ) -> algokit_utils.AppCallParams:
- return self.app_client.params.bare.clear_state(
- params,
-
- )
-
-
-class _FixedCouponBondUpdateTransaction:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- def asset_update(
- self,
- args: tuple[AssetMetadata] | AssetUpdateArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- compilation_params = compilation_params or algokit_utils.AppClientCompilationParams()
- return self.app_client.create_transaction.update(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": method_args,
- }))
-
-
-class FixedCouponBondCreateTransactionParams:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- @property
- def update(self) -> "_FixedCouponBondUpdateTransaction":
- return _FixedCouponBondUpdateTransaction(self.app_client)
-
- def asset_config(
- self,
- args: tuple[int, int, int, int, int, int, int, list[int], list[int], list[tuple[int, int]]] | AssetConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void",
- "args": method_args,
- }))
-
- def get_account_units_current_value(
- self,
- args: tuple[str, int] | GetAccountUnitsCurrentValueArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))",
- "args": method_args,
- }))
-
- def get_coupon_rates(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_coupon_rates()uint16[]",
- }))
-
- def get_payment_amount(
- self,
- args: tuple[str] | GetPaymentAmountArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_payment_amount(address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def get_coupons_status(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)",
- }))
-
- def pay_coupon(
- self,
- args: tuple[str, bytes | str] | PayCouponArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "pay_coupon(address,byte[])(uint64,uint64,byte[])",
- "args": method_args,
- }))
-
- def pay_principal(
- self,
- args: tuple[str, bytes | str] | PayPrincipalArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "pay_principal(address,byte[])(uint64,uint64,byte[])",
- "args": method_args,
- }))
-
- def asset_transfer(
- self,
- args: tuple[str, str, int] | AssetTransferArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_transfer(address,address,uint64)uint64",
- "args": method_args,
- }))
-
- def set_secondary_time_events(
- self,
- args: tuple[list[int]] | SetSecondaryTimeEventsArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "set_secondary_time_events(uint64[])(uint64,uint64)",
- "args": method_args,
- }))
-
- def set_default_status(
- self,
- args: tuple[bool] | SetDefaultStatusArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "set_default_status(bool)uint64",
- "args": method_args,
- }))
-
- def primary_distribution(
- self,
- args: tuple[str, int] | PrimaryDistributionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "primary_distribution(address,uint64)uint64",
- "args": method_args,
- }))
-
- def get_asset_info(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)",
- }))
-
- def get_time_events(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_time_events()uint64[]",
- }))
-
- def get_secondary_market_schedule(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_secondary_market_schedule()uint64[]",
- }))
-
- def get_asset_metadata(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- }))
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": method_args,
- }))
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": method_args,
- }))
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": method_args,
- }))
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": method_args,
- }))
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": method_args,
- }))
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": method_args,
- }))
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": method_args,
- }))
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": method_args,
- }))
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": method_args,
- }))
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- }))
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": method_args,
- }))
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def asset_create(
- self,
- args: tuple[str, AssetMetadata] | AssetCreateArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": method_args,
- }))
-
- def clear_state(
- self,
- params: algokit_utils.AppClientBareCallParams | None = None,
-
- ) -> Transaction:
- return self.app_client.create_transaction.bare.clear_state(
- params,
-
- )
-
-
-class _FixedCouponBondUpdateSend:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- def asset_update(
- self,
- args: tuple[AssetMetadata] | AssetUpdateArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[None]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- compilation_params = compilation_params or algokit_utils.AppClientCompilationParams()
- response = self.app_client.send.update(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": method_args,
- }), send_params=send_params, compilation_params=compilation_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppUpdateTransactionResult[None], parsed_response)
-
-
-class FixedCouponBondSend:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- @property
- def update(self) -> "_FixedCouponBondUpdateSend":
- return _FixedCouponBondUpdateSend(self.app_client)
-
- def asset_config(
- self,
- args: tuple[int, int, int, int, int, int, int, list[int], list[int], list[tuple[int, int]]] | AssetConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[None]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response)
-
- def get_account_units_current_value(
- self,
- args: tuple[str, int] | GetAccountUnitsCurrentValueArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[CurrentUnitsValue]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(CurrentUnitsValue, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[CurrentUnitsValue], parsed_response)
-
- def get_coupon_rates(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[list[int]]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_coupon_rates()uint16[]",
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[list[int]], parsed_response)
-
- def get_payment_amount(
- self,
- args: tuple[str] | GetPaymentAmountArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[PaymentAmounts]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_payment_amount(address)(uint64,uint64)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(PaymentAmounts, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[PaymentAmounts], parsed_response)
-
- def get_coupons_status(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[CouponsInfo]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)",
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(CouponsInfo, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[CouponsInfo], parsed_response)
-
- def pay_coupon(
- self,
- args: tuple[str, bytes | str] | PayCouponArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[PaymentResult]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "pay_coupon(address,byte[])(uint64,uint64,byte[])",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(PaymentResult, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[PaymentResult], parsed_response)
-
- def pay_principal(
- self,
- args: tuple[str, bytes | str] | PayPrincipalArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[PaymentResult]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "pay_principal(address,byte[])(uint64,uint64,byte[])",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(PaymentResult, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[PaymentResult], parsed_response)
-
- def asset_transfer(
- self,
- args: tuple[str, str, int] | AssetTransferArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_transfer(address,address,uint64)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def set_secondary_time_events(
- self,
- args: tuple[list[int]] | SetSecondaryTimeEventsArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[SecondaryMarketSchedule]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "set_secondary_time_events(uint64[])(uint64,uint64)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(SecondaryMarketSchedule, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[SecondaryMarketSchedule], parsed_response)
-
- def set_default_status(
- self,
- args: tuple[bool] | SetDefaultStatusArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "set_default_status(bool)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def primary_distribution(
- self,
- args: tuple[str, int] | PrimaryDistributionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "primary_distribution(address,uint64)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def get_asset_info(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[AssetInfo]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)",
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(AssetInfo, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[AssetInfo], parsed_response)
-
- def get_time_events(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[list[int]]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_time_events()uint64[]",
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[list[int]], parsed_response)
-
- def get_secondary_market_schedule(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[list[int]]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_secondary_market_schedule()uint64[]",
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[list[int]], parsed_response)
-
- def get_asset_metadata(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[AssetMetadata]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(AssetMetadata, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[AssetMetadata], parsed_response)
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[tuple[int, int]]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[tuple[int, int]], parsed_response)
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[AccountInfo]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(AccountInfo, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[AccountInfo], parsed_response)
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[str]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[str], parsed_response)
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[tuple[bool, bool, bool, bool, bool]]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[tuple[bool, bool, bool, bool, bool]], parsed_response)
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[RoleConfig]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(RoleConfig, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[RoleConfig], parsed_response)
-
- def asset_create(
- self,
- args: tuple[str, AssetMetadata] | AssetCreateArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[None]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[None], parsed_response)
-
- def clear_state(
- self,
- params: algokit_utils.AppClientBareCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[algokit_utils.ABIReturn]:
- return self.app_client.send.bare.clear_state(
- params,
- send_params=send_params,
- )
-
-
-class GlobalStateValue(typing.TypedDict):
- """Shape of global_state state key values"""
- arranger: str
- op_daemon: str
- asset_suspended: int
- asset_defaulted: int
- total_units: int
- circulating_units: int
- unit_value: int
- status: int
- denomination_asset_id: int
- settlement_asset_id: int
- day_count_convention: int
- metadata: bytes
- principal_discount: int
- interest_rate: int
- total_coupons: int
- primary_distribution_opening_date: int
- primary_distribution_closure_date: int
- issuance_date: int
- secondary_market_opening_date: int
- secondary_market_closure_date: int
- maturity_date: int
- paid_coupon_units: int
- due_coupons_watermark: int
-
-class BoxStateValue(typing.TypedDict):
- """Shape of box state key values"""
- time_events: list[int]
- coupon_rates: list[int]
-
-class FixedCouponBondState:
- """Methods to access state for the current FixedCouponBond app"""
-
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- @property
- def global_state(
- self
- ) -> "_GlobalState":
- """Methods to access global_state for the current app"""
- return _GlobalState(self.app_client)
-
- @property
- def box(
- self
- ) -> "_BoxState":
- """Methods to access box for the current app"""
- return _BoxState(self.app_client)
-
-class _GlobalState:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- # Pre-generated mapping of value types to their struct classes
- self._struct_classes: dict[str, typing.Type[typing.Any]] = {}
-
- def get_all(self) -> GlobalStateValue:
- """Get all current keyed values from global_state state"""
- result = self.app_client.state.global_state.get_all()
- if not result:
- return typing.cast(GlobalStateValue, {})
-
- converted = {}
- for key, value in result.items():
- key_info = self.app_client.app_spec.state.keys.global_state.get(key)
- struct_class = self._struct_classes.get(key_info.value_type) if key_info else None
- converted[key] = (
- _init_dataclass(struct_class, value) if struct_class and isinstance(value, dict)
- else value
- )
- return typing.cast(GlobalStateValue, converted)
-
- @property
- def arranger(self) -> str:
- """Get the current value of the arranger key in global_state state"""
- value = self.app_client.state.global_state.get_value("arranger")
- if isinstance(value, dict) and "address" in self._struct_classes:
- return _init_dataclass(self._struct_classes["address"], value) # type: ignore
- return typing.cast(str, value)
-
- @property
- def op_daemon(self) -> str:
- """Get the current value of the op_daemon key in global_state state"""
- value = self.app_client.state.global_state.get_value("op_daemon")
- if isinstance(value, dict) and "address" in self._struct_classes:
- return _init_dataclass(self._struct_classes["address"], value) # type: ignore
- return typing.cast(str, value)
-
- @property
- def asset_suspended(self) -> int:
- """Get the current value of the asset_suspended key in global_state state"""
- value = self.app_client.state.global_state.get_value("asset_suspended")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def asset_defaulted(self) -> int:
- """Get the current value of the asset_defaulted key in global_state state"""
- value = self.app_client.state.global_state.get_value("asset_defaulted")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def total_units(self) -> int:
- """Get the current value of the total_units key in global_state state"""
- value = self.app_client.state.global_state.get_value("total_units")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def circulating_units(self) -> int:
- """Get the current value of the circulating_units key in global_state state"""
- value = self.app_client.state.global_state.get_value("circulating_units")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def unit_value(self) -> int:
- """Get the current value of the unit_value key in global_state state"""
- value = self.app_client.state.global_state.get_value("unit_value")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def status(self) -> int:
- """Get the current value of the status key in global_state state"""
- value = self.app_client.state.global_state.get_value("status")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def denomination_asset_id(self) -> int:
- """Get the current value of the denomination_asset_id key in global_state state"""
- value = self.app_client.state.global_state.get_value("denomination_asset_id")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def settlement_asset_id(self) -> int:
- """Get the current value of the settlement_asset_id key in global_state state"""
- value = self.app_client.state.global_state.get_value("settlement_asset_id")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def day_count_convention(self) -> int:
- """Get the current value of the day_count_convention key in global_state state"""
- value = self.app_client.state.global_state.get_value("day_count_convention")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def metadata(self) -> bytes:
- """Get the current value of the metadata key in global_state state"""
- value = self.app_client.state.global_state.get_value("metadata")
- if isinstance(value, dict) and "AVMBytes" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMBytes"], value) # type: ignore
- return typing.cast(bytes, value)
-
- @property
- def principal_discount(self) -> int:
- """Get the current value of the principal_discount key in global_state state"""
- value = self.app_client.state.global_state.get_value("principal_discount")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def interest_rate(self) -> int:
- """Get the current value of the interest_rate key in global_state state"""
- value = self.app_client.state.global_state.get_value("interest_rate")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def total_coupons(self) -> int:
- """Get the current value of the total_coupons key in global_state state"""
- value = self.app_client.state.global_state.get_value("total_coupons")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def primary_distribution_opening_date(self) -> int:
- """Get the current value of the primary_distribution_opening_date key in global_state state"""
- value = self.app_client.state.global_state.get_value("primary_distribution_opening_date")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def primary_distribution_closure_date(self) -> int:
- """Get the current value of the primary_distribution_closure_date key in global_state state"""
- value = self.app_client.state.global_state.get_value("primary_distribution_closure_date")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def issuance_date(self) -> int:
- """Get the current value of the issuance_date key in global_state state"""
- value = self.app_client.state.global_state.get_value("issuance_date")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def secondary_market_opening_date(self) -> int:
- """Get the current value of the secondary_market_opening_date key in global_state state"""
- value = self.app_client.state.global_state.get_value("secondary_market_opening_date")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def secondary_market_closure_date(self) -> int:
- """Get the current value of the secondary_market_closure_date key in global_state state"""
- value = self.app_client.state.global_state.get_value("secondary_market_closure_date")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def maturity_date(self) -> int:
- """Get the current value of the maturity_date key in global_state state"""
- value = self.app_client.state.global_state.get_value("maturity_date")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def paid_coupon_units(self) -> int:
- """Get the current value of the paid_coupon_units key in global_state state"""
- value = self.app_client.state.global_state.get_value("paid_coupon_units")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def due_coupons_watermark(self) -> int:
- """Get the current value of the due_coupons_watermark key in global_state state"""
- value = self.app_client.state.global_state.get_value("due_coupons_watermark")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
-class _BoxState:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- # Pre-generated mapping of value types to their struct classes
- self._struct_classes: dict[str, typing.Type[typing.Any]] = {
- "RoleConfig": RoleConfig,
- "AccountInfo": AccountInfo
- }
-
- def get_all(self) -> BoxStateValue:
- """Get all current keyed values from box state"""
- result = self.app_client.state.box.get_all()
- if not result:
- return typing.cast(BoxStateValue, {})
-
- converted = {}
- for key, value in result.items():
- key_info = self.app_client.app_spec.state.keys.box.get(key)
- struct_class = self._struct_classes.get(key_info.value_type) if key_info else None
- converted[key] = (
- _init_dataclass(struct_class, value) if struct_class and isinstance(value, dict)
- else value
- )
- return typing.cast(BoxStateValue, converted)
-
- @property
- def time_events(self) -> list[int]:
- """Get the current value of the time_events key in box state"""
- value = self.app_client.state.box.get_value("time_events")
- if isinstance(value, dict) and "uint64[]" in self._struct_classes:
- return _init_dataclass(self._struct_classes["uint64[]"], value) # type: ignore
- return typing.cast(list[int], value)
-
- @property
- def coupon_rates(self) -> list[int]:
- """Get the current value of the coupon_rates key in box state"""
- value = self.app_client.state.box.get_value("coupon_rates")
- if isinstance(value, dict) and "uint16[]" in self._struct_classes:
- return _init_dataclass(self._struct_classes["uint16[]"], value) # type: ignore
- return typing.cast(list[int], value)
-
- @property
- def account_manager(self) -> "_MapState[str, RoleConfig]":
- """Get values from the account_manager map in box state"""
- return _MapState(
- self.app_client.state.box,
- "account_manager",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def primary_dealer(self) -> "_MapState[str, RoleConfig]":
- """Get values from the primary_dealer map in box state"""
- return _MapState(
- self.app_client.state.box,
- "primary_dealer",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def trustee(self) -> "_MapState[str, RoleConfig]":
- """Get values from the trustee map in box state"""
- return _MapState(
- self.app_client.state.box,
- "trustee",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def authority(self) -> "_MapState[str, RoleConfig]":
- """Get values from the authority map in box state"""
- return _MapState(
- self.app_client.state.box,
- "authority",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def interest_oracle(self) -> "_MapState[str, RoleConfig]":
- """Get values from the interest_oracle map in box state"""
- return _MapState(
- self.app_client.state.box,
- "interest_oracle",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def account(self) -> "_MapState[str, AccountInfo]":
- """Get values from the account map in box state"""
- return _MapState(
- self.app_client.state.box,
- "account",
- self._struct_classes.get("AccountInfo")
- )
-
-_KeyType = typing.TypeVar("_KeyType")
-_ValueType = typing.TypeVar("_ValueType")
-
-class _AppClientStateMethodsProtocol(typing.Protocol):
- def get_map(self, map_name: str) -> dict[typing.Any, typing.Any]:
- ...
- def get_map_value(self, map_name: str, key: typing.Any) -> typing.Any | None:
- ...
-
-class _MapState(typing.Generic[_KeyType, _ValueType]):
- """Generic class for accessing state maps with strongly typed keys and values"""
-
- def __init__(self, state_accessor: _AppClientStateMethodsProtocol, map_name: str,
- struct_class: typing.Type[_ValueType] | None = None):
- self._state_accessor = state_accessor
- self._map_name = map_name
- self._struct_class = struct_class
-
- def get_map(self) -> dict[_KeyType, _ValueType]:
- """Get all current values in the map"""
- result = self._state_accessor.get_map(self._map_name)
- if self._struct_class and result:
- return {k: _init_dataclass(self._struct_class, v) if isinstance(v, dict) else v
- for k, v in result.items()} # type: ignore
- return typing.cast(dict[_KeyType, _ValueType], result or {})
-
- def get_value(self, key: _KeyType) -> _ValueType | None:
- """Get a value from the map by key"""
- key_value = dataclasses.asdict(key) if dataclasses.is_dataclass(key) else key # type: ignore
- value = self._state_accessor.get_map_value(self._map_name, key_value)
- if value is not None and self._struct_class and isinstance(value, dict):
- return _init_dataclass(self._struct_class, value) # type: ignore
- return typing.cast(_ValueType | None, value)
-
-
-class FixedCouponBondClient:
- """Client for interacting with FixedCouponBond smart contract"""
-
- @typing.overload
- def __init__(self, app_client: algokit_utils.AppClient) -> None: ...
-
- @typing.overload
- def __init__(
- self,
- *,
- algorand: _AlgoKitAlgorandClient,
- app_id: int,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> None: ...
-
- def __init__(
- self,
- app_client: algokit_utils.AppClient | None = None,
- *,
- algorand: _AlgoKitAlgorandClient | None = None,
- app_id: int | None = None,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> None:
- if app_client:
- self.app_client = app_client
- elif algorand and app_id:
- self.app_client = algokit_utils.AppClient(
- algokit_utils.AppClientParams(
- algorand=algorand,
- app_spec=APP_SPEC,
- app_id=app_id,
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- )
- )
- else:
- raise ValueError("Either app_client or algorand and app_id must be provided")
-
- self.params = FixedCouponBondParams(self.app_client)
- self.create_transaction = FixedCouponBondCreateTransactionParams(self.app_client)
- self.send = FixedCouponBondSend(self.app_client)
- self.state = FixedCouponBondState(self.app_client)
-
- @staticmethod
- def from_creator_and_name(
- creator_address: str,
- app_name: str,
- algorand: _AlgoKitAlgorandClient,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ignore_cache: bool | None = None,
- app_lookup_cache: algokit_utils.ApplicationLookup | None = None,
- ) -> "FixedCouponBondClient":
- return FixedCouponBondClient(
- algokit_utils.AppClient.from_creator_and_name(
- creator_address=creator_address,
- app_name=app_name,
- app_spec=APP_SPEC,
- algorand=algorand,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- ignore_cache=ignore_cache,
- app_lookup_cache=app_lookup_cache,
- )
- )
-
- @staticmethod
- def from_network(
- algorand: _AlgoKitAlgorandClient,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> "FixedCouponBondClient":
- return FixedCouponBondClient(
- algokit_utils.AppClient.from_network(
- app_spec=APP_SPEC,
- algorand=algorand,
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- )
- )
-
- @property
- def app_id(self) -> int:
- return self.app_client.app_id
-
- @property
- def app_address(self) -> str:
- return self.app_client.app_address
-
- @property
- def app_name(self) -> str:
- return self.app_client.app_name
-
- @property
- def app_spec(self) -> algokit_utils.Arc56Contract:
- return self.app_client.app_spec
-
- @property
- def algorand(self) -> _AlgoKitAlgorandClient:
- return self.app_client.algorand
-
- def clone(
- self,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> "FixedCouponBondClient":
- return FixedCouponBondClient(
- self.app_client.clone(
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- )
- )
-
- def new_group(self) -> "FixedCouponBondComposer":
- return FixedCouponBondComposer(self)
-
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void"],
- return_value: algokit_utils.ABIReturn | None
- ) -> None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))"],
- return_value: algokit_utils.ABIReturn | None
- ) -> CurrentUnitsValue | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_coupon_rates()uint16[]"],
- return_value: algokit_utils.ABIReturn | None
- ) -> list[int] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_payment_amount(address)(uint64,uint64)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> PaymentAmounts | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> CouponsInfo | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["pay_coupon(address,byte[])(uint64,uint64,byte[])"],
- return_value: algokit_utils.ABIReturn | None
- ) -> PaymentResult | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["pay_principal(address,byte[])(uint64,uint64,byte[])"],
- return_value: algokit_utils.ABIReturn | None
- ) -> PaymentResult | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["asset_transfer(address,address,uint64)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["set_secondary_time_events(uint64[])(uint64,uint64)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> SecondaryMarketSchedule | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["set_default_status(bool)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["primary_distribution(address,uint64)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> AssetInfo | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_time_events()uint64[]"],
- return_value: algokit_utils.ABIReturn | None
- ) -> list[int] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_secondary_market_schedule()uint64[]"],
- return_value: algokit_utils.ABIReturn | None
- ) -> list[int] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> AssetMetadata | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_gov_suspension(address,bool)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_open(address,address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_close(address)(uint64,uint64)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> tuple[int, int] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_update_payment_address(address,address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_get_info(address)(address,uint64,uint64,uint64,bool)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> AccountInfo | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_rotate_arranger(address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_set_op_daemon(address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_assign_role(uint8,address,byte[])uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_revoke_role(uint8,address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_gov_asset_suspension(bool)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_get_arranger()address"],
- return_value: algokit_utils.ABIReturn | None
- ) -> str | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_get_address_roles(address)(bool,bool,bool,bool,bool)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> tuple[bool, bool, bool, bool, bool] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_get_role_config(uint8,address)(uint64,uint64)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> RoleConfig | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void"],
- return_value: algokit_utils.ABIReturn | None
- ) -> None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void"],
- return_value: algokit_utils.ABIReturn | None
- ) -> None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: str,
- return_value: algokit_utils.ABIReturn | None
- ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | None: ...
-
- def decode_return_value(
- self,
- method: str,
- return_value: algokit_utils.ABIReturn | None
- ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | AccountInfo | AssetInfo | AssetMetadata | CouponsInfo | CurrentUnitsValue | None | PaymentAmounts | PaymentResult | RoleConfig | SecondaryMarketSchedule | int | list[int] | str | tuple[bool, bool, bool, bool, bool] | tuple[int, int]:
- """Decode ABI return value for the given method."""
- if return_value is None:
- return None
-
- arc56_method = self.app_spec.get_arc56_method(method)
- decoded = return_value.get_arc56_value(arc56_method, self.app_spec.structs)
-
- # If method returns a struct, convert the dict to appropriate dataclass
- if (arc56_method and
- arc56_method.returns and
- arc56_method.returns.struct and
- isinstance(decoded, dict)):
- struct_class = globals().get(arc56_method.returns.struct)
- if struct_class:
- return struct_class(**typing.cast(dict, decoded))
- return decoded
-
-
-@dataclasses.dataclass(frozen=True)
-class FixedCouponBondMethodCallCreateParams(
- algokit_utils.AppClientCreateSchema, algokit_utils.BaseAppClientMethodCallParams[
- AssetCreateArgs,
- str | None,
- ]
-):
- """Parameters for creating FixedCouponBond contract using ABI"""
- on_complete: typing.Literal[OnComplete.NoOpOC] | None = None
- method: str | None = None
-
- def to_algokit_utils_params(self) -> algokit_utils.AppClientMethodCallCreateParams:
- method_args = _parse_abi_args(self.args)
- return algokit_utils.AppClientMethodCallCreateParams(
- **{
- **self.__dict__,
- "method": self.method or getattr(self.args, "abi_method_signature", None),
- "args": method_args,
- }
- )
-
-@dataclasses.dataclass(frozen=True)
-class FixedCouponBondMethodCallUpdateParams(
- algokit_utils.BaseAppClientMethodCallParams[
- AssetUpdateArgs,
- str | None,
- ]
-):
- """Parameters for calling FixedCouponBond contract using ABI"""
- on_complete: typing.Literal[OnComplete.UpdateApplicationOC] | None = None
- method: str | None = None
-
- def to_algokit_utils_params(self) -> algokit_utils.AppClientMethodCallParams:
- method_args = _parse_abi_args(self.args)
- return algokit_utils.AppClientMethodCallParams(
- **{
- **self.__dict__,
- "method": self.method or getattr(self.args, "abi_method_signature", None),
- "args": method_args,
- }
- )
-
-class FixedCouponBondFactory(algokit_utils.TypedAppFactoryProtocol[FixedCouponBondMethodCallCreateParams, FixedCouponBondMethodCallUpdateParams, None]):
- """Factory for deploying and managing FixedCouponBondClient smart contracts"""
-
- def __init__(
- self,
- algorand: _AlgoKitAlgorandClient,
- *,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- version: str | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None,
- ):
- self.app_factory = algokit_utils.AppFactory(
- params=algokit_utils.AppFactoryParams(
- algorand=algorand,
- app_spec=APP_SPEC,
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- version=version,
- compilation_params=compilation_params,
- )
- )
- self.params = FixedCouponBondFactoryParams(self.app_factory)
- self.create_transaction = FixedCouponBondFactoryCreateTransaction(self.app_factory)
- self.send = FixedCouponBondFactorySend(self.app_factory)
-
- @property
- def app_name(self) -> str:
- return self.app_factory.app_name
-
- @property
- def app_spec(self) -> algokit_utils.Arc56Contract:
- return self.app_factory.app_spec
-
- @property
- def algorand(self) -> _AlgoKitAlgorandClient:
- return self.app_factory.algorand
-
- def deploy(
- self,
- *,
- on_update: algokit_utils.OnUpdate | None = None,
- on_schema_break: algokit_utils.OnSchemaBreak | None = None,
- create_params: FixedCouponBondMethodCallCreateParams | None = None,
- update_params: FixedCouponBondMethodCallUpdateParams | None = None,
- delete_params: None = None,
- existing_deployments: algokit_utils.ApplicationLookup | None = None,
- ignore_cache: bool = False,
- app_name: str | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None,
- send_params: algokit_utils.SendParams | None = None,
- ) -> tuple[FixedCouponBondClient, algokit_utils.AppFactoryDeployResult]:
- """Deploy the application"""
- deploy_response = self.app_factory.deploy(
- on_update=on_update,
- on_schema_break=on_schema_break,
- create_params=create_params.to_algokit_utils_params() if create_params else None,
- update_params=update_params.to_algokit_utils_params() if update_params else None,
- delete_params=delete_params,
- existing_deployments=existing_deployments,
- ignore_cache=ignore_cache,
- app_name=app_name,
- compilation_params=compilation_params,
- send_params=send_params,
- )
-
- return FixedCouponBondClient(deploy_response[0]), deploy_response[1]
-
- def get_app_client_by_creator_and_name(
- self,
- creator_address: str,
- app_name: str,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- ignore_cache: bool | None = None,
- app_lookup_cache: algokit_utils.ApplicationLookup | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> FixedCouponBondClient:
- """Get an app client by creator address and name"""
- return FixedCouponBondClient(
- self.app_factory.get_app_client_by_creator_and_name(
- creator_address,
- app_name,
- default_sender,
- default_signer,
- ignore_cache,
- app_lookup_cache,
- approval_source_map,
- clear_source_map,
- )
- )
-
- def get_app_client_by_id(
- self,
- app_id: int,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> FixedCouponBondClient:
- """Get an app client by app ID"""
- return FixedCouponBondClient(
- self.app_factory.get_app_client_by_id(
- app_id,
- app_name,
- default_sender,
- default_signer,
- approval_source_map,
- clear_source_map,
- )
- )
-
-
-class FixedCouponBondFactoryParams:
- """Parameters for creating transactions for FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
- self.create = FixedCouponBondFactoryCreateParams(app_factory)
- self.update = FixedCouponBondFactoryUpdateParams(app_factory)
- self.delete = FixedCouponBondFactoryDeleteParams(app_factory)
-
-class FixedCouponBondFactoryCreateParams:
- """Parameters for 'create' operations of FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateParams:
- """Creates an instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.bare.create(
- algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)),
- compilation_params=compilation_params)
-
- def asset_config(
- self,
- args: tuple[int, int, int, int, int, int, int, list[int], list[int], list[tuple[int, int]]] | AssetConfigArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_account_units_current_value(
- self,
- args: tuple[str, int] | GetAccountUnitsCurrentValueArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_coupon_rates(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_coupon_rates()uint16[] ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_coupon_rates()uint16[]",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_payment_amount(
- self,
- args: tuple[str] | GetPaymentAmountArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_payment_amount(address)(uint64,uint64) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_payment_amount(address)(uint64,uint64)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_coupons_status(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def pay_coupon(
- self,
- args: tuple[str, bytes | str] | PayCouponArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the pay_coupon(address,byte[])(uint64,uint64,byte[]) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "pay_coupon(address,byte[])(uint64,uint64,byte[])",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def pay_principal(
- self,
- args: tuple[str, bytes | str] | PayPrincipalArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the pay_principal(address,byte[])(uint64,uint64,byte[]) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "pay_principal(address,byte[])(uint64,uint64,byte[])",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def asset_transfer(
- self,
- args: tuple[str, str, int] | AssetTransferArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the asset_transfer(address,address,uint64)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "asset_transfer(address,address,uint64)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def set_secondary_time_events(
- self,
- args: tuple[list[int]] | SetSecondaryTimeEventsArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the set_secondary_time_events(uint64[])(uint64,uint64) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "set_secondary_time_events(uint64[])(uint64,uint64)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def set_default_status(
- self,
- args: tuple[bool] | SetDefaultStatusArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the set_default_status(bool)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "set_default_status(bool)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def primary_distribution(
- self,
- args: tuple[str, int] | PrimaryDistributionArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the primary_distribution(address,uint64)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "primary_distribution(address,uint64)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_asset_info(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_time_events(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_time_events()uint64[] ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_time_events()uint64[]",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_secondary_market_schedule(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_secondary_market_schedule()uint64[] ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_secondary_market_schedule()uint64[]",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def get_asset_metadata(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_gov_suspension(address,bool)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_open(address,address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_close(address)(uint64,uint64) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_update_payment_address(address,address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_get_info(address)(address,uint64,uint64,uint64,bool) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_rotate_arranger(address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_set_op_daemon(address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_assign_role(uint8,address,byte[])uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_revoke_role(uint8,address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_gov_asset_suspension(bool)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_get_arranger(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_arranger()address ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_address_roles(address)(bool,bool,bool,bool,bool) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_role_config(uint8,address)(uint64,uint64) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def asset_create(
- self,
- args: tuple[str, AssetMetadata] | AssetCreateArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def asset_update(
- self,
- args: tuple[AssetMetadata] | AssetUpdateArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
-class FixedCouponBondFactoryUpdateParams:
- """Parameters for 'update' operations of FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
-
- ) -> algokit_utils.AppUpdateParams:
- """Updates an instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.bare.deploy_update(
- algokit_utils.AppClientBareCallParams(**dataclasses.asdict(params)),
- )
-
-class FixedCouponBondFactoryDeleteParams:
- """Parameters for 'delete' operations of FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
-
- ) -> algokit_utils.AppDeleteParams:
- """Deletes an instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.bare.deploy_delete(
- algokit_utils.AppClientBareCallParams(**dataclasses.asdict(params)),
- )
-
-
-class FixedCouponBondFactoryCreateTransaction:
- """Create transactions for FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
- self.create = FixedCouponBondFactoryCreateTransactionCreate(app_factory)
-
-
-class FixedCouponBondFactoryCreateTransactionCreate:
- """Create new instances of FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- ) -> Transaction:
- """Creates a new instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.create_transaction.bare.create(
- algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)),
- )
-
-
-class FixedCouponBondFactorySend:
- """Send calls to FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
- self.create = FixedCouponBondFactorySendCreate(app_factory)
-
-
-class FixedCouponBondFactorySendCreate:
- """Send create calls to FixedCouponBond contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- send_params: algokit_utils.SendParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None,
- ) -> tuple[FixedCouponBondClient, algokit_utils.SendAppCreateTransactionResult]:
- """Creates a new instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- result = self.app_factory.send.bare.create(
- algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)),
- send_params=send_params,
- compilation_params=compilation_params
- )
- return FixedCouponBondClient(result[0]), result[1]
-
- def asset_create(
- self,
- args: tuple[str, AssetMetadata] | AssetCreateArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- send_params: algokit_utils.SendParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> tuple[FixedCouponBondClient, algokit_utils.AppFactoryCreateMethodCallResult[None]]:
- """Creates and sends a transaction using the asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- client, result = self.app_factory.send.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void",
- "args": _parse_abi_args(args),
- }
- ),
- send_params=send_params,
- compilation_params=compilation_params
- )
- return_value = None if result.abi_return is None else typing.cast(None, result.abi_return)
-
- return FixedCouponBondClient(client), algokit_utils.AppFactoryCreateMethodCallResult[None](
- **{
- **result.__dict__,
- "app_id": result.app_id,
- "abi_return": return_value,
- "transaction": result.transaction,
- "confirmation": result.confirmation,
- "group_id": result.group_id,
- "tx_ids": result.tx_ids,
- "transactions": result.transactions,
- "confirmations": result.confirmations,
- "app_address": result.app_address,
- }
- )
-
-
-class _FixedCouponBondUpdateComposer:
- def __init__(self, composer: "FixedCouponBondComposer"):
- self.composer = composer
- def asset_update(
- self,
- args: tuple[AssetMetadata] | AssetUpdateArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self.composer._composer.add_app_update_method_call(
- self.composer.client.params.update.asset_update(
- args=args,
- params=params,
- compilation_params=compilation_params
- )
- )
- self.composer._result_mappers.append(
- lambda v: self.composer.client.decode_return_value(
- "asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void", v
- )
- )
- return self.composer
-
-
-class FixedCouponBondComposer:
- """Composer for creating transaction groups for FixedCouponBond contract calls"""
-
- def __init__(self, client: "FixedCouponBondClient"):
- self.client = client
- self._composer = client.algorand.new_group()
- self._result_mappers: list[typing.Callable[[algokit_utils.ABIReturn | None], object] | None] = []
-
- @property
- def update(self) -> "_FixedCouponBondUpdateComposer":
- return _FixedCouponBondUpdateComposer(self)
-
- def asset_config(
- self,
- args: tuple[int, int, int, int, int, int, int, list[int], list[int], list[tuple[int, int]]] | AssetConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.asset_config(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void", v
- )
- )
- return self
-
- def get_account_units_current_value(
- self,
- args: tuple[str, int] | GetAccountUnitsCurrentValueArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_account_units_current_value(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))", v
- )
- )
- return self
-
- def get_coupon_rates(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_coupon_rates(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_coupon_rates()uint16[]", v
- )
- )
- return self
-
- def get_payment_amount(
- self,
- args: tuple[str] | GetPaymentAmountArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_payment_amount(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_payment_amount(address)(uint64,uint64)", v
- )
- )
- return self
-
- def get_coupons_status(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_coupons_status(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)", v
- )
- )
- return self
-
- def pay_coupon(
- self,
- args: tuple[str, bytes | str] | PayCouponArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.pay_coupon(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "pay_coupon(address,byte[])(uint64,uint64,byte[])", v
- )
- )
- return self
-
- def pay_principal(
- self,
- args: tuple[str, bytes | str] | PayPrincipalArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.pay_principal(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "pay_principal(address,byte[])(uint64,uint64,byte[])", v
- )
- )
- return self
-
- def asset_transfer(
- self,
- args: tuple[str, str, int] | AssetTransferArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.asset_transfer(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "asset_transfer(address,address,uint64)uint64", v
- )
- )
- return self
-
- def set_secondary_time_events(
- self,
- args: tuple[list[int]] | SetSecondaryTimeEventsArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.set_secondary_time_events(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "set_secondary_time_events(uint64[])(uint64,uint64)", v
- )
- )
- return self
-
- def set_default_status(
- self,
- args: tuple[bool] | SetDefaultStatusArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.set_default_status(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "set_default_status(bool)uint64", v
- )
- )
- return self
-
- def primary_distribution(
- self,
- args: tuple[str, int] | PrimaryDistributionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.primary_distribution(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "primary_distribution(address,uint64)uint64", v
- )
- )
- return self
-
- def get_asset_info(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_asset_info(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)", v
- )
- )
- return self
-
- def get_time_events(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_time_events(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_time_events()uint64[]", v
- )
- )
- return self
-
- def get_secondary_market_schedule(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_secondary_market_schedule(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_secondary_market_schedule()uint64[]", v
- )
- )
- return self
-
- def get_asset_metadata(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.get_asset_metadata(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", v
- )
- )
- return self
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_gov_suspension(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_gov_suspension(address,bool)uint64", v
- )
- )
- return self
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_open(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_open(address,address)uint64", v
- )
- )
- return self
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_close(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_close(address)(uint64,uint64)", v
- )
- )
- return self
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_update_payment_address(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_update_payment_address(address,address)uint64", v
- )
- )
- return self
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_get_info(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_get_info(address)(address,uint64,uint64,uint64,bool)", v
- )
- )
- return self
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_rotate_arranger(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_rotate_arranger(address)uint64", v
- )
- )
- return self
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_set_op_daemon(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_set_op_daemon(address)uint64", v
- )
- )
- return self
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_assign_role(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_assign_role(uint8,address,byte[])uint64", v
- )
- )
- return self
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_revoke_role(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_revoke_role(uint8,address)uint64", v
- )
- )
- return self
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_gov_asset_suspension(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_gov_asset_suspension(bool)uint64", v
- )
- )
- return self
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_get_arranger(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_get_arranger()address", v
- )
- )
- return self
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_get_address_roles(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", v
- )
- )
- return self
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_get_role_config(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_get_role_config(uint8,address)(uint64,uint64)", v
- )
- )
- return self
-
- def asset_create(
- self,
- args: tuple[str, AssetMetadata] | AssetCreateArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_app_call_method_call(
- self.client.params.asset_create(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void", v
- )
- )
- return self
-
- def clear_state(
- self,
- *,
- args: list[bytes] | None = None,
- params: algokit_utils.CommonAppCallParams | None = None,
- ) -> "FixedCouponBondComposer":
- params=params or algokit_utils.CommonAppCallParams()
- self._composer.add_app_call(
- self.client.params.clear_state(
- algokit_utils.AppClientBareCallParams(
- **{
- **dataclasses.asdict(params),
- "args": args
- }
- )
- )
- )
- return self
-
- def add_transaction(
- self, txn: Transaction, signer: TransactionSigner | None = None
- ) -> "FixedCouponBondComposer":
- self._composer.add_transaction(txn, signer)
- return self
-
- def composer(self) -> algokit_utils.TransactionComposer:
- return self._composer
-
- def simulate(
- self,
- allow_more_logs: bool | None = None,
- allow_empty_signatures: bool | None = None,
- allow_unnamed_resources: bool | None = None,
- extra_opcode_budget: int | None = None,
- exec_trace_config: SimulateTraceConfig | None = None,
- simulation_round: int | None = None,
- skip_signatures: bool | None = None,
- ) -> algokit_utils.SendAtomicTransactionComposerResults:
- return self._composer.simulate(
- allow_more_logs=allow_more_logs,
- allow_empty_signatures=allow_empty_signatures,
- allow_unnamed_resources=allow_unnamed_resources,
- extra_opcode_budget=extra_opcode_budget,
- exec_trace_config=exec_trace_config,
- simulation_round=simulation_round,
- skip_signatures=skip_signatures,
- )
-
- def send(
- self,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAtomicTransactionComposerResults:
- return self._composer.send(send_params)
diff --git a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.approval.puya.map b/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.approval.puya.map
deleted file mode 100644
index e7c96b13..00000000
--- a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.approval.puya.map
+++ /dev/null
@@ -1,7793 +0,0 @@
-{
- "version": 3,
- "sources": [
- "../../../modules/accounting.py",
- "../../../modules/rbac.py",
- "../../mock_module_accounting/contract.py"
- ],
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC8BmD;AAAf;;AAA5B;AAC4C;;AAAf;;AAA7B;AAgBA;;AAAuB;AAAvB;AACA;;AAAuB;AAAvB;AD9BA;;;;;;;;;;;;;AAAmB;AAAnB;AACA;;AAAyB;AAAzB;AACA;;;;;;;;;;;;AAAkB;AAAlB;AACA;;AAAc;AAAd;AEhBR;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAQK;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAEG;AAAsB;;AAAtB;AAFH;AAAA;AFgFA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACjB+B;AAAgB;;AAArC;;;AAAP;AD9C0B;;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AAmFA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACO;;AArBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACjD+B;AAAsB;;AAA3C;;;AAAP;ADxCO;AAAA;;AAAA;AAAA;AAAe;;;AAAf;AA+GA;AAAP;AACA;;;AACA;;;AAC8B;;AAAvB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AAIU;AAFsB;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAhC;AAOO;;AAlCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACrF+B;AAAsB;;AAA3C;;;AAAP;ADuGA;;;AA5I0B;;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA+Ie;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACf;;AACA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAhIR;;;AACY;;AAAc;;;AAAd;AAiIiB;;AAzBxB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBU;;AAAA;;AAAA;AAAP;AACA;;;AACA;;;AA3K0B;;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AA6KA;AAAA;;AAAA;AACO;;AAzBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAhL6B;;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA+LO;AAAA;AAfV;AAAA;AAAA;AAAA;AAAA;AAAA;AC5DA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAsBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGc;AAAX;AAAX;;;AACY;AAAA;;AAAA;AAqGG;;AA1BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxEM;AAAW;;AAAX;AAAX;;;AACuC;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA+FJ;;;AA7FG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA2FJ;;;AAzFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAuFJ;;;AArFG;AAAW;;AAAX;AAAX;;;AACuC;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAmFJ;;;AAjFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;;;;AAkFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAmBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGO;AAAW;AAAX;AAAP;AACc;;AAAX;AAAX;;;AACmC;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAmGG;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1EM;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA8FJ;;;AA5FG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA0FJ;;;AAxFG;AAAW;;AAAX;AAAX;;;AACmC;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAsFJ;;;AApFG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;;;;AAqFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzJ+B;AAAgB;;AAArC;;;AAAP;AAyKA;;AAAA;AAAA;AACO;;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BU;AAAA;AAAA;AAAA;AARV;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAc4B;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AAlBP;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAcU;AACP;AAAA;;;AAES;AAIA;;;;;;;AALT;;AAAA;;;;;;;;;;;;;;AA+BQ;AAJI;;AA5QL;;AAAA;AAAA;AAAA;AAAA;;AA2QC;AAGO;AAAA;AA7ClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCe;AAvQL;;AAAA;AAAA;AAAA;AAAA;;AAsQC;AAGO;AAAA;AAxClB;;;AAiCe;;AAlQL;;AAAA;AAAA;AAAA;AAAA;;AAiQC;AAGO;AAAA;AAnClB;;;AA4Be;;AA7PL;;AAAA;AAAA;AAAA;AAAA;;AA4PC;AAGO;AAAA;AA9BlB;;;AAuBe;AAxPL;;AAAA;AAAA;AAAA;AAAA;;AAuPC;AAGO;AAAA;AAzBlB;;;AAkBkB;;;;;;;;;;;;;;;;;;AAlBlB;;;AA/ND;;;;;AAFW;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAGA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;AADH;AAAA;;;AAEG;;AAAA;AAAA;AAAA;;AAAA;AADA;;AAAA;AADH;;;;AADJ;;AAAA;;;;;AAOyB;;AAbF;AAAA;AAAA;AAAA;AAAhB;AAaP;;AAkBW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAEJ;;;AACW;;AACH;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;;AAAP;;;",
- "op_pc_offset": 0,
- "pc_events": {
- "1": {
- "subroutine": "algopy.arc4.ARC4Contract.approval_program",
- "params": {},
- "block": "main",
- "stack_in": [],
- "op": "intcblock 1 0 32 20"
- },
- "7": {
- "op": "bytecblock 0x151f7c75 0x52323023 0x52373023 0x52343023 0x52333023 0x52353023 0x52363023 0x52383023 \"asset_suspended\" \"circulating_units\" \"status\" 0x52323523 \"asset_defaulted\""
- },
- "111": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "113": {
- "op": "bnz main_after_if_else@2",
- "stack_out": []
- },
- "116": {
- "op": "bytec_1 // 0x52323023",
- "defined_out": [
- "0x52323023"
- ],
- "stack_out": [
- "0x52323023"
- ]
- },
- "117": {
- "op": "global ZeroAddress",
- "defined_out": [
- "0x52323023",
- "tmp%0#2"
- ],
- "stack_out": [
- "0x52323023",
- "tmp%0#2"
- ]
- },
- "119": {
- "op": "app_global_put",
- "stack_out": []
- },
- "120": {
- "op": "bytec 11 // 0x52323523",
- "defined_out": [
- "0x52323523"
- ],
- "stack_out": [
- "0x52323523"
- ]
- },
- "122": {
- "op": "global ZeroAddress",
- "defined_out": [
- "0x52323523",
- "tmp%1#2"
- ],
- "stack_out": [
- "0x52323523",
- "tmp%1#2"
- ]
- },
- "124": {
- "op": "app_global_put",
- "stack_out": []
- },
- "125": {
- "op": "bytec 8 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\""
- ],
- "stack_out": [
- "\"asset_suspended\""
- ]
- },
- "127": {
- "op": "intc_1 // 0",
- "defined_out": [
- "\"asset_suspended\"",
- "0"
- ],
- "stack_out": [
- "\"asset_suspended\"",
- "0"
- ]
- },
- "128": {
- "op": "app_global_put",
- "stack_out": []
- },
- "129": {
- "op": "bytec 12 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\""
- ],
- "stack_out": [
- "\"asset_defaulted\""
- ]
- },
- "131": {
- "op": "intc_1 // 0",
- "stack_out": [
- "\"asset_defaulted\"",
- "0"
- ]
- },
- "132": {
- "op": "app_global_put",
- "stack_out": []
- },
- "133": {
- "op": "pushbytes \"total_units\"",
- "defined_out": [
- "\"total_units\""
- ],
- "stack_out": [
- "\"total_units\""
- ]
- },
- "146": {
- "op": "intc_1 // 0",
- "stack_out": [
- "\"total_units\"",
- "0"
- ]
- },
- "147": {
- "op": "app_global_put",
- "stack_out": []
- },
- "148": {
- "op": "bytec 9 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\""
- ],
- "stack_out": [
- "\"circulating_units\""
- ]
- },
- "150": {
- "op": "intc_1 // 0",
- "stack_out": [
- "\"circulating_units\"",
- "0"
- ]
- },
- "151": {
- "op": "app_global_put",
- "stack_out": []
- },
- "152": {
- "op": "pushbytes \"unit_value\"",
- "defined_out": [
- "\"unit_value\""
- ],
- "stack_out": [
- "\"unit_value\""
- ]
- },
- "164": {
- "op": "intc_1 // 0",
- "stack_out": [
- "\"unit_value\"",
- "0"
- ]
- },
- "165": {
- "op": "app_global_put",
- "stack_out": []
- },
- "166": {
- "op": "bytec 10 // \"status\"",
- "defined_out": [
- "\"status\""
- ],
- "stack_out": [
- "\"status\""
- ]
- },
- "168": {
- "op": "intc_1 // 0",
- "stack_out": [
- "\"status\"",
- "0"
- ]
- },
- "169": {
- "op": "app_global_put",
- "stack_out": []
- },
- "170": {
- "block": "main_after_if_else@2",
- "stack_in": [],
- "op": "txn NumAppArgs",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "172": {
- "op": "bz main_create@22",
- "stack_out": []
- },
- "175": {
- "op": "txn OnCompletion",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "177": {
- "op": "!",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "178": {
- "op": "assert",
- "stack_out": []
- },
- "179": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "181": {
- "op": "assert",
- "stack_out": []
- },
- "182": {
- "op": "pushbytess 0xdc063b35 0x14fc10ef 0x4c113ed5 0x74a7297f 0x105c184e 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method \"account_gov_suspension(address,bool)uint64\", method \"account_open(address,address)uint64\", method \"account_close(address)(uint64,uint64)\", method \"account_update_payment_address(address,address)uint64\", method \"account_get_info(address)(address,uint64,uint64,uint64,bool)\", method \"rbac_rotate_arranger(address)uint64\", method \"rbac_set_op_daemon(address)uint64\", method \"rbac_assign_role(uint8,address,byte[])uint64\", method \"rbac_revoke_role(uint8,address)uint64\", method \"rbac_gov_asset_suspension(bool)uint64\", method \"rbac_get_arranger()address\", method \"rbac_get_address_roles(address)(bool,bool,bool,bool,bool)\", method \"rbac_get_role_config(uint8,address)(uint64,uint64)\"",
- "defined_out": [
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)"
- ],
- "stack_out": [
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))"
- ]
- },
- "249": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "tmp%6#0"
- ],
- "stack_out": [
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "tmp%6#0"
- ]
- },
- "252": {
- "op": "match account_gov_suspension account_open account_close account_update_payment_address account_get_info rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config",
- "stack_out": []
- },
- "280": {
- "op": "err"
- },
- "281": {
- "block": "main_create@22",
- "stack_in": [],
- "op": "txn OnCompletion",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "tmp%7#0"
- ]
- },
- "283": {
- "op": "!",
- "defined_out": [
- "tmp%8#0"
- ],
- "stack_out": [
- "tmp%8#0"
- ]
- },
- "284": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%8#0",
- "tmp%9#0"
- ],
- "stack_out": [
- "tmp%8#0",
- "tmp%9#0"
- ]
- },
- "286": {
- "op": "!",
- "defined_out": [
- "tmp%10#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "tmp%8#0",
- "tmp%10#0"
- ]
- },
- "287": {
- "op": "&&",
- "defined_out": [
- "tmp%11#0"
- ],
- "stack_out": [
- "tmp%11#0"
- ]
- },
- "288": {
- "op": "assert",
- "stack_out": []
- },
- "289": {
- "op": "bytec_1 // 0x52323023",
- "defined_out": [
- "0x52323023"
- ],
- "stack_out": [
- "0x52323023"
- ]
- },
- "290": {
- "op": "txn Sender",
- "defined_out": [
- "0x52323023",
- "tmp%0#2"
- ],
- "stack_out": [
- "0x52323023",
- "tmp%0#2"
- ]
- },
- "292": {
- "op": "app_global_put",
- "stack_out": []
- },
- "293": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "294": {
- "op": "return",
- "stack_out": []
- },
- "295": {
- "subroutine": "modules.accounting.AccountingModule.account_gov_suspension[routing]",
- "params": {},
- "block": "account_gov_suspension",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "298": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "299": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "300": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "301": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "302": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "303": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "306": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "307": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "308": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "1"
- ]
- },
- "309": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "310": {
- "error": "invalid number of bytes for arc4.bool",
- "op": "assert // invalid number of bytes for arc4.bool",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "311": {
- "op": "intc_1 // 0",
- "defined_out": [
- "0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "0"
- ]
- },
- "312": {
- "op": "getbit",
- "defined_out": [
- "holding_address#0",
- "suspended#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0"
- ]
- },
- "313": {
- "op": "bytec_2 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "holding_address#0",
- "suspended#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "0x52373023"
- ]
- },
- "314": {
- "op": "txn Sender",
- "defined_out": [
- "0x52373023",
- "holding_address#0",
- "suspended#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "0x52373023",
- "tmp%0#2"
- ]
- },
- "316": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "holding_address#0",
- "suspended#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "tmp%1#0"
- ]
- },
- "319": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "suspended#0"
- ]
- },
- "320": {
- "op": "bytec 4 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "suspended#0"
- ],
- "stack_out": [
- "holding_address#0",
- "suspended#0",
- "0x52333023"
- ]
- },
- "322": {
- "op": "uncover 2",
- "stack_out": [
- "suspended#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "324": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1"
- ]
- },
- "325": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "326": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "327": {
- "op": "bury 1",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "329": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1"
- ]
- },
- "330": {
- "op": "dup",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "331": {
- "op": "pushint 56",
- "defined_out": [
- "56",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "56"
- ]
- },
- "333": {
- "op": "intc_0 // 1",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "56",
- "1"
- ]
- },
- "334": {
- "op": "box_extract",
- "defined_out": [
- "box%box_extract%0#0",
- "box_prefixed_key%0#1",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box%box_extract%0#0"
- ]
- },
- "335": {
- "op": "intc_1 // 0",
- "stack_out": [
- "suspended#0",
- "box_prefixed_key%0#1",
- "box%box_extract%0#0",
- "0"
- ]
- },
- "336": {
- "op": "uncover 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "box%box_extract%0#0",
- "0",
- "suspended#0"
- ]
- },
- "338": {
- "op": "setbit",
- "defined_out": [
- "aggregate%updated_target%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%updated_target%0#0"
- ]
- },
- "339": {
- "op": "pushint 56"
- },
- "341": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "56",
- "aggregate%updated_target%0#0"
- ]
- },
- "342": {
- "op": "box_replace",
- "stack_out": []
- },
- "343": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "345": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "346": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "347": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "348": {
- "op": "concat",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "349": {
- "op": "log",
- "stack_out": []
- },
- "350": {
- "op": "intc_0 // 1",
- "stack_out": [
- "1"
- ]
- },
- "351": {
- "op": "return",
- "stack_out": []
- },
- "352": {
- "subroutine": "modules.accounting.AccountingModule.account_open[routing]",
- "params": {},
- "block": "account_open",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "355": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "356": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "357": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "358": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "359": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "360": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "363": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "payment_address#0",
- "payment_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "payment_address#0 (copy)"
- ]
- },
- "364": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "len%1#0"
- ]
- },
- "365": {
- "op": "intc_2 // 32",
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "len%1#0",
- "32"
- ]
- },
- "366": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "eq%1#0"
- ]
- },
- "367": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "368": {
- "op": "bytec_3 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0x52343023"
- ]
- },
- "369": {
- "op": "txn Sender",
- "defined_out": [
- "0x52343023",
- "holding_address#0",
- "payment_address#0",
- "tmp%0#3"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0x52343023",
- "tmp%0#3"
- ]
- },
- "371": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%1#1"
- ]
- },
- "374": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "375": {
- "op": "intc_1 // 0",
- "defined_out": [
- "0",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0"
- ]
- },
- "376": {
- "op": "bytec 10 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0",
- "\"status\""
- ]
- },
- "378": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "379": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "maybe_value%0#0"
- ]
- },
- "380": {
- "op": "pushint 200",
- "defined_out": [
- "200",
- "holding_address#0",
- "maybe_value%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "maybe_value%0#0",
- "200"
- ]
- },
- "383": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%0#2"
- ]
- },
- "384": {
- "op": "!",
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "tmp%1#1"
- ]
- },
- "385": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "payment_address#0"
- ]
- },
- "386": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "389": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "392": {
- "op": "bytec 4 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "payment_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "payment_address#0",
- "0x52333023"
- ]
- },
- "394": {
- "op": "uncover 2",
- "stack_out": [
- "payment_address#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "396": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0"
- ]
- },
- "397": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)"
- ]
- },
- "398": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "399": {
- "op": "bury 1",
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0"
- ]
- },
- "401": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%0#0",
- "payment_address#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "tmp%2#1"
- ]
- },
- "402": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0"
- ]
- },
- "403": {
- "op": "intc_1 // 0",
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "0"
- ]
- },
- "404": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "payment_address#0",
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "405": {
- "op": "uncover 2",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "payment_address#0"
- ]
- },
- "407": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%0#0 (copy)",
- "box_prefixed_key%0#0",
- "payment_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "payment_address#0",
- "aggregate%val_as_bytes%0#0 (copy)"
- ]
- },
- "409": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%head%1#0"
- ]
- },
- "410": {
- "op": "dig 1",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%0#0 (copy)"
- ]
- },
- "412": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%0#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%head%2#0"
- ]
- },
- "413": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%2#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "414": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%3#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%3#0"
- ]
- },
- "415": {
- "op": "pushbytes 0x00",
- "defined_out": [
- "0x00",
- "aggregate%head%3#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%3#0",
- "0x00"
- ]
- },
- "418": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%4#0",
- "box_prefixed_key%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#0",
- "aggregate%head%4#0"
- ]
- },
- "419": {
- "op": "box_put",
- "stack_out": []
- },
- "420": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1"
- ]
- },
- "422": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%3#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "423": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%3#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%3#0",
- "0x151f7c75"
- ]
- },
- "424": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "425": {
- "op": "concat",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "426": {
- "op": "log",
- "stack_out": []
- },
- "427": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "428": {
- "op": "return",
- "stack_out": []
- },
- "429": {
- "subroutine": "modules.accounting.AccountingModule.account_close[routing]",
- "params": {},
- "block": "account_close",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "432": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "433": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "434": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "435": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "436": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "437": {
- "op": "bytec_3 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52343023"
- ]
- },
- "438": {
- "op": "txn Sender",
- "defined_out": [
- "0x52343023",
- "holding_address#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52343023",
- "tmp%0#2"
- ]
- },
- "440": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "holding_address#0",
- "tmp%1#2"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%1#2"
- ]
- },
- "443": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "444": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "447": {
- "op": "bytec 4 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52333023"
- ]
- },
- "449": {
- "op": "swap",
- "stack_out": [
- "0x52333023",
- "holding_address#0"
- ]
- },
- "450": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "451": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "452": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "453": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "455": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "456": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "457": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "458": {
- "op": "pop",
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0"
- ]
- },
- "459": {
- "op": "intc_2 // 32",
- "stack_out": [
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "460": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "closed_units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "closed_units#0"
- ]
- },
- "461": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "closed_units#0",
- "closed_units#0 (copy)"
- ]
- },
- "462": {
- "op": "uncover 2",
- "defined_out": [
- "box_prefixed_key%0#1",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "closed_units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "464": {
- "op": "box_del",
- "defined_out": [
- "closed_units#0",
- "{box_del}"
- ],
- "stack_out": [
- "closed_units#0",
- "closed_units#0",
- "{box_del}"
- ]
- },
- "465": {
- "op": "pop",
- "stack_out": [
- "closed_units#0",
- "closed_units#0"
- ]
- },
- "466": {
- "op": "intc_1 // 0",
- "stack_out": [
- "closed_units#0",
- "closed_units#0",
- "0"
- ]
- },
- "467": {
- "op": "bytec 9 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\"",
- "0",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "closed_units#0",
- "0",
- "\"circulating_units\""
- ]
- },
- "469": {
- "op": "app_global_get_ex",
- "defined_out": [
- "closed_units#0",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "closed_units#0",
- "closed_units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "470": {
- "error": "check self.circulating_units exists",
- "op": "assert // check self.circulating_units exists",
- "stack_out": [
- "closed_units#0",
- "closed_units#0",
- "maybe_value%0#0"
- ]
- },
- "471": {
- "op": "swap",
- "stack_out": [
- "closed_units#0",
- "maybe_value%0#0",
- "closed_units#0"
- ]
- },
- "472": {
- "op": "-",
- "defined_out": [
- "closed_units#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%0#1"
- ]
- },
- "473": {
- "op": "bytec 9 // \"circulating_units\"",
- "stack_out": [
- "closed_units#0",
- "tmp%0#1",
- "\"circulating_units\""
- ]
- },
- "475": {
- "op": "dig 1",
- "defined_out": [
- "\"circulating_units\"",
- "closed_units#0",
- "tmp%0#1",
- "tmp%0#1 (copy)"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%0#1",
- "\"circulating_units\"",
- "tmp%0#1 (copy)"
- ]
- },
- "477": {
- "op": "app_global_put",
- "stack_out": [
- "closed_units#0",
- "tmp%0#1"
- ]
- },
- "478": {
- "op": "bnz account_close_after_if_else@3",
- "stack_out": [
- "closed_units#0"
- ]
- },
- "481": {
- "op": "bytec 10 // \"status\"",
- "defined_out": [
- "\"status\"",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "\"status\""
- ]
- },
- "483": {
- "op": "pushint 200",
- "defined_out": [
- "\"status\"",
- "200",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "\"status\"",
- "200"
- ]
- },
- "486": {
- "op": "app_global_put",
- "stack_out": [
- "closed_units#0"
- ]
- },
- "487": {
- "block": "account_close_after_if_else@3",
- "stack_in": [
- "closed_units#0"
- ],
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%1#1"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%1#1"
- ]
- },
- "489": {
- "op": "dig 1",
- "defined_out": [
- "closed_units#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%1#1",
- "closed_units#0"
- ]
- },
- "491": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "closed_units#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%1#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "492": {
- "op": "swap",
- "stack_out": [
- "closed_units#0",
- "aggregate%val_as_bytes%0#0",
- "tmp%1#1"
- ]
- },
- "493": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "494": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "aggregate%head%1#0"
- ]
- },
- "495": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%1#0",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "aggregate%head%1#0",
- "0x151f7c75"
- ]
- },
- "496": {
- "op": "swap",
- "stack_out": [
- "closed_units#0",
- "0x151f7c75",
- "aggregate%head%1#0"
- ]
- },
- "497": {
- "op": "concat",
- "defined_out": [
- "closed_units#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "closed_units#0",
- "tmp%5#0"
- ]
- },
- "498": {
- "op": "log",
- "stack_out": [
- "closed_units#0"
- ]
- },
- "499": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "closed_units#0"
- ],
- "stack_out": [
- "closed_units#0",
- "1"
- ]
- },
- "500": {
- "op": "return",
- "stack_out": [
- "closed_units#0"
- ]
- },
- "501": {
- "subroutine": "modules.accounting.AccountingModule.account_update_payment_address[routing]",
- "params": {},
- "block": "account_update_payment_address",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "504": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "505": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "506": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "507": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "508": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "509": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "512": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "513": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "514": {
- "op": "intc_2 // 32",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "32"
- ]
- },
- "515": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "516": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "517": {
- "op": "txn Sender",
- "defined_out": [
- "holding_address#0",
- "tmp%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%0#1"
- ]
- },
- "519": {
- "op": "dig 2",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%0#1",
- "holding_address#0 (copy)"
- ]
- },
- "521": {
- "op": "==",
- "defined_out": [
- "holding_address#0",
- "tmp%1#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%1#1"
- ]
- },
- "522": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "523": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "526": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "529": {
- "op": "bytec 4 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "tmp%2#0",
- "0x52333023"
- ]
- },
- "531": {
- "op": "uncover 2",
- "stack_out": [
- "tmp%2#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "533": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1"
- ]
- },
- "534": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "535": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "536": {
- "op": "bury 1",
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "538": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1"
- ]
- },
- "539": {
- "op": "intc_1 // 0",
- "defined_out": [
- "0",
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "box_prefixed_key%0#1",
- "0"
- ]
- },
- "540": {
- "op": "uncover 2",
- "stack_out": [
- "box_prefixed_key%0#1",
- "0",
- "tmp%2#0"
- ]
- },
- "542": {
- "op": "box_replace",
- "stack_out": []
- },
- "543": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1"
- ]
- },
- "545": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "546": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "547": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "548": {
- "op": "concat",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "549": {
- "op": "log",
- "stack_out": []
- },
- "550": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "551": {
- "op": "return",
- "stack_out": []
- },
- "552": {
- "subroutine": "modules.accounting.AccountingModule.account_get_info[routing]",
- "params": {},
- "block": "account_get_info",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "555": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "556": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "557": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "558": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "559": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "560": {
- "op": "bytec 4 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52333023"
- ]
- },
- "562": {
- "op": "swap",
- "stack_out": [
- "0x52333023",
- "holding_address#0"
- ]
- },
- "563": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "564": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "565": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "566": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "568": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "569": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "570": {
- "op": "pop",
- "stack_out": [
- "aggregate%box_get%0#0"
- ]
- },
- "571": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%box_get%0#0"
- ],
- "stack_out": [
- "aggregate%box_get%0#0",
- "0x151f7c75"
- ]
- },
- "572": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%box_get%0#0"
- ]
- },
- "573": {
- "op": "concat",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "574": {
- "op": "log",
- "stack_out": []
- },
- "575": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "576": {
- "op": "return",
- "stack_out": []
- },
- "577": {
- "subroutine": "modules.rbac.RbacModule.rbac_rotate_arranger[routing]",
- "params": {},
- "block": "rbac_rotate_arranger",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0"
- ]
- },
- "580": {
- "op": "dup",
- "defined_out": [
- "new_arranger#0",
- "new_arranger#0 (copy)"
- ],
- "stack_out": [
- "new_arranger#0",
- "new_arranger#0 (copy)"
- ]
- },
- "581": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "len%0#0"
- ]
- },
- "582": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%0#0",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "len%0#0",
- "32"
- ]
- },
- "583": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "eq%0#0"
- ]
- },
- "584": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "new_arranger#0"
- ]
- },
- "585": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "588": {
- "op": "bytec_1 // 0x52323023",
- "defined_out": [
- "0x52323023",
- "new_arranger#0"
- ],
- "stack_out": [
- "new_arranger#0",
- "0x52323023"
- ]
- },
- "589": {
- "op": "swap",
- "stack_out": [
- "0x52323023",
- "new_arranger#0"
- ]
- },
- "590": {
- "op": "app_global_put",
- "stack_out": []
- },
- "591": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "593": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "594": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "595": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "596": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "597": {
- "op": "log",
- "stack_out": []
- },
- "598": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "599": {
- "op": "return",
- "stack_out": []
- },
- "600": {
- "subroutine": "modules.rbac.RbacModule.rbac_set_op_daemon[routing]",
- "params": {},
- "block": "rbac_set_op_daemon",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "address#0"
- ],
- "stack_out": [
- "address#0"
- ]
- },
- "603": {
- "op": "dup",
- "defined_out": [
- "address#0",
- "address#0 (copy)"
- ],
- "stack_out": [
- "address#0",
- "address#0 (copy)"
- ]
- },
- "604": {
- "op": "len",
- "defined_out": [
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0"
- ]
- },
- "605": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0",
- "32"
- ]
- },
- "606": {
- "op": "==",
- "defined_out": [
- "address#0",
- "eq%0#0"
- ],
- "stack_out": [
- "address#0",
- "eq%0#0"
- ]
- },
- "607": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "address#0"
- ]
- },
- "608": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "611": {
- "op": "bytec 11 // 0x52323523",
- "defined_out": [
- "0x52323523",
- "address#0"
- ],
- "stack_out": [
- "address#0",
- "0x52323523"
- ]
- },
- "613": {
- "op": "swap",
- "stack_out": [
- "0x52323523",
- "address#0"
- ]
- },
- "614": {
- "op": "app_global_put",
- "stack_out": []
- },
- "615": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "617": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "618": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "619": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "620": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "621": {
- "op": "log",
- "stack_out": []
- },
- "622": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "623": {
- "op": "return",
- "stack_out": []
- },
- "624": {
- "subroutine": "modules.rbac.RbacModule.rbac_assign_role[routing]",
- "params": {},
- "block": "rbac_assign_role",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0"
- ]
- },
- "627": {
- "op": "dup",
- "defined_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ]
- },
- "628": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0"
- ]
- },
- "629": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0",
- "1"
- ]
- },
- "630": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "eq%0#0"
- ]
- },
- "631": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "role_id#0"
- ]
- },
- "632": {
- "op": "txna ApplicationArgs 2"
- },
- "635": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "role_address#0",
- "role_address#0"
- ]
- },
- "636": {
- "op": "cover 2",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "role_address#0"
- ]
- },
- "638": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0"
- ]
- },
- "639": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0",
- "32"
- ]
- },
- "640": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "eq%1#0"
- ]
- },
- "641": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "role_address#0",
- "role_id#0"
- ]
- },
- "642": {
- "op": "txna ApplicationArgs 3",
- "defined_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ]
- },
- "645": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)"
- ]
- },
- "646": {
- "op": "intc_1 // 0",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)",
- "0"
- ]
- },
- "647": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "aggregate%array_length%0#0"
- ]
- },
- "648": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "650": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0"
- ]
- },
- "651": {
- "op": "dig 1",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0",
- "tmp%3#0 (copy)"
- ]
- },
- "653": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "len%2#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0",
- "len%2#0"
- ]
- },
- "654": {
- "op": "==",
- "defined_out": [
- "eq%2#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "eq%2#0"
- ]
- },
- "655": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ]
- },
- "656": {
- "op": "extract 2 0",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "config#0"
- ]
- },
- "659": {
- "op": "swap",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#0"
- ]
- },
- "660": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "663": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "666": {
- "op": "btoi",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "667": {
- "op": "dupn 2",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1",
- "role_id#1 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)"
- ]
- },
- "669": {
- "callsub": "modules.rbac.RbacModule._assert_valid_role",
- "op": "callsub _assert_valid_role",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "672": {
- "op": "intc_3 // 20",
- "defined_out": [
- "20",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "20"
- ]
- },
- "673": {
- "op": "==",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1",
- "tmp%0#2"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%0#2"
- ]
- },
- "674": {
- "op": "bz rbac_assign_role_after_if_else@3",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "677": {
- "op": "bytec_1 // 0x52323023",
- "defined_out": [
- "0x52323023",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52323023"
- ]
- },
- "678": {
- "op": "dig 3",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52323023",
- "role_address#0"
- ]
- },
- "680": {
- "op": "app_global_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "681": {
- "block": "rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%2#1"
- ]
- },
- "683": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "684": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "685": {
- "op": "swap",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "686": {
- "op": "concat",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%7#0"
- ]
- },
- "687": {
- "op": "log",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "688": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "1"
- ]
- },
- "689": {
- "op": "return",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "690": {
- "block": "rbac_assign_role_after_if_else@3",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "691": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "40"
- ]
- },
- "693": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%1#1"
- ]
- },
- "694": {
- "op": "bz rbac_assign_role_after_if_else@5",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "697": {
- "op": "bytec_3 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52343023"
- ]
- },
- "698": {
- "op": "dig 3",
- "defined_out": [
- "0x52343023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52343023",
- "role_address#0"
- ]
- },
- "700": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "701": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)"
- ]
- },
- "702": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "703": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0"
- ]
- },
- "705": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%0#0",
- "role_address#0",
- "role_id#1",
- "tmp%2#2"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "tmp%2#2"
- ]
- },
- "706": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "707": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%0#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "config#0"
- ]
- },
- "709": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "710": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "713": {
- "block": "rbac_assign_role_after_if_else@5",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "714": {
- "op": "pushint 50",
- "defined_out": [
- "50",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "50"
- ]
- },
- "716": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%3#1"
- ]
- },
- "717": {
- "op": "bz rbac_assign_role_after_if_else@7",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "720": {
- "op": "bytec 5 // 0x52353023",
- "defined_out": [
- "0x52353023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52353023"
- ]
- },
- "722": {
- "op": "dig 3",
- "defined_out": [
- "0x52353023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52353023",
- "role_address#0"
- ]
- },
- "724": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "725": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)"
- ]
- },
- "726": {
- "op": "box_len",
- "defined_out": [
- "_%1#0",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "_%1#0",
- "maybe_exists%1#0"
- ]
- },
- "727": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0"
- ]
- },
- "729": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%2#0",
- "role_address#0",
- "role_id#1",
- "tmp%4#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "tmp%4#0"
- ]
- },
- "730": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "731": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%2#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "config#0"
- ]
- },
- "733": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "734": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "737": {
- "block": "rbac_assign_role_after_if_else@7",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "738": {
- "op": "pushint 60",
- "defined_out": [
- "60",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "60"
- ]
- },
- "740": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%5#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%5#0"
- ]
- },
- "741": {
- "op": "bz rbac_assign_role_after_if_else@9",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "744": {
- "op": "bytec 6 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52363023"
- ]
- },
- "746": {
- "op": "dig 3",
- "defined_out": [
- "0x52363023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52363023",
- "role_address#0"
- ]
- },
- "748": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "749": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)"
- ]
- },
- "750": {
- "op": "box_len",
- "defined_out": [
- "_%2#0",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "_%2#0",
- "maybe_exists%2#0"
- ]
- },
- "751": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0"
- ]
- },
- "753": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%4#0",
- "role_address#0",
- "role_id#1",
- "tmp%6#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "tmp%6#1"
- ]
- },
- "754": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "755": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%4#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "config#0"
- ]
- },
- "757": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "758": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "761": {
- "block": "rbac_assign_role_after_if_else@9",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "762": {
- "op": "pushint 70",
- "defined_out": [
- "70",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "70"
- ]
- },
- "764": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%7#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%7#1"
- ]
- },
- "765": {
- "op": "bz rbac_assign_role_after_if_else@11",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "768": {
- "op": "bytec_2 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52373023"
- ]
- },
- "769": {
- "op": "dig 3",
- "defined_out": [
- "0x52373023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52373023",
- "role_address#0"
- ]
- },
- "771": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%6#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "772": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)"
- ]
- },
- "773": {
- "op": "box_len",
- "defined_out": [
- "_%3#0",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "_%3#0",
- "maybe_exists%3#0"
- ]
- },
- "774": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0"
- ]
- },
- "776": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%6#0",
- "role_address#0",
- "role_id#1",
- "tmp%8#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "tmp%8#0"
- ]
- },
- "777": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "778": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%6#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "config#0"
- ]
- },
- "780": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "781": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "784": {
- "block": "rbac_assign_role_after_if_else@11",
- "stack_in": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "785": {
- "op": "pushint 80",
- "defined_out": [
- "80",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "role_id#1",
- "80"
- ]
- },
- "787": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%9#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "tmp%9#0"
- ]
- },
- "788": {
- "op": "bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "791": {
- "op": "bytec 7 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52383023"
- ]
- },
- "793": {
- "op": "dig 3",
- "defined_out": [
- "0x52383023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "0x52383023",
- "role_address#0"
- ]
- },
- "795": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%8#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "796": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)"
- ]
- },
- "797": {
- "op": "box_len",
- "defined_out": [
- "_%4#0",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "_%4#0",
- "maybe_exists%4#0"
- ]
- },
- "798": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0"
- ]
- },
- "800": {
- "op": "!",
- "defined_out": [
- "box_prefixed_key%8#0",
- "role_address#0",
- "role_id#1",
- "tmp%10#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "tmp%10#0"
- ]
- },
- "801": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "802": {
- "op": "dig 2",
- "defined_out": [
- "box_prefixed_key%8#0",
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "config#0"
- ]
- },
- "804": {
- "op": "box_put",
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "805": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
- },
- "808": {
- "subroutine": "modules.rbac.RbacModule.rbac_revoke_role[routing]",
- "params": {},
- "block": "rbac_revoke_role",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0"
- ]
- },
- "811": {
- "op": "dup",
- "defined_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ]
- },
- "812": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0"
- ]
- },
- "813": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0",
- "1"
- ]
- },
- "814": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "eq%0#0"
- ]
- },
- "815": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "role_id#0"
- ]
- },
- "816": {
- "op": "txna ApplicationArgs 2"
- },
- "819": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "role_address#0",
- "role_address#0"
- ]
- },
- "820": {
- "op": "cover 2",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "role_address#0"
- ]
- },
- "822": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0"
- ]
- },
- "823": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0",
- "32"
- ]
- },
- "824": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "eq%1#0"
- ]
- },
- "825": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "role_address#0",
- "role_id#0"
- ]
- },
- "826": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "829": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "832": {
- "op": "btoi",
- "defined_out": [
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "833": {
- "op": "dupn 2",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)"
- ]
- },
- "835": {
- "callsub": "modules.rbac.RbacModule._assert_valid_role",
- "op": "callsub _assert_valid_role",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "838": {
- "op": "dup",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)"
- ]
- },
- "839": {
- "op": "intc_3 // 20",
- "defined_out": [
- "20",
- "role_address#0",
- "role_id#1",
- "role_id#1 (copy)"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "role_id#1 (copy)",
- "20"
- ]
- },
- "840": {
- "op": "!=",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "tmp%0#2"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "tmp%0#2"
- ]
- },
- "841": {
- "error": "Invalid role identifier",
- "op": "assert // Invalid role identifier",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "842": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "40"
- ]
- },
- "844": {
- "op": "==",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%1#1"
- ]
- },
- "845": {
- "op": "bz rbac_revoke_role_after_if_else@3",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "848": {
- "op": "bytec_3 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52343023"
- ]
- },
- "849": {
- "op": "dig 2",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52343023",
- "role_address#0"
- ]
- },
- "851": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "852": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "box_prefixed_key%0#0 (copy)"
- ]
- },
- "853": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "854": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0",
- "maybe_exists%0#0"
- ]
- },
- "856": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%0#0"
- ]
- },
- "857": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "858": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "859": {
- "block": "rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%2#1"
- ]
- },
- "861": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "862": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "863": {
- "op": "swap",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "864": {
- "op": "concat",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%5#0"
- ]
- },
- "865": {
- "op": "log",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "866": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "1"
- ]
- },
- "867": {
- "op": "return",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "868": {
- "block": "rbac_revoke_role_after_if_else@3",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "869": {
- "op": "pushint 50",
- "defined_out": [
- "50",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "50"
- ]
- },
- "871": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%2#2"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%2#2"
- ]
- },
- "872": {
- "op": "bz rbac_revoke_role_after_if_else@5",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "875": {
- "op": "bytec 5 // 0x52353023",
- "defined_out": [
- "0x52353023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52353023"
- ]
- },
- "877": {
- "op": "dig 2",
- "defined_out": [
- "0x52353023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52353023",
- "role_address#0"
- ]
- },
- "879": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "880": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "box_prefixed_key%2#0 (copy)"
- ]
- },
- "881": {
- "op": "box_len",
- "defined_out": [
- "_%1#0",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "_%1#0",
- "maybe_exists%1#0"
- ]
- },
- "882": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0",
- "maybe_exists%1#0"
- ]
- },
- "884": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%2#0"
- ]
- },
- "885": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "886": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "887": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "890": {
- "block": "rbac_revoke_role_after_if_else@5",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "891": {
- "op": "pushint 60",
- "defined_out": [
- "60",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "60"
- ]
- },
- "893": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%3#0"
- ]
- },
- "894": {
- "op": "bz rbac_revoke_role_after_if_else@7",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "897": {
- "op": "bytec 6 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52363023"
- ]
- },
- "899": {
- "op": "dig 2",
- "defined_out": [
- "0x52363023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52363023",
- "role_address#0"
- ]
- },
- "901": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "902": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "box_prefixed_key%4#0 (copy)"
- ]
- },
- "903": {
- "op": "box_len",
- "defined_out": [
- "_%2#0",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "_%2#0",
- "maybe_exists%2#0"
- ]
- },
- "904": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0",
- "maybe_exists%2#0"
- ]
- },
- "906": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%4#0"
- ]
- },
- "907": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "908": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "909": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "912": {
- "block": "rbac_revoke_role_after_if_else@7",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "913": {
- "op": "pushint 70",
- "defined_out": [
- "70",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "70"
- ]
- },
- "915": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%4#1"
- ]
- },
- "916": {
- "op": "bz rbac_revoke_role_after_if_else@9",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "919": {
- "op": "bytec_2 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52373023"
- ]
- },
- "920": {
- "op": "dig 2",
- "defined_out": [
- "0x52373023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52373023",
- "role_address#0"
- ]
- },
- "922": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%6#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "923": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "box_prefixed_key%6#0 (copy)"
- ]
- },
- "924": {
- "op": "box_len",
- "defined_out": [
- "_%3#0",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "_%3#0",
- "maybe_exists%3#0"
- ]
- },
- "925": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0",
- "maybe_exists%3#0"
- ]
- },
- "927": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%6#0"
- ]
- },
- "928": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "929": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "930": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "933": {
- "block": "rbac_revoke_role_after_if_else@9",
- "stack_in": [
- "role_address#0",
- "role_id#1"
- ],
- "op": "dup",
- "defined_out": [
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1"
- ]
- },
- "934": {
- "op": "pushint 80",
- "defined_out": [
- "80",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "role_id#1",
- "80"
- ]
- },
- "936": {
- "op": "==",
- "defined_out": [
- "role_id#1",
- "tmp%5#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "tmp%5#1"
- ]
- },
- "937": {
- "op": "bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "940": {
- "op": "bytec 7 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52383023"
- ]
- },
- "942": {
- "op": "dig 2",
- "defined_out": [
- "0x52383023",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "0x52383023",
- "role_address#0"
- ]
- },
- "944": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%8#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "945": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "box_prefixed_key%8#0 (copy)"
- ]
- },
- "946": {
- "op": "box_len",
- "defined_out": [
- "_%4#0",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "_%4#0",
- "maybe_exists%4#0"
- ]
- },
- "947": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0",
- "maybe_exists%4#0"
- ]
- },
- "949": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "box_prefixed_key%8#0"
- ]
- },
- "950": {
- "op": "box_del",
- "defined_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#1",
- "{box_del}"
- ]
- },
- "951": {
- "op": "pop",
- "stack_out": [
- "role_address#0",
- "role_id#1"
- ]
- },
- "952": {
- "op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
- },
- "955": {
- "subroutine": "modules.rbac.RbacModule.rbac_gov_asset_suspension[routing]",
- "params": {},
- "block": "rbac_gov_asset_suspension",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "958": {
- "op": "dup",
- "defined_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ],
- "stack_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ]
- },
- "959": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "len%0#0"
- ]
- },
- "960": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "len%0#0",
- "1"
- ]
- },
- "961": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "eq%0#0"
- ]
- },
- "962": {
- "error": "invalid number of bytes for arc4.bool",
- "op": "assert // invalid number of bytes for arc4.bool",
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "963": {
- "op": "intc_1 // 0",
- "defined_out": [
- "0",
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0",
- "0"
- ]
- },
- "964": {
- "op": "getbit",
- "defined_out": [
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0"
- ]
- },
- "965": {
- "op": "bytec_2 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "0x52373023"
- ]
- },
- "966": {
- "op": "txn Sender",
- "defined_out": [
- "0x52373023",
- "suspended#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "suspended#0",
- "0x52373023",
- "tmp%0#2"
- ]
- },
- "968": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "suspended#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "suspended#0",
- "tmp%1#0"
- ]
- },
- "971": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "suspended#0"
- ]
- },
- "972": {
- "op": "bytec 8 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\"",
- "suspended#0"
- ],
- "stack_out": [
- "suspended#0",
- "\"asset_suspended\""
- ]
- },
- "974": {
- "op": "swap",
- "stack_out": [
- "\"asset_suspended\"",
- "suspended#0"
- ]
- },
- "975": {
- "op": "app_global_put",
- "stack_out": []
- },
- "976": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "978": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "979": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "980": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "981": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "982": {
- "op": "log",
- "stack_out": []
- },
- "983": {
- "op": "intc_0 // 1",
- "stack_out": [
- "1"
- ]
- },
- "984": {
- "op": "return",
- "stack_out": []
- },
- "985": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_arranger[routing]",
- "params": {},
- "block": "rbac_get_arranger",
- "stack_in": [],
- "op": "intc_1 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "986": {
- "op": "bytec_1 // 0x52323023",
- "defined_out": [
- "0",
- "0x52323023"
- ],
- "stack_out": [
- "0",
- "0x52323023"
- ]
- },
- "987": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "988": {
- "error": "check self.arranger exists",
- "op": "assert // check self.arranger exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "989": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "0x151f7c75"
- ]
- },
- "990": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "maybe_value%0#0"
- ]
- },
- "991": {
- "op": "concat",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "992": {
- "op": "log",
- "stack_out": []
- },
- "993": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "994": {
- "op": "return",
- "stack_out": []
- },
- "995": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_address_roles[routing]",
- "params": {},
- "block": "rbac_get_address_roles",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "address#0"
- ],
- "stack_out": [
- "address#0"
- ]
- },
- "998": {
- "op": "dup",
- "defined_out": [
- "address#0",
- "address#0 (copy)"
- ],
- "stack_out": [
- "address#0",
- "address#0 (copy)"
- ]
- },
- "999": {
- "op": "len",
- "defined_out": [
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0"
- ]
- },
- "1000": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "address#0",
- "len%0#0"
- ],
- "stack_out": [
- "address#0",
- "len%0#0",
- "32"
- ]
- },
- "1001": {
- "op": "==",
- "defined_out": [
- "address#0",
- "eq%0#0"
- ],
- "stack_out": [
- "address#0",
- "eq%0#0"
- ]
- },
- "1002": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "address#0"
- ]
- },
- "1003": {
- "op": "bytec_3 // 0x52343023",
- "defined_out": [
- "0x52343023",
- "address#0"
- ],
- "stack_out": [
- "address#0",
- "0x52343023"
- ]
- },
- "1004": {
- "op": "dig 1",
- "stack_out": [
- "address#0",
- "0x52343023",
- "address#0 (copy)"
- ]
- },
- "1006": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1"
- ]
- },
- "1009": {
- "op": "bytec 5 // 0x52353023",
- "defined_out": [
- "0x52353023",
- "address#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "0x52353023"
- ]
- },
- "1011": {
- "op": "dig 2",
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "0x52353023",
- "address#0 (copy)"
- ]
- },
- "1013": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1"
- ]
- },
- "1016": {
- "op": "bytec 6 // 0x52363023",
- "defined_out": [
- "0x52363023",
- "address#0",
- "tmp%0#1",
- "tmp%1#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "0x52363023"
- ]
- },
- "1018": {
- "op": "dig 3",
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "0x52363023",
- "address#0 (copy)"
- ]
- },
- "1020": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1"
- ]
- },
- "1023": {
- "op": "bytec_2 // 0x52373023",
- "defined_out": [
- "0x52373023",
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "0x52373023"
- ]
- },
- "1024": {
- "op": "dig 4",
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "0x52373023",
- "address#0 (copy)"
- ]
- },
- "1026": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1"
- ]
- },
- "1029": {
- "op": "bytec 7 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1"
- ],
- "stack_out": [
- "address#0",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "0x52383023"
- ]
- },
- "1031": {
- "op": "uncover 5",
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "0x52383023",
- "address#0"
- ]
- },
- "1033": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ]
- },
- "1036": {
- "op": "pushbytes 0x00",
- "defined_out": [
- "0x00",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "0x00"
- ]
- },
- "1039": {
- "op": "intc_1 // 0",
- "defined_out": [
- "0",
- "0x00",
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "0x00",
- "0"
- ]
- },
- "1040": {
- "op": "uncover 6",
- "stack_out": [
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "0x00",
- "0",
- "tmp%0#1"
- ]
- },
- "1042": {
- "op": "setbit",
- "defined_out": [
- "aggregate%encoded_bool%0#0",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%encoded_bool%0#0"
- ]
- },
- "1043": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "aggregate%encoded_bool%0#0",
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%encoded_bool%0#0",
- "1"
- ]
- },
- "1044": {
- "op": "uncover 5",
- "stack_out": [
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%encoded_bool%0#0",
- "1",
- "tmp%1#1"
- ]
- },
- "1046": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%0#0",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%0#0"
- ]
- },
- "1047": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%set_bit%0#0",
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%0#0",
- "2"
- ]
- },
- "1049": {
- "op": "uncover 4",
- "stack_out": [
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%0#0",
- "2",
- "tmp%2#1"
- ]
- },
- "1051": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%1#0",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%1#0"
- ]
- },
- "1052": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "aggregate%set_bit%1#0",
- "tmp%3#1",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%3#1",
- "tmp%4#1",
- "aggregate%set_bit%1#0",
- "3"
- ]
- },
- "1054": {
- "op": "uncover 3",
- "stack_out": [
- "tmp%4#1",
- "aggregate%set_bit%1#0",
- "3",
- "tmp%3#1"
- ]
- },
- "1056": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%2#0",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1",
- "aggregate%set_bit%2#0"
- ]
- },
- "1057": {
- "op": "pushint 4",
- "defined_out": [
- "4",
- "aggregate%set_bit%2#0",
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1",
- "aggregate%set_bit%2#0",
- "4"
- ]
- },
- "1059": {
- "op": "uncover 2",
- "stack_out": [
- "aggregate%set_bit%2#0",
- "4",
- "tmp%4#1"
- ]
- },
- "1061": {
- "op": "setbit",
- "defined_out": [
- "aggregate%set_bit%3#0"
- ],
- "stack_out": [
- "aggregate%set_bit%3#0"
- ]
- },
- "1062": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%set_bit%3#0"
- ],
- "stack_out": [
- "aggregate%set_bit%3#0",
- "0x151f7c75"
- ]
- },
- "1063": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%set_bit%3#0"
- ]
- },
- "1064": {
- "op": "concat",
- "defined_out": [
- "tmp%8#0"
- ],
- "stack_out": [
- "tmp%8#0"
- ]
- },
- "1065": {
- "op": "log",
- "stack_out": []
- },
- "1066": {
- "op": "intc_0 // 1",
- "stack_out": [
- "1"
- ]
- },
- "1067": {
- "op": "return",
- "stack_out": []
- },
- "1068": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_role_config[routing]",
- "params": {},
- "block": "rbac_get_role_config",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0"
- ]
- },
- "1071": {
- "op": "dup",
- "defined_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0",
- "role_id#0 (copy)"
- ]
- },
- "1072": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0"
- ]
- },
- "1073": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1",
- "len%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "len%0#0",
- "1"
- ]
- },
- "1074": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "eq%0#0"
- ]
- },
- "1075": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "role_id#0"
- ]
- },
- "1076": {
- "op": "txna ApplicationArgs 2"
- },
- "1079": {
- "op": "dup",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_id#0",
- "role_address#0",
- "role_address#0"
- ]
- },
- "1080": {
- "op": "cover 2",
- "defined_out": [
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "role_address#0"
- ]
- },
- "1082": {
- "op": "len",
- "defined_out": [
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0"
- ]
- },
- "1083": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "len%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "len%1#0",
- "32"
- ]
- },
- "1084": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "eq%1#0"
- ]
- },
- "1085": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "role_address#0",
- "role_id#0"
- ]
- },
- "1086": {
- "op": "btoi",
- "defined_out": [
- "role#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0"
- ]
- },
- "1087": {
- "op": "dup",
- "defined_out": [
- "role#0",
- "role#0 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0",
- "role#0 (copy)"
- ]
- },
- "1088": {
- "callsub": "modules.rbac.RbacModule._assert_valid_role",
- "op": "callsub _assert_valid_role",
- "stack_out": [
- "role_address#0",
- "role#0"
- ]
- },
- "1091": {
- "op": "intc_3 // 20",
- "defined_out": [
- "20",
- "role#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0",
- "20"
- ]
- },
- "1092": {
- "op": "pushints 40 50 60 70 80",
- "defined_out": [
- "20",
- "40",
- "50",
- "60",
- "70",
- "80",
- "role#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "role#0",
- "20",
- "40",
- "50",
- "60",
- "70",
- "80"
- ]
- },
- "1099": {
- "op": "uncover 6",
- "stack_out": [
- "role_address#0",
- "20",
- "40",
- "50",
- "60",
- "70",
- "80",
- "role#0"
- ]
- },
- "1101": {
- "op": "match rbac_get_role_config_switch_case_0@2 rbac_get_role_config_switch_case_1@3 rbac_get_role_config_switch_case_2@4 rbac_get_role_config_switch_case_3@5 rbac_get_role_config_switch_case_4@6 rbac_get_role_config_switch_case_5@7",
- "stack_out": [
- "role_address#0"
- ]
- },
- "1115": {
- "error": "Invalid role identifier",
- "op": "err // Invalid role identifier"
- },
- "1116": {
- "block": "rbac_get_role_config_switch_case_5@7",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 7 // 0x52383023",
- "defined_out": [
- "0x52383023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52383023"
- ]
- },
- "1118": {
- "op": "dig 1",
- "defined_out": [
- "0x52383023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52383023",
- "role_address#0"
- ]
- },
- "1120": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1121": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "1122": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1123": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1125": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1126": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%8#0",
- "aggregate%box_get%9#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%8#0",
- "aggregate%box_get%9#0"
- ]
- },
- "1127": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "1128": {
- "block": "rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9",
- "stack_in": [
- "role_address#0",
- "tmp%3#0"
- ],
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0",
- "0x151f7c75"
- ]
- },
- "1129": {
- "op": "swap",
- "defined_out": [
- "0x151f7c75",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x151f7c75",
- "tmp%3#0"
- ]
- },
- "1130": {
- "op": "concat",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%4#0"
- ]
- },
- "1131": {
- "op": "log",
- "stack_out": [
- "role_address#0"
- ]
- },
- "1132": {
- "op": "intc_0 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "role_address#0",
- "1"
- ]
- },
- "1133": {
- "op": "return",
- "stack_out": [
- "role_address#0"
- ]
- },
- "1134": {
- "block": "rbac_get_role_config_switch_case_4@6",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec_2 // 0x52373023",
- "defined_out": [
- "0x52373023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52373023"
- ]
- },
- "1135": {
- "op": "dig 1",
- "defined_out": [
- "0x52373023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52373023",
- "role_address#0"
- ]
- },
- "1137": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1138": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "1139": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1140": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1142": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1143": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%6#0",
- "aggregate%box_get%7#0"
- ]
- },
- "1144": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "1145": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "1148": {
- "block": "rbac_get_role_config_switch_case_3@5",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 6 // 0x52363023",
- "defined_out": [
- "0x52363023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52363023"
- ]
- },
- "1150": {
- "op": "dig 1",
- "defined_out": [
- "0x52363023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52363023",
- "role_address#0"
- ]
- },
- "1152": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1153": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "1154": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1155": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1157": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1158": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%4#0",
- "aggregate%box_get%5#0"
- ]
- },
- "1159": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "1160": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "1163": {
- "block": "rbac_get_role_config_switch_case_2@4",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec 5 // 0x52353023",
- "defined_out": [
- "0x52353023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52353023"
- ]
- },
- "1165": {
- "op": "dig 1",
- "defined_out": [
- "0x52353023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52353023",
- "role_address#0"
- ]
- },
- "1167": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1168": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "1169": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1170": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1172": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1173": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "1174": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "1175": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "1178": {
- "block": "rbac_get_role_config_switch_case_1@3",
- "stack_in": [
- "role_address#0"
- ],
- "op": "bytec_3 // 0x52343023",
- "defined_out": [
- "0x52343023"
- ],
- "stack_out": [
- "role_address#0",
- "0x52343023"
- ]
- },
- "1179": {
- "op": "dig 1",
- "defined_out": [
- "0x52343023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0x52343023",
- "role_address#0"
- ]
- },
- "1181": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1182": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1 (copy)"
- ]
- },
- "1183": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1184": {
- "op": "bury 1",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1186": {
- "error": "Invalid account role address",
- "op": "assert // Invalid account role address",
- "stack_out": [
- "role_address#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1187": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1188": {
- "op": "pop",
- "defined_out": [
- "role_address#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "1189": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "1192": {
- "block": "rbac_get_role_config_switch_case_0@2",
- "stack_in": [
- "role_address#0"
- ],
- "op": "pushbytes 0x00000000000000000000000000000000",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "tmp%3#0"
- ]
- },
- "1210": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
- },
- "1213": {
- "subroutine": "modules.rbac.RbacModule._role_is_active",
- "params": {
- "role_map#0": "bytes",
- "role_address#0": "bytes"
- },
- "block": "_role_is_active",
- "stack_in": [],
- "op": "proto 2 1"
- },
- "1216": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "awst_tmp%0#0"
- ]
- },
- "1218": {
- "op": "frame_dig -2",
- "defined_out": [
- "role_map#0 (copy)"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "role_map#0 (copy)"
- ]
- },
- "1220": {
- "op": "frame_dig -1",
- "defined_out": [
- "role_address#0 (copy)",
- "role_map#0 (copy)"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "role_map#0 (copy)",
- "role_address#0 (copy)"
- ]
- },
- "1222": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1223": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "1224": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1225": {
- "op": "bury 1",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "maybe_exists%0#0"
- ]
- },
- "1227": {
- "op": "bz _role_is_active_bool_false@4",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1230": {
- "op": "frame_dig 1",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "1232": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1233": {
- "error": "check BoxMap entry exists",
- "op": "assert // check BoxMap entry exists",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0"
- ]
- },
- "1234": {
- "op": "intc_1 // 0",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%0#0",
- "0"
- ]
- },
- "1235": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0"
- ]
- },
- "1236": {
- "op": "global LatestTimestamp"
- },
- "1238": {
- "op": "dup",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0",
- "awst_tmp%0#0",
- "awst_tmp%0#0"
- ]
- },
- "1239": {
- "op": "frame_bury 0",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%0#0",
- "awst_tmp%0#0"
- ]
- },
- "1241": {
- "op": "<=",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%1#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%1#0"
- ]
- },
- "1242": {
- "op": "bz _role_is_active_bool_false@4",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1245": {
- "op": "frame_dig 1",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "1247": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0",
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%2#0",
- "aggregate%box_get%3#0"
- ]
- },
- "1248": {
- "error": "check BoxMap entry exists",
- "op": "assert // check BoxMap entry exists",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%2#0"
- ]
- },
- "1249": {
- "op": "pushint 8",
- "defined_out": [
- "8",
- "aggregate%box_get%2#0",
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "aggregate%box_get%2#0",
- "8"
- ]
- },
- "1251": {
- "op": "extract_uint64",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%1#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%1#0"
- ]
- },
- "1252": {
- "op": "frame_dig 0",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "values%1#0",
- "awst_tmp%0#0"
- ]
- },
- "1254": {
- "op": ">=",
- "defined_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "tmp%2#0"
- ]
- },
- "1255": {
- "op": "bz _role_is_active_bool_false@4",
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1258": {
- "op": "intc_0 // 1",
- "defined_out": [
- "and_result%0#0",
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "and_result%0#0"
- ]
- },
- "1259": {
- "block": "_role_is_active_bool_merge@5",
- "stack_in": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "and_result%0#0"
- ],
- "op": "frame_bury 0",
- "defined_out": [
- "and_result%0#0"
- ]
- },
- "1261": {
- "retsub": true,
- "op": "retsub"
- },
- "1262": {
- "block": "_role_is_active_bool_false@4",
- "stack_in": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1"
- ],
- "op": "intc_1 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "awst_tmp%0#0",
- "box_prefixed_key%0#1",
- "and_result%0#0"
- ]
- },
- "1263": {
- "op": "b _role_is_active_bool_merge@5"
- },
- "1266": {
- "subroutine": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "params": {},
- "block": "assert_caller_is_arranger",
- "stack_in": [],
- "op": "txn Sender",
- "defined_out": [
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0"
- ]
- },
- "1268": {
- "op": "intc_1 // 0",
- "defined_out": [
- "0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0"
- ]
- },
- "1269": {
- "op": "bytec_1 // 0x52323023",
- "defined_out": [
- "0",
- "0x52323023",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "0",
- "0x52323023"
- ]
- },
- "1270": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "role_address#0"
- ],
- "stack_out": [
- "role_address#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1271": {
- "error": "check self.arranger exists",
- "op": "assert // check self.arranger exists",
- "stack_out": [
- "role_address#0",
- "maybe_value%0#0"
- ]
- },
- "1272": {
- "op": "==",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "1273": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": []
- },
- "1274": {
- "retsub": true,
- "op": "retsub"
- },
- "1275": {
- "subroutine": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "params": {},
- "block": "assert_is_not_asset_defaulted",
- "stack_in": [],
- "op": "intc_1 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "1276": {
- "op": "bytec 12 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"asset_defaulted\""
- ]
- },
- "1278": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1279": {
- "error": "check self.asset_defaulted exists",
- "op": "assert // check self.asset_defaulted exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "1280": {
- "op": "!",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "1281": {
- "error": "Defaulted",
- "op": "assert // Defaulted",
- "stack_out": []
- },
- "1282": {
- "retsub": true,
- "op": "retsub"
- },
- "1283": {
- "subroutine": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "params": {},
- "block": "assert_is_not_asset_suspended",
- "stack_in": [],
- "op": "intc_1 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "0"
- ]
- },
- "1284": {
- "op": "bytec 8 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\"",
- "0"
- ],
- "stack_out": [
- "0",
- "\"asset_suspended\""
- ]
- },
- "1286": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1287": {
- "error": "check self.asset_suspended exists",
- "op": "assert // check self.asset_suspended exists",
- "stack_out": [
- "maybe_value%0#0"
- ]
- },
- "1288": {
- "op": "!",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "1289": {
- "error": "Suspended operations",
- "op": "assert // Suspended operations",
- "stack_out": []
- },
- "1290": {
- "retsub": true,
- "op": "retsub"
- },
- "1291": {
- "subroutine": "modules.rbac.RbacModule._assert_valid_role",
- "params": {
- "role_id#0": "uint64"
- },
- "block": "_assert_valid_role",
- "stack_in": [],
- "op": "proto 1 0"
- },
- "1294": {
- "op": "frame_dig -1",
- "defined_out": [
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "1296": {
- "op": "intc_3 // 20",
- "defined_out": [
- "20",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "20"
- ]
- },
- "1297": {
- "op": "==",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "1298": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "1301": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "1303": {
- "op": "pushint 40",
- "defined_out": [
- "40",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "40"
- ]
- },
- "1305": {
- "op": "==",
- "defined_out": [
- "tmp%1#0"
- ],
- "stack_out": [
- "tmp%1#0"
- ]
- },
- "1306": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "1309": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "1311": {
- "op": "pushint 50",
- "defined_out": [
- "50",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "50"
- ]
- },
- "1313": {
- "op": "==",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "1314": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "1317": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "1319": {
- "op": "pushint 60",
- "defined_out": [
- "60",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "60"
- ]
- },
- "1321": {
- "op": "==",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "1322": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "1325": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "1327": {
- "op": "pushint 70",
- "defined_out": [
- "70",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "70"
- ]
- },
- "1329": {
- "op": "==",
- "defined_out": [
- "tmp%4#0"
- ],
- "stack_out": [
- "tmp%4#0"
- ]
- },
- "1330": {
- "op": "bnz _assert_valid_role_bool_true@6",
- "stack_out": []
- },
- "1333": {
- "op": "frame_dig -1",
- "stack_out": [
- "role_id#0 (copy)"
- ]
- },
- "1335": {
- "op": "pushint 80",
- "defined_out": [
- "80",
- "role_id#0 (copy)"
- ],
- "stack_out": [
- "role_id#0 (copy)",
- "80"
- ]
- },
- "1337": {
- "op": "==",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "1338": {
- "op": "bz _assert_valid_role_bool_false@7",
- "stack_out": []
- },
- "1341": {
- "block": "_assert_valid_role_bool_true@6",
- "stack_in": [],
- "op": "intc_0 // 1",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "or_result%0#0"
- ]
- },
- "1342": {
- "error": "Invalid role identifier",
- "block": "_assert_valid_role_bool_merge@8",
- "stack_in": [
- "or_result%0#0"
- ],
- "op": "assert // Invalid role identifier",
- "defined_out": [],
- "stack_out": []
- },
- "1343": {
- "retsub": true,
- "op": "retsub"
- },
- "1344": {
- "block": "_assert_valid_role_bool_false@7",
- "stack_in": [],
- "op": "intc_1 // 0",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "or_result%0#0"
- ]
- },
- "1345": {
- "op": "b _assert_valid_role_bool_merge@8"
- }
- }
-}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.approval.teal b/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.approval.teal
deleted file mode 100644
index c7b06048..00000000
--- a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.approval.teal
+++ /dev/null
@@ -1,1383 +0,0 @@
-#pragma version 11
-#pragma typetrack false
-
-// algopy.arc4.ARC4Contract.approval_program() -> uint64:
-main:
- intcblock 1 0 32 20
- bytecblock 0x151f7c75 0x52323023 0x52373023 0x52343023 0x52333023 0x52353023 0x52363023 0x52383023 "asset_suspended" "circulating_units" "status" 0x52323523 "asset_defaulted"
- txn ApplicationID
- bnz main_after_if_else@2
- // modules/rbac.py:30-31
- // # RBAC Roles
- // self.arranger = GlobalState(Account(), key=cst.PREFIX_ID_ARRANGER)
- bytec_1 // 0x52323023
- global ZeroAddress
- app_global_put
- // modules/rbac.py:32
- // self.op_daemon = GlobalState(Account(), key=cst.PREFIX_ID_OP_DAEMON)
- bytec 11 // 0x52323523
- global ZeroAddress
- app_global_put
- // modules/rbac.py:47-48
- // # D-ASA Governance
- // self.asset_suspended = False
- bytec 8 // "asset_suspended"
- intc_1 // 0
- app_global_put
- // modules/rbac.py:49
- // self.asset_defaulted = False
- bytec 12 // "asset_defaulted"
- intc_1 // 0
- app_global_put
- // modules/accounting.py:19
- // self.total_units = UInt64()
- pushbytes "total_units"
- intc_1 // 0
- app_global_put
- // modules/accounting.py:20
- // self.circulating_units = UInt64()
- bytec 9 // "circulating_units"
- intc_1 // 0
- app_global_put
- // modules/accounting.py:21
- // self.unit_value = UInt64()
- pushbytes "unit_value"
- intc_1 // 0
- app_global_put
- // modules/accounting.py:22
- // self.status = UInt64(enm.STATUS_INACTIVE)
- bytec 10 // "status"
- intc_1 // 0
- app_global_put
-
-main_after_if_else@2:
- // smart_contracts/mock_module_accounting/contract.py:6
- // class MockAccountingModule(AccountingModule):
- txn NumAppArgs
- bz main_create@22
- txn OnCompletion
- !
- assert
- txn ApplicationID
- assert
- pushbytess 0xdc063b35 0x14fc10ef 0x4c113ed5 0x74a7297f 0x105c184e 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method "account_gov_suspension(address,bool)uint64", method "account_open(address,address)uint64", method "account_close(address)(uint64,uint64)", method "account_update_payment_address(address,address)uint64", method "account_get_info(address)(address,uint64,uint64,uint64,bool)", method "rbac_rotate_arranger(address)uint64", method "rbac_set_op_daemon(address)uint64", method "rbac_assign_role(uint8,address,byte[])uint64", method "rbac_revoke_role(uint8,address)uint64", method "rbac_gov_asset_suspension(bool)uint64", method "rbac_get_arranger()address", method "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", method "rbac_get_role_config(uint8,address)(uint64,uint64)"
- txna ApplicationArgs 0
- match account_gov_suspension account_open account_close account_update_payment_address account_get_info rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config
- err
-
-main_create@22:
- // smart_contracts/mock_module_accounting/contract.py:14
- // @arc4.baremethod(create="require")
- txn OnCompletion
- !
- txn ApplicationID
- !
- &&
- assert
- // smart_contracts/mock_module_accounting/contract.py:16
- // self.arranger.value = Txn.sender
- bytec_1 // 0x52323023
- txn Sender
- app_global_put
- // smart_contracts/mock_module_accounting/contract.py:14
- // @arc4.baremethod(create="require")
- intc_0 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_gov_suspension[routing]() -> void:
-account_gov_suspension:
- // modules/accounting.py:94
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_0 // 1
- ==
- assert // invalid number of bytes for arc4.bool
- intc_1 // 0
- getbit
- // modules/rbac.py:77
- // assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
- bytec_2 // 0x52373023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec 4 // 0x52333023
- uncover 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:114
- // self.account[holding_address].suspended = suspended
- dup
- pushint 56
- intc_0 // 1
- box_extract
- intc_1 // 0
- uncover 3
- setbit
- pushint 56
- swap
- box_replace
- // modules/accounting.py:115
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:94
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_open[routing]() -> void:
-account_open:
- // modules/accounting.py:117
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:68
- // assert self._role_is_active(self.account_manager, Txn.sender), err.UNAUTHORIZED
- bytec_3 // 0x52343023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:28
- // return self.status == enm.STATUS_ENDED
- intc_1 // 0
- bytec 10 // "status"
- app_global_get_ex
- assert // check self.status exists
- pushint 200
- ==
- // modules/accounting.py:139
- // assert not self.status_is_ended(), err.UNAUTHORIZED
- !
- assert // Not authorized
- // modules/accounting.py:140
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/accounting.py:141
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:142
- // assert holding_address not in self.account, err.INVALID_HOLDING_ADDRESS
- bytec 4 // 0x52333023
- uncover 2
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account holding address
- // modules/accounting.py:146
- // units=UInt64(0),
- intc_1 // 0
- // modules/accounting.py:144-150
- // self.account[holding_address] = typ.AccountInfo(
- // payment_address=payment_address,
- // units=UInt64(0),
- // unit_value=UInt64(0),
- // paid_coupons=UInt64(0),
- // suspended=False,
- // )
- itob
- uncover 2
- dig 1
- concat
- dig 1
- concat
- swap
- concat
- pushbytes 0x00
- concat
- box_put
- // modules/accounting.py:151
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:117
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_close[routing]() -> void:
-account_close:
- // modules/accounting.py:153
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:68
- // assert self._role_is_active(self.account_manager, Txn.sender), err.UNAUTHORIZED
- bytec_3 // 0x52343023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/accounting.py:171
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec 4 // 0x52333023
- swap
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:174
- // closed_units = self.account[holding_address].units
- dup
- box_get
- pop
- intc_2 // 32
- extract_uint64
- dup
- uncover 2
- // modules/accounting.py:175
- // del self.account[holding_address]
- box_del
- pop
- // modules/accounting.py:176
- // self.circulating_units -= closed_units
- intc_1 // 0
- bytec 9 // "circulating_units"
- app_global_get_ex
- assert // check self.circulating_units exists
- swap
- -
- bytec 9 // "circulating_units"
- dig 1
- app_global_put
- // modules/accounting.py:48
- // if self.circulating_units == UInt64(0):
- bnz account_close_after_if_else@3
- // modules/accounting.py:49
- // self.status = UInt64(enm.STATUS_ENDED)
- bytec 10 // "status"
- pushint 200
- app_global_put
-
-account_close_after_if_else@3:
- // modules/accounting.py:178
- // return closed_units, Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:153
- // @arc4.abimethod
- dig 1
- itob
- swap
- itob
- concat
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_update_payment_address[routing]() -> void:
-account_update_payment_address:
- // modules/accounting.py:180
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 2
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/accounting.py:200
- // assert Txn.sender == holding_address, err.UNAUTHORIZED
- txn Sender
- dig 2
- ==
- assert // Not authorized
- // modules/accounting.py:201
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/accounting.py:202
- // self.assert_is_not_asset_suspended()
- callsub assert_is_not_asset_suspended
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec 4 // 0x52333023
- uncover 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:204
- // self.account[holding_address].payment_address = payment_address
- intc_1 // 0
- uncover 2
- box_replace
- // modules/accounting.py:205
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/accounting.py:180
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.accounting.AccountingModule.account_get_info[routing]() -> void:
-account_get_info:
- // modules/accounting.py:207
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/accounting.py:31
- // assert holding_address in self.account, err.INVALID_HOLDING_ADDRESS
- bytec 4 // 0x52333023
- swap
- concat
- dup
- box_len
- bury 1
- assert // Invalid account holding address
- // modules/accounting.py:222
- // return self.account[holding_address]
- box_get
- pop
- // modules/accounting.py:207
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_rotate_arranger[routing]() -> void:
-rbac_rotate_arranger:
- // modules/rbac.py:147
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:158
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:159
- // self.arranger.value = new_arranger
- bytec_1 // 0x52323023
- swap
- app_global_put
- // modules/rbac.py:160
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:147
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_set_op_daemon[routing]() -> void:
-rbac_set_op_daemon:
- // modules/rbac.py:162
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:173
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:174
- // self.op_daemon.value = address
- bytec 11 // 0x52323523
- swap
- app_global_put
- // modules/rbac.py:175
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:162
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_assign_role[routing]() -> void:
-rbac_assign_role:
- // modules/rbac.py:177
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_0 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 2
- dup
- cover 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- txna ApplicationArgs 3
- dup
- intc_1 // 0
- extract_uint16 // on error: invalid array length header
- pushint 2
- +
- dig 1
- len
- ==
- assert // invalid number of bytes for arc4.dynamic_array
- extract 2 0
- swap
- // modules/rbac.py:199
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:200
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/rbac.py:201
- // self._assert_valid_role(role_id.as_uint64())
- btoi
- dupn 2
- callsub _assert_valid_role
- // modules/rbac.py:101
- // if role_id == UInt64(cst.ROLE_ARRANGER):
- intc_3 // 20
- ==
- bz rbac_assign_role_after_if_else@3
- // modules/rbac.py:102
- // self.arranger.value = role_address
- bytec_1 // 0x52323023
- dig 3
- app_global_put
-
-rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14:
- // modules/rbac.py:203
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:177
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-rbac_assign_role_after_if_else@3:
- // modules/rbac.py:105
- // if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
- dup
- pushint 40
- ==
- bz rbac_assign_role_after_if_else@5
- // modules/rbac.py:106
- // assert role_address not in self.account_manager, err.INVALID_ROLE_ADDRESS
- bytec_3 // 0x52343023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:107
- // self.account_manager[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@5:
- // modules/rbac.py:109
- // if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
- dup
- pushint 50
- ==
- bz rbac_assign_role_after_if_else@7
- // modules/rbac.py:110
- // assert role_address not in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- bytec 5 // 0x52353023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:111
- // self.primary_dealer[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@7:
- // modules/rbac.py:113
- // if role_id == UInt64(cst.ROLE_TRUSTEE):
- dup
- pushint 60
- ==
- bz rbac_assign_role_after_if_else@9
- // modules/rbac.py:114
- // assert role_address not in self.trustee, err.INVALID_ROLE_ADDRESS
- bytec 6 // 0x52363023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:115
- // self.trustee[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@9:
- // modules/rbac.py:117
- // if role_id == UInt64(cst.ROLE_AUTHORITY):
- dup
- pushint 70
- ==
- bz rbac_assign_role_after_if_else@11
- // modules/rbac.py:118
- // assert role_address not in self.authority, err.INVALID_ROLE_ADDRESS
- bytec_2 // 0x52373023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:119
- // self.authority[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-rbac_assign_role_after_if_else@11:
- // modules/rbac.py:121
- // if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
- dup
- pushint 80
- ==
- bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
- // modules/rbac.py:122
- // assert role_address not in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- bytec 7 // 0x52383023
- dig 3
- concat
- dup
- box_len
- bury 1
- !
- assert // Invalid account role address
- // modules/rbac.py:123
- // self.interest_oracle[role_address] = typ.RoleConfig.from_bytes(config)
- dig 2
- box_put
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
-
-
-// modules.rbac.RbacModule.rbac_revoke_role[routing]() -> void:
-rbac_revoke_role:
- // modules/rbac.py:205
- // @arc4.abimethod
- txna ApplicationArgs 1
- dup
- len
- intc_0 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 2
- dup
- cover 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:224
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:225
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/rbac.py:226
- // self._assert_valid_role(role_id.as_uint64())
- btoi
- dupn 2
- callsub _assert_valid_role
- // modules/rbac.py:126
- // assert role_id != UInt64(cst.ROLE_ARRANGER), err.INVALID_ROLE
- dup
- intc_3 // 20
- !=
- assert // Invalid role identifier
- // modules/rbac.py:127
- // if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
- pushint 40
- ==
- bz rbac_revoke_role_after_if_else@3
- // modules/rbac.py:128
- // assert role_address in self.account_manager, err.INVALID_ROLE_ADDRESS
- bytec_3 // 0x52343023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:129
- // del self.account_manager[role_address]
- box_del
- pop
-
-rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12:
- // modules/rbac.py:228
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:205
- // @arc4.abimethod
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-rbac_revoke_role_after_if_else@3:
- // modules/rbac.py:131
- // if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
- dup
- pushint 50
- ==
- bz rbac_revoke_role_after_if_else@5
- // modules/rbac.py:132
- // assert role_address in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- bytec 5 // 0x52353023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:133
- // del self.primary_dealer[role_address]
- box_del
- pop
- // modules/rbac.py:227
- // self._delete_role(role_id.as_uint64(), role_address)
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-rbac_revoke_role_after_if_else@5:
- // modules/rbac.py:135
- // if role_id == UInt64(cst.ROLE_TRUSTEE):
- dup
- pushint 60
- ==
- bz rbac_revoke_role_after_if_else@7
- // modules/rbac.py:136
- // assert role_address in self.trustee, err.INVALID_ROLE_ADDRESS
- bytec 6 // 0x52363023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:137
- // del self.trustee[role_address]
- box_del
- pop
- // modules/rbac.py:227
- // self._delete_role(role_id.as_uint64(), role_address)
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-rbac_revoke_role_after_if_else@7:
- // modules/rbac.py:139
- // if role_id == UInt64(cst.ROLE_AUTHORITY):
- dup
- pushint 70
- ==
- bz rbac_revoke_role_after_if_else@9
- // modules/rbac.py:140
- // assert role_address in self.authority, err.INVALID_ROLE_ADDRESS
- bytec_2 // 0x52373023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:141
- // del self.authority[role_address]
- box_del
- pop
- // modules/rbac.py:227
- // self._delete_role(role_id.as_uint64(), role_address)
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-rbac_revoke_role_after_if_else@9:
- // modules/rbac.py:143
- // if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
- dup
- pushint 80
- ==
- bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
- // modules/rbac.py:144
- // assert role_address in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- bytec 7 // 0x52383023
- dig 2
- concat
- dup
- box_len
- bury 1
- assert // Invalid account role address
- // modules/rbac.py:145
- // del self.interest_oracle[role_address]
- box_del
- pop
- b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-
-
-// modules.rbac.RbacModule.rbac_gov_asset_suspension[routing]() -> void:
-rbac_gov_asset_suspension:
- // modules/rbac.py:230
- // @arc4.abimethod # TODO: Update specs and add test
- txna ApplicationArgs 1
- dup
- len
- intc_0 // 1
- ==
- assert // invalid number of bytes for arc4.bool
- intc_1 // 0
- getbit
- // modules/rbac.py:77
- // assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
- bytec_2 // 0x52373023
- txn Sender
- callsub _role_is_active
- assert // Not authorized
- // modules/rbac.py:246
- // self.asset_suspended = suspended
- bytec 8 // "asset_suspended"
- swap
- app_global_put
- // modules/rbac.py:247
- // return Global.latest_timestamp
- global LatestTimestamp
- // modules/rbac.py:230
- // @arc4.abimethod # TODO: Update specs and add test
- itob
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_get_arranger[routing]() -> void:
-rbac_get_arranger:
- // modules/rbac.py:257
- // return self.arranger.value
- intc_1 // 0
- bytec_1 // 0x52323023
- app_global_get_ex
- assert // check self.arranger exists
- // modules/rbac.py:249
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_get_address_roles[routing]() -> void:
-rbac_get_address_roles:
- // modules/rbac.py:259
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:273
- // self._role_is_active(self.account_manager, address),
- bytec_3 // 0x52343023
- dig 1
- callsub _role_is_active
- // modules/rbac.py:274
- // self._role_is_active(self.primary_dealer, address),
- bytec 5 // 0x52353023
- dig 2
- callsub _role_is_active
- // modules/rbac.py:275
- // self._role_is_active(self.trustee, address),
- bytec 6 // 0x52363023
- dig 3
- callsub _role_is_active
- // modules/rbac.py:276
- // self._role_is_active(self.authority, address),
- bytec_2 // 0x52373023
- dig 4
- callsub _role_is_active
- // modules/rbac.py:277
- // self._role_is_active(self.interest_oracle, address),
- bytec 7 // 0x52383023
- uncover 5
- callsub _role_is_active
- // modules/rbac.py:259
- // @arc4.abimethod(readonly=True)
- pushbytes 0x00
- intc_1 // 0
- uncover 6
- setbit
- intc_0 // 1
- uncover 5
- setbit
- pushint 2
- uncover 4
- setbit
- pushint 3
- uncover 3
- setbit
- pushint 4
- uncover 2
- setbit
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-
-// modules.rbac.RbacModule.rbac_get_role_config[routing]() -> void:
-rbac_get_role_config:
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- txna ApplicationArgs 1
- dup
- len
- intc_0 // 1
- ==
- assert // invalid number of bytes for arc4.uint8
- txna ApplicationArgs 2
- dup
- cover 2
- len
- intc_2 // 32
- ==
- assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:294
- // role = role_id.as_uint64()
- btoi
- // modules/rbac.py:295
- // self._assert_valid_role(role)
- dup
- callsub _assert_valid_role
- // modules/rbac.py:297
- // case UInt64(cst.ROLE_ARRANGER):
- intc_3 // 20
- // modules/rbac.py:301
- // case UInt64(cst.ROLE_ACCOUNT_MANAGER):
- pushints 40 50 60 70 80
- // modules/rbac.py:296-327
- // match role:
- // case UInt64(cst.ROLE_ARRANGER):
- // return typ.RoleConfig(
- // role_validity_start=UInt64(0), role_validity_end=UInt64(0)
- // )
- // case UInt64(cst.ROLE_ACCOUNT_MANAGER):
- // assert self._has_role(
- // self.account_manager, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.account_manager[role_address]
- // case UInt64(cst.ROLE_PRIMARY_DEALER):
- // assert self._has_role(
- // self.primary_dealer, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.primary_dealer[role_address]
- // case UInt64(cst.ROLE_TRUSTEE):
- // assert self._has_role(
- // self.trustee, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.trustee[role_address]
- // case UInt64(cst.ROLE_AUTHORITY):
- // assert self._has_role(
- // self.authority, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.authority[role_address]
- // case UInt64(cst.ROLE_INTEREST_ORACLE):
- // assert self._has_role(
- // self.interest_oracle, role_address
- // ), err.INVALID_ROLE_ADDRESS
- // return self.interest_oracle[role_address]
- // case _:
- // op.err(err.INVALID_ROLE)
- uncover 6
- match rbac_get_role_config_switch_case_0@2 rbac_get_role_config_switch_case_1@3 rbac_get_role_config_switch_case_2@4 rbac_get_role_config_switch_case_3@5 rbac_get_role_config_switch_case_4@6 rbac_get_role_config_switch_case_5@7
- // modules/rbac.py:327
- // op.err(err.INVALID_ROLE)
- err // Invalid role identifier
-
-rbac_get_role_config_switch_case_5@7:
- // modules/rbac.py:323
- // self.interest_oracle, role_address
- bytec 7 // 0x52383023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:322-324
- // assert self._has_role(
- // self.interest_oracle, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:325
- // return self.interest_oracle[role_address]
- box_get
- pop
-
-rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9:
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- bytec_0 // 0x151f7c75
- swap
- concat
- log
- intc_0 // 1
- return
-
-rbac_get_role_config_switch_case_4@6:
- // modules/rbac.py:318
- // self.authority, role_address
- bytec_2 // 0x52373023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:317-319
- // assert self._has_role(
- // self.authority, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:320
- // return self.authority[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_3@5:
- // modules/rbac.py:313
- // self.trustee, role_address
- bytec 6 // 0x52363023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:312-314
- // assert self._has_role(
- // self.trustee, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:315
- // return self.trustee[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_2@4:
- // modules/rbac.py:308
- // self.primary_dealer, role_address
- bytec 5 // 0x52353023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:307-309
- // assert self._has_role(
- // self.primary_dealer, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:310
- // return self.primary_dealer[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_1@3:
- // modules/rbac.py:303
- // self.account_manager, role_address
- bytec_3 // 0x52343023
- // modules/rbac.py:55
- // return role_address in role_map
- dig 1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:302-304
- // assert self._has_role(
- // self.account_manager, role_address
- // ), err.INVALID_ROLE_ADDRESS
- assert // Invalid account role address
- // modules/rbac.py:305
- // return self.account_manager[role_address]
- box_get
- pop
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-rbac_get_role_config_switch_case_0@2:
- // modules/rbac.py:298-300
- // return typ.RoleConfig(
- // role_validity_start=UInt64(0), role_validity_end=UInt64(0)
- // )
- pushbytes 0x00000000000000000000000000000000
- // modules/rbac.py:280
- // @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
-
-
-// modules.rbac.RbacModule._role_is_active(role_map: bytes, role_address: bytes) -> uint64:
-_role_is_active:
- // modules/rbac.py:57
- // def _role_is_active(self, role_map: typ.RbacRole, role_address: Account) -> bool:
- proto 2 1
- pushbytes ""
- // modules/rbac.py:55
- // return role_address in role_map
- frame_dig -2
- frame_dig -1
- concat
- dup
- box_len
- bury 1
- // modules/rbac.py:58-62
- // return self._has_role(role_map, role_address) and (
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- // )
- bz _role_is_active_bool_false@4
- // modules/rbac.py:59
- // role_map[role_address].role_validity_start
- frame_dig 1
- box_get
- assert // check BoxMap entry exists
- intc_1 // 0
- extract_uint64
- // modules/rbac.py:60
- // <= Global.latest_timestamp
- global LatestTimestamp
- dup
- frame_bury 0
- // modules/rbac.py:59-60
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- <=
- // modules/rbac.py:59-61
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- bz _role_is_active_bool_false@4
- // modules/rbac.py:61
- // <= role_map[role_address].role_validity_end
- frame_dig 1
- box_get
- assert // check BoxMap entry exists
- pushint 8
- extract_uint64
- // modules/rbac.py:60-61
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- frame_dig 0
- >=
- // modules/rbac.py:59-61
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- bz _role_is_active_bool_false@4
- intc_0 // 1
-
-_role_is_active_bool_merge@5:
- // modules/rbac.py:58-62
- // return self._has_role(role_map, role_address) and (
- // role_map[role_address].role_validity_start
- // <= Global.latest_timestamp
- // <= role_map[role_address].role_validity_end
- // )
- frame_bury 0
- retsub
-
-_role_is_active_bool_false@4:
- intc_1 // 0
- b _role_is_active_bool_merge@5
-
-
-// modules.rbac.RbacModule.assert_caller_is_arranger() -> void:
-assert_caller_is_arranger:
- // modules/rbac.py:65
- // assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
- txn Sender
- // modules/rbac.py:52
- // return role_address == self.arranger.value
- intc_1 // 0
- bytec_1 // 0x52323023
- app_global_get_ex
- assert // check self.arranger exists
- ==
- // modules/rbac.py:65
- // assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
- assert // Not authorized
- retsub
-
-
-// modules.rbac.RbacModule.assert_is_not_asset_defaulted() -> void:
-assert_is_not_asset_defaulted:
- // modules/rbac.py:83
- // assert not self.asset_defaulted, err.DEFAULTED
- intc_1 // 0
- bytec 12 // "asset_defaulted"
- app_global_get_ex
- assert // check self.asset_defaulted exists
- !
- assert // Defaulted
- retsub
-
-
-// modules.rbac.RbacModule.assert_is_not_asset_suspended() -> void:
-assert_is_not_asset_suspended:
- // modules/rbac.py:86
- // assert not self.asset_suspended, err.SUSPENDED
- intc_1 // 0
- bytec 8 // "asset_suspended"
- app_global_get_ex
- assert // check self.asset_suspended exists
- !
- assert // Suspended operations
- retsub
-
-
-// modules.rbac.RbacModule._assert_valid_role(role_id: uint64) -> void:
-_assert_valid_role:
- // modules/rbac.py:88
- // def _assert_valid_role(self, role_id: UInt64) -> None:
- proto 1 0
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- frame_dig -1
- // modules/rbac.py:90
- // UInt64(cst.ROLE_ARRANGER),
- intc_3 // 20
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:91
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- pushint 40
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:92
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- pushint 50
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:93
- // UInt64(cst.ROLE_TRUSTEE),
- pushint 60
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:94
- // UInt64(cst.ROLE_AUTHORITY),
- pushint 70
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bnz _assert_valid_role_bool_true@6
- frame_dig -1
- // modules/rbac.py:95
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- pushint 80
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- ==
- bz _assert_valid_role_bool_false@7
-
-_assert_valid_role_bool_true@6:
- intc_0 // 1
-
-_assert_valid_role_bool_merge@8:
- // modules/rbac.py:89-96
- // assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
- // ), err.INVALID_ROLE
- assert // Invalid role identifier
- retsub
-
-_assert_valid_role_bool_false@7:
- intc_1 // 0
- b _assert_valid_role_bool_merge@8
diff --git a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.arc56.json b/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.arc56.json
deleted file mode 100644
index 168af179..00000000
--- a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.arc56.json
+++ /dev/null
@@ -1,662 +0,0 @@
-{
- "name": "MockAccountingModule",
- "structs": {
- "AccountInfo": [
- {
- "name": "payment_address",
- "type": "address"
- },
- {
- "name": "units",
- "type": "uint64"
- },
- {
- "name": "unit_value",
- "type": "uint64"
- },
- {
- "name": "paid_coupons",
- "type": "uint64"
- },
- {
- "name": "suspended",
- "type": "bool"
- }
- ],
- "RoleConfig": [
- {
- "name": "role_validity_start",
- "type": "uint64"
- },
- {
- "name": "role_validity_end",
- "type": "uint64"
- }
- ]
- },
- "methods": [
- {
- "name": "account_gov_suspension",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "bool",
- "name": "suspended",
- "desc": "Suspension status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set account suspension status"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Set account suspension status",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_open",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "address",
- "name": "payment_address",
- "desc": "Account Payment Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the account opening"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Open D-ASA account",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_close",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "desc": "Closed units, Timestamp of the account closing"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Close D-ASA account",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_update_payment_address",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- },
- {
- "type": "address",
- "name": "payment_address",
- "desc": "Account Payment Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the account update"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Update the Payment Address of an account",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "account_get_info",
- "args": [
- {
- "type": "address",
- "name": "holding_address",
- "desc": "Account Holding Address"
- }
- ],
- "returns": {
- "type": "(address,uint64,uint64,uint64,bool)",
- "struct": "AccountInfo",
- "desc": "Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get account info",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_rotate_arranger",
- "args": [
- {
- "type": "address",
- "name": "new_arranger",
- "desc": "New Arranger address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Rotate the Arranger address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_set_op_daemon",
- "args": [
- {
- "type": "address",
- "name": "address",
- "desc": "Operation Daemon address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Non-Normative: Set the Operation Daemon address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_assign_role",
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- },
- {
- "type": "byte[]",
- "name": "config",
- "desc": "Role configuration (Optional)"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role assignment"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Assign a role to an address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_revoke_role",
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the role revocation"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Revoke a role from an address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_gov_asset_suspension",
- "args": [
- {
- "type": "bool",
- "name": "suspended",
- "desc": "Suspension status"
- }
- ],
- "returns": {
- "type": "uint64",
- "desc": "Timestamp of the set asset suspension status"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": false,
- "desc": "Set asset suspension status",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_get_arranger",
- "args": [],
- "returns": {
- "type": "address",
- "desc": "Arranger address"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get Arranger address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_get_address_roles",
- "args": [
- {
- "type": "address",
- "name": "address",
- "desc": "Address to get roles for"
- }
- ],
- "returns": {
- "type": "(bool,bool,bool,bool,bool)",
- "desc": "Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Non-normative - Get roles assigned to an address",
- "events": [],
- "recommendations": {}
- },
- {
- "name": "rbac_get_role_config",
- "args": [
- {
- "type": "uint8",
- "name": "role_id",
- "desc": "Role Identifier"
- },
- {
- "type": "address",
- "name": "role_address",
- "desc": "Account Role Address"
- }
- ],
- "returns": {
- "type": "(uint64,uint64)",
- "struct": "RoleConfig",
- "desc": "Role configuration"
- },
- "actions": {
- "create": [],
- "call": [
- "NoOp"
- ]
- },
- "readonly": true,
- "desc": "Get role configuration",
- "events": [],
- "recommendations": {}
- }
- ],
- "arcs": [
- 22,
- 28
- ],
- "desc": "\n Accounting Module for testing\n ",
- "networks": {},
- "state": {
- "schema": {
- "global": {
- "ints": 6,
- "bytes": 2
- },
- "local": {
- "ints": 0,
- "bytes": 0
- }
- },
- "keys": {
- "global": {
- "arranger": {
- "keyType": "AVMBytes",
- "valueType": "address",
- "key": "UjIwIw=="
- },
- "op_daemon": {
- "keyType": "AVMBytes",
- "valueType": "address",
- "key": "UjI1Iw=="
- },
- "asset_suspended": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "YXNzZXRfc3VzcGVuZGVk"
- },
- "asset_defaulted": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "YXNzZXRfZGVmYXVsdGVk"
- },
- "total_units": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "dG90YWxfdW5pdHM="
- },
- "circulating_units": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "Y2lyY3VsYXRpbmdfdW5pdHM="
- },
- "unit_value": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "dW5pdF92YWx1ZQ=="
- },
- "status": {
- "keyType": "AVMString",
- "valueType": "AVMUint64",
- "key": "c3RhdHVz"
- }
- },
- "local": {},
- "box": {}
- },
- "maps": {
- "global": {},
- "local": {},
- "box": {
- "account_manager": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjQwIw=="
- },
- "primary_dealer": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjUwIw=="
- },
- "trustee": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjYwIw=="
- },
- "authority": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjcwIw=="
- },
- "interest_oracle": {
- "keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjgwIw=="
- },
- "account": {
- "keyType": "address",
- "valueType": "AccountInfo",
- "prefix": "UjMwIw=="
- }
- }
- }
- },
- "bareActions": {
- "create": [
- "NoOp"
- ],
- "call": []
- },
- "sourceInfo": {
- "approval": {
- "sourceInfo": [
- {
- "pc": [
- 1281
- ],
- "errorMessage": "Defaulted"
- },
- {
- "pc": [
- 329,
- 402,
- 455,
- 538,
- 568
- ],
- "errorMessage": "Invalid account holding address"
- },
- {
- "pc": [
- 706,
- 730,
- 754,
- 777,
- 801,
- 856,
- 884,
- 906,
- 927,
- 949,
- 1125,
- 1142,
- 1157,
- 1172,
- 1186
- ],
- "errorMessage": "Invalid account role address"
- },
- {
- "pc": [
- 841,
- 1115,
- 1342
- ],
- "errorMessage": "Invalid role identifier"
- },
- {
- "pc": [
- 319,
- 374,
- 385,
- 443,
- 522,
- 971,
- 1273
- ],
- "errorMessage": "Not authorized"
- },
- {
- "pc": [
- 1289
- ],
- "errorMessage": "Suspended operations"
- },
- {
- "pc": [
- 1233,
- 1248
- ],
- "errorMessage": "check BoxMap entry exists"
- },
- {
- "pc": [
- 988,
- 1271
- ],
- "errorMessage": "check self.arranger exists"
- },
- {
- "pc": [
- 1279
- ],
- "errorMessage": "check self.asset_defaulted exists"
- },
- {
- "pc": [
- 1287
- ],
- "errorMessage": "check self.asset_suspended exists"
- },
- {
- "pc": [
- 470
- ],
- "errorMessage": "check self.circulating_units exists"
- },
- {
- "pc": [
- 379
- ],
- "errorMessage": "check self.status exists"
- },
- {
- "pc": [
- 647
- ],
- "errorMessage": "invalid array length header"
- },
- {
- "pc": [
- 310,
- 962
- ],
- "errorMessage": "invalid number of bytes for arc4.bool"
- },
- {
- "pc": [
- 655
- ],
- "errorMessage": "invalid number of bytes for arc4.dynamic_array"
- },
- {
- "pc": [
- 302,
- 359,
- 367,
- 436,
- 508,
- 516,
- 559,
- 584,
- 607,
- 641,
- 825,
- 1002,
- 1085
- ],
- "errorMessage": "invalid number of bytes for arc4.static_array"
- },
- {
- "pc": [
- 631,
- 815,
- 1075
- ],
- "errorMessage": "invalid number of bytes for arc4.uint8"
- }
- ],
- "pcOffsetMethod": "none"
- },
- "clear": {
- "sourceInfo": [],
- "pcOffsetMethod": "none"
- }
- },
- "source": {
- "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgMjAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDUyMzIzMDIzIDB4NTIzNzMwMjMgMHg1MjM0MzAyMyAweDUyMzMzMDIzIDB4NTIzNTMwMjMgMHg1MjM2MzAyMyAweDUyMzgzMDIzICJhc3NldF9zdXNwZW5kZWQiICJjaXJjdWxhdGluZ191bml0cyIgInN0YXR1cyIgMHg1MjMyMzUyMyAiYXNzZXRfZGVmYXVsdGVkIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwLTMxCiAgICAvLyAjIFJCQUMgUm9sZXMKICAgIC8vIHNlbGYuYXJyYW5nZXIgPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX0FSUkFOR0VSKQogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIKICAgIC8vIHNlbGYub3BfZGFlbW9uID0gR2xvYmFsU3RhdGUoQWNjb3VudCgpLCBrZXk9Y3N0LlBSRUZJWF9JRF9PUF9EQUVNT04pCiAgICBieXRlYyAxMSAvLyAweDUyMzIzNTIzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NDctNDgKICAgIC8vICMgRC1BU0EgR292ZXJuYW5jZQogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBGYWxzZQogICAgYnl0ZWMgOCAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgaW50Y18xIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NDkKICAgIC8vIHNlbGYuYXNzZXRfZGVmYXVsdGVkID0gRmFsc2UKICAgIGJ5dGVjIDEyIC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxOQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IFVJbnQ2NCgpCiAgICBwdXNoYnl0ZXMgInRvdGFsX3VuaXRzIgogICAgaW50Y18xIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjAKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgPSBVSW50NjQoKQogICAgYnl0ZWMgOSAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMQogICAgLy8gc2VsZi51bml0X3ZhbHVlID0gVUludDY0KCkKICAgIHB1c2hieXRlcyAidW5pdF92YWx1ZSIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIyCiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbm0uU1RBVFVTX0lOQUNUSVZFKQogICAgYnl0ZWMgMTAgLy8gInN0YXR1cyIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfYWNjb3VudGluZy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBNb2NrQWNjb3VudGluZ01vZHVsZShBY2NvdW50aW5nTW9kdWxlKToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2NyZWF0ZUAyMgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZGMwNjNiMzUgMHgxNGZjMTBlZiAweDRjMTEzZWQ1IDB4NzRhNzI5N2YgMHgxMDVjMTg0ZSAweDgyZjcxYjJkIDB4ZWYwNGY1ZDMgMHgwM2I4MzMyOSAweDNkYmU4MGJkIDB4ZGY1NGU4MmMgMHgwMTBjODI5OSAweDc0MDZhY2QyIDB4YzNlNGIyOTcgLy8gbWV0aG9kICJhY2NvdW50X2dvdl9zdXNwZW5zaW9uKGFkZHJlc3MsYm9vbCl1aW50NjQiLCBtZXRob2QgImFjY291bnRfb3BlbihhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhY2NvdW50X2Nsb3NlKGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3MoYWRkcmVzcyxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiYWNjb3VudF9nZXRfaW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wpIiwgbWV0aG9kICJyYmFjX3JvdGF0ZV9hcnJhbmdlcihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19zZXRfb3BfZGFlbW9uKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2Fzc2lnbl9yb2xlKHVpbnQ4LGFkZHJlc3MsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19yZXZva2Vfcm9sZSh1aW50OCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbihib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV9jb25maWcodWludDgsYWRkcmVzcykodWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBhY2NvdW50X2dvdl9zdXNwZW5zaW9uIGFjY291bnRfb3BlbiBhY2NvdW50X2Nsb3NlIGFjY291bnRfdXBkYXRlX3BheW1lbnRfYWRkcmVzcyBhY2NvdW50X2dldF9pbmZvIHJiYWNfcm90YXRlX2FycmFuZ2VyIHJiYWNfc2V0X29wX2RhZW1vbiByYmFjX2Fzc2lnbl9yb2xlIHJiYWNfcmV2b2tlX3JvbGUgcmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbiByYmFjX2dldF9hcnJhbmdlciByYmFjX2dldF9hZGRyZXNzX3JvbGVzIHJiYWNfZ2V0X3JvbGVfY29uZmlnCiAgICBlcnIKCm1haW5fY3JlYXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX2FjY291bnRpbmcvY29udHJhY3QucHk6MTQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfYWNjb3VudGluZy9jb250cmFjdC5weToxNgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjXzEgLy8gMHg1MjMyMzAyMwogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9hY2NvdW50aW5nL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9nb3Zfc3VzcGVuc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfZ292X3N1c3BlbnNpb246CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6OTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18xIC8vIDAKICAgIGdldGJpdAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojc3CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hdXRob3JpdHksIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWMgNCAvLyAweDUyMzMzMDIzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE0CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGR1cAogICAgcHVzaGludCA1NgogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNTYKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9vcGVuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9vcGVuOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyOAogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfRU5ERUQKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyAxMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMjAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjEzOQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnN0YXR1c19pc19lbmRlZCgpLCBlcnIuVU5BVVRIT1JJWkVECiAgICAhCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNDAKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE0MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQyCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIG5vdCBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWMgNCAvLyAweDUyMzMzMDIzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQ2CiAgICAvLyB1bml0cz1VSW50NjQoMCksCiAgICBpbnRjXzEgLy8gMAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE0NC0xNTAKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdID0gdHlwLkFjY291bnRJbmZvKAogICAgLy8gICAgIHBheW1lbnRfYWRkcmVzcz1wYXltZW50X2FkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM9VUludDY0KDApLAogICAgLy8gICAgIHVuaXRfdmFsdWU9VUludDY0KDApLAogICAgLy8gICAgIHBhaWRfY291cG9ucz1VSW50NjQoMCksCiAgICAvLyAgICAgc3VzcGVuZGVkPUZhbHNlLAogICAgLy8gKQogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNTEKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9jbG9zZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfY2xvc2U6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzEKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzMzMwMjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTc0CiAgICAvLyBjbG9zZWRfdW5pdHMgPSBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTc1CiAgICAvLyBkZWwgc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3NgogICAgLy8gc2VsZi5jaXJjdWxhdGluZ191bml0cyAtPSBjbG9zZWRfdW5pdHMKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyA5IC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ191bml0cyBleGlzdHMKICAgIHN3YXAKICAgIC0KICAgIGJ5dGVjIDkgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDgKICAgIC8vIGlmIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgPT0gVUludDY0KDApOgogICAgYm56IGFjY291bnRfY2xvc2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDkKICAgIC8vIHNlbGYuc3RhdHVzID0gVUludDY0KGVubS5TVEFUVVNfRU5ERUQpCiAgICBieXRlYyAxMCAvLyAic3RhdHVzIgogICAgcHVzaGludCAyMDAKICAgIGFwcF9nbG9iYWxfcHV0CgphY2NvdW50X2Nsb3NlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzgKICAgIC8vIHJldHVybiBjbG9zZWRfdW5pdHMsIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmFjY291bnRpbmcuQWNjb3VudGluZ01vZHVsZS5hY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3Nbcm91dGluZ10oKSAtPiB2b2lkOgphY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3M6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjAwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MsIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjAxCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDIKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzMzMwMjMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcyA9IHBheW1lbnRfYWRkcmVzcwogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDUKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9nZXRfaW5mb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfZ2V0X2luZm86CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzMzMwMjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjIyCiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19yb3RhdGVfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX3JvdGF0ZV9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTU4CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTU5CiAgICAvLyBzZWxmLmFycmFuZ2VyLnZhbHVlID0gbmV3X2FycmFuZ2VyCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTYwCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfc2V0X29wX2RhZW1vbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfc2V0X29wX2RhZW1vbjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTczCiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc0CiAgICAvLyBzZWxmLm9wX2RhZW1vbi52YWx1ZSA9IGFkZHJlc3MKICAgIGJ5dGVjIDExIC8vIDB4NTIzMjM1MjMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfYXNzaWduX3JvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2Fzc2lnbl9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTk5CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAwCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDEKICAgIC8vIHNlbGYuX2Fzc2VydF92YWxpZF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICBkdXBuIDIKICAgIGNhbGxzdWIgX2Fzc2VydF92YWxpZF9yb2xlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTAxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICBpbnRjXzMgLy8gMjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwMgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcwogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAzCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA3CiAgICAvLyBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gc2VsZi5fdXBzZXJ0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCBjb25maWcpCiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTAKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNSAvLyAweDUyMzUzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTEKICAgIC8vIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTMKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpOgogICAgZHVwCiAgICBwdXNoaW50IDYwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA2IC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNQogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgZHVwCiAgICBwdXNoaW50IDcwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmF1dGhvcml0eSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExOQogICAgLy8gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTIxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgZHVwCiAgICBwdXNoaW50IDgwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNyAvLyAweDUyMzgzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3Jldm9rZV9yb2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19yZXZva2Vfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjQKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjUKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNgogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjYKICAgIC8vIGFzc2VydCByb2xlX2lkICE9IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksIGVyci5JTlZBTElEX1JPTEUKICAgIGR1cAogICAgaW50Y18zIC8vIDIwCiAgICAhPQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI5CiAgICAvLyBkZWwgc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyOAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzIKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA1IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMwogICAgLy8gZGVsIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNiAvLyAweDUyMzYzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzcKICAgIC8vIGRlbCBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQxCiAgICAvLyBkZWwgc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0MwogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIGR1cAogICAgcHVzaGludCA4MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNyAvLyAweDUyMzgzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDUKICAgIC8vIGRlbCBzZWxmLmludGVyZXN0X29yYWNsZVtyb2xlX2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGIgcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dvdl9hc3NldF9zdXNwZW5zaW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kICAjIFRPRE86IFVwZGF0ZSBzcGVjcyBhbmQgYWRkIHRlc3QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NgogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGJ5dGVjIDggLy8gImFzc2V0X3N1c3BlbmRlZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ3CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCAgIyBUT0RPOiBVcGRhdGUgc3BlY3MgYW5kIGFkZCB0ZXN0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTcKICAgIC8vIHJldHVybiBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9hZGRyZXNzX3JvbGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfYWRkcmVzc19yb2xlczoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjczCiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmFjY291bnRfbWFuYWdlciwgYWRkcmVzcyksCiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIGRpZyAxCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NAogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5wcmltYXJ5X2RlYWxlciwgYWRkcmVzcyksCiAgICBieXRlYyA1IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDYgLy8gMHg1MjM2MzAyMwogICAgZGlnIDMKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc2CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgYWRkcmVzcyksCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyA0CiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGFkZHJlc3MpLAogICAgYnl0ZWMgNyAvLyAweDUyMzgzMDIzCiAgICB1bmNvdmVyIDUKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA2CiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAxCiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgcHVzaGludCAyCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGludCA0CiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfcm9sZV9jb25maWc6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk0CiAgICAvLyByb2xlID0gcm9sZV9pZC5hc191aW50NjQoKQogICAgYnRvaQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5NQogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZSkKICAgIGR1cAogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTcKICAgIC8vIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMQogICAgLy8gY2FzZSBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIHB1c2hpbnRzIDQwIDUwIDYwIDcwIDgwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk2LTMyNwogICAgLy8gbWF0Y2ggcm9sZToKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICAvLyAgICAgICAgIHJldHVybiB0eXAuUm9sZUNvbmZpZygKICAgIC8vICAgICAgICAgICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICAgICAgICAgKQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSk6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmF1dGhvcml0eVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5pbnRlcmVzdF9vcmFjbGUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuSU5WQUxJRF9ST0xFKQogICAgdW5jb3ZlciA2CiAgICBtYXRjaCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDIgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMUAzIHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzJANCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDUgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNEA2IHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyNwogICAgLy8gb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICBlcnIgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDcgLy8gMHg1MjM4MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMi0zMjQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTgKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMxNy0zMTkKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmF1dGhvcml0eSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIwCiAgICAvLyByZXR1cm4gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEzCiAgICAvLyBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgNiAvLyAweDUyMzYzMDIzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTUKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEyLTMxNAogICAgLy8gYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgIHNlbGYudHJ1c3RlZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzE1CiAgICAvLyByZXR1cm4gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMkA0OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwOAogICAgLy8gc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICBieXRlYyA1IC8vIDB4NTIzNTMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEwCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDkKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMi0zMDQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmFjY291bnRfbWFuYWdlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzA1CiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk4LTMwMAogICAgLy8gcmV0dXJuIHR5cC5Sb2xlQ29uZmlnKAogICAgLy8gICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3JvbGVfaXNfYWN0aXZlKHJvbGVfbWFwOiBieXRlcywgcm9sZV9hZGRyZXNzOiBieXRlcykgLT4gdWludDY0Ogpfcm9sZV9pc19hY3RpdmU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIGRlZiBfcm9sZV9pc19hY3RpdmUoc2VsZiwgcm9sZV9tYXA6IHR5cC5SYmFjUm9sZSwgcm9sZV9hZGRyZXNzOiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OC02MgogICAgLy8gcmV0dXJuIHNlbGYuX2hhc19yb2xlKHJvbGVfbWFwLCByb2xlX2FkZHJlc3MpIGFuZCAoCiAgICAvLyAgICAgcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyAgICAgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICAgICA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICAvLyApCiAgICBieiBfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTkKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjAKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIDw9CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjEKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MQogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjAtNjEKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMAogICAgPj0KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX21lcmdlQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTgtNjIKICAgIC8vIHJldHVybiBzZWxmLl9oYXNfcm9sZShyb2xlX21hcCwgcm9sZV9hZGRyZXNzKSBhbmQgKAogICAgLy8gICAgIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpIC0+IHZvaWQ6CmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjUyCiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzID09IHNlbGYuYXJyYW5nZXIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcnJhbmdlciBleGlzdHMKICAgID09CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjgzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYXNzZXRfZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgMTIgLy8gImFzc2V0X2RlZmF1bHRlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9kZWZhdWx0ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gRGVmYXVsdGVkCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg2CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYXNzZXRfc3VzcGVuZGVkLCBlcnIuU1VTUEVOREVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgOCAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X3N1c3BlbmRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBTdXNwZW5kZWQgb3BlcmF0aW9ucwogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2Fzc2VydF92YWxpZF9yb2xlKHJvbGVfaWQ6IHVpbnQ2NCkgLT4gdm9pZDoKX2Fzc2VydF92YWxpZF9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg4CiAgICAvLyBkZWYgX2Fzc2VydF92YWxpZF9yb2xlKHNlbGYsIHJvbGVfaWQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkwCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgaW50Y18zIC8vIDIwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkxCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTIKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkzCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk0CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTUKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgcHVzaGludCA4MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9mYWxzZUA3CgpfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDY6CiAgICBpbnRjXzAgLy8gMQoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfbWVyZ2VAODoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBhc3NlcnQgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKICAgIHJldHN1YgoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMSAvLyAwCiAgICBiIF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX21lcmdlQDgK",
- "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="
- },
- "byteCode": {
- "approval": "CyAEAQAgFCYNBBUffHUEUjIwIwRSNzAjBFI0MCMEUjMwIwRSNTAjBFI2MCMEUjgwIw9hc3NldF9zdXNwZW5kZWQRY2lyY3VsYXRpbmdfdW5pdHMGc3RhdHVzBFIyNSMPYXNzZXRfZGVmYXVsdGVkMRhAADYpMgNnJwsyA2cnCCNnJwwjZ4ALdG90YWxfdW5pdHMjZycJI2eACnVuaXRfdmFsdWUjZycKI2cxG0EAajEZFEQxGESCDQTcBjs1BBT8EO8ETBE+1QR0pyl/BBBcGE4EgvcbLQTvBPXTBAO4MykEPb6AvQTfVOgsBAEMgpkEdAas0gTD5LKXNhoAjg0ADwBIAJUA3QEQASkBQAFYAhACowLBAssDFAAxGRQxGBQQRCkxAGciQzYaAUkVJBJENhoCSRUiEkQjUyoxAIgDfkQnBE8CUEm9RQFESYE4IrojTwNUgThMuzIHFihMULAiQzYaAUkVJBJENhoCSRUkEkQrMQCIA0dEIycKZUSByAESFESIA3aIA3snBE8CUEm9RQEURCMWTwJLAVBLAVBMUIABAFC/MgcWKExQsCJDNhoBSRUkEkQrMQCIAwJEiAM8JwRMUEm9RQFESb5IJFtJTwK8SCMnCWVETAknCUsBZ0AABicKgcgBZzIHSwEWTBZQKExQsCJDNhoBSRUkEkQ2GgJJFSQSRDEASwISRIgC7YgC8icETwJQSb1FAUQjTwK7MgcWKExQsCJDNhoBSRUkEkQnBExQSb1FAUS+SChMULAiQzYaAUkVJBJEiAKmKUxnMgcWKExQsCJDNhoBSRUkEkSIAo8nC0xnMgcWKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJENhoDSSNZgQIISwEVEkRXAgBMiAJbiAJhF0cCiAJrJRJBAA0pSwNnMgcWKExQsCJDSYEoEkEAECtLA1BJvUUBFERLAr9C/+BJgTISQQARJwVLA1BJvUUBFERLAr9C/8hJgTwSQQARJwZLA1BJvUUBFERLAr9C/7BJgUYSQQAQKksDUEm9RQEUREsCv0L/mUmBUBJB/5InB0sDUEm9RQEUREsCv0L/gTYaAUkVIhJENhoCSU4CFSQSRIgBtYgBuxdHAogBxUklE0SBKBJBABQrSwJQSb1FAUS8SDIHFihMULAiQ0mBMhJBAA8nBUsCUEm9RQFEvEhC/+FJgTwSQQAPJwZLAlBJvUUBRLxIQv/LSYFGEkEADipLAlBJvUUBRLxIQv+2SYFQEkH/rycHSwJQSb1FAUS8SEL/oDYaAUkVIhJEI1MqMQCIAPJEJwhMZzIHFihMULAiQyMpZUQoTFCwIkM2GgFJFSQSRCtLAYgAzCcFSwKIAMUnBksDiAC+KksEiAC4JwdPBYgAsYABACNPBlQiTwVUgQJPBFSBA08DVIEETwJUKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJEF0mIAMglgwUoMjxGUE8GjgYATQA/ADAAIQATAAEAJwdLAVBJvUUBRL5IKExQsCJDKksBUEm9RQFEvkhC/+wnBksBUEm9RQFEvkhC/90nBUsBUEm9RQFEvkhC/84rSwFQSb1FAUS+SEL/wIAQAAAAAAAAAAAAAAAAAAAAAEL/q4oCAYAAi/6L/1BJvUUBQQAgiwG+RCNbMgdJjAAOQQARiwG+RIEIW4sAD0EABCKMAIkjQv/5MQAjKWVEEkSJIycMZUQURIkjJwhlRBREiYoBAIv/JRJAACiL/4EoEkAAIIv/gTISQAAYi/+BPBJAABCL/4FGEkAACIv/gVASQQADIkSJI0L/+g==",
- "clear": "C4EBQw=="
- },
- "compilerInfo": {
- "compiler": "puya",
- "compilerVersion": {
- "major": 5,
- "minor": 7,
- "patch": 1
- }
- },
- "events": [],
- "templateVariables": {}
-}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.clear.puya.map b/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.clear.puya.map
deleted file mode 100644
index d580b5c4..00000000
--- a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.clear.puya.map
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "version": 3,
- "sources": [],
- "mappings": ";;;",
- "op_pc_offset": 0,
- "pc_events": {
- "1": {
- "subroutine": "algopy.arc4.ARC4Contract.clear_state_program",
- "params": {},
- "block": "main",
- "stack_in": [],
- "op": "pushint 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "3": {
- "op": "return",
- "stack_out": []
- }
- }
-}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.clear.teal b/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.clear.teal
deleted file mode 100644
index 75f539be..00000000
--- a/smart_contracts/artifacts/mock_module_accounting/MockAccountingModule.clear.teal
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma version 11
-#pragma typetrack false
-
-// algopy.arc4.ARC4Contract.clear_state_program() -> uint64:
-main:
- pushint 1
- return
diff --git a/smart_contracts/artifacts/mock_module_accounting/mock_accounting_module_client.py b/smart_contracts/artifacts/mock_module_accounting/mock_accounting_module_client.py
deleted file mode 100644
index cc76b79c..00000000
--- a/smart_contracts/artifacts/mock_module_accounting/mock_accounting_module_client.py
+++ /dev/null
@@ -1,2065 +0,0 @@
-# flake8: noqa
-# fmt: off
-# mypy: ignore-errors
-# This file was automatically generated by algokit-client-generator.
-# DO NOT MODIFY IT BY HAND.
-# requires: algokit-utils@^3.0.0
-
-# common
-import dataclasses
-import typing
-# core algosdk
-import algosdk
-from algosdk.transaction import OnComplete
-from algosdk.atomic_transaction_composer import TransactionSigner
-from algosdk.source_map import SourceMap
-from algosdk.transaction import Transaction
-from algosdk.v2client.models import SimulateTraceConfig
-# utils
-import algokit_utils
-from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient
-
-_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "bool", "desc": "Suspension status", "name": "suspended"}], "name": "account_gov_suspension", "returns": {"type": "uint64", "desc": "Timestamp of the set account suspension status"}, "desc": "Set account suspension status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "address", "desc": "Account Payment Address", "name": "payment_address"}], "name": "account_open", "returns": {"type": "uint64", "desc": "Timestamp of the account opening"}, "desc": "Open D-ASA account", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}], "name": "account_close", "returns": {"type": "(uint64,uint64)", "desc": "Closed units, Timestamp of the account closing"}, "desc": "Close D-ASA account", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}, {"type": "address", "desc": "Account Payment Address", "name": "payment_address"}], "name": "account_update_payment_address", "returns": {"type": "uint64", "desc": "Timestamp of the account update"}, "desc": "Update the Payment Address of an account", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Account Holding Address", "name": "holding_address"}], "name": "account_get_info", "returns": {"type": "(address,uint64,uint64,uint64,bool)", "desc": "Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended", "struct": "AccountInfo"}, "desc": "Get account info", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "New Arranger address", "name": "new_arranger"}], "name": "rbac_rotate_arranger", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Rotate the Arranger address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Operation Daemon address", "name": "address"}], "name": "rbac_set_op_daemon", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Non-Normative: Set the Operation Daemon address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}, {"type": "byte[]", "desc": "Role configuration (Optional)", "name": "config"}], "name": "rbac_assign_role", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Assign a role to an address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}], "name": "rbac_revoke_role", "returns": {"type": "uint64", "desc": "Timestamp of the role revocation"}, "desc": "Revoke a role from an address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "bool", "desc": "Suspension status", "name": "suspended"}], "name": "rbac_gov_asset_suspension", "returns": {"type": "uint64", "desc": "Timestamp of the set asset suspension status"}, "desc": "Set asset suspension status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "rbac_get_arranger", "returns": {"type": "address", "desc": "Arranger address"}, "desc": "Get Arranger address", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Address to get roles for", "name": "address"}], "name": "rbac_get_address_roles", "returns": {"type": "(bool,bool,bool,bool,bool)", "desc": "Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)"}, "desc": "Non-normative - Get roles assigned to an address", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}], "name": "rbac_get_role_config", "returns": {"type": "(uint64,uint64)", "desc": "Role configuration", "struct": "RoleConfig"}, "desc": "Get role configuration", "events": [], "readonly": true, "recommendations": {}}], "name": "MockAccountingModule", "state": {"keys": {"box": {}, "global": {"arranger": {"key": "UjIwIw==", "keyType": "AVMBytes", "valueType": "address"}, "op_daemon": {"key": "UjI1Iw==", "keyType": "AVMBytes", "valueType": "address"}, "asset_suspended": {"key": "YXNzZXRfc3VzcGVuZGVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "asset_defaulted": {"key": "YXNzZXRfZGVmYXVsdGVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_units": {"key": "dG90YWxfdW5pdHM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "circulating_units": {"key": "Y2lyY3VsYXRpbmdfdW5pdHM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "unit_value": {"key": "dW5pdF92YWx1ZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "status": {"key": "c3RhdHVz", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"account_manager": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjQwIw=="}, "primary_dealer": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjUwIw=="}, "trustee": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjYwIw=="}, "authority": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjcwIw=="}, "interest_oracle": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjgwIw=="}, "account": {"keyType": "address", "valueType": "AccountInfo", "prefix": "UjMwIw=="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 2, "ints": 6}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"AccountInfo": [{"name": "payment_address", "type": "address"}, {"name": "units", "type": "uint64"}, {"name": "unit_value", "type": "uint64"}, {"name": "paid_coupons", "type": "uint64"}, {"name": "suspended", "type": "bool"}], "RoleConfig": [{"name": "role_validity_start", "type": "uint64"}, {"name": "role_validity_end", "type": "uint64"}]}, "byteCode": {"approval": "CyAEAQAgFCYNBBUffHUEUjIwIwRSNzAjBFI0MCMEUjMwIwRSNTAjBFI2MCMEUjgwIw9hc3NldF9zdXNwZW5kZWQRY2lyY3VsYXRpbmdfdW5pdHMGc3RhdHVzBFIyNSMPYXNzZXRfZGVmYXVsdGVkMRhAADYpMgNnJwsyA2cnCCNnJwwjZ4ALdG90YWxfdW5pdHMjZycJI2eACnVuaXRfdmFsdWUjZycKI2cxG0EAajEZFEQxGESCDQTcBjs1BBT8EO8ETBE+1QR0pyl/BBBcGE4EgvcbLQTvBPXTBAO4MykEPb6AvQTfVOgsBAEMgpkEdAas0gTD5LKXNhoAjg0ADwBIAJUA3QEQASkBQAFYAhACowLBAssDFAAxGRQxGBQQRCkxAGciQzYaAUkVJBJENhoCSRUiEkQjUyoxAIgDfkQnBE8CUEm9RQFESYE4IrojTwNUgThMuzIHFihMULAiQzYaAUkVJBJENhoCSRUkEkQrMQCIA0dEIycKZUSByAESFESIA3aIA3snBE8CUEm9RQEURCMWTwJLAVBLAVBMUIABAFC/MgcWKExQsCJDNhoBSRUkEkQrMQCIAwJEiAM8JwRMUEm9RQFESb5IJFtJTwK8SCMnCWVETAknCUsBZ0AABicKgcgBZzIHSwEWTBZQKExQsCJDNhoBSRUkEkQ2GgJJFSQSRDEASwISRIgC7YgC8icETwJQSb1FAUQjTwK7MgcWKExQsCJDNhoBSRUkEkQnBExQSb1FAUS+SChMULAiQzYaAUkVJBJEiAKmKUxnMgcWKExQsCJDNhoBSRUkEkSIAo8nC0xnMgcWKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJENhoDSSNZgQIISwEVEkRXAgBMiAJbiAJhF0cCiAJrJRJBAA0pSwNnMgcWKExQsCJDSYEoEkEAECtLA1BJvUUBFERLAr9C/+BJgTISQQARJwVLA1BJvUUBFERLAr9C/8hJgTwSQQARJwZLA1BJvUUBFERLAr9C/7BJgUYSQQAQKksDUEm9RQEUREsCv0L/mUmBUBJB/5InB0sDUEm9RQEUREsCv0L/gTYaAUkVIhJENhoCSU4CFSQSRIgBtYgBuxdHAogBxUklE0SBKBJBABQrSwJQSb1FAUS8SDIHFihMULAiQ0mBMhJBAA8nBUsCUEm9RQFEvEhC/+FJgTwSQQAPJwZLAlBJvUUBRLxIQv/LSYFGEkEADipLAlBJvUUBRLxIQv+2SYFQEkH/rycHSwJQSb1FAUS8SEL/oDYaAUkVIhJEI1MqMQCIAPJEJwhMZzIHFihMULAiQyMpZUQoTFCwIkM2GgFJFSQSRCtLAYgAzCcFSwKIAMUnBksDiAC+KksEiAC4JwdPBYgAsYABACNPBlQiTwVUgQJPBFSBA08DVIEETwJUKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJEF0mIAMglgwUoMjxGUE8GjgYATQA/ADAAIQATAAEAJwdLAVBJvUUBRL5IKExQsCJDKksBUEm9RQFEvkhC/+wnBksBUEm9RQFEvkhC/90nBUsBUEm9RQFEvkhC/84rSwFQSb1FAUS+SEL/wIAQAAAAAAAAAAAAAAAAAAAAAEL/q4oCAYAAi/6L/1BJvUUBQQAgiwG+RCNbMgdJjAAOQQARiwG+RIEIW4sAD0EABCKMAIkjQv/5MQAjKWVEEkSJIycMZUQURIkjJwhlRBREiYoBAIv/JRJAACiL/4EoEkAAIIv/gTISQAAYi/+BPBJAABCL/4FGEkAACIv/gVASQQADIkSJI0L/+g==", "clear": "C4EBQw=="}, "desc": "\n Accounting Module for testing\n ", "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgMjAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDUyMzIzMDIzIDB4NTIzNzMwMjMgMHg1MjM0MzAyMyAweDUyMzMzMDIzIDB4NTIzNTMwMjMgMHg1MjM2MzAyMyAweDUyMzgzMDIzICJhc3NldF9zdXNwZW5kZWQiICJjaXJjdWxhdGluZ191bml0cyIgInN0YXR1cyIgMHg1MjMyMzUyMyAiYXNzZXRfZGVmYXVsdGVkIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwLTMxCiAgICAvLyAjIFJCQUMgUm9sZXMKICAgIC8vIHNlbGYuYXJyYW5nZXIgPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX0FSUkFOR0VSKQogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIKICAgIC8vIHNlbGYub3BfZGFlbW9uID0gR2xvYmFsU3RhdGUoQWNjb3VudCgpLCBrZXk9Y3N0LlBSRUZJWF9JRF9PUF9EQUVNT04pCiAgICBieXRlYyAxMSAvLyAweDUyMzIzNTIzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NDctNDgKICAgIC8vICMgRC1BU0EgR292ZXJuYW5jZQogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBGYWxzZQogICAgYnl0ZWMgOCAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgaW50Y18xIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NDkKICAgIC8vIHNlbGYuYXNzZXRfZGVmYXVsdGVkID0gRmFsc2UKICAgIGJ5dGVjIDEyIC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxOQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IFVJbnQ2NCgpCiAgICBwdXNoYnl0ZXMgInRvdGFsX3VuaXRzIgogICAgaW50Y18xIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjAKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgPSBVSW50NjQoKQogICAgYnl0ZWMgOSAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMQogICAgLy8gc2VsZi51bml0X3ZhbHVlID0gVUludDY0KCkKICAgIHB1c2hieXRlcyAidW5pdF92YWx1ZSIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIyCiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChlbm0uU1RBVFVTX0lOQUNUSVZFKQogICAgYnl0ZWMgMTAgLy8gInN0YXR1cyIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfYWNjb3VudGluZy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBNb2NrQWNjb3VudGluZ01vZHVsZShBY2NvdW50aW5nTW9kdWxlKToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2NyZWF0ZUAyMgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZGMwNjNiMzUgMHgxNGZjMTBlZiAweDRjMTEzZWQ1IDB4NzRhNzI5N2YgMHgxMDVjMTg0ZSAweDgyZjcxYjJkIDB4ZWYwNGY1ZDMgMHgwM2I4MzMyOSAweDNkYmU4MGJkIDB4ZGY1NGU4MmMgMHgwMTBjODI5OSAweDc0MDZhY2QyIDB4YzNlNGIyOTcgLy8gbWV0aG9kICJhY2NvdW50X2dvdl9zdXNwZW5zaW9uKGFkZHJlc3MsYm9vbCl1aW50NjQiLCBtZXRob2QgImFjY291bnRfb3BlbihhZGRyZXNzLGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhY2NvdW50X2Nsb3NlKGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3MoYWRkcmVzcyxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAiYWNjb3VudF9nZXRfaW5mbyhhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wpIiwgbWV0aG9kICJyYmFjX3JvdGF0ZV9hcnJhbmdlcihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19zZXRfb3BfZGFlbW9uKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2Fzc2lnbl9yb2xlKHVpbnQ4LGFkZHJlc3MsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19yZXZva2Vfcm9sZSh1aW50OCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbihib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV9jb25maWcodWludDgsYWRkcmVzcykodWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBhY2NvdW50X2dvdl9zdXNwZW5zaW9uIGFjY291bnRfb3BlbiBhY2NvdW50X2Nsb3NlIGFjY291bnRfdXBkYXRlX3BheW1lbnRfYWRkcmVzcyBhY2NvdW50X2dldF9pbmZvIHJiYWNfcm90YXRlX2FycmFuZ2VyIHJiYWNfc2V0X29wX2RhZW1vbiByYmFjX2Fzc2lnbl9yb2xlIHJiYWNfcmV2b2tlX3JvbGUgcmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbiByYmFjX2dldF9hcnJhbmdlciByYmFjX2dldF9hZGRyZXNzX3JvbGVzIHJiYWNfZ2V0X3JvbGVfY29uZmlnCiAgICBlcnIKCm1haW5fY3JlYXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX2FjY291bnRpbmcvY29udHJhY3QucHk6MTQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfYWNjb3VudGluZy9jb250cmFjdC5weToxNgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjXzEgLy8gMHg1MjMyMzAyMwogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9hY2NvdW50aW5nL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9nb3Zfc3VzcGVuc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfZ292X3N1c3BlbnNpb246CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6OTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18xIC8vIDAKICAgIGdldGJpdAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojc3CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hdXRob3JpdHksIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTozMQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWMgNCAvLyAweDUyMzMzMDIzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE0CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGR1cAogICAgcHVzaGludCA1NgogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNTYKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTE1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9vcGVuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWNjb3VudF9vcGVuOgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyOAogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGVubS5TVEFUVVNfRU5ERUQKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyAxMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMjAwCiAgICA9PQogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjEzOQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnN0YXR1c19pc19lbmRlZCgpLCBlcnIuVU5BVVRIT1JJWkVECiAgICAhCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNDAKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE0MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQyCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIG5vdCBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWMgNCAvLyAweDUyMzMzMDIzCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTQ2CiAgICAvLyB1bml0cz1VSW50NjQoMCksCiAgICBpbnRjXzEgLy8gMAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE0NC0xNTAKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdID0gdHlwLkFjY291bnRJbmZvKAogICAgLy8gICAgIHBheW1lbnRfYWRkcmVzcz1wYXltZW50X2FkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM9VUludDY0KDApLAogICAgLy8gICAgIHVuaXRfdmFsdWU9VUludDY0KDApLAogICAgLy8gICAgIHBhaWRfY291cG9ucz1VSW50NjQoMCksCiAgICAvLyAgICAgc3VzcGVuZGVkPUZhbHNlLAogICAgLy8gKQogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwCiAgICBjb25jYXQKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNTEKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9jbG9zZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfY2xvc2U6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzEKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzMzMwMjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTc0CiAgICAvLyBjbG9zZWRfdW5pdHMgPSBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTc1CiAgICAvLyBkZWwgc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE3NgogICAgLy8gc2VsZi5jaXJjdWxhdGluZ191bml0cyAtPSBjbG9zZWRfdW5pdHMKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyA5IC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ191bml0cyBleGlzdHMKICAgIHN3YXAKICAgIC0KICAgIGJ5dGVjIDkgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDgKICAgIC8vIGlmIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgPT0gVUludDY0KDApOgogICAgYm56IGFjY291bnRfY2xvc2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6NDkKICAgIC8vIHNlbGYuc3RhdHVzID0gVUludDY0KGVubS5TVEFUVVNfRU5ERUQpCiAgICBieXRlYyAxMCAvLyAic3RhdHVzIgogICAgcHVzaGludCAyMDAKICAgIGFwcF9nbG9iYWxfcHV0CgphY2NvdW50X2Nsb3NlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToxNzgKICAgIC8vIHJldHVybiBjbG9zZWRfdW5pdHMsIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLmFjY291bnRpbmcuQWNjb3VudGluZ01vZHVsZS5hY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3Nbcm91dGluZ10oKSAtPiB2b2lkOgphY2NvdW50X3VwZGF0ZV9wYXltZW50X2FkZHJlc3M6CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjAwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBob2xkaW5nX2FkZHJlc3MsIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjAxCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDIKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9zdXNwZW5kZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzMzMwMjMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcyA9IHBheW1lbnRfYWRkcmVzcwogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIG1vZHVsZXMvYWNjb3VudGluZy5weToyMDUKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjE4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5hY2NvdW50aW5nLkFjY291bnRpbmdNb2R1bGUuYWNjb3VudF9nZXRfaW5mb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY291bnRfZ2V0X2luZm86CiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjMxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzMzMwMjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL2FjY291bnRpbmcucHk6MjIyCiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9hY2NvdW50aW5nLnB5OjIwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19yb3RhdGVfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX3JvdGF0ZV9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTU4CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTU5CiAgICAvLyBzZWxmLmFycmFuZ2VyLnZhbHVlID0gbmV3X2FycmFuZ2VyCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTYwCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfc2V0X29wX2RhZW1vbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfc2V0X29wX2RhZW1vbjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTczCiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc0CiAgICAvLyBzZWxmLm9wX2RhZW1vbi52YWx1ZSA9IGFkZHJlc3MKICAgIGJ5dGVjIDExIC8vIDB4NTIzMjM1MjMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfYXNzaWduX3JvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2Fzc2lnbl9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTk5CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAwCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDEKICAgIC8vIHNlbGYuX2Fzc2VydF92YWxpZF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICBkdXBuIDIKICAgIGNhbGxzdWIgX2Fzc2VydF92YWxpZF9yb2xlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTAxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICBpbnRjXzMgLy8gMjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwMgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcwogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAzCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA3CiAgICAvLyBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gc2VsZi5fdXBzZXJ0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCBjb25maWcpCiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTAKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNSAvLyAweDUyMzUzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTEKICAgIC8vIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTMKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpOgogICAgZHVwCiAgICBwdXNoaW50IDYwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA2IC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNQogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgZHVwCiAgICBwdXNoaW50IDcwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmF1dGhvcml0eSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExOQogICAgLy8gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTIxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgZHVwCiAgICBwdXNoaW50IDgwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNyAvLyAweDUyMzgzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3Jldm9rZV9yb2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19yZXZva2Vfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjQKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjUKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNgogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjYKICAgIC8vIGFzc2VydCByb2xlX2lkICE9IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksIGVyci5JTlZBTElEX1JPTEUKICAgIGR1cAogICAgaW50Y18zIC8vIDIwCiAgICAhPQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI5CiAgICAvLyBkZWwgc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyOAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzIKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA1IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMwogICAgLy8gZGVsIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNiAvLyAweDUyMzYzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzcKICAgIC8vIGRlbCBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQxCiAgICAvLyBkZWwgc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0MwogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIGR1cAogICAgcHVzaGludCA4MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNyAvLyAweDUyMzgzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDUKICAgIC8vIGRlbCBzZWxmLmludGVyZXN0X29yYWNsZVtyb2xlX2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGIgcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dvdl9hc3NldF9zdXNwZW5zaW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kICAjIFRPRE86IFVwZGF0ZSBzcGVjcyBhbmQgYWRkIHRlc3QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NgogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGJ5dGVjIDggLy8gImFzc2V0X3N1c3BlbmRlZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ3CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCAgIyBUT0RPOiBVcGRhdGUgc3BlY3MgYW5kIGFkZCB0ZXN0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTcKICAgIC8vIHJldHVybiBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9hZGRyZXNzX3JvbGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfYWRkcmVzc19yb2xlczoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjczCiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmFjY291bnRfbWFuYWdlciwgYWRkcmVzcyksCiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIGRpZyAxCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NAogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5wcmltYXJ5X2RlYWxlciwgYWRkcmVzcyksCiAgICBieXRlYyA1IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDYgLy8gMHg1MjM2MzAyMwogICAgZGlnIDMKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc2CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgYWRkcmVzcyksCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyA0CiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGFkZHJlc3MpLAogICAgYnl0ZWMgNyAvLyAweDUyMzgzMDIzCiAgICB1bmNvdmVyIDUKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA2CiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAxCiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgcHVzaGludCAyCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGludCA0CiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfcm9sZV9jb25maWc6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk0CiAgICAvLyByb2xlID0gcm9sZV9pZC5hc191aW50NjQoKQogICAgYnRvaQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5NQogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZSkKICAgIGR1cAogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTcKICAgIC8vIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMQogICAgLy8gY2FzZSBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIHB1c2hpbnRzIDQwIDUwIDYwIDcwIDgwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk2LTMyNwogICAgLy8gbWF0Y2ggcm9sZToKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICAvLyAgICAgICAgIHJldHVybiB0eXAuUm9sZUNvbmZpZygKICAgIC8vICAgICAgICAgICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICAgICAgICAgKQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSk6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmF1dGhvcml0eVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5pbnRlcmVzdF9vcmFjbGUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuSU5WQUxJRF9ST0xFKQogICAgdW5jb3ZlciA2CiAgICBtYXRjaCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDIgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMUAzIHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzJANCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDUgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNEA2IHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyNwogICAgLy8gb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICBlcnIgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDcgLy8gMHg1MjM4MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMi0zMjQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTgKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMxNy0zMTkKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmF1dGhvcml0eSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIwCiAgICAvLyByZXR1cm4gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEzCiAgICAvLyBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgNiAvLyAweDUyMzYzMDIzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTUKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEyLTMxNAogICAgLy8gYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgIHNlbGYudHJ1c3RlZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzE1CiAgICAvLyByZXR1cm4gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMkA0OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwOAogICAgLy8gc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICBieXRlYyA1IC8vIDB4NTIzNTMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEwCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDkKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMi0zMDQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmFjY291bnRfbWFuYWdlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzA1CiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk4LTMwMAogICAgLy8gcmV0dXJuIHR5cC5Sb2xlQ29uZmlnKAogICAgLy8gICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3JvbGVfaXNfYWN0aXZlKHJvbGVfbWFwOiBieXRlcywgcm9sZV9hZGRyZXNzOiBieXRlcykgLT4gdWludDY0Ogpfcm9sZV9pc19hY3RpdmU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIGRlZiBfcm9sZV9pc19hY3RpdmUoc2VsZiwgcm9sZV9tYXA6IHR5cC5SYmFjUm9sZSwgcm9sZV9hZGRyZXNzOiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OC02MgogICAgLy8gcmV0dXJuIHNlbGYuX2hhc19yb2xlKHJvbGVfbWFwLCByb2xlX2FkZHJlc3MpIGFuZCAoCiAgICAvLyAgICAgcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyAgICAgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICAgICA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICAvLyApCiAgICBieiBfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTkKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjAKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIDw9CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjEKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MQogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjAtNjEKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMAogICAgPj0KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX21lcmdlQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTgtNjIKICAgIC8vIHJldHVybiBzZWxmLl9oYXNfcm9sZShyb2xlX21hcCwgcm9sZV9hZGRyZXNzKSBhbmQgKAogICAgLy8gICAgIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpIC0+IHZvaWQ6CmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjUyCiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzID09IHNlbGYuYXJyYW5nZXIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcnJhbmdlciBleGlzdHMKICAgID09CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjgzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYXNzZXRfZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgMTIgLy8gImFzc2V0X2RlZmF1bHRlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9kZWZhdWx0ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gRGVmYXVsdGVkCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5hc3NlcnRfaXNfbm90X2Fzc2V0X3N1c3BlbmRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3RfYXNzZXRfc3VzcGVuZGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg2CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYXNzZXRfc3VzcGVuZGVkLCBlcnIuU1VTUEVOREVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgOCAvLyAiYXNzZXRfc3VzcGVuZGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X3N1c3BlbmRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBTdXNwZW5kZWQgb3BlcmF0aW9ucwogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2Fzc2VydF92YWxpZF9yb2xlKHJvbGVfaWQ6IHVpbnQ2NCkgLT4gdm9pZDoKX2Fzc2VydF92YWxpZF9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg4CiAgICAvLyBkZWYgX2Fzc2VydF92YWxpZF9yb2xlKHNlbGYsIHJvbGVfaWQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkwCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgaW50Y18zIC8vIDIwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkxCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTIKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkzCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk0CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANgogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTUKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgcHVzaGludCA4MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9mYWxzZUA3CgpfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDY6CiAgICBpbnRjXzAgLy8gMQoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfbWVyZ2VAODoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBhc3NlcnQgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKICAgIHJldHN1YgoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMSAvLyAwCiAgICBiIF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX21lcmdlQDgK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [1281], "errorMessage": "Defaulted"}, {"pc": [329, 402, 455, 538, 568], "errorMessage": "Invalid account holding address"}, {"pc": [706, 730, 754, 777, 801, 856, 884, 906, 927, 949, 1125, 1142, 1157, 1172, 1186], "errorMessage": "Invalid account role address"}, {"pc": [841, 1115, 1342], "errorMessage": "Invalid role identifier"}, {"pc": [319, 374, 385, 443, 522, 971, 1273], "errorMessage": "Not authorized"}, {"pc": [1289], "errorMessage": "Suspended operations"}, {"pc": [1233, 1248], "errorMessage": "check BoxMap entry exists"}, {"pc": [988, 1271], "errorMessage": "check self.arranger exists"}, {"pc": [1279], "errorMessage": "check self.asset_defaulted exists"}, {"pc": [1287], "errorMessage": "check self.asset_suspended exists"}, {"pc": [470], "errorMessage": "check self.circulating_units exists"}, {"pc": [379], "errorMessage": "check self.status exists"}, {"pc": [647], "errorMessage": "invalid array length header"}, {"pc": [310, 962], "errorMessage": "invalid number of bytes for arc4.bool"}, {"pc": [655], "errorMessage": "invalid number of bytes for arc4.dynamic_array"}, {"pc": [302, 359, 367, 436, 508, 516, 559, 584, 607, 641, 825, 1002, 1085], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [631, 815, 1075], "errorMessage": "invalid number of bytes for arc4.uint8"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}"""
-APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON)
-
-def _parse_abi_args(args: object | None = None) -> list[object] | None:
- """Helper to parse ABI args into the format expected by underlying client"""
- if args is None:
- return None
-
- def convert_dataclass(value: object) -> object:
- if dataclasses.is_dataclass(value):
- return tuple(convert_dataclass(getattr(value, field.name)) for field in dataclasses.fields(value))
- elif isinstance(value, (list, tuple)):
- return type(value)(convert_dataclass(item) for item in value)
- return value
-
- match args:
- case tuple():
- method_args = list(args)
- case _ if dataclasses.is_dataclass(args):
- method_args = [getattr(args, field.name) for field in dataclasses.fields(args)]
- case _:
- raise ValueError("Invalid 'args' type. Expected 'tuple' or 'TypedDict' for respective typed arguments.")
-
- return [
- convert_dataclass(arg) if not isinstance(arg, algokit_utils.AppMethodCallTransactionArgument) else arg
- for arg in method_args
- ] if method_args else None
-
-def _init_dataclass(cls: type, data: dict) -> object:
- """
- Recursively instantiate a dataclass of type `cls` from `data`.
-
- For each field on the dataclass, if the field type is also a dataclass
- and the corresponding data is a dict, instantiate that field recursively.
- """
- field_values = {}
- for field in dataclasses.fields(cls):
- field_value = data.get(field.name)
- # Check if the field expects another dataclass and the value is a dict.
- if dataclasses.is_dataclass(field.type) and isinstance(field_value, dict):
- field_values[field.name] = _init_dataclass(typing.cast(type, field.type), field_value)
- else:
- field_values[field.name] = field_value
- return cls(**field_values)
-
-@dataclasses.dataclass(frozen=True)
-class AccountInfo:
- """Struct for AccountInfo"""
- payment_address: str
- units: int
- unit_value: int
- paid_coupons: int
- suspended: bool
-
-@dataclasses.dataclass(frozen=True)
-class RoleConfig:
- """Struct for RoleConfig"""
- role_validity_start: int
- role_validity_end: int
-
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountGovSuspensionArgs:
- """Dataclass for account_gov_suspension arguments"""
- holding_address: str
- suspended: bool
-
- @property
- def abi_method_signature(self) -> str:
- return "account_gov_suspension(address,bool)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountOpenArgs:
- """Dataclass for account_open arguments"""
- holding_address: str
- payment_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_open(address,address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountCloseArgs:
- """Dataclass for account_close arguments"""
- holding_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_close(address)(uint64,uint64)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountUpdatePaymentAddressArgs:
- """Dataclass for account_update_payment_address arguments"""
- holding_address: str
- payment_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_update_payment_address(address,address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class AccountGetInfoArgs:
- """Dataclass for account_get_info arguments"""
- holding_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "account_get_info(address)(address,uint64,uint64,uint64,bool)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacRotateArrangerArgs:
- """Dataclass for rbac_rotate_arranger arguments"""
- new_arranger: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_rotate_arranger(address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacSetOpDaemonArgs:
- """Dataclass for rbac_set_op_daemon arguments"""
- address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_set_op_daemon(address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacAssignRoleArgs:
- """Dataclass for rbac_assign_role arguments"""
- role_id: int
- role_address: str
- config: bytes | str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_assign_role(uint8,address,byte[])uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacRevokeRoleArgs:
- """Dataclass for rbac_revoke_role arguments"""
- role_id: int
- role_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_revoke_role(uint8,address)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGovAssetSuspensionArgs:
- """Dataclass for rbac_gov_asset_suspension arguments"""
- suspended: bool
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_gov_asset_suspension(bool)uint64"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGetAddressRolesArgs:
- """Dataclass for rbac_get_address_roles arguments"""
- address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)"
-
-@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGetRoleConfigArgs:
- """Dataclass for rbac_get_role_config arguments"""
- role_id: int
- role_address: str
-
- @property
- def abi_method_signature(self) -> str:
- return "rbac_get_role_config(uint8,address)(uint64,uint64)"
-
-
-class MockAccountingModuleParams:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": method_args,
- }))
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": method_args,
- }))
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": method_args,
- }))
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": method_args,
- }))
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": method_args,
- }))
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": method_args,
- }))
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": method_args,
- }))
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": method_args,
- }))
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": method_args,
- }))
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- }))
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": method_args,
- }))
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.AppCallMethodCallParams:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def clear_state(
- self,
- params: algokit_utils.AppClientBareCallParams | None = None,
-
- ) -> algokit_utils.AppCallParams:
- return self.app_client.params.bare.clear_state(
- params,
-
- )
-
-
-class MockAccountingModuleCreateTransactionParams:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": method_args,
- }))
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": method_args,
- }))
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": method_args,
- }))
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": method_args,
- }))
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": method_args,
- }))
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": method_args,
- }))
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": method_args,
- }))
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": method_args,
- }))
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": method_args,
- }))
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
-
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- }))
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": method_args,
- }))
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> algokit_utils.BuiltTransactions:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": method_args,
- }))
-
- def clear_state(
- self,
- params: algokit_utils.AppClientBareCallParams | None = None,
-
- ) -> Transaction:
- return self.app_client.create_transaction.bare.clear_state(
- params,
-
- )
-
-
-class MockAccountingModuleSend:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[tuple[int, int]]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[tuple[int, int]], parsed_response)
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[AccountInfo]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(AccountInfo, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[AccountInfo], parsed_response)
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[int]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[str]:
-
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[str], parsed_response)
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[tuple[bool, bool, bool, bool, bool]]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = response
- return typing.cast(algokit_utils.SendAppTransactionResult[tuple[bool, bool, bool, bool, bool]], parsed_response)
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[RoleConfig]:
- method_args = _parse_abi_args(args)
- params = params or algokit_utils.CommonAppCallParams()
- response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": method_args,
- }), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(RoleConfig, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[RoleConfig], parsed_response)
-
- def clear_state(
- self,
- params: algokit_utils.AppClientBareCallParams | None = None,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[algokit_utils.ABIReturn]:
- return self.app_client.send.bare.clear_state(
- params,
- send_params=send_params,
- )
-
-
-class GlobalStateValue(typing.TypedDict):
- """Shape of global_state state key values"""
- arranger: str
- op_daemon: str
- asset_suspended: int
- asset_defaulted: int
- total_units: int
- circulating_units: int
- unit_value: int
- status: int
-
-class MockAccountingModuleState:
- """Methods to access state for the current MockAccountingModule app"""
-
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- @property
- def global_state(
- self
- ) -> "_GlobalState":
- """Methods to access global_state for the current app"""
- return _GlobalState(self.app_client)
-
- @property
- def box(
- self
- ) -> "_BoxState":
- """Methods to access box for the current app"""
- return _BoxState(self.app_client)
-
-class _GlobalState:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- # Pre-generated mapping of value types to their struct classes
- self._struct_classes: dict[str, typing.Type[typing.Any]] = {}
-
- def get_all(self) -> GlobalStateValue:
- """Get all current keyed values from global_state state"""
- result = self.app_client.state.global_state.get_all()
- if not result:
- return typing.cast(GlobalStateValue, {})
-
- converted = {}
- for key, value in result.items():
- key_info = self.app_client.app_spec.state.keys.global_state.get(key)
- struct_class = self._struct_classes.get(key_info.value_type) if key_info else None
- converted[key] = (
- _init_dataclass(struct_class, value) if struct_class and isinstance(value, dict)
- else value
- )
- return typing.cast(GlobalStateValue, converted)
-
- @property
- def arranger(self) -> str:
- """Get the current value of the arranger key in global_state state"""
- value = self.app_client.state.global_state.get_value("arranger")
- if isinstance(value, dict) and "address" in self._struct_classes:
- return _init_dataclass(self._struct_classes["address"], value) # type: ignore
- return typing.cast(str, value)
-
- @property
- def op_daemon(self) -> str:
- """Get the current value of the op_daemon key in global_state state"""
- value = self.app_client.state.global_state.get_value("op_daemon")
- if isinstance(value, dict) and "address" in self._struct_classes:
- return _init_dataclass(self._struct_classes["address"], value) # type: ignore
- return typing.cast(str, value)
-
- @property
- def asset_suspended(self) -> int:
- """Get the current value of the asset_suspended key in global_state state"""
- value = self.app_client.state.global_state.get_value("asset_suspended")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def asset_defaulted(self) -> int:
- """Get the current value of the asset_defaulted key in global_state state"""
- value = self.app_client.state.global_state.get_value("asset_defaulted")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def total_units(self) -> int:
- """Get the current value of the total_units key in global_state state"""
- value = self.app_client.state.global_state.get_value("total_units")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def circulating_units(self) -> int:
- """Get the current value of the circulating_units key in global_state state"""
- value = self.app_client.state.global_state.get_value("circulating_units")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def unit_value(self) -> int:
- """Get the current value of the unit_value key in global_state state"""
- value = self.app_client.state.global_state.get_value("unit_value")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
- @property
- def status(self) -> int:
- """Get the current value of the status key in global_state state"""
- value = self.app_client.state.global_state.get_value("status")
- if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
- return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
- return typing.cast(int, value)
-
-class _BoxState:
- def __init__(self, app_client: algokit_utils.AppClient):
- self.app_client = app_client
-
- # Pre-generated mapping of value types to their struct classes
- self._struct_classes: dict[str, typing.Type[typing.Any]] = {
- "RoleConfig": RoleConfig,
- "AccountInfo": AccountInfo
- }
-
- def get_all(self) -> dict[str, typing.Any]:
- """Get all current keyed values from box state"""
- result = self.app_client.state.box.get_all()
- if not result:
- return {}
-
- converted = {}
- for key, value in result.items():
- key_info = self.app_client.app_spec.state.keys.box.get(key)
- struct_class = self._struct_classes.get(key_info.value_type) if key_info else None
- converted[key] = (
- _init_dataclass(struct_class, value) if struct_class and isinstance(value, dict)
- else value
- )
- return converted
-
- @property
- def account_manager(self) -> "_MapState[str, RoleConfig]":
- """Get values from the account_manager map in box state"""
- return _MapState(
- self.app_client.state.box,
- "account_manager",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def primary_dealer(self) -> "_MapState[str, RoleConfig]":
- """Get values from the primary_dealer map in box state"""
- return _MapState(
- self.app_client.state.box,
- "primary_dealer",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def trustee(self) -> "_MapState[str, RoleConfig]":
- """Get values from the trustee map in box state"""
- return _MapState(
- self.app_client.state.box,
- "trustee",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def authority(self) -> "_MapState[str, RoleConfig]":
- """Get values from the authority map in box state"""
- return _MapState(
- self.app_client.state.box,
- "authority",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def interest_oracle(self) -> "_MapState[str, RoleConfig]":
- """Get values from the interest_oracle map in box state"""
- return _MapState(
- self.app_client.state.box,
- "interest_oracle",
- self._struct_classes.get("RoleConfig")
- )
-
- @property
- def account(self) -> "_MapState[str, AccountInfo]":
- """Get values from the account map in box state"""
- return _MapState(
- self.app_client.state.box,
- "account",
- self._struct_classes.get("AccountInfo")
- )
-
-_KeyType = typing.TypeVar("_KeyType")
-_ValueType = typing.TypeVar("_ValueType")
-
-class _AppClientStateMethodsProtocol(typing.Protocol):
- def get_map(self, map_name: str) -> dict[typing.Any, typing.Any]:
- ...
- def get_map_value(self, map_name: str, key: typing.Any) -> typing.Any | None:
- ...
-
-class _MapState(typing.Generic[_KeyType, _ValueType]):
- """Generic class for accessing state maps with strongly typed keys and values"""
-
- def __init__(self, state_accessor: _AppClientStateMethodsProtocol, map_name: str,
- struct_class: typing.Type[_ValueType] | None = None):
- self._state_accessor = state_accessor
- self._map_name = map_name
- self._struct_class = struct_class
-
- def get_map(self) -> dict[_KeyType, _ValueType]:
- """Get all current values in the map"""
- result = self._state_accessor.get_map(self._map_name)
- if self._struct_class and result:
- return {k: _init_dataclass(self._struct_class, v) if isinstance(v, dict) else v
- for k, v in result.items()} # type: ignore
- return typing.cast(dict[_KeyType, _ValueType], result or {})
-
- def get_value(self, key: _KeyType) -> _ValueType | None:
- """Get a value from the map by key"""
- key_value = dataclasses.asdict(key) if dataclasses.is_dataclass(key) else key # type: ignore
- value = self._state_accessor.get_map_value(self._map_name, key_value)
- if value is not None and self._struct_class and isinstance(value, dict):
- return _init_dataclass(self._struct_class, value) # type: ignore
- return typing.cast(_ValueType | None, value)
-
-
-class MockAccountingModuleClient:
- """Client for interacting with MockAccountingModule smart contract"""
-
- @typing.overload
- def __init__(self, app_client: algokit_utils.AppClient) -> None: ...
-
- @typing.overload
- def __init__(
- self,
- *,
- algorand: _AlgoKitAlgorandClient,
- app_id: int,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> None: ...
-
- def __init__(
- self,
- app_client: algokit_utils.AppClient | None = None,
- *,
- algorand: _AlgoKitAlgorandClient | None = None,
- app_id: int | None = None,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> None:
- if app_client:
- self.app_client = app_client
- elif algorand and app_id:
- self.app_client = algokit_utils.AppClient(
- algokit_utils.AppClientParams(
- algorand=algorand,
- app_spec=APP_SPEC,
- app_id=app_id,
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- )
- )
- else:
- raise ValueError("Either app_client or algorand and app_id must be provided")
-
- self.params = MockAccountingModuleParams(self.app_client)
- self.create_transaction = MockAccountingModuleCreateTransactionParams(self.app_client)
- self.send = MockAccountingModuleSend(self.app_client)
- self.state = MockAccountingModuleState(self.app_client)
-
- @staticmethod
- def from_creator_and_name(
- creator_address: str,
- app_name: str,
- algorand: _AlgoKitAlgorandClient,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ignore_cache: bool | None = None,
- app_lookup_cache: algokit_utils.ApplicationLookup | None = None,
- ) -> "MockAccountingModuleClient":
- return MockAccountingModuleClient(
- algokit_utils.AppClient.from_creator_and_name(
- creator_address=creator_address,
- app_name=app_name,
- app_spec=APP_SPEC,
- algorand=algorand,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- ignore_cache=ignore_cache,
- app_lookup_cache=app_lookup_cache,
- )
- )
-
- @staticmethod
- def from_network(
- algorand: _AlgoKitAlgorandClient,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> "MockAccountingModuleClient":
- return MockAccountingModuleClient(
- algokit_utils.AppClient.from_network(
- app_spec=APP_SPEC,
- algorand=algorand,
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- )
- )
-
- @property
- def app_id(self) -> int:
- return self.app_client.app_id
-
- @property
- def app_address(self) -> str:
- return self.app_client.app_address
-
- @property
- def app_name(self) -> str:
- return self.app_client.app_name
-
- @property
- def app_spec(self) -> algokit_utils.Arc56Contract:
- return self.app_client.app_spec
-
- @property
- def algorand(self) -> _AlgoKitAlgorandClient:
- return self.app_client.algorand
-
- def clone(
- self,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> "MockAccountingModuleClient":
- return MockAccountingModuleClient(
- self.app_client.clone(
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- approval_source_map=approval_source_map,
- clear_source_map=clear_source_map,
- )
- )
-
- def new_group(self) -> "MockAccountingModuleComposer":
- return MockAccountingModuleComposer(self)
-
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_gov_suspension(address,bool)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_open(address,address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_close(address)(uint64,uint64)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> tuple[int, int] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_update_payment_address(address,address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["account_get_info(address)(address,uint64,uint64,uint64,bool)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> AccountInfo | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_rotate_arranger(address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_set_op_daemon(address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_assign_role(uint8,address,byte[])uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_revoke_role(uint8,address)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_gov_asset_suspension(bool)uint64"],
- return_value: algokit_utils.ABIReturn | None
- ) -> int | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_get_arranger()address"],
- return_value: algokit_utils.ABIReturn | None
- ) -> str | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_get_address_roles(address)(bool,bool,bool,bool,bool)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> tuple[bool, bool, bool, bool, bool] | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: typing.Literal["rbac_get_role_config(uint8,address)(uint64,uint64)"],
- return_value: algokit_utils.ABIReturn | None
- ) -> RoleConfig | None: ...
- @typing.overload
- def decode_return_value(
- self,
- method: str,
- return_value: algokit_utils.ABIReturn | None
- ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | None: ...
-
- def decode_return_value(
- self,
- method: str,
- return_value: algokit_utils.ABIReturn | None
- ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | None | AccountInfo | RoleConfig | int | str | tuple[bool, bool, bool, bool, bool] | tuple[int, int]:
- """Decode ABI return value for the given method."""
- if return_value is None:
- return None
-
- arc56_method = self.app_spec.get_arc56_method(method)
- decoded = return_value.get_arc56_value(arc56_method, self.app_spec.structs)
-
- # If method returns a struct, convert the dict to appropriate dataclass
- if (arc56_method and
- arc56_method.returns and
- arc56_method.returns.struct and
- isinstance(decoded, dict)):
- struct_class = globals().get(arc56_method.returns.struct)
- if struct_class:
- return struct_class(**typing.cast(dict, decoded))
- return decoded
-
-
-@dataclasses.dataclass(frozen=True)
-class MockAccountingModuleBareCallCreateParams(algokit_utils.AppClientBareCallCreateParams):
- """Parameters for creating MockAccountingModule contract with bare calls"""
- on_complete: typing.Literal[OnComplete.NoOpOC] | None = None
-
- def to_algokit_utils_params(self) -> algokit_utils.AppClientBareCallCreateParams:
- return algokit_utils.AppClientBareCallCreateParams(**self.__dict__)
-
-class MockAccountingModuleFactory(algokit_utils.TypedAppFactoryProtocol[MockAccountingModuleBareCallCreateParams, None, None]):
- """Factory for deploying and managing MockAccountingModuleClient smart contracts"""
-
- def __init__(
- self,
- algorand: _AlgoKitAlgorandClient,
- *,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- version: str | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None,
- ):
- self.app_factory = algokit_utils.AppFactory(
- params=algokit_utils.AppFactoryParams(
- algorand=algorand,
- app_spec=APP_SPEC,
- app_name=app_name,
- default_sender=default_sender,
- default_signer=default_signer,
- version=version,
- compilation_params=compilation_params,
- )
- )
- self.params = MockAccountingModuleFactoryParams(self.app_factory)
- self.create_transaction = MockAccountingModuleFactoryCreateTransaction(self.app_factory)
- self.send = MockAccountingModuleFactorySend(self.app_factory)
-
- @property
- def app_name(self) -> str:
- return self.app_factory.app_name
-
- @property
- def app_spec(self) -> algokit_utils.Arc56Contract:
- return self.app_factory.app_spec
-
- @property
- def algorand(self) -> _AlgoKitAlgorandClient:
- return self.app_factory.algorand
-
- def deploy(
- self,
- *,
- on_update: algokit_utils.OnUpdate | None = None,
- on_schema_break: algokit_utils.OnSchemaBreak | None = None,
- create_params: MockAccountingModuleBareCallCreateParams | None = None,
- update_params: None = None,
- delete_params: None = None,
- existing_deployments: algokit_utils.ApplicationLookup | None = None,
- ignore_cache: bool = False,
- app_name: str | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None,
- send_params: algokit_utils.SendParams | None = None,
- ) -> tuple[MockAccountingModuleClient, algokit_utils.AppFactoryDeployResult]:
- """Deploy the application"""
- deploy_response = self.app_factory.deploy(
- on_update=on_update,
- on_schema_break=on_schema_break,
- create_params=create_params.to_algokit_utils_params() if create_params else None,
- update_params=update_params,
- delete_params=delete_params,
- existing_deployments=existing_deployments,
- ignore_cache=ignore_cache,
- app_name=app_name,
- compilation_params=compilation_params,
- send_params=send_params,
- )
-
- return MockAccountingModuleClient(deploy_response[0]), deploy_response[1]
-
- def get_app_client_by_creator_and_name(
- self,
- creator_address: str,
- app_name: str,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- ignore_cache: bool | None = None,
- app_lookup_cache: algokit_utils.ApplicationLookup | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> MockAccountingModuleClient:
- """Get an app client by creator address and name"""
- return MockAccountingModuleClient(
- self.app_factory.get_app_client_by_creator_and_name(
- creator_address,
- app_name,
- default_sender,
- default_signer,
- ignore_cache,
- app_lookup_cache,
- approval_source_map,
- clear_source_map,
- )
- )
-
- def get_app_client_by_id(
- self,
- app_id: int,
- app_name: str | None = None,
- default_sender: str | None = None,
- default_signer: TransactionSigner | None = None,
- approval_source_map: SourceMap | None = None,
- clear_source_map: SourceMap | None = None,
- ) -> MockAccountingModuleClient:
- """Get an app client by app ID"""
- return MockAccountingModuleClient(
- self.app_factory.get_app_client_by_id(
- app_id,
- app_name,
- default_sender,
- default_signer,
- approval_source_map,
- clear_source_map,
- )
- )
-
-
-class MockAccountingModuleFactoryParams:
- """Parameters for creating transactions for MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
- self.create = MockAccountingModuleFactoryCreateParams(app_factory)
- self.update = MockAccountingModuleFactoryUpdateParams(app_factory)
- self.delete = MockAccountingModuleFactoryDeleteParams(app_factory)
-
-class MockAccountingModuleFactoryCreateParams:
- """Parameters for 'create' operations of MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateParams:
- """Creates an instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.bare.create(
- algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)),
- compilation_params=compilation_params)
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_gov_suspension(address,bool)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_gov_suspension(address,bool)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_open(address,address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_open(address,address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_close(address)(uint64,uint64) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_close(address)(uint64,uint64)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_update_payment_address(address,address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_update_payment_address(address,address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the account_get_info(address)(address,uint64,uint64,uint64,bool) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "account_get_info(address)(address,uint64,uint64,uint64,bool)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_rotate_arranger(address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_rotate_arranger(address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_set_op_daemon(address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_set_op_daemon(address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_assign_role(uint8,address,byte[])uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_revoke_role(uint8,address)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_revoke_role(uint8,address)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_gov_asset_suspension(bool)uint64 ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_get_arranger(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_arranger()address ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_get_arranger()address",
- "args": None,
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_address_roles(address)(bool,bool,bool,bool,bool) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None
- ) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_role_config(uint8,address)(uint64,uint64) ABI method"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.create(
- algokit_utils.AppFactoryCreateMethodCallParams(
- **{
- **dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
- "args": _parse_abi_args(args),
- }
- ),
- compilation_params=compilation_params
- )
-
-class MockAccountingModuleFactoryUpdateParams:
- """Parameters for 'update' operations of MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
-
- ) -> algokit_utils.AppUpdateParams:
- """Updates an instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.bare.deploy_update(
- algokit_utils.AppClientBareCallParams(**dataclasses.asdict(params)),
- )
-
-class MockAccountingModuleFactoryDeleteParams:
- """Parameters for 'delete' operations of MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
-
- ) -> algokit_utils.AppDeleteParams:
- """Deletes an instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.params.bare.deploy_delete(
- algokit_utils.AppClientBareCallParams(**dataclasses.asdict(params)),
- )
-
-
-class MockAccountingModuleFactoryCreateTransaction:
- """Create transactions for MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
- self.create = MockAccountingModuleFactoryCreateTransactionCreate(app_factory)
-
-
-class MockAccountingModuleFactoryCreateTransactionCreate:
- """Create new instances of MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- ) -> Transaction:
- """Creates a new instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- return self.app_factory.create_transaction.bare.create(
- algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)),
- )
-
-
-class MockAccountingModuleFactorySend:
- """Send calls to MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
- self.create = MockAccountingModuleFactorySendCreate(app_factory)
-
-
-class MockAccountingModuleFactorySendCreate:
- """Send create calls to MockAccountingModule contract"""
-
- def __init__(self, app_factory: algokit_utils.AppFactory):
- self.app_factory = app_factory
-
- def bare(
- self,
- *,
- params: algokit_utils.CommonAppCallCreateParams | None = None,
- send_params: algokit_utils.SendParams | None = None,
- compilation_params: algokit_utils.AppClientCompilationParams | None = None,
- ) -> tuple[MockAccountingModuleClient, algokit_utils.SendAppCreateTransactionResult]:
- """Creates a new instance using a bare call"""
- params = params or algokit_utils.CommonAppCallCreateParams()
- result = self.app_factory.send.bare.create(
- algokit_utils.AppFactoryCreateParams(**dataclasses.asdict(params)),
- send_params=send_params,
- compilation_params=compilation_params
- )
- return MockAccountingModuleClient(result[0]), result[1]
-
-
-class MockAccountingModuleComposer:
- """Composer for creating transaction groups for MockAccountingModule contract calls"""
-
- def __init__(self, client: "MockAccountingModuleClient"):
- self.client = client
- self._composer = client.algorand.new_group()
- self._result_mappers: list[typing.Callable[[algokit_utils.ABIReturn | None], object] | None] = []
-
- def account_gov_suspension(
- self,
- args: tuple[str, bool] | AccountGovSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_gov_suspension(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_gov_suspension(address,bool)uint64", v
- )
- )
- return self
-
- def account_open(
- self,
- args: tuple[str, str] | AccountOpenArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_open(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_open(address,address)uint64", v
- )
- )
- return self
-
- def account_close(
- self,
- args: tuple[str] | AccountCloseArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_close(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_close(address)(uint64,uint64)", v
- )
- )
- return self
-
- def account_update_payment_address(
- self,
- args: tuple[str, str] | AccountUpdatePaymentAddressArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_update_payment_address(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_update_payment_address(address,address)uint64", v
- )
- )
- return self
-
- def account_get_info(
- self,
- args: tuple[str] | AccountGetInfoArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.account_get_info(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "account_get_info(address)(address,uint64,uint64,uint64,bool)", v
- )
- )
- return self
-
- def rbac_rotate_arranger(
- self,
- args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_rotate_arranger(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_rotate_arranger(address)uint64", v
- )
- )
- return self
-
- def rbac_set_op_daemon(
- self,
- args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_set_op_daemon(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_set_op_daemon(address)uint64", v
- )
- )
- return self
-
- def rbac_assign_role(
- self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_assign_role(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_assign_role(uint8,address,byte[])uint64", v
- )
- )
- return self
-
- def rbac_revoke_role(
- self,
- args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_revoke_role(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_revoke_role(uint8,address)uint64", v
- )
- )
- return self
-
- def rbac_gov_asset_suspension(
- self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_gov_asset_suspension(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_gov_asset_suspension(bool)uint64", v
- )
- )
- return self
-
- def rbac_get_arranger(
- self,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_get_arranger(
-
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_get_arranger()address", v
- )
- )
- return self
-
- def rbac_get_address_roles(
- self,
- args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_get_address_roles(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", v
- )
- )
- return self
-
- def rbac_get_role_config(
- self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_app_call_method_call(
- self.client.params.rbac_get_role_config(
- args=args,
- params=params,
- )
- )
- self._result_mappers.append(
- lambda v: self.client.decode_return_value(
- "rbac_get_role_config(uint8,address)(uint64,uint64)", v
- )
- )
- return self
-
- def clear_state(
- self,
- *,
- args: list[bytes] | None = None,
- params: algokit_utils.CommonAppCallParams | None = None,
- ) -> "MockAccountingModuleComposer":
- params=params or algokit_utils.CommonAppCallParams()
- self._composer.add_app_call(
- self.client.params.clear_state(
- algokit_utils.AppClientBareCallParams(
- **{
- **dataclasses.asdict(params),
- "args": args
- }
- )
- )
- )
- return self
-
- def add_transaction(
- self, txn: Transaction, signer: TransactionSigner | None = None
- ) -> "MockAccountingModuleComposer":
- self._composer.add_transaction(txn, signer)
- return self
-
- def composer(self) -> algokit_utils.TransactionComposer:
- return self._composer
-
- def simulate(
- self,
- allow_more_logs: bool | None = None,
- allow_empty_signatures: bool | None = None,
- allow_unnamed_resources: bool | None = None,
- extra_opcode_budget: int | None = None,
- exec_trace_config: SimulateTraceConfig | None = None,
- simulation_round: int | None = None,
- skip_signatures: bool | None = None,
- ) -> algokit_utils.SendAtomicTransactionComposerResults:
- return self._composer.simulate(
- allow_more_logs=allow_more_logs,
- allow_empty_signatures=allow_empty_signatures,
- allow_unnamed_resources=allow_unnamed_resources,
- extra_opcode_budget=extra_opcode_budget,
- exec_trace_config=exec_trace_config,
- simulation_round=simulation_round,
- skip_signatures=skip_signatures,
- )
-
- def send(
- self,
- send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAtomicTransactionComposerResults:
- return self._composer.send(send_params)
diff --git a/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.puya.map b/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.puya.map
index 4f79d95a..de6bf348 100644
--- a/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.puya.map
+++ b/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.puya.map
@@ -4,7 +4,7 @@
"../../../modules/rbac.py",
"../../mock_module_rbac/contract.py"
],
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BmD;AAAf;;AAA5B;AAC4C;;AAAf;;AAA7B;AAgBA;;AAAuB;AAAvB;AACA;;AAAuB;AAAvB;AC3CR;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;AAAA;AAQK;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAEG;AAAsB;;AAAtB;AAFH;AAAA;ADqIA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAsBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGc;AAAX;AAAX;;;AACY;AAAA;;AAAA;AAqGG;;AA1BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxEM;AAAW;;AAAX;AAAX;;;AACuC;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA+FJ;;;AA7FG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA2FJ;;;AAzFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAuFJ;;;AArFG;AAAW;;AAAX;AAAX;;;AACuC;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAmFJ;;;AAjFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;;;;AAkFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAmBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGO;AAAW;AAAX;AAAP;AACc;;AAAX;AAAX;;;AACmC;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAmGG;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1EM;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA8FJ;;;AA5FG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA0FJ;;;AAxFG;AAAW;;AAAX;AAAX;;;AACmC;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAsFJ;;;AApFG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;;;;AAqFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzJ+B;AAAgB;;AAArC;;;AAAP;AAyKA;;AAAA;AAAA;AACO;;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BU;AAAA;AAAA;AAAA;AARV;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAc4B;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AAlBP;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAcU;AACP;AAAA;;;AAES;AAIA;;;;;;;AALT;;AAAA;;;;;;;;;;;;;;AA+BQ;AAJI;;AA5QL;;AAAA;AAAA;AAAA;AAAA;;AA2QC;AAGO;AAAA;AA7ClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCe;AAvQL;;AAAA;AAAA;AAAA;AAAA;;AAsQC;AAGO;AAAA;AAxClB;;;AAiCe;;AAlQL;;AAAA;AAAA;AAAA;AAAA;;AAiQC;AAGO;AAAA;AAnClB;;;AA4Be;;AA7PL;;AAAA;AAAA;AAAA;AAAA;;AA4PC;AAGO;AAAA;AA9BlB;;;AAuBe;AAxPL;;AAAA;AAAA;AAAA;AAAA;;AAuPC;AAGO;AAAA;AAzBlB;;;AAkBkB;;;;;;;;;;;;;;;;;;AAlBlB;;;AA/ND;;;;;AAFW;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAGA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;AADH;AAAA;;;AAEG;;AAAA;AAAA;AAAA;;AAAA;AADA;;AAAA;AADH;;;;AADJ;;AAAA;;;;;AAOyB;;AAbF;AAAA;AAAA;AAAA;AAAhB;AAaP;;AAkBW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAKJ;;;AACW;;AACH;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;;AAAP;;;",
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BmD;AAAf;;AAA5B;AAC4C;;AAAf;;AAA7B;AAkBA;;AAA0B;AAA1B;AAGA;;AAAiB;AAAjB;AC7CR;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;AAAA;ADgJK;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;ACxIA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAEG;AAAsB;;AAAtB;AAFH;AAAA;ADsJG;;;AAdH;AAAA;AAgBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcG;;;AACA;AAAA;AAAA;AACO;;AAhBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcG;;;AACA;;AAAA;AAAA;AACO;;AAhBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAsBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AA1Hc;AAAX;AAAX;;;AACY;AAAA;;AAAA;AA2HG;;AA1BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9FM;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAqHJ;;;AAnHG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAiHJ;;;AA/GG;AAAW;;AAAX;AAAX;;;AACuC;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA6GJ;;;AA3GG;AAAW;;AAAX;AAAX;;;AACuC;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAyGJ;;;AAvGG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;;;;AAwGP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAmBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AA1HO;AAAW;AAAX;AAAP;AACc;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAyHG;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhGM;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAoHJ;;;AAlHG;AAAW;;AAAX;AAAX;;;AACmC;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAgHJ;;;AA9GG;AAAW;;AAAX;AAAX;;;AACmC;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA4GJ;;;AA1GG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;;;;AA2GP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhL+B;AAAgB;;AAArC;;;AAAP;AAgMA;;AAAA;AAAA;AACO;;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtM+B;AAAc;;AAAnC;;;AAAP;AAmNA;;AAAA;AAAA;AACO;;AAdV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BU;AAAA;AAAA;AAAA;AAXV;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB4B;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;AAArB;;AAAA;;;AACqB;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AAtBP;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAkBU;AACP;AAAA;;;AAES;AAIA;;;;;;;AALT;;AAAA;;;;;;;;;;;;;;AA+BQ;AAJI;;AA9TL;;AAAA;AAAA;AAAA;AAAA;;AA6TC;AAGO;AAAA;AAjDlB;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Ce;AAzTL;;AAAA;AAAA;AAAA;AAAA;;AAwTC;AAGO;AAAA;AA5ClB;;;AAqCe;AApTL;;AAAA;AAAA;AAAA;AAAA;;AAmTC;AAGO;AAAA;AAvClB;;;AAgCe;;AA/SL;;AAAA;AAAA;AAAA;AAAA;;AA8SC;AAGO;AAAA;AAlClB;;;AA2Be;;AA1SL;;AAAA;AAAA;AAAA;AAAA;;AAySC;AAGO;AAAA;AA7BlB;;;AAsBkB;;;;;;;;;;;;;;;;;;AAtBlB;;;AA7QD;;;;;AAFW;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAGA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;AADH;AAAA;;;AAEG;;AAAA;AAAA;AAAA;;AAAA;AADA;;AAAA;AADH;;;;AADJ;;AAAA;;;;;AAOyB;;AAbF;AAAA;AAAA;AAAA;AAAhB;AAaP;;AAkBW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAKJ;;;AACW;;AACH;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;AAAA;;AAOH;;AAPG;AAAA;;;;AAAP;;;",
"op_pc_offset": 0,
"pc_events": {
"1": {
@@ -15,9 +15,9 @@
"op": "intcblock 1 0 32 20"
},
"7": {
- "op": "bytecblock 0x151f7c75 0x52323023 0x52373023 0x52343023 0x52353023 0x52363023 0x52383023 0x52323523 \"asset_suspended\" \"asset_defaulted\""
+ "op": "bytecblock 0x151f7c75 0x523a41525223 0x523a54525323 0x523a41555423 0x523a4d4e4723 0x523a50594423 0x523a4d4f4323 \"defaulted\" 0x523a4f504423 \"contract_suspended\""
},
- "81": {
+ "92": {
"op": "txn ApplicationID",
"defined_out": [
"tmp%0#0"
@@ -26,103 +26,103 @@
"tmp%0#0"
]
},
- "83": {
+ "94": {
"op": "bnz main_after_if_else@2",
"stack_out": []
},
- "86": {
- "op": "bytec_1 // 0x52323023",
+ "97": {
+ "op": "bytec_1 // 0x523a41525223",
"defined_out": [
- "0x52323023"
+ "0x523a41525223"
],
"stack_out": [
- "0x52323023"
+ "0x523a41525223"
]
},
- "87": {
+ "98": {
"op": "global ZeroAddress",
"defined_out": [
- "0x52323023",
+ "0x523a41525223",
"tmp%0#2"
],
"stack_out": [
- "0x52323023",
+ "0x523a41525223",
"tmp%0#2"
]
},
- "89": {
+ "100": {
"op": "app_global_put",
"stack_out": []
},
- "90": {
- "op": "bytec 7 // 0x52323523",
+ "101": {
+ "op": "bytec 8 // 0x523a4f504423",
"defined_out": [
- "0x52323523"
+ "0x523a4f504423"
],
"stack_out": [
- "0x52323523"
+ "0x523a4f504423"
]
},
- "92": {
+ "103": {
"op": "global ZeroAddress",
"defined_out": [
- "0x52323523",
+ "0x523a4f504423",
"tmp%1#2"
],
"stack_out": [
- "0x52323523",
+ "0x523a4f504423",
"tmp%1#2"
]
},
- "94": {
+ "105": {
"op": "app_global_put",
"stack_out": []
},
- "95": {
- "op": "bytec 8 // \"asset_suspended\"",
+ "106": {
+ "op": "bytec 9 // \"contract_suspended\"",
"defined_out": [
- "\"asset_suspended\""
+ "\"contract_suspended\""
],
"stack_out": [
- "\"asset_suspended\""
+ "\"contract_suspended\""
]
},
- "97": {
+ "108": {
"op": "intc_1 // 0",
"defined_out": [
- "\"asset_suspended\"",
+ "\"contract_suspended\"",
"0"
],
"stack_out": [
- "\"asset_suspended\"",
+ "\"contract_suspended\"",
"0"
]
},
- "98": {
+ "109": {
"op": "app_global_put",
"stack_out": []
},
- "99": {
- "op": "bytec 9 // \"asset_defaulted\"",
+ "110": {
+ "op": "bytec 7 // \"defaulted\"",
"defined_out": [
- "\"asset_defaulted\""
+ "\"defaulted\""
],
"stack_out": [
- "\"asset_defaulted\""
+ "\"defaulted\""
]
},
- "101": {
+ "112": {
"op": "intc_1 // 0",
"stack_out": [
- "\"asset_defaulted\"",
+ "\"defaulted\"",
"0"
]
},
- "102": {
+ "113": {
"op": "app_global_put",
"stack_out": []
},
- "103": {
+ "114": {
"block": "main_after_if_else@2",
"stack_in": [],
"op": "txn NumAppArgs",
@@ -133,53 +133,80 @@
"tmp%0#1"
]
},
- "105": {
- "op": "bz main_create@17",
+ "116": {
+ "op": "bz main_create@20",
"stack_out": []
},
- "108": {
- "op": "txn OnCompletion",
+ "119": {
+ "op": "pushbytes 0x914f04eb // method \"contract_update()void\"",
+ "defined_out": [
+ "Method(contract_update()void)"
+ ],
+ "stack_out": [
+ "Method(contract_update()void)"
+ ]
+ },
+ "125": {
+ "op": "txna ApplicationArgs 0",
"defined_out": [
+ "Method(contract_update()void)",
"tmp%2#0"
],
"stack_out": [
+ "Method(contract_update()void)",
"tmp%2#0"
]
},
- "110": {
+ "128": {
+ "op": "match main_contract_update_route@5",
+ "stack_out": []
+ },
+ "132": {
+ "block": "main_switch_case_next@6",
+ "stack_in": [],
+ "op": "txn OnCompletion",
+ "defined_out": [
+ "tmp%8#0"
+ ],
+ "stack_out": [
+ "tmp%8#0"
+ ]
+ },
+ "134": {
"op": "!",
"defined_out": [
- "tmp%3#0"
+ "tmp%9#0"
],
"stack_out": [
- "tmp%3#0"
+ "tmp%9#0"
]
},
- "111": {
+ "135": {
"op": "assert",
"stack_out": []
},
- "112": {
+ "136": {
"op": "txn ApplicationID",
"defined_out": [
- "tmp%4#0"
+ "tmp%10#0"
],
"stack_out": [
- "tmp%4#0"
+ "tmp%10#0"
]
},
- "114": {
+ "138": {
"op": "assert",
"stack_out": []
},
- "115": {
- "op": "pushbytess 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method \"rbac_rotate_arranger(address)uint64\", method \"rbac_set_op_daemon(address)uint64\", method \"rbac_assign_role(uint8,address,byte[])uint64\", method \"rbac_revoke_role(uint8,address)uint64\", method \"rbac_gov_asset_suspension(bool)uint64\", method \"rbac_get_arranger()address\", method \"rbac_get_address_roles(address)(bool,bool,bool,bool,bool)\", method \"rbac_get_role_config(uint8,address)(uint64,uint64)\"",
+ "139": {
+ "op": "pushbytess 0x82f71b2d 0xef04f5d3 0xdf343550 0x3dbe80bd 0x1e3e48e7 0x39241fa3 0x010c8299 0x7406acd2 0x1a72a2ee // method \"rbac_rotate_arranger(address)uint64\", method \"rbac_set_op_daemon(address)uint64\", method \"rbac_assign_role(uint8,address,(uint64,uint64))uint64\", method \"rbac_revoke_role(uint8,address)uint64\", method \"rbac_contract_suspension(bool)uint64\", method \"rbac_contract_default(bool)uint64\", method \"rbac_get_arranger()address\", method \"rbac_get_address_roles(address)(bool,bool,bool,bool,bool)\", method \"rbac_get_role_validity(uint8,address)(uint64,uint64)\"",
"defined_out": [
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
"Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
"Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))",
"Method(rbac_revoke_role(uint8,address)uint64)",
"Method(rbac_rotate_arranger(address)uint64)",
"Method(rbac_set_op_daemon(address)uint64)"
@@ -187,50 +214,93 @@
"stack_out": [
"Method(rbac_rotate_arranger(address)uint64)",
"Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
"Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
"Method(rbac_get_arranger()address)",
"Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))"
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))"
]
},
- "157": {
+ "186": {
"op": "txna ApplicationArgs 0",
"defined_out": [
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
"Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
"Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))",
"Method(rbac_revoke_role(uint8,address)uint64)",
"Method(rbac_rotate_arranger(address)uint64)",
"Method(rbac_set_op_daemon(address)uint64)",
- "tmp%6#0"
+ "tmp%12#0"
],
"stack_out": [
"Method(rbac_rotate_arranger(address)uint64)",
"Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
+ "Method(rbac_assign_role(uint8,address,(uint64,uint64))uint64)",
"Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
+ "Method(rbac_contract_suspension(bool)uint64)",
+ "Method(rbac_contract_default(bool)uint64)",
"Method(rbac_get_arranger()address)",
"Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "tmp%6#0"
+ "Method(rbac_get_role_validity(uint8,address)(uint64,uint64))",
+ "tmp%12#0"
]
},
- "160": {
- "op": "match rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config",
+ "189": {
+ "op": "match rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_contract_suspension rbac_contract_default rbac_get_arranger rbac_get_address_roles rbac_get_role_validity",
"stack_out": []
},
- "178": {
+ "209": {
"op": "err"
},
- "179": {
- "block": "main_create@17",
+ "210": {
+ "block": "main_contract_update_route@5",
"stack_in": [],
"op": "txn OnCompletion",
+ "defined_out": [
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%3#0"
+ ]
+ },
+ "212": {
+ "op": "pushint 4 // UpdateApplication",
+ "defined_out": [
+ "UpdateApplication",
+ "tmp%3#0"
+ ],
+ "stack_out": [
+ "tmp%3#0",
+ "UpdateApplication"
+ ]
+ },
+ "214": {
+ "op": "==",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "215": {
+ "op": "txn ApplicationID",
+ "defined_out": [
+ "tmp%4#0",
+ "tmp%5#0"
+ ],
+ "stack_out": [
+ "tmp%4#0",
+ "tmp%5#0"
+ ]
+ },
+ "217": {
+ "op": "&&",
"defined_out": [
"tmp%7#0"
],
@@ -238,75 +308,114 @@
"tmp%7#0"
]
},
- "181": {
+ "218": {
+ "op": "assert",
+ "stack_out": []
+ },
+ "219": {
+ "op": "b contract_update"
+ },
+ "222": {
+ "block": "main_create@20",
+ "stack_in": [],
+ "op": "txn OnCompletion",
+ "defined_out": [
+ "tmp%13#0"
+ ],
+ "stack_out": [
+ "tmp%13#0"
+ ]
+ },
+ "224": {
"op": "!",
"defined_out": [
- "tmp%8#0"
+ "tmp%14#0"
],
"stack_out": [
- "tmp%8#0"
+ "tmp%14#0"
]
},
- "182": {
+ "225": {
"op": "txn ApplicationID",
"defined_out": [
- "tmp%8#0",
- "tmp%9#0"
+ "tmp%14#0",
+ "tmp%15#0"
],
"stack_out": [
- "tmp%8#0",
- "tmp%9#0"
+ "tmp%14#0",
+ "tmp%15#0"
]
},
- "184": {
+ "227": {
"op": "!",
"defined_out": [
- "tmp%10#0",
- "tmp%8#0"
+ "tmp%14#0",
+ "tmp%16#0"
],
"stack_out": [
- "tmp%8#0",
- "tmp%10#0"
+ "tmp%14#0",
+ "tmp%16#0"
]
},
- "185": {
+ "228": {
"op": "&&",
"defined_out": [
- "tmp%11#0"
+ "tmp%17#0"
],
"stack_out": [
- "tmp%11#0"
+ "tmp%17#0"
]
},
- "186": {
+ "229": {
"op": "assert",
"stack_out": []
},
- "187": {
- "op": "bytec_1 // 0x52323023",
+ "230": {
+ "op": "bytec_1 // 0x523a41525223",
"defined_out": [
- "0x52323023"
+ "0x523a41525223"
],
"stack_out": [
- "0x52323023"
+ "0x523a41525223"
]
},
- "188": {
+ "231": {
"op": "txn Sender",
"defined_out": [
- "0x52323023",
+ "0x523a41525223",
"tmp%0#2"
],
"stack_out": [
- "0x52323023",
+ "0x523a41525223",
"tmp%0#2"
]
},
- "190": {
+ "233": {
"op": "app_global_put",
"stack_out": []
},
- "191": {
+ "234": {
+ "op": "intc_0 // 1",
+ "defined_out": [
+ "1"
+ ],
+ "stack_out": [
+ "1"
+ ]
+ },
+ "235": {
+ "op": "return",
+ "stack_out": []
+ },
+ "236": {
+ "subroutine": "modules.rbac.RbacModule.contract_update[routing]",
+ "params": {},
+ "block": "contract_update",
+ "stack_in": [],
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "239": {
"op": "intc_0 // 1",
"defined_out": [
"1"
@@ -315,11 +424,11 @@
"1"
]
},
- "192": {
+ "240": {
"op": "return",
"stack_out": []
},
- "193": {
+ "241": {
"subroutine": "modules.rbac.RbacModule.rbac_rotate_arranger[routing]",
"params": {},
"block": "rbac_rotate_arranger",
@@ -332,7 +441,7 @@
"new_arranger#0"
]
},
- "196": {
+ "244": {
"op": "dup",
"defined_out": [
"new_arranger#0",
@@ -343,7 +452,7 @@
"new_arranger#0 (copy)"
]
},
- "197": {
+ "245": {
"op": "len",
"defined_out": [
"len%0#0",
@@ -354,7 +463,7 @@
"len%0#0"
]
},
- "198": {
+ "246": {
"op": "intc_2 // 32",
"defined_out": [
"32",
@@ -367,7 +476,7 @@
"32"
]
},
- "199": {
+ "247": {
"op": "==",
"defined_out": [
"eq%0#0",
@@ -378,40 +487,40 @@
"eq%0#0"
]
},
- "200": {
+ "248": {
"error": "invalid number of bytes for arc4.static_array",
"op": "assert // invalid number of bytes for arc4.static_array",
"stack_out": [
"new_arranger#0"
]
},
- "201": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
+ "249": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
},
- "204": {
- "op": "bytec_1 // 0x52323023",
+ "252": {
+ "op": "bytec_1 // 0x523a41525223",
"defined_out": [
- "0x52323023",
+ "0x523a41525223",
"new_arranger#0"
],
"stack_out": [
"new_arranger#0",
- "0x52323023"
+ "0x523a41525223"
]
},
- "205": {
+ "253": {
"op": "swap",
"stack_out": [
- "0x52323023",
+ "0x523a41525223",
"new_arranger#0"
]
},
- "206": {
+ "254": {
"op": "app_global_put",
"stack_out": []
},
- "207": {
+ "255": {
"op": "global LatestTimestamp",
"defined_out": [
"tmp%0#1"
@@ -420,7 +529,7 @@
"tmp%0#1"
]
},
- "209": {
+ "257": {
"op": "itob",
"defined_out": [
"aggregate%val_as_bytes%0#0"
@@ -429,7 +538,7 @@
"aggregate%val_as_bytes%0#0"
]
},
- "210": {
+ "258": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -440,14 +549,14 @@
"0x151f7c75"
]
},
- "211": {
+ "259": {
"op": "swap",
"stack_out": [
"0x151f7c75",
"aggregate%val_as_bytes%0#0"
]
},
- "212": {
+ "260": {
"op": "concat",
"defined_out": [
"tmp%4#0"
@@ -456,11 +565,11 @@
"tmp%4#0"
]
},
- "213": {
+ "261": {
"op": "log",
"stack_out": []
},
- "214": {
+ "262": {
"op": "intc_0 // 1",
"defined_out": [
"1"
@@ -469,11 +578,11 @@
"1"
]
},
- "215": {
+ "263": {
"op": "return",
"stack_out": []
},
- "216": {
+ "264": {
"subroutine": "modules.rbac.RbacModule.rbac_set_op_daemon[routing]",
"params": {},
"block": "rbac_set_op_daemon",
@@ -486,7 +595,7 @@
"address#0"
]
},
- "219": {
+ "267": {
"op": "dup",
"defined_out": [
"address#0",
@@ -497,7 +606,7 @@
"address#0 (copy)"
]
},
- "220": {
+ "268": {
"op": "len",
"defined_out": [
"address#0",
@@ -508,7 +617,7 @@
"len%0#0"
]
},
- "221": {
+ "269": {
"op": "intc_2 // 32",
"defined_out": [
"32",
@@ -521,7 +630,7 @@
"32"
]
},
- "222": {
+ "270": {
"op": "==",
"defined_out": [
"address#0",
@@ -532,40 +641,40 @@
"eq%0#0"
]
},
- "223": {
+ "271": {
"error": "invalid number of bytes for arc4.static_array",
"op": "assert // invalid number of bytes for arc4.static_array",
"stack_out": [
"address#0"
]
},
- "224": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
+ "272": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
},
- "227": {
- "op": "bytec 7 // 0x52323523",
+ "275": {
+ "op": "bytec 8 // 0x523a4f504423",
"defined_out": [
- "0x52323523",
+ "0x523a4f504423",
"address#0"
],
"stack_out": [
"address#0",
- "0x52323523"
+ "0x523a4f504423"
]
},
- "229": {
+ "277": {
"op": "swap",
"stack_out": [
- "0x52323523",
+ "0x523a4f504423",
"address#0"
]
},
- "230": {
+ "278": {
"op": "app_global_put",
"stack_out": []
},
- "231": {
+ "279": {
"op": "global LatestTimestamp",
"defined_out": [
"tmp%0#1"
@@ -574,7 +683,7 @@
"tmp%0#1"
]
},
- "233": {
+ "281": {
"op": "itob",
"defined_out": [
"aggregate%val_as_bytes%0#0"
@@ -583,7 +692,7 @@
"aggregate%val_as_bytes%0#0"
]
},
- "234": {
+ "282": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -594,14 +703,14 @@
"0x151f7c75"
]
},
- "235": {
+ "283": {
"op": "swap",
"stack_out": [
"0x151f7c75",
"aggregate%val_as_bytes%0#0"
]
},
- "236": {
+ "284": {
"op": "concat",
"defined_out": [
"tmp%4#0"
@@ -610,11 +719,11 @@
"tmp%4#0"
]
},
- "237": {
+ "285": {
"op": "log",
"stack_out": []
},
- "238": {
+ "286": {
"op": "intc_0 // 1",
"defined_out": [
"1"
@@ -623,11 +732,11 @@
"1"
]
},
- "239": {
+ "287": {
"op": "return",
"stack_out": []
},
- "240": {
+ "288": {
"subroutine": "modules.rbac.RbacModule.rbac_assign_role[routing]",
"params": {},
"block": "rbac_assign_role",
@@ -640,7 +749,7 @@
"role_id#0"
]
},
- "243": {
+ "291": {
"op": "dup",
"defined_out": [
"role_id#0",
@@ -651,7 +760,7 @@
"role_id#0 (copy)"
]
},
- "244": {
+ "292": {
"op": "len",
"defined_out": [
"len%0#0",
@@ -662,7 +771,7 @@
"len%0#0"
]
},
- "245": {
+ "293": {
"op": "intc_0 // 1",
"defined_out": [
"1",
@@ -675,7 +784,7 @@
"1"
]
},
- "246": {
+ "294": {
"op": "==",
"defined_out": [
"eq%0#0",
@@ -686,17 +795,17 @@
"eq%0#0"
]
},
- "247": {
+ "295": {
"error": "invalid number of bytes for arc4.uint8",
"op": "assert // invalid number of bytes for arc4.uint8",
"stack_out": [
"role_id#0"
]
},
- "248": {
+ "296": {
"op": "txna ApplicationArgs 2"
},
- "251": {
+ "299": {
"op": "dup",
"defined_out": [
"role_address#0",
@@ -708,7 +817,7 @@
"role_address#0"
]
},
- "252": {
+ "300": {
"op": "cover 2",
"defined_out": [
"role_address#0",
@@ -720,7 +829,7 @@
"role_address#0"
]
},
- "254": {
+ "302": {
"op": "len",
"defined_out": [
"len%1#0",
@@ -733,7 +842,7 @@
"len%1#0"
]
},
- "255": {
+ "303": {
"op": "intc_2 // 32",
"defined_out": [
"32",
@@ -748,7 +857,7 @@
"32"
]
},
- "256": {
+ "304": {
"op": "==",
"defined_out": [
"eq%1#0",
@@ -761,7 +870,7 @@
"eq%1#0"
]
},
- "257": {
+ "305": {
"error": "invalid number of bytes for arc4.static_array",
"op": "assert // invalid number of bytes for arc4.static_array",
"stack_out": [
@@ -769,293 +878,217 @@
"role_id#0"
]
},
- "258": {
- "op": "txna ApplicationArgs 3",
+ "306": {
+ "op": "txna ApplicationArgs 3"
+ },
+ "309": {
+ "op": "dup",
"defined_out": [
"role_address#0",
"role_id#0",
- "tmp%3#0"
+ "validity#0"
],
"stack_out": [
"role_address#0",
"role_id#0",
- "tmp%3#0"
+ "validity#0",
+ "validity#0"
]
},
- "261": {
- "op": "dup",
+ "310": {
+ "op": "cover 2",
"defined_out": [
"role_address#0",
"role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)"
+ "validity#0"
],
"stack_out": [
"role_address#0",
+ "validity#0",
"role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)"
- ]
- },
- "262": {
- "op": "intc_1 // 0",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "tmp%3#0 (copy)",
- "0"
+ "validity#0"
]
},
- "263": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
+ "312": {
+ "op": "len",
"defined_out": [
- "aggregate%array_length%0#0",
+ "len%2#0",
"role_address#0",
"role_id#0",
- "tmp%3#0"
+ "validity#0"
],
"stack_out": [
"role_address#0",
+ "validity#0",
"role_id#0",
- "tmp%3#0",
- "aggregate%array_length%0#0"
+ "len%2#0"
]
},
- "264": {
- "op": "pushint 2",
+ "313": {
+ "op": "pushint 16",
"defined_out": [
- "2",
- "aggregate%array_length%0#0",
+ "16",
+ "len%2#0",
"role_address#0",
"role_id#0",
- "tmp%3#0"
+ "validity#0"
],
"stack_out": [
"role_address#0",
+ "validity#0",
"role_id#0",
- "tmp%3#0",
- "aggregate%array_length%0#0",
- "2"
+ "len%2#0",
+ "16"
]
},
- "266": {
- "op": "+",
+ "315": {
+ "op": "==",
"defined_out": [
- "add%0#0",
+ "eq%2#0",
"role_address#0",
"role_id#0",
- "tmp%3#0"
+ "validity#0"
],
"stack_out": [
"role_address#0",
+ "validity#0",
"role_id#0",
- "tmp%3#0",
- "add%0#0"
+ "eq%2#0"
]
},
- "267": {
- "op": "dig 1",
+ "316": {
+ "error": "invalid number of bytes for smart_contracts.abi_types.RoleValidity",
+ "op": "assert // invalid number of bytes for smart_contracts.abi_types.RoleValidity",
"stack_out": [
"role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0",
- "tmp%3#0 (copy)"
+ "validity#0",
+ "role_id#0"
]
},
- "269": {
- "op": "len",
+ "317": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
+ },
+ "320": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
+ },
+ "323": {
+ "op": "btoi",
"defined_out": [
- "add%0#0",
- "len%2#0",
"role_address#0",
- "role_id#0",
- "tmp%3#0"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "role_id#0",
- "tmp%3#0",
- "add%0#0",
- "len%2#0"
+ "validity#0",
+ "role_id#1"
]
},
- "270": {
- "op": "==",
- "defined_out": [
- "eq%2#0",
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0",
- "eq%2#0"
- ]
- },
- "271": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "tmp%3#0"
- ]
- },
- "272": {
- "op": "extract 2 0",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "role_id#0",
- "config#0"
- ]
- },
- "275": {
- "op": "swap",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#0"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#0"
- ]
- },
- "276": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "279": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "282": {
- "op": "btoi",
- "defined_out": [
- "config#0",
- "role_address#0",
- "role_id#1"
- ],
- "stack_out": [
- "role_address#0",
- "config#0",
- "role_id#1"
- ]
- },
- "283": {
+ "324": {
"op": "dupn 2",
"defined_out": [
- "config#0",
"role_address#0",
"role_id#1",
- "role_id#1 (copy)"
+ "role_id#1 (copy)",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"role_id#1 (copy)"
]
},
- "285": {
+ "326": {
"callsub": "modules.rbac.RbacModule._assert_valid_role",
"op": "callsub _assert_valid_role",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1"
]
},
- "288": {
+ "329": {
"op": "intc_3 // 20",
"defined_out": [
"20",
- "config#0",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"20"
]
},
- "289": {
+ "330": {
"op": "==",
"defined_out": [
- "config#0",
"role_address#0",
"role_id#1",
- "tmp%0#2"
+ "tmp%0#2",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"tmp%0#2"
]
},
- "290": {
+ "331": {
"op": "bz rbac_assign_role_after_if_else@3",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "293": {
- "op": "bytec_1 // 0x52323023",
+ "334": {
+ "op": "bytec_1 // 0x523a41525223",
"defined_out": [
- "0x52323023",
- "config#0",
+ "0x523a41525223",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52323023"
+ "0x523a41525223"
]
},
- "294": {
+ "335": {
"op": "dig 3",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52323023",
+ "0x523a41525223",
"role_address#0"
]
},
- "296": {
+ "337": {
"op": "app_global_put",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "297": {
- "block": "rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14",
+ "338": {
+ "block": "rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14",
"stack_in": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
],
"op": "global LatestTimestamp",
@@ -1064,24 +1097,24 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"tmp%2#1"
]
},
- "299": {
+ "340": {
"op": "itob",
"defined_out": [
"aggregate%val_as_bytes%0#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"aggregate%val_as_bytes%0#0"
]
},
- "300": {
+ "341": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -1089,67 +1122,67 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"aggregate%val_as_bytes%0#0",
"0x151f7c75"
]
},
- "301": {
+ "342": {
"op": "swap",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"0x151f7c75",
"aggregate%val_as_bytes%0#0"
]
},
- "302": {
+ "343": {
"op": "concat",
"defined_out": [
- "tmp%7#0"
+ "tmp%6#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "tmp%7#0"
+ "tmp%6#0"
]
},
- "303": {
+ "344": {
"op": "log",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "304": {
+ "345": {
"op": "intc_0 // 1",
"defined_out": [
"1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"1"
]
},
- "305": {
+ "346": {
"op": "return",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "306": {
+ "347": {
"block": "rbac_assign_role_after_if_else@3",
"stack_in": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
],
"op": "dup",
@@ -1158,12 +1191,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1"
]
},
- "307": {
+ "348": {
"op": "pushint 40",
"defined_out": [
"40",
@@ -1171,13 +1204,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"40"
]
},
- "309": {
+ "350": {
"op": "==",
"defined_out": [
"role_id#1",
@@ -1185,48 +1218,48 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"tmp%1#1"
]
},
- "310": {
+ "351": {
"op": "bz rbac_assign_role_after_if_else@5",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "313": {
- "op": "bytec_3 // 0x52343023",
+ "354": {
+ "op": "bytec 4 // 0x523a4d4e4723",
"defined_out": [
- "0x52343023",
+ "0x523a4d4e4723",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52343023"
+ "0x523a4d4e4723"
]
},
- "314": {
+ "356": {
"op": "dig 3",
"defined_out": [
- "0x52343023",
+ "0x523a4d4e4723",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52343023",
+ "0x523a4d4e4723",
"role_address#0"
]
},
- "316": {
+ "358": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#0",
@@ -1235,12 +1268,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0"
]
},
- "317": {
+ "359": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#0",
@@ -1250,13 +1283,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0",
"box_prefixed_key%0#0 (copy)"
]
},
- "318": {
+ "360": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -1267,24 +1300,24 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0",
"_%0#0",
"maybe_exists%0#0"
]
},
- "319": {
+ "361": {
"op": "bury 1",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0",
"maybe_exists%0#0"
]
},
- "321": {
+ "363": {
"op": "!",
"defined_out": [
"box_prefixed_key%0#0",
@@ -1294,54 +1327,54 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0",
"tmp%2#2"
]
},
- "322": {
+ "364": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0"
]
},
- "323": {
+ "365": {
"op": "dig 2",
"defined_out": [
"box_prefixed_key%0#0",
- "config#0",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%0#0",
- "config#0"
+ "validity#0"
]
},
- "325": {
+ "367": {
"op": "box_put",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "326": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
+ "368": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
},
- "329": {
+ "371": {
"block": "rbac_assign_role_after_if_else@5",
"stack_in": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
],
"op": "dup",
@@ -1350,12 +1383,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1"
]
},
- "330": {
+ "372": {
"op": "pushint 50",
"defined_out": [
"50",
@@ -1363,62 +1396,62 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"50"
]
},
- "332": {
+ "374": {
"op": "==",
"defined_out": [
"role_id#1",
- "tmp%3#1"
+ "tmp%3#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "tmp%3#1"
+ "tmp%3#0"
]
},
- "333": {
+ "375": {
"op": "bz rbac_assign_role_after_if_else@7",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "336": {
- "op": "bytec 4 // 0x52353023",
+ "378": {
+ "op": "bytec 5 // 0x523a50594423",
"defined_out": [
- "0x52353023",
+ "0x523a50594423",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52353023"
+ "0x523a50594423"
]
},
- "338": {
+ "380": {
"op": "dig 3",
"defined_out": [
- "0x52353023",
+ "0x523a50594423",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52353023",
+ "0x523a50594423",
"role_address#0"
]
},
- "340": {
+ "382": {
"op": "concat",
"defined_out": [
"box_prefixed_key%2#0",
@@ -1427,12 +1460,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0"
]
},
- "341": {
+ "383": {
"op": "dup",
"defined_out": [
"box_prefixed_key%2#0",
@@ -1442,13 +1475,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0",
"box_prefixed_key%2#0 (copy)"
]
},
- "342": {
+ "384": {
"op": "box_len",
"defined_out": [
"_%1#0",
@@ -1459,24 +1492,24 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0",
"_%1#0",
"maybe_exists%1#0"
]
},
- "343": {
+ "385": {
"op": "bury 1",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0",
"maybe_exists%1#0"
]
},
- "345": {
+ "387": {
"op": "!",
"defined_out": [
"box_prefixed_key%2#0",
@@ -1486,54 +1519,54 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0",
"tmp%4#0"
]
},
- "346": {
+ "388": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0"
]
},
- "347": {
+ "389": {
"op": "dig 2",
"defined_out": [
"box_prefixed_key%2#0",
- "config#0",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%2#0",
- "config#0"
+ "validity#0"
]
},
- "349": {
+ "391": {
"op": "box_put",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "350": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
+ "392": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
},
- "353": {
+ "395": {
"block": "rbac_assign_role_after_if_else@7",
"stack_in": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
],
"op": "dup",
@@ -1542,12 +1575,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1"
]
},
- "354": {
+ "396": {
"op": "pushint 60",
"defined_out": [
"60",
@@ -1555,62 +1588,62 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"60"
]
},
- "356": {
+ "398": {
"op": "==",
"defined_out": [
"role_id#1",
- "tmp%5#0"
+ "tmp%5#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "tmp%5#0"
+ "tmp%5#1"
]
},
- "357": {
+ "399": {
"op": "bz rbac_assign_role_after_if_else@9",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "360": {
- "op": "bytec 5 // 0x52363023",
+ "402": {
+ "op": "bytec_2 // 0x523a54525323",
"defined_out": [
- "0x52363023",
+ "0x523a54525323",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52363023"
+ "0x523a54525323"
]
},
- "362": {
+ "403": {
"op": "dig 3",
"defined_out": [
- "0x52363023",
+ "0x523a54525323",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52363023",
+ "0x523a54525323",
"role_address#0"
]
},
- "364": {
+ "405": {
"op": "concat",
"defined_out": [
"box_prefixed_key%4#0",
@@ -1619,12 +1652,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0"
]
},
- "365": {
+ "406": {
"op": "dup",
"defined_out": [
"box_prefixed_key%4#0",
@@ -1634,13 +1667,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0",
"box_prefixed_key%4#0 (copy)"
]
},
- "366": {
+ "407": {
"op": "box_len",
"defined_out": [
"_%2#0",
@@ -1651,24 +1684,24 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0",
"_%2#0",
"maybe_exists%2#0"
]
},
- "367": {
+ "408": {
"op": "bury 1",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0",
"maybe_exists%2#0"
]
},
- "369": {
+ "410": {
"op": "!",
"defined_out": [
"box_prefixed_key%4#0",
@@ -1678,54 +1711,54 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0",
"tmp%6#1"
]
},
- "370": {
+ "411": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0"
]
},
- "371": {
+ "412": {
"op": "dig 2",
"defined_out": [
"box_prefixed_key%4#0",
- "config#0",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%4#0",
- "config#0"
+ "validity#0"
]
},
- "373": {
+ "414": {
"op": "box_put",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "374": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
+ "415": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
},
- "377": {
+ "418": {
"block": "rbac_assign_role_after_if_else@9",
"stack_in": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
],
"op": "dup",
@@ -1734,12 +1767,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1"
]
},
- "378": {
+ "419": {
"op": "pushint 70",
"defined_out": [
"70",
@@ -1747,62 +1780,62 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"70"
]
},
- "380": {
+ "421": {
"op": "==",
"defined_out": [
"role_id#1",
- "tmp%7#1"
+ "tmp%7#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "tmp%7#1"
+ "tmp%7#0"
]
},
- "381": {
+ "422": {
"op": "bz rbac_assign_role_after_if_else@11",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "384": {
- "op": "bytec_2 // 0x52373023",
+ "425": {
+ "op": "bytec_3 // 0x523a41555423",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52373023"
+ "0x523a41555423"
]
},
- "385": {
+ "426": {
"op": "dig 3",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52373023",
+ "0x523a41555423",
"role_address#0"
]
},
- "387": {
+ "428": {
"op": "concat",
"defined_out": [
"box_prefixed_key%6#0",
@@ -1811,12 +1844,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0"
]
},
- "388": {
+ "429": {
"op": "dup",
"defined_out": [
"box_prefixed_key%6#0",
@@ -1826,13 +1859,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0",
"box_prefixed_key%6#0 (copy)"
]
},
- "389": {
+ "430": {
"op": "box_len",
"defined_out": [
"_%3#0",
@@ -1843,24 +1876,24 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0",
"_%3#0",
"maybe_exists%3#0"
]
},
- "390": {
+ "431": {
"op": "bury 1",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0",
"maybe_exists%3#0"
]
},
- "392": {
+ "433": {
"op": "!",
"defined_out": [
"box_prefixed_key%6#0",
@@ -1870,54 +1903,54 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0",
"tmp%8#0"
]
},
- "393": {
+ "434": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0"
]
},
- "394": {
+ "435": {
"op": "dig 2",
"defined_out": [
"box_prefixed_key%6#0",
- "config#0",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%6#0",
- "config#0"
+ "validity#0"
]
},
- "396": {
+ "437": {
"op": "box_put",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "397": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
+ "438": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
},
- "400": {
+ "441": {
"block": "rbac_assign_role_after_if_else@11",
"stack_in": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
],
"op": "dup",
@@ -1926,12 +1959,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1"
]
},
- "401": {
+ "442": {
"op": "pushint 80",
"defined_out": [
"80",
@@ -1939,13 +1972,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"role_id#1",
"80"
]
},
- "403": {
+ "444": {
"op": "==",
"defined_out": [
"role_id#1",
@@ -1953,48 +1986,48 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"tmp%9#0"
]
},
- "404": {
- "op": "bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14",
+ "445": {
+ "op": "bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "407": {
- "op": "bytec 6 // 0x52383023",
+ "448": {
+ "op": "bytec 6 // 0x523a4d4f4323",
"defined_out": [
- "0x52383023",
+ "0x523a4d4f4323",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52383023"
+ "0x523a4d4f4323"
]
},
- "409": {
+ "450": {
"op": "dig 3",
"defined_out": [
- "0x52383023",
+ "0x523a4d4f4323",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
- "0x52383023",
+ "0x523a4d4f4323",
"role_address#0"
]
},
- "411": {
+ "452": {
"op": "concat",
"defined_out": [
"box_prefixed_key%8#0",
@@ -2003,12 +2036,12 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0"
]
},
- "412": {
+ "453": {
"op": "dup",
"defined_out": [
"box_prefixed_key%8#0",
@@ -2018,13 +2051,13 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0",
"box_prefixed_key%8#0 (copy)"
]
},
- "413": {
+ "454": {
"op": "box_len",
"defined_out": [
"_%4#0",
@@ -2035,24 +2068,24 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0",
"_%4#0",
"maybe_exists%4#0"
]
},
- "414": {
+ "455": {
"op": "bury 1",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0",
"maybe_exists%4#0"
]
},
- "416": {
+ "457": {
"op": "!",
"defined_out": [
"box_prefixed_key%8#0",
@@ -2062,50 +2095,50 @@
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0",
"tmp%10#0"
]
},
- "417": {
+ "458": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0"
]
},
- "418": {
+ "459": {
"op": "dig 2",
"defined_out": [
"box_prefixed_key%8#0",
- "config#0",
"role_address#0",
- "role_id#1"
+ "role_id#1",
+ "validity#0"
],
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1",
"box_prefixed_key%8#0",
- "config#0"
+ "validity#0"
]
},
- "420": {
+ "461": {
"op": "box_put",
"stack_out": [
"role_address#0",
- "config#0",
+ "validity#0",
"role_id#1"
]
},
- "421": {
- "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14"
+ "462": {
+ "op": "b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14"
},
- "424": {
+ "465": {
"subroutine": "modules.rbac.RbacModule.rbac_revoke_role[routing]",
"params": {},
"block": "rbac_revoke_role",
@@ -2118,7 +2151,7 @@
"role_id#0"
]
},
- "427": {
+ "468": {
"op": "dup",
"defined_out": [
"role_id#0",
@@ -2129,7 +2162,7 @@
"role_id#0 (copy)"
]
},
- "428": {
+ "469": {
"op": "len",
"defined_out": [
"len%0#0",
@@ -2140,7 +2173,7 @@
"len%0#0"
]
},
- "429": {
+ "470": {
"op": "intc_0 // 1",
"defined_out": [
"1",
@@ -2153,7 +2186,7 @@
"1"
]
},
- "430": {
+ "471": {
"op": "==",
"defined_out": [
"eq%0#0",
@@ -2164,17 +2197,17 @@
"eq%0#0"
]
},
- "431": {
+ "472": {
"error": "invalid number of bytes for arc4.uint8",
"op": "assert // invalid number of bytes for arc4.uint8",
"stack_out": [
"role_id#0"
]
},
- "432": {
+ "473": {
"op": "txna ApplicationArgs 2"
},
- "435": {
+ "476": {
"op": "dup",
"defined_out": [
"role_address#0",
@@ -2186,7 +2219,7 @@
"role_address#0"
]
},
- "436": {
+ "477": {
"op": "cover 2",
"defined_out": [
"role_address#0",
@@ -2198,7 +2231,7 @@
"role_address#0"
]
},
- "438": {
+ "479": {
"op": "len",
"defined_out": [
"len%1#0",
@@ -2211,7 +2244,7 @@
"len%1#0"
]
},
- "439": {
+ "480": {
"op": "intc_2 // 32",
"defined_out": [
"32",
@@ -2226,7 +2259,7 @@
"32"
]
},
- "440": {
+ "481": {
"op": "==",
"defined_out": [
"eq%1#0",
@@ -2239,7 +2272,7 @@
"eq%1#0"
]
},
- "441": {
+ "482": {
"error": "invalid number of bytes for arc4.static_array",
"op": "assert // invalid number of bytes for arc4.static_array",
"stack_out": [
@@ -2247,15 +2280,15 @@
"role_id#0"
]
},
- "442": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
+ "483": {
+ "callsub": "modules.rbac.RbacModule._assert_caller_is_arranger",
+ "op": "callsub _assert_caller_is_arranger"
},
- "445": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
+ "486": {
+ "callsub": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
+ "op": "callsub _assert_is_not_contract_defaulted"
},
- "448": {
+ "489": {
"op": "btoi",
"defined_out": [
"role_address#0",
@@ -2266,7 +2299,7 @@
"role_id#1"
]
},
- "449": {
+ "490": {
"op": "dupn 2",
"defined_out": [
"role_address#0",
@@ -2280,7 +2313,7 @@
"role_id#1 (copy)"
]
},
- "451": {
+ "492": {
"callsub": "modules.rbac.RbacModule._assert_valid_role",
"op": "callsub _assert_valid_role",
"stack_out": [
@@ -2289,7 +2322,7 @@
"role_id#1"
]
},
- "454": {
+ "495": {
"op": "dup",
"stack_out": [
"role_address#0",
@@ -2298,7 +2331,7 @@
"role_id#1 (copy)"
]
},
- "455": {
+ "496": {
"op": "intc_3 // 20",
"defined_out": [
"20",
@@ -2314,7 +2347,7 @@
"20"
]
},
- "456": {
+ "497": {
"op": "!=",
"defined_out": [
"role_address#0",
@@ -2328,7 +2361,7 @@
"tmp%0#2"
]
},
- "457": {
+ "498": {
"error": "Invalid role identifier",
"op": "assert // Invalid role identifier",
"stack_out": [
@@ -2337,7 +2370,7 @@
"role_id#1"
]
},
- "458": {
+ "499": {
"op": "pushint 40",
"defined_out": [
"40",
@@ -2351,7 +2384,7 @@
"40"
]
},
- "460": {
+ "501": {
"op": "==",
"defined_out": [
"role_address#0",
@@ -2364,36 +2397,36 @@
"tmp%1#1"
]
},
- "461": {
+ "502": {
"op": "bz rbac_revoke_role_after_if_else@3",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "464": {
- "op": "bytec_3 // 0x52343023",
+ "505": {
+ "op": "bytec 4 // 0x523a4d4e4723",
"defined_out": [
- "0x52343023",
+ "0x523a4d4e4723",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52343023"
+ "0x523a4d4e4723"
]
},
- "465": {
+ "507": {
"op": "dig 2",
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52343023",
+ "0x523a4d4e4723",
"role_address#0"
]
},
- "467": {
+ "509": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#0",
@@ -2406,7 +2439,7 @@
"box_prefixed_key%0#0"
]
},
- "468": {
+ "510": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#0",
@@ -2421,7 +2454,7 @@
"box_prefixed_key%0#0 (copy)"
]
},
- "469": {
+ "511": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -2438,7 +2471,7 @@
"maybe_exists%0#0"
]
},
- "470": {
+ "512": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -2447,7 +2480,7 @@
"maybe_exists%0#0"
]
},
- "472": {
+ "514": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -2456,7 +2489,7 @@
"box_prefixed_key%0#0"
]
},
- "473": {
+ "515": {
"op": "box_del",
"defined_out": [
"role_address#0",
@@ -2469,14 +2502,14 @@
"{box_del}"
]
},
- "474": {
+ "516": {
"op": "pop",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "475": {
+ "517": {
"block": "rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
"stack_in": [
"role_address#0",
@@ -2492,7 +2525,7 @@
"tmp%2#1"
]
},
- "477": {
+ "519": {
"op": "itob",
"defined_out": [
"aggregate%val_as_bytes%0#0"
@@ -2503,7 +2536,7 @@
"aggregate%val_as_bytes%0#0"
]
},
- "478": {
+ "520": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -2516,7 +2549,7 @@
"0x151f7c75"
]
},
- "479": {
+ "521": {
"op": "swap",
"stack_out": [
"role_address#0",
@@ -2525,7 +2558,7 @@
"aggregate%val_as_bytes%0#0"
]
},
- "480": {
+ "522": {
"op": "concat",
"defined_out": [
"tmp%5#0"
@@ -2536,14 +2569,14 @@
"tmp%5#0"
]
},
- "481": {
+ "523": {
"op": "log",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "482": {
+ "524": {
"op": "intc_0 // 1",
"defined_out": [
"1"
@@ -2554,14 +2587,14 @@
"1"
]
},
- "483": {
+ "525": {
"op": "return",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "484": {
+ "526": {
"block": "rbac_revoke_role_after_if_else@3",
"stack_in": [
"role_address#0",
@@ -2577,7 +2610,7 @@
"role_id#1"
]
},
- "485": {
+ "527": {
"op": "pushint 50",
"defined_out": [
"50",
@@ -2590,7 +2623,7 @@
"50"
]
},
- "487": {
+ "529": {
"op": "==",
"defined_out": [
"role_id#1",
@@ -2602,40 +2635,40 @@
"tmp%2#2"
]
},
- "488": {
+ "530": {
"op": "bz rbac_revoke_role_after_if_else@5",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "491": {
- "op": "bytec 4 // 0x52353023",
+ "533": {
+ "op": "bytec 5 // 0x523a50594423",
"defined_out": [
- "0x52353023",
+ "0x523a50594423",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52353023"
+ "0x523a50594423"
]
},
- "493": {
+ "535": {
"op": "dig 2",
"defined_out": [
- "0x52353023",
+ "0x523a50594423",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52353023",
+ "0x523a50594423",
"role_address#0"
]
},
- "495": {
+ "537": {
"op": "concat",
"defined_out": [
"box_prefixed_key%2#0",
@@ -2648,7 +2681,7 @@
"box_prefixed_key%2#0"
]
},
- "496": {
+ "538": {
"op": "dup",
"defined_out": [
"box_prefixed_key%2#0",
@@ -2663,7 +2696,7 @@
"box_prefixed_key%2#0 (copy)"
]
},
- "497": {
+ "539": {
"op": "box_len",
"defined_out": [
"_%1#0",
@@ -2680,7 +2713,7 @@
"maybe_exists%1#0"
]
},
- "498": {
+ "540": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -2689,7 +2722,7 @@
"maybe_exists%1#0"
]
},
- "500": {
+ "542": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -2698,7 +2731,7 @@
"box_prefixed_key%2#0"
]
},
- "501": {
+ "543": {
"op": "box_del",
"defined_out": [
"role_address#0",
@@ -2711,17 +2744,17 @@
"{box_del}"
]
},
- "502": {
+ "544": {
"op": "pop",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "503": {
+ "545": {
"op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
},
- "506": {
+ "548": {
"block": "rbac_revoke_role_after_if_else@5",
"stack_in": [
"role_address#0",
@@ -2737,7 +2770,7 @@
"role_id#1"
]
},
- "507": {
+ "549": {
"op": "pushint 60",
"defined_out": [
"60",
@@ -2750,7 +2783,7 @@
"60"
]
},
- "509": {
+ "551": {
"op": "==",
"defined_out": [
"role_id#1",
@@ -2762,40 +2795,40 @@
"tmp%3#0"
]
},
- "510": {
+ "552": {
"op": "bz rbac_revoke_role_after_if_else@7",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "513": {
- "op": "bytec 5 // 0x52363023",
+ "555": {
+ "op": "bytec_2 // 0x523a54525323",
"defined_out": [
- "0x52363023",
+ "0x523a54525323",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52363023"
+ "0x523a54525323"
]
},
- "515": {
+ "556": {
"op": "dig 2",
"defined_out": [
- "0x52363023",
+ "0x523a54525323",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52363023",
+ "0x523a54525323",
"role_address#0"
]
},
- "517": {
+ "558": {
"op": "concat",
"defined_out": [
"box_prefixed_key%4#0",
@@ -2808,7 +2841,7 @@
"box_prefixed_key%4#0"
]
},
- "518": {
+ "559": {
"op": "dup",
"defined_out": [
"box_prefixed_key%4#0",
@@ -2823,7 +2856,7 @@
"box_prefixed_key%4#0 (copy)"
]
},
- "519": {
+ "560": {
"op": "box_len",
"defined_out": [
"_%2#0",
@@ -2840,7 +2873,7 @@
"maybe_exists%2#0"
]
},
- "520": {
+ "561": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -2849,7 +2882,7 @@
"maybe_exists%2#0"
]
},
- "522": {
+ "563": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -2858,7 +2891,7 @@
"box_prefixed_key%4#0"
]
},
- "523": {
+ "564": {
"op": "box_del",
"defined_out": [
"role_address#0",
@@ -2871,17 +2904,17 @@
"{box_del}"
]
},
- "524": {
+ "565": {
"op": "pop",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "525": {
+ "566": {
"op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
},
- "528": {
+ "569": {
"block": "rbac_revoke_role_after_if_else@7",
"stack_in": [
"role_address#0",
@@ -2897,7 +2930,7 @@
"role_id#1"
]
},
- "529": {
+ "570": {
"op": "pushint 70",
"defined_out": [
"70",
@@ -2910,7 +2943,7 @@
"70"
]
},
- "531": {
+ "572": {
"op": "==",
"defined_out": [
"role_id#1",
@@ -2922,40 +2955,40 @@
"tmp%4#1"
]
},
- "532": {
+ "573": {
"op": "bz rbac_revoke_role_after_if_else@9",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "535": {
- "op": "bytec_2 // 0x52373023",
+ "576": {
+ "op": "bytec_3 // 0x523a41555423",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52373023"
+ "0x523a41555423"
]
},
- "536": {
+ "577": {
"op": "dig 2",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52373023",
+ "0x523a41555423",
"role_address#0"
]
},
- "538": {
+ "579": {
"op": "concat",
"defined_out": [
"box_prefixed_key%6#0",
@@ -2968,7 +3001,7 @@
"box_prefixed_key%6#0"
]
},
- "539": {
+ "580": {
"op": "dup",
"defined_out": [
"box_prefixed_key%6#0",
@@ -2983,7 +3016,7 @@
"box_prefixed_key%6#0 (copy)"
]
},
- "540": {
+ "581": {
"op": "box_len",
"defined_out": [
"_%3#0",
@@ -3000,7 +3033,7 @@
"maybe_exists%3#0"
]
},
- "541": {
+ "582": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -3009,7 +3042,7 @@
"maybe_exists%3#0"
]
},
- "543": {
+ "584": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -3018,7 +3051,7 @@
"box_prefixed_key%6#0"
]
},
- "544": {
+ "585": {
"op": "box_del",
"defined_out": [
"role_address#0",
@@ -3031,17 +3064,17 @@
"{box_del}"
]
},
- "545": {
+ "586": {
"op": "pop",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "546": {
+ "587": {
"op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
},
- "549": {
+ "590": {
"block": "rbac_revoke_role_after_if_else@9",
"stack_in": [
"role_address#0",
@@ -3057,7 +3090,7 @@
"role_id#1"
]
},
- "550": {
+ "591": {
"op": "pushint 80",
"defined_out": [
"80",
@@ -3070,7 +3103,7 @@
"80"
]
},
- "552": {
+ "593": {
"op": "==",
"defined_out": [
"role_id#1",
@@ -3082,40 +3115,40 @@
"tmp%5#1"
]
},
- "553": {
+ "594": {
"op": "bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "556": {
- "op": "bytec 6 // 0x52383023",
+ "597": {
+ "op": "bytec 6 // 0x523a4d4f4323",
"defined_out": [
- "0x52383023",
+ "0x523a4d4f4323",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52383023"
+ "0x523a4d4f4323"
]
},
- "558": {
+ "599": {
"op": "dig 2",
"defined_out": [
- "0x52383023",
+ "0x523a4d4f4323",
"role_address#0",
"role_id#1"
],
"stack_out": [
"role_address#0",
"role_id#1",
- "0x52383023",
+ "0x523a4d4f4323",
"role_address#0"
]
},
- "560": {
+ "601": {
"op": "concat",
"defined_out": [
"box_prefixed_key%8#0",
@@ -3128,7 +3161,7 @@
"box_prefixed_key%8#0"
]
},
- "561": {
+ "602": {
"op": "dup",
"defined_out": [
"box_prefixed_key%8#0",
@@ -3143,7 +3176,7 @@
"box_prefixed_key%8#0 (copy)"
]
},
- "562": {
+ "603": {
"op": "box_len",
"defined_out": [
"_%4#0",
@@ -3160,7 +3193,7 @@
"maybe_exists%4#0"
]
},
- "563": {
+ "604": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -3169,7 +3202,7 @@
"maybe_exists%4#0"
]
},
- "565": {
+ "606": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -3178,7 +3211,7 @@
"box_prefixed_key%8#0"
]
},
- "566": {
+ "607": {
"op": "box_del",
"defined_out": [
"role_address#0",
@@ -3191,20 +3224,20 @@
"{box_del}"
]
},
- "567": {
+ "608": {
"op": "pop",
"stack_out": [
"role_address#0",
"role_id#1"
]
},
- "568": {
+ "609": {
"op": "b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12"
},
- "571": {
- "subroutine": "modules.rbac.RbacModule.rbac_gov_asset_suspension[routing]",
+ "612": {
+ "subroutine": "modules.rbac.RbacModule.rbac_contract_suspension[routing]",
"params": {},
- "block": "rbac_gov_asset_suspension",
+ "block": "rbac_contract_suspension",
"stack_in": [],
"op": "txna ApplicationArgs 1",
"defined_out": [
@@ -3214,7 +3247,7 @@
"tmp%0#0"
]
},
- "574": {
+ "615": {
"op": "dup",
"defined_out": [
"tmp%0#0",
@@ -3225,7 +3258,7 @@
"tmp%0#0 (copy)"
]
},
- "575": {
+ "616": {
"op": "len",
"defined_out": [
"len%0#0",
@@ -3236,7 +3269,7 @@
"len%0#0"
]
},
- "576": {
+ "617": {
"op": "intc_0 // 1",
"defined_out": [
"1",
@@ -3249,7 +3282,7 @@
"1"
]
},
- "577": {
+ "618": {
"op": "==",
"defined_out": [
"eq%0#0",
@@ -3260,14 +3293,14 @@
"eq%0#0"
]
},
- "578": {
+ "619": {
"error": "invalid number of bytes for arc4.bool",
"op": "assert // invalid number of bytes for arc4.bool",
"stack_out": [
"tmp%0#0"
]
},
- "579": {
+ "620": {
"op": "intc_1 // 0",
"defined_out": [
"0",
@@ -3278,7 +3311,7 @@
"0"
]
},
- "580": {
+ "621": {
"op": "getbit",
"defined_out": [
"suspended#0"
@@ -3287,31 +3320,31 @@
"suspended#0"
]
},
- "581": {
- "op": "bytec_2 // 0x52373023",
+ "622": {
+ "op": "bytec_3 // 0x523a41555423",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"suspended#0"
],
"stack_out": [
"suspended#0",
- "0x52373023"
+ "0x523a41555423"
]
},
- "582": {
+ "623": {
"op": "txn Sender",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"suspended#0",
"tmp%0#2"
],
"stack_out": [
"suspended#0",
- "0x52373023",
+ "0x523a41555423",
"tmp%0#2"
]
},
- "584": {
+ "625": {
"callsub": "modules.rbac.RbacModule._role_is_active",
"op": "callsub _role_is_active",
"defined_out": [
@@ -3323,36 +3356,36 @@
"tmp%1#0"
]
},
- "587": {
+ "628": {
"error": "Not authorized",
"op": "assert // Not authorized",
"stack_out": [
"suspended#0"
]
},
- "588": {
- "op": "bytec 8 // \"asset_suspended\"",
+ "629": {
+ "op": "bytec 9 // \"contract_suspended\"",
"defined_out": [
- "\"asset_suspended\"",
+ "\"contract_suspended\"",
"suspended#0"
],
"stack_out": [
"suspended#0",
- "\"asset_suspended\""
+ "\"contract_suspended\""
]
},
- "590": {
+ "631": {
"op": "swap",
"stack_out": [
- "\"asset_suspended\"",
+ "\"contract_suspended\"",
"suspended#0"
]
},
- "591": {
+ "632": {
"op": "app_global_put",
"stack_out": []
},
- "592": {
+ "633": {
"op": "global LatestTimestamp",
"defined_out": [
"tmp%0#1"
@@ -3361,7 +3394,7 @@
"tmp%0#1"
]
},
- "594": {
+ "635": {
"op": "itob",
"defined_out": [
"aggregate%val_as_bytes%0#0"
@@ -3370,7 +3403,7 @@
"aggregate%val_as_bytes%0#0"
]
},
- "595": {
+ "636": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -3381,14 +3414,14 @@
"0x151f7c75"
]
},
- "596": {
+ "637": {
"op": "swap",
"stack_out": [
"0x151f7c75",
"aggregate%val_as_bytes%0#0"
]
},
- "597": {
+ "638": {
"op": "concat",
"defined_out": [
"tmp%4#0"
@@ -3397,21 +3430,231 @@
"tmp%4#0"
]
},
- "598": {
+ "639": {
"op": "log",
"stack_out": []
},
- "599": {
+ "640": {
"op": "intc_0 // 1",
"stack_out": [
"1"
]
},
- "600": {
+ "641": {
"op": "return",
"stack_out": []
},
- "601": {
+ "642": {
+ "subroutine": "modules.rbac.RbacModule.rbac_contract_default[routing]",
+ "params": {},
+ "block": "rbac_contract_default",
+ "stack_in": [],
+ "op": "txna ApplicationArgs 1",
+ "defined_out": [
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "645": {
+ "op": "dup",
+ "defined_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "tmp%0#0 (copy)"
+ ]
+ },
+ "646": {
+ "op": "len",
+ "defined_out": [
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0"
+ ]
+ },
+ "647": {
+ "op": "intc_0 // 1",
+ "defined_out": [
+ "1",
+ "len%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "len%0#0",
+ "1"
+ ]
+ },
+ "648": {
+ "op": "==",
+ "defined_out": [
+ "eq%0#0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "eq%0#0"
+ ]
+ },
+ "649": {
+ "error": "invalid number of bytes for arc4.bool",
+ "op": "assert // invalid number of bytes for arc4.bool",
+ "stack_out": [
+ "tmp%0#0"
+ ]
+ },
+ "650": {
+ "op": "intc_1 // 0",
+ "defined_out": [
+ "0",
+ "tmp%0#0"
+ ],
+ "stack_out": [
+ "tmp%0#0",
+ "0"
+ ]
+ },
+ "651": {
+ "op": "getbit",
+ "defined_out": [
+ "defaulted#0"
+ ],
+ "stack_out": [
+ "defaulted#0"
+ ]
+ },
+ "652": {
+ "op": "bytec_2 // 0x523a54525323",
+ "defined_out": [
+ "0x523a54525323",
+ "defaulted#0"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "0x523a54525323"
+ ]
+ },
+ "653": {
+ "op": "txn Sender",
+ "defined_out": [
+ "0x523a54525323",
+ "defaulted#0",
+ "tmp%0#2"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "0x523a54525323",
+ "tmp%0#2"
+ ]
+ },
+ "655": {
+ "callsub": "modules.rbac.RbacModule._role_is_active",
+ "op": "callsub _role_is_active",
+ "defined_out": [
+ "defaulted#0",
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "tmp%1#0"
+ ]
+ },
+ "658": {
+ "error": "Not authorized",
+ "op": "assert // Not authorized",
+ "stack_out": [
+ "defaulted#0"
+ ]
+ },
+ "659": {
+ "op": "bytec 7 // \"defaulted\"",
+ "defined_out": [
+ "\"defaulted\"",
+ "defaulted#0"
+ ],
+ "stack_out": [
+ "defaulted#0",
+ "\"defaulted\""
+ ]
+ },
+ "661": {
+ "op": "swap",
+ "stack_out": [
+ "\"defaulted\"",
+ "defaulted#0"
+ ]
+ },
+ "662": {
+ "op": "app_global_put",
+ "stack_out": []
+ },
+ "663": {
+ "op": "global LatestTimestamp",
+ "defined_out": [
+ "tmp%0#1"
+ ],
+ "stack_out": [
+ "tmp%0#1"
+ ]
+ },
+ "665": {
+ "op": "itob",
+ "defined_out": [
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "666": {
+ "op": "bytec_0 // 0x151f7c75",
+ "defined_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ],
+ "stack_out": [
+ "aggregate%val_as_bytes%0#0",
+ "0x151f7c75"
+ ]
+ },
+ "667": {
+ "op": "swap",
+ "stack_out": [
+ "0x151f7c75",
+ "aggregate%val_as_bytes%0#0"
+ ]
+ },
+ "668": {
+ "op": "concat",
+ "defined_out": [
+ "tmp%4#0"
+ ],
+ "stack_out": [
+ "tmp%4#0"
+ ]
+ },
+ "669": {
+ "op": "log",
+ "stack_out": []
+ },
+ "670": {
+ "op": "intc_0 // 1",
+ "stack_out": [
+ "1"
+ ]
+ },
+ "671": {
+ "op": "return",
+ "stack_out": []
+ },
+ "672": {
"subroutine": "modules.rbac.RbacModule.rbac_get_arranger[routing]",
"params": {},
"block": "rbac_get_arranger",
@@ -3424,18 +3667,18 @@
"0"
]
},
- "602": {
- "op": "bytec_1 // 0x52323023",
+ "673": {
+ "op": "bytec_1 // 0x523a41525223",
"defined_out": [
"0",
- "0x52323023"
+ "0x523a41525223"
],
"stack_out": [
"0",
- "0x52323023"
+ "0x523a41525223"
]
},
- "603": {
+ "674": {
"op": "app_global_get_ex",
"defined_out": [
"maybe_exists%0#0",
@@ -3446,14 +3689,14 @@
"maybe_exists%0#0"
]
},
- "604": {
+ "675": {
"error": "check self.arranger exists",
"op": "assert // check self.arranger exists",
"stack_out": [
"maybe_value%0#0"
]
},
- "605": {
+ "676": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -3464,14 +3707,14 @@
"0x151f7c75"
]
},
- "606": {
+ "677": {
"op": "swap",
"stack_out": [
"0x151f7c75",
"maybe_value%0#0"
]
},
- "607": {
+ "678": {
"op": "concat",
"defined_out": [
"tmp%2#0"
@@ -3480,11 +3723,11 @@
"tmp%2#0"
]
},
- "608": {
+ "679": {
"op": "log",
"stack_out": []
},
- "609": {
+ "680": {
"op": "intc_0 // 1",
"defined_out": [
"1"
@@ -3493,11 +3736,11 @@
"1"
]
},
- "610": {
+ "681": {
"op": "return",
"stack_out": []
},
- "611": {
+ "682": {
"subroutine": "modules.rbac.RbacModule.rbac_get_address_roles[routing]",
"params": {},
"block": "rbac_get_address_roles",
@@ -3510,7 +3753,7 @@
"address#0"
]
},
- "614": {
+ "685": {
"op": "dup",
"defined_out": [
"address#0",
@@ -3521,7 +3764,7 @@
"address#0 (copy)"
]
},
- "615": {
+ "686": {
"op": "len",
"defined_out": [
"address#0",
@@ -3532,7 +3775,7 @@
"len%0#0"
]
},
- "616": {
+ "687": {
"op": "intc_2 // 32",
"defined_out": [
"32",
@@ -3545,7 +3788,7 @@
"32"
]
},
- "617": {
+ "688": {
"op": "==",
"defined_out": [
"address#0",
@@ -3556,33 +3799,33 @@
"eq%0#0"
]
},
- "618": {
+ "689": {
"error": "invalid number of bytes for arc4.static_array",
"op": "assert // invalid number of bytes for arc4.static_array",
"stack_out": [
"address#0"
]
},
- "619": {
- "op": "bytec_3 // 0x52343023",
+ "690": {
+ "op": "bytec 4 // 0x523a4d4e4723",
"defined_out": [
- "0x52343023",
+ "0x523a4d4e4723",
"address#0"
],
"stack_out": [
"address#0",
- "0x52343023"
+ "0x523a4d4e4723"
]
},
- "620": {
+ "692": {
"op": "dig 1",
"stack_out": [
"address#0",
- "0x52343023",
+ "0x523a4d4e4723",
"address#0 (copy)"
]
},
- "622": {
+ "694": {
"callsub": "modules.rbac.RbacModule._role_is_active",
"op": "callsub _role_is_active",
"defined_out": [
@@ -3594,29 +3837,29 @@
"tmp%0#1"
]
},
- "625": {
- "op": "bytec 4 // 0x52353023",
+ "697": {
+ "op": "bytec 5 // 0x523a50594423",
"defined_out": [
- "0x52353023",
+ "0x523a50594423",
"address#0",
"tmp%0#1"
],
"stack_out": [
"address#0",
"tmp%0#1",
- "0x52353023"
+ "0x523a50594423"
]
},
- "627": {
+ "699": {
"op": "dig 2",
"stack_out": [
"address#0",
"tmp%0#1",
- "0x52353023",
+ "0x523a50594423",
"address#0 (copy)"
]
},
- "629": {
+ "701": {
"callsub": "modules.rbac.RbacModule._role_is_active",
"op": "callsub _role_is_active",
"defined_out": [
@@ -3630,10 +3873,10 @@
"tmp%1#1"
]
},
- "632": {
- "op": "bytec 5 // 0x52363023",
+ "704": {
+ "op": "bytec_2 // 0x523a54525323",
"defined_out": [
- "0x52363023",
+ "0x523a54525323",
"address#0",
"tmp%0#1",
"tmp%1#1"
@@ -3642,20 +3885,20 @@
"address#0",
"tmp%0#1",
"tmp%1#1",
- "0x52363023"
+ "0x523a54525323"
]
},
- "634": {
+ "705": {
"op": "dig 3",
"stack_out": [
"address#0",
"tmp%0#1",
"tmp%1#1",
- "0x52363023",
+ "0x523a54525323",
"address#0 (copy)"
]
},
- "636": {
+ "707": {
"callsub": "modules.rbac.RbacModule._role_is_active",
"op": "callsub _role_is_active",
"defined_out": [
@@ -3671,10 +3914,10 @@
"tmp%2#1"
]
},
- "639": {
- "op": "bytec_2 // 0x52373023",
+ "710": {
+ "op": "bytec_3 // 0x523a41555423",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"address#0",
"tmp%0#1",
"tmp%1#1",
@@ -3685,21 +3928,21 @@
"tmp%0#1",
"tmp%1#1",
"tmp%2#1",
- "0x52373023"
+ "0x523a41555423"
]
},
- "640": {
+ "711": {
"op": "dig 4",
"stack_out": [
"address#0",
"tmp%0#1",
"tmp%1#1",
"tmp%2#1",
- "0x52373023",
+ "0x523a41555423",
"address#0 (copy)"
]
},
- "642": {
+ "713": {
"callsub": "modules.rbac.RbacModule._role_is_active",
"op": "callsub _role_is_active",
"defined_out": [
@@ -3717,10 +3960,10 @@
"tmp%3#1"
]
},
- "645": {
- "op": "bytec 6 // 0x52383023",
+ "716": {
+ "op": "bytec 6 // 0x523a4d4f4323",
"defined_out": [
- "0x52383023",
+ "0x523a4d4f4323",
"address#0",
"tmp%0#1",
"tmp%1#1",
@@ -3733,21 +3976,21 @@
"tmp%1#1",
"tmp%2#1",
"tmp%3#1",
- "0x52383023"
+ "0x523a4d4f4323"
]
},
- "647": {
+ "718": {
"op": "uncover 5",
"stack_out": [
"tmp%0#1",
"tmp%1#1",
"tmp%2#1",
"tmp%3#1",
- "0x52383023",
+ "0x523a4d4f4323",
"address#0"
]
},
- "649": {
+ "720": {
"callsub": "modules.rbac.RbacModule._role_is_active",
"op": "callsub _role_is_active",
"defined_out": [
@@ -3765,7 +4008,7 @@
"tmp%4#1"
]
},
- "652": {
+ "723": {
"op": "pushbytes 0x00",
"defined_out": [
"0x00",
@@ -3784,7 +4027,7 @@
"0x00"
]
},
- "655": {
+ "726": {
"op": "intc_1 // 0",
"defined_out": [
"0",
@@ -3805,7 +4048,7 @@
"0"
]
},
- "656": {
+ "727": {
"op": "uncover 6",
"stack_out": [
"tmp%1#1",
@@ -3817,7 +4060,7 @@
"tmp%0#1"
]
},
- "658": {
+ "729": {
"op": "setbit",
"defined_out": [
"aggregate%encoded_bool%0#0",
@@ -3834,7 +4077,7 @@
"aggregate%encoded_bool%0#0"
]
},
- "659": {
+ "730": {
"op": "intc_0 // 1",
"defined_out": [
"1",
@@ -3853,7 +4096,7 @@
"1"
]
},
- "660": {
+ "731": {
"op": "uncover 5",
"stack_out": [
"tmp%2#1",
@@ -3864,7 +4107,7 @@
"tmp%1#1"
]
},
- "662": {
+ "733": {
"op": "setbit",
"defined_out": [
"aggregate%set_bit%0#0",
@@ -3879,7 +4122,7 @@
"aggregate%set_bit%0#0"
]
},
- "663": {
+ "734": {
"op": "pushint 2",
"defined_out": [
"2",
@@ -3896,7 +4139,7 @@
"2"
]
},
- "665": {
+ "736": {
"op": "uncover 4",
"stack_out": [
"tmp%3#1",
@@ -3906,7 +4149,7 @@
"tmp%2#1"
]
},
- "667": {
+ "738": {
"op": "setbit",
"defined_out": [
"aggregate%set_bit%1#0",
@@ -3919,7 +4162,7 @@
"aggregate%set_bit%1#0"
]
},
- "668": {
+ "739": {
"op": "pushint 3",
"defined_out": [
"3",
@@ -3934,7 +4177,7 @@
"3"
]
},
- "670": {
+ "741": {
"op": "uncover 3",
"stack_out": [
"tmp%4#1",
@@ -3943,7 +4186,7 @@
"tmp%3#1"
]
},
- "672": {
+ "743": {
"op": "setbit",
"defined_out": [
"aggregate%set_bit%2#0",
@@ -3954,7 +4197,7 @@
"aggregate%set_bit%2#0"
]
},
- "673": {
+ "744": {
"op": "pushint 4",
"defined_out": [
"4",
@@ -3967,7 +4210,7 @@
"4"
]
},
- "675": {
+ "746": {
"op": "uncover 2",
"stack_out": [
"aggregate%set_bit%2#0",
@@ -3975,7 +4218,7 @@
"tmp%4#1"
]
},
- "677": {
+ "748": {
"op": "setbit",
"defined_out": [
"aggregate%set_bit%3#0"
@@ -3984,7 +4227,7 @@
"aggregate%set_bit%3#0"
]
},
- "678": {
+ "749": {
"op": "bytec_0 // 0x151f7c75",
"defined_out": [
"0x151f7c75",
@@ -3995,14 +4238,14 @@
"0x151f7c75"
]
},
- "679": {
+ "750": {
"op": "swap",
"stack_out": [
"0x151f7c75",
"aggregate%set_bit%3#0"
]
},
- "680": {
+ "751": {
"op": "concat",
"defined_out": [
"tmp%8#0"
@@ -4011,24 +4254,24 @@
"tmp%8#0"
]
},
- "681": {
+ "752": {
"op": "log",
"stack_out": []
},
- "682": {
+ "753": {
"op": "intc_0 // 1",
"stack_out": [
"1"
]
},
- "683": {
+ "754": {
"op": "return",
"stack_out": []
},
- "684": {
- "subroutine": "modules.rbac.RbacModule.rbac_get_role_config[routing]",
+ "755": {
+ "subroutine": "modules.rbac.RbacModule.rbac_get_role_validity[routing]",
"params": {},
- "block": "rbac_get_role_config",
+ "block": "rbac_get_role_validity",
"stack_in": [],
"op": "txna ApplicationArgs 1",
"defined_out": [
@@ -4038,7 +4281,7 @@
"role_id#0"
]
},
- "687": {
+ "758": {
"op": "dup",
"defined_out": [
"role_id#0",
@@ -4049,7 +4292,7 @@
"role_id#0 (copy)"
]
},
- "688": {
+ "759": {
"op": "len",
"defined_out": [
"len%0#0",
@@ -4060,7 +4303,7 @@
"len%0#0"
]
},
- "689": {
+ "760": {
"op": "intc_0 // 1",
"defined_out": [
"1",
@@ -4073,7 +4316,7 @@
"1"
]
},
- "690": {
+ "761": {
"op": "==",
"defined_out": [
"eq%0#0",
@@ -4084,17 +4327,17 @@
"eq%0#0"
]
},
- "691": {
+ "762": {
"error": "invalid number of bytes for arc4.uint8",
"op": "assert // invalid number of bytes for arc4.uint8",
"stack_out": [
"role_id#0"
]
},
- "692": {
+ "763": {
"op": "txna ApplicationArgs 2"
},
- "695": {
+ "766": {
"op": "dup",
"defined_out": [
"role_address#0",
@@ -4106,7 +4349,7 @@
"role_address#0"
]
},
- "696": {
+ "767": {
"op": "cover 2",
"defined_out": [
"role_address#0",
@@ -4118,7 +4361,7 @@
"role_address#0"
]
},
- "698": {
+ "769": {
"op": "len",
"defined_out": [
"len%1#0",
@@ -4131,7 +4374,7 @@
"len%1#0"
]
},
- "699": {
+ "770": {
"op": "intc_2 // 32",
"defined_out": [
"32",
@@ -4146,7 +4389,7 @@
"32"
]
},
- "700": {
+ "771": {
"op": "==",
"defined_out": [
"eq%1#0",
@@ -4159,7 +4402,7 @@
"eq%1#0"
]
},
- "701": {
+ "772": {
"error": "invalid number of bytes for arc4.static_array",
"op": "assert // invalid number of bytes for arc4.static_array",
"stack_out": [
@@ -4167,7 +4410,7 @@
"role_id#0"
]
},
- "702": {
+ "773": {
"op": "btoi",
"defined_out": [
"role#0",
@@ -4178,7 +4421,7 @@
"role#0"
]
},
- "703": {
+ "774": {
"op": "dup",
"defined_out": [
"role#0",
@@ -4191,7 +4434,7 @@
"role#0 (copy)"
]
},
- "704": {
+ "775": {
"callsub": "modules.rbac.RbacModule._assert_valid_role",
"op": "callsub _assert_valid_role",
"stack_out": [
@@ -4199,7 +4442,7 @@
"role#0"
]
},
- "707": {
+ "778": {
"op": "intc_3 // 20",
"defined_out": [
"20",
@@ -4212,7 +4455,7 @@
"20"
]
},
- "708": {
+ "779": {
"op": "pushints 40 50 60 70 80",
"defined_out": [
"20",
@@ -4235,7 +4478,7 @@
"80"
]
},
- "715": {
+ "786": {
"op": "uncover 6",
"stack_out": [
"role_address#0",
@@ -4248,43 +4491,43 @@
"role#0"
]
},
- "717": {
- "op": "match rbac_get_role_config_switch_case_0@2 rbac_get_role_config_switch_case_1@3 rbac_get_role_config_switch_case_2@4 rbac_get_role_config_switch_case_3@5 rbac_get_role_config_switch_case_4@6 rbac_get_role_config_switch_case_5@7",
+ "788": {
+ "op": "match rbac_get_role_validity_switch_case_0@2 rbac_get_role_validity_switch_case_1@3 rbac_get_role_validity_switch_case_2@4 rbac_get_role_validity_switch_case_3@5 rbac_get_role_validity_switch_case_4@6 rbac_get_role_validity_switch_case_5@7",
"stack_out": [
"role_address#0"
]
},
- "731": {
+ "802": {
"error": "Invalid role identifier",
"op": "err // Invalid role identifier"
},
- "732": {
- "block": "rbac_get_role_config_switch_case_5@7",
+ "803": {
+ "block": "rbac_get_role_validity_switch_case_5@7",
"stack_in": [
"role_address#0"
],
- "op": "bytec 6 // 0x52383023",
+ "op": "bytec 6 // 0x523a4d4f4323",
"defined_out": [
- "0x52383023"
+ "0x523a4d4f4323"
],
"stack_out": [
"role_address#0",
- "0x52383023"
+ "0x523a4d4f4323"
]
},
- "734": {
+ "805": {
"op": "dig 1",
"defined_out": [
- "0x52383023",
+ "0x523a4d4f4323",
"role_address#0"
],
"stack_out": [
"role_address#0",
- "0x52383023",
+ "0x523a4d4f4323",
"role_address#0"
]
},
- "736": {
+ "807": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4295,7 +4538,7 @@
"box_prefixed_key%0#1"
]
},
- "737": {
+ "808": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4308,7 +4551,7 @@
"box_prefixed_key%0#1 (copy)"
]
},
- "738": {
+ "809": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -4323,7 +4566,7 @@
"maybe_exists%0#0"
]
},
- "739": {
+ "810": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -4331,7 +4574,7 @@
"maybe_exists%0#0"
]
},
- "741": {
+ "812": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -4339,7 +4582,7 @@
"box_prefixed_key%0#1"
]
},
- "742": {
+ "813": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%8#0",
@@ -4352,7 +4595,7 @@
"aggregate%box_get%9#0"
]
},
- "743": {
+ "814": {
"op": "pop",
"defined_out": [
"role_address#0",
@@ -4363,8 +4606,8 @@
"tmp%3#0"
]
},
- "744": {
- "block": "rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9",
+ "815": {
+ "block": "rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9",
"stack_in": [
"role_address#0",
"tmp%3#0"
@@ -4379,7 +4622,7 @@
"0x151f7c75"
]
},
- "745": {
+ "816": {
"op": "swap",
"defined_out": [
"0x151f7c75",
@@ -4391,7 +4634,7 @@
"tmp%3#0"
]
},
- "746": {
+ "817": {
"op": "concat",
"defined_out": [
"tmp%4#0"
@@ -4401,13 +4644,13 @@
"tmp%4#0"
]
},
- "747": {
+ "818": {
"op": "log",
"stack_out": [
"role_address#0"
]
},
- "748": {
+ "819": {
"op": "intc_0 // 1",
"defined_out": [
"1"
@@ -4417,39 +4660,39 @@
"1"
]
},
- "749": {
+ "820": {
"op": "return",
"stack_out": [
"role_address#0"
]
},
- "750": {
- "block": "rbac_get_role_config_switch_case_4@6",
+ "821": {
+ "block": "rbac_get_role_validity_switch_case_4@6",
"stack_in": [
"role_address#0"
],
- "op": "bytec_2 // 0x52373023",
+ "op": "bytec_3 // 0x523a41555423",
"defined_out": [
- "0x52373023"
+ "0x523a41555423"
],
"stack_out": [
"role_address#0",
- "0x52373023"
+ "0x523a41555423"
]
},
- "751": {
+ "822": {
"op": "dig 1",
"defined_out": [
- "0x52373023",
+ "0x523a41555423",
"role_address#0"
],
"stack_out": [
"role_address#0",
- "0x52373023",
+ "0x523a41555423",
"role_address#0"
]
},
- "753": {
+ "824": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4460,7 +4703,7 @@
"box_prefixed_key%0#1"
]
},
- "754": {
+ "825": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4473,7 +4716,7 @@
"box_prefixed_key%0#1 (copy)"
]
},
- "755": {
+ "826": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -4488,7 +4731,7 @@
"maybe_exists%0#0"
]
},
- "756": {
+ "827": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -4496,7 +4739,7 @@
"maybe_exists%0#0"
]
},
- "758": {
+ "829": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -4504,7 +4747,7 @@
"box_prefixed_key%0#1"
]
},
- "759": {
+ "830": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%6#0",
@@ -4517,7 +4760,7 @@
"aggregate%box_get%7#0"
]
},
- "760": {
+ "831": {
"op": "pop",
"defined_out": [
"role_address#0",
@@ -4528,36 +4771,36 @@
"tmp%3#0"
]
},
- "761": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
+ "832": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
},
- "764": {
- "block": "rbac_get_role_config_switch_case_3@5",
+ "835": {
+ "block": "rbac_get_role_validity_switch_case_3@5",
"stack_in": [
"role_address#0"
],
- "op": "bytec 5 // 0x52363023",
+ "op": "bytec_2 // 0x523a54525323",
"defined_out": [
- "0x52363023"
+ "0x523a54525323"
],
"stack_out": [
"role_address#0",
- "0x52363023"
+ "0x523a54525323"
]
},
- "766": {
+ "836": {
"op": "dig 1",
"defined_out": [
- "0x52363023",
+ "0x523a54525323",
"role_address#0"
],
"stack_out": [
"role_address#0",
- "0x52363023",
+ "0x523a54525323",
"role_address#0"
]
},
- "768": {
+ "838": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4568,7 +4811,7 @@
"box_prefixed_key%0#1"
]
},
- "769": {
+ "839": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4581,7 +4824,7 @@
"box_prefixed_key%0#1 (copy)"
]
},
- "770": {
+ "840": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -4596,7 +4839,7 @@
"maybe_exists%0#0"
]
},
- "771": {
+ "841": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -4604,7 +4847,7 @@
"maybe_exists%0#0"
]
},
- "773": {
+ "843": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -4612,7 +4855,7 @@
"box_prefixed_key%0#1"
]
},
- "774": {
+ "844": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%4#0",
@@ -4625,7 +4868,7 @@
"aggregate%box_get%5#0"
]
},
- "775": {
+ "845": {
"op": "pop",
"defined_out": [
"role_address#0",
@@ -4636,36 +4879,36 @@
"tmp%3#0"
]
},
- "776": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
+ "846": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
},
- "779": {
- "block": "rbac_get_role_config_switch_case_2@4",
+ "849": {
+ "block": "rbac_get_role_validity_switch_case_2@4",
"stack_in": [
"role_address#0"
],
- "op": "bytec 4 // 0x52353023",
+ "op": "bytec 5 // 0x523a50594423",
"defined_out": [
- "0x52353023"
+ "0x523a50594423"
],
"stack_out": [
"role_address#0",
- "0x52353023"
+ "0x523a50594423"
]
},
- "781": {
+ "851": {
"op": "dig 1",
"defined_out": [
- "0x52353023",
+ "0x523a50594423",
"role_address#0"
],
"stack_out": [
"role_address#0",
- "0x52353023",
+ "0x523a50594423",
"role_address#0"
]
},
- "783": {
+ "853": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4676,7 +4919,7 @@
"box_prefixed_key%0#1"
]
},
- "784": {
+ "854": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4689,7 +4932,7 @@
"box_prefixed_key%0#1 (copy)"
]
},
- "785": {
+ "855": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -4704,7 +4947,7 @@
"maybe_exists%0#0"
]
},
- "786": {
+ "856": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -4712,7 +4955,7 @@
"maybe_exists%0#0"
]
},
- "788": {
+ "858": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -4720,7 +4963,7 @@
"box_prefixed_key%0#1"
]
},
- "789": {
+ "859": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%2#0",
@@ -4733,7 +4976,7 @@
"aggregate%box_get%3#0"
]
},
- "790": {
+ "860": {
"op": "pop",
"defined_out": [
"role_address#0",
@@ -4744,36 +4987,36 @@
"tmp%3#0"
]
},
- "791": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
+ "861": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
},
- "794": {
- "block": "rbac_get_role_config_switch_case_1@3",
+ "864": {
+ "block": "rbac_get_role_validity_switch_case_1@3",
"stack_in": [
"role_address#0"
],
- "op": "bytec_3 // 0x52343023",
+ "op": "bytec 4 // 0x523a4d4e4723",
"defined_out": [
- "0x52343023"
+ "0x523a4d4e4723"
],
"stack_out": [
"role_address#0",
- "0x52343023"
+ "0x523a4d4e4723"
]
},
- "795": {
+ "866": {
"op": "dig 1",
"defined_out": [
- "0x52343023",
+ "0x523a4d4e4723",
"role_address#0"
],
"stack_out": [
"role_address#0",
- "0x52343023",
+ "0x523a4d4e4723",
"role_address#0"
]
},
- "797": {
+ "868": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4784,7 +5027,7 @@
"box_prefixed_key%0#1"
]
},
- "798": {
+ "869": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#1",
@@ -4797,7 +5040,7 @@
"box_prefixed_key%0#1 (copy)"
]
},
- "799": {
+ "870": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -4812,7 +5055,7 @@
"maybe_exists%0#0"
]
},
- "800": {
+ "871": {
"op": "bury 1",
"stack_out": [
"role_address#0",
@@ -4820,7 +5063,7 @@
"maybe_exists%0#0"
]
},
- "802": {
+ "873": {
"error": "Invalid account role address",
"op": "assert // Invalid account role address",
"stack_out": [
@@ -4828,7 +5071,7 @@
"box_prefixed_key%0#1"
]
},
- "803": {
+ "874": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%0#0",
@@ -4841,7 +5084,7 @@
"aggregate%box_get%1#0"
]
},
- "804": {
+ "875": {
"op": "pop",
"defined_out": [
"role_address#0",
@@ -4852,11 +5095,11 @@
"tmp%3#0"
]
},
- "805": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
+ "876": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
},
- "808": {
- "block": "rbac_get_role_config_switch_case_0@2",
+ "879": {
+ "block": "rbac_get_role_validity_switch_case_0@2",
"stack_in": [
"role_address#0"
],
@@ -4869,10 +5112,10 @@
"tmp%3#0"
]
},
- "826": {
- "op": "b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9"
+ "897": {
+ "op": "b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9"
},
- "829": {
+ "900": {
"subroutine": "modules.rbac.RbacModule._role_is_active",
"params": {
"role_map#0": "bytes",
@@ -4882,13 +5125,13 @@
"stack_in": [],
"op": "proto 2 1"
},
- "832": {
+ "903": {
"op": "pushbytes \"\"",
"stack_out": [
"awst_tmp%0#0"
]
},
- "834": {
+ "905": {
"op": "frame_dig -2",
"defined_out": [
"role_map#0 (copy)"
@@ -4898,7 +5141,7 @@
"role_map#0 (copy)"
]
},
- "836": {
+ "907": {
"op": "frame_dig -1",
"defined_out": [
"role_address#0 (copy)",
@@ -4910,7 +5153,7 @@
"role_address#0 (copy)"
]
},
- "838": {
+ "909": {
"op": "concat",
"defined_out": [
"box_prefixed_key%0#1"
@@ -4920,7 +5163,7 @@
"box_prefixed_key%0#1"
]
},
- "839": {
+ "910": {
"op": "dup",
"defined_out": [
"box_prefixed_key%0#1"
@@ -4931,7 +5174,7 @@
"box_prefixed_key%0#1"
]
},
- "840": {
+ "911": {
"op": "box_len",
"defined_out": [
"_%0#0",
@@ -4945,7 +5188,7 @@
"maybe_exists%0#0"
]
},
- "841": {
+ "912": {
"op": "bury 1",
"stack_out": [
"awst_tmp%0#0",
@@ -4953,14 +5196,14 @@
"maybe_exists%0#0"
]
},
- "843": {
+ "914": {
"op": "bz _role_is_active_bool_false@4",
"stack_out": [
"awst_tmp%0#0",
"box_prefixed_key%0#1"
]
},
- "846": {
+ "917": {
"op": "frame_dig 1",
"stack_out": [
"awst_tmp%0#0",
@@ -4968,7 +5211,7 @@
"box_prefixed_key%0#1"
]
},
- "848": {
+ "919": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%0#0",
@@ -4982,7 +5225,7 @@
"aggregate%box_get%1#0"
]
},
- "849": {
+ "920": {
"error": "check BoxMap entry exists",
"op": "assert // check BoxMap entry exists",
"stack_out": [
@@ -4991,7 +5234,7 @@
"aggregate%box_get%0#0"
]
},
- "850": {
+ "921": {
"op": "intc_1 // 0",
"stack_out": [
"awst_tmp%0#0",
@@ -5000,7 +5243,7 @@
"0"
]
},
- "851": {
+ "922": {
"op": "extract_uint64",
"defined_out": [
"box_prefixed_key%0#1",
@@ -5012,10 +5255,10 @@
"values%0#0"
]
},
- "852": {
+ "923": {
"op": "global LatestTimestamp"
},
- "854": {
+ "925": {
"op": "dup",
"defined_out": [
"awst_tmp%0#0",
@@ -5030,7 +5273,7 @@
"awst_tmp%0#0"
]
},
- "855": {
+ "926": {
"op": "frame_bury 0",
"defined_out": [
"awst_tmp%0#0",
@@ -5044,7 +5287,7 @@
"awst_tmp%0#0"
]
},
- "857": {
+ "928": {
"op": "<=",
"defined_out": [
"awst_tmp%0#0",
@@ -5057,14 +5300,14 @@
"tmp%1#0"
]
},
- "858": {
+ "929": {
"op": "bz _role_is_active_bool_false@4",
"stack_out": [
"awst_tmp%0#0",
"box_prefixed_key%0#1"
]
},
- "861": {
+ "932": {
"op": "frame_dig 1",
"stack_out": [
"awst_tmp%0#0",
@@ -5072,7 +5315,7 @@
"box_prefixed_key%0#1"
]
},
- "863": {
+ "934": {
"op": "box_get",
"defined_out": [
"aggregate%box_get%2#0",
@@ -5087,7 +5330,7 @@
"aggregate%box_get%3#0"
]
},
- "864": {
+ "935": {
"error": "check BoxMap entry exists",
"op": "assert // check BoxMap entry exists",
"stack_out": [
@@ -5096,7 +5339,7 @@
"aggregate%box_get%2#0"
]
},
- "865": {
+ "936": {
"op": "pushint 8",
"defined_out": [
"8",
@@ -5111,7 +5354,7 @@
"8"
]
},
- "867": {
+ "938": {
"op": "extract_uint64",
"defined_out": [
"awst_tmp%0#0",
@@ -5124,7 +5367,7 @@
"values%1#0"
]
},
- "868": {
+ "939": {
"op": "frame_dig 0",
"stack_out": [
"awst_tmp%0#0",
@@ -5133,7 +5376,7 @@
"awst_tmp%0#0"
]
},
- "870": {
+ "941": {
"op": ">=",
"defined_out": [
"awst_tmp%0#0",
@@ -5146,14 +5389,14 @@
"tmp%2#0"
]
},
- "871": {
+ "942": {
"op": "bz _role_is_active_bool_false@4",
"stack_out": [
"awst_tmp%0#0",
"box_prefixed_key%0#1"
]
},
- "874": {
+ "945": {
"op": "intc_0 // 1",
"defined_out": [
"and_result%0#0",
@@ -5166,7 +5409,7 @@
"and_result%0#0"
]
},
- "875": {
+ "946": {
"block": "_role_is_active_bool_merge@5",
"stack_in": [
"awst_tmp%0#0",
@@ -5178,11 +5421,11 @@
"and_result%0#0"
]
},
- "877": {
+ "948": {
"retsub": true,
"op": "retsub"
},
- "878": {
+ "949": {
"block": "_role_is_active_bool_false@4",
"stack_in": [
"awst_tmp%0#0",
@@ -5198,13 +5441,13 @@
"and_result%0#0"
]
},
- "879": {
+ "950": {
"op": "b _role_is_active_bool_merge@5"
},
- "882": {
- "subroutine": "modules.rbac.RbacModule.assert_caller_is_arranger",
+ "953": {
+ "subroutine": "modules.rbac.RbacModule._assert_caller_is_arranger",
"params": {},
- "block": "assert_caller_is_arranger",
+ "block": "_assert_caller_is_arranger",
"stack_in": [],
"op": "txn Sender",
"defined_out": [
@@ -5214,7 +5457,7 @@
"role_address#0"
]
},
- "884": {
+ "955": {
"op": "intc_1 // 0",
"defined_out": [
"0",
@@ -5225,20 +5468,20 @@
"0"
]
},
- "885": {
- "op": "bytec_1 // 0x52323023",
+ "956": {
+ "op": "bytec_1 // 0x523a41525223",
"defined_out": [
"0",
- "0x52323023",
+ "0x523a41525223",
"role_address#0"
],
"stack_out": [
"role_address#0",
"0",
- "0x52323023"
+ "0x523a41525223"
]
},
- "886": {
+ "957": {
"op": "app_global_get_ex",
"defined_out": [
"maybe_exists%0#0",
@@ -5251,7 +5494,7 @@
"maybe_exists%0#0"
]
},
- "887": {
+ "958": {
"error": "check self.arranger exists",
"op": "assert // check self.arranger exists",
"stack_out": [
@@ -5259,7 +5502,7 @@
"maybe_value%0#0"
]
},
- "888": {
+ "959": {
"op": "==",
"defined_out": [
"tmp%0#1"
@@ -5268,19 +5511,19 @@
"tmp%0#1"
]
},
- "889": {
+ "960": {
"error": "Not authorized",
"op": "assert // Not authorized",
"stack_out": []
},
- "890": {
+ "961": {
"retsub": true,
"op": "retsub"
},
- "891": {
- "subroutine": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
+ "962": {
+ "subroutine": "modules.rbac.RbacModule._assert_is_not_contract_defaulted",
"params": {},
- "block": "assert_is_not_asset_defaulted",
+ "block": "_assert_is_not_contract_defaulted",
"stack_in": [],
"op": "intc_1 // 0",
"defined_out": [
@@ -5290,18 +5533,18 @@
"0"
]
},
- "892": {
- "op": "bytec 9 // \"asset_defaulted\"",
+ "963": {
+ "op": "bytec 7 // \"defaulted\"",
"defined_out": [
- "\"asset_defaulted\"",
+ "\"defaulted\"",
"0"
],
"stack_out": [
"0",
- "\"asset_defaulted\""
+ "\"defaulted\""
]
},
- "894": {
+ "965": {
"op": "app_global_get_ex",
"defined_out": [
"maybe_exists%0#0",
@@ -5312,14 +5555,14 @@
"maybe_exists%0#0"
]
},
- "895": {
- "error": "check self.asset_defaulted exists",
- "op": "assert // check self.asset_defaulted exists",
+ "966": {
+ "error": "check self.defaulted exists",
+ "op": "assert // check self.defaulted exists",
"stack_out": [
"maybe_value%0#0"
]
},
- "896": {
+ "967": {
"op": "!",
"defined_out": [
"tmp%0#0"
@@ -5328,16 +5571,16 @@
"tmp%0#0"
]
},
- "897": {
+ "968": {
"error": "Defaulted",
"op": "assert // Defaulted",
"stack_out": []
},
- "898": {
+ "969": {
"retsub": true,
"op": "retsub"
},
- "899": {
+ "970": {
"subroutine": "modules.rbac.RbacModule._assert_valid_role",
"params": {
"role_id#0": "uint64"
@@ -5346,7 +5589,7 @@
"stack_in": [],
"op": "proto 1 0"
},
- "902": {
+ "973": {
"op": "frame_dig -1",
"defined_out": [
"role_id#0 (copy)"
@@ -5355,7 +5598,7 @@
"role_id#0 (copy)"
]
},
- "904": {
+ "975": {
"op": "intc_3 // 20",
"defined_out": [
"20",
@@ -5366,7 +5609,7 @@
"20"
]
},
- "905": {
+ "976": {
"op": "==",
"defined_out": [
"tmp%0#0"
@@ -5375,17 +5618,47 @@
"tmp%0#0"
]
},
- "906": {
- "op": "bnz _assert_valid_role_bool_true@6",
+ "977": {
+ "op": "bnz _assert_valid_role_bool_true@7",
"stack_out": []
},
- "909": {
+ "980": {
"op": "frame_dig -1",
"stack_out": [
"role_id#0 (copy)"
]
},
- "911": {
+ "982": {
+ "op": "pushint 25",
+ "defined_out": [
+ "25",
+ "role_id#0 (copy)"
+ ],
+ "stack_out": [
+ "role_id#0 (copy)",
+ "25"
+ ]
+ },
+ "984": {
+ "op": "==",
+ "defined_out": [
+ "tmp%1#0"
+ ],
+ "stack_out": [
+ "tmp%1#0"
+ ]
+ },
+ "985": {
+ "op": "bnz _assert_valid_role_bool_true@7",
+ "stack_out": []
+ },
+ "988": {
+ "op": "frame_dig -1",
+ "stack_out": [
+ "role_id#0 (copy)"
+ ]
+ },
+ "990": {
"op": "pushint 40",
"defined_out": [
"40",
@@ -5396,26 +5669,26 @@
"40"
]
},
- "913": {
+ "992": {
"op": "==",
"defined_out": [
- "tmp%1#0"
+ "tmp%2#0"
],
"stack_out": [
- "tmp%1#0"
+ "tmp%2#0"
]
},
- "914": {
- "op": "bnz _assert_valid_role_bool_true@6",
+ "993": {
+ "op": "bnz _assert_valid_role_bool_true@7",
"stack_out": []
},
- "917": {
+ "996": {
"op": "frame_dig -1",
"stack_out": [
"role_id#0 (copy)"
]
},
- "919": {
+ "998": {
"op": "pushint 50",
"defined_out": [
"50",
@@ -5426,26 +5699,26 @@
"50"
]
},
- "921": {
+ "1000": {
"op": "==",
"defined_out": [
- "tmp%2#0"
+ "tmp%3#0"
],
"stack_out": [
- "tmp%2#0"
+ "tmp%3#0"
]
},
- "922": {
- "op": "bnz _assert_valid_role_bool_true@6",
+ "1001": {
+ "op": "bnz _assert_valid_role_bool_true@7",
"stack_out": []
},
- "925": {
+ "1004": {
"op": "frame_dig -1",
"stack_out": [
"role_id#0 (copy)"
]
},
- "927": {
+ "1006": {
"op": "pushint 60",
"defined_out": [
"60",
@@ -5456,26 +5729,26 @@
"60"
]
},
- "929": {
+ "1008": {
"op": "==",
"defined_out": [
- "tmp%3#0"
+ "tmp%4#0"
],
"stack_out": [
- "tmp%3#0"
+ "tmp%4#0"
]
},
- "930": {
- "op": "bnz _assert_valid_role_bool_true@6",
+ "1009": {
+ "op": "bnz _assert_valid_role_bool_true@7",
"stack_out": []
},
- "933": {
+ "1012": {
"op": "frame_dig -1",
"stack_out": [
"role_id#0 (copy)"
]
},
- "935": {
+ "1014": {
"op": "pushint 70",
"defined_out": [
"70",
@@ -5486,26 +5759,26 @@
"70"
]
},
- "937": {
+ "1016": {
"op": "==",
"defined_out": [
- "tmp%4#0"
+ "tmp%5#0"
],
"stack_out": [
- "tmp%4#0"
+ "tmp%5#0"
]
},
- "938": {
- "op": "bnz _assert_valid_role_bool_true@6",
+ "1017": {
+ "op": "bnz _assert_valid_role_bool_true@7",
"stack_out": []
},
- "941": {
+ "1020": {
"op": "frame_dig -1",
"stack_out": [
"role_id#0 (copy)"
]
},
- "943": {
+ "1022": {
"op": "pushint 80",
"defined_out": [
"80",
@@ -5516,21 +5789,21 @@
"80"
]
},
- "945": {
+ "1024": {
"op": "==",
"defined_out": [
- "tmp%5#0"
+ "tmp%6#0"
],
"stack_out": [
- "tmp%5#0"
+ "tmp%6#0"
]
},
- "946": {
- "op": "bz _assert_valid_role_bool_false@7",
+ "1025": {
+ "op": "bz _assert_valid_role_bool_false@8",
"stack_out": []
},
- "949": {
- "block": "_assert_valid_role_bool_true@6",
+ "1028": {
+ "block": "_assert_valid_role_bool_true@7",
"stack_in": [],
"op": "intc_0 // 1",
"defined_out": [
@@ -5540,9 +5813,9 @@
"or_result%0#0"
]
},
- "950": {
+ "1029": {
"error": "Invalid role identifier",
- "block": "_assert_valid_role_bool_merge@8",
+ "block": "_assert_valid_role_bool_merge@9",
"stack_in": [
"or_result%0#0"
],
@@ -5550,12 +5823,12 @@
"defined_out": [],
"stack_out": []
},
- "951": {
+ "1030": {
"retsub": true,
"op": "retsub"
},
- "952": {
- "block": "_assert_valid_role_bool_false@7",
+ "1031": {
+ "block": "_assert_valid_role_bool_false@8",
"stack_in": [],
"op": "intc_1 // 0",
"defined_out": [
@@ -5565,8 +5838,8 @@
"or_result%0#0"
]
},
- "953": {
- "op": "b _assert_valid_role_bool_merge@8"
+ "1032": {
+ "op": "b _assert_valid_role_bool_merge@9"
}
}
}
\ No newline at end of file
diff --git a/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.teal b/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.teal
index f54d8717..42cbdf4f 100644
--- a/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.teal
+++ b/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.approval.teal
@@ -4,29 +4,30 @@
// algopy.arc4.ARC4Contract.approval_program() -> uint64:
main:
intcblock 1 0 32 20
- bytecblock 0x151f7c75 0x52323023 0x52373023 0x52343023 0x52353023 0x52363023 0x52383023 0x52323523 "asset_suspended" "asset_defaulted"
+ bytecblock 0x151f7c75 0x523a41525223 0x523a54525323 0x523a41555423 0x523a4d4e4723 0x523a50594423 0x523a4d4f4323 "defaulted" 0x523a4f504423 "contract_suspended"
txn ApplicationID
bnz main_after_if_else@2
- // modules/rbac.py:30-31
+ // modules/rbac.py:28-29
// # RBAC Roles
// self.arranger = GlobalState(Account(), key=cst.PREFIX_ID_ARRANGER)
- bytec_1 // 0x52323023
+ bytec_1 // 0x523a41525223
global ZeroAddress
app_global_put
- // modules/rbac.py:32
+ // modules/rbac.py:30
// self.op_daemon = GlobalState(Account(), key=cst.PREFIX_ID_OP_DAEMON)
- bytec 7 // 0x52323523
+ bytec 8 // 0x523a4f504423
global ZeroAddress
app_global_put
// modules/rbac.py:47-48
- // # D-ASA Governance
- // self.asset_suspended = False
- bytec 8 // "asset_suspended"
+ // # Contract Governance
+ // self.contract_suspended = False
+ bytec 9 // "contract_suspended"
intc_1 // 0
app_global_put
- // modules/rbac.py:49
- // self.asset_defaulted = False
- bytec 9 // "asset_defaulted"
+ // modules/rbac.py:50-51
+ // # Contract Performance
+ // self.defaulted = False
+ bytec 7 // "defaulted"
intc_1 // 0
app_global_put
@@ -34,18 +35,36 @@ main_after_if_else@2:
// smart_contracts/mock_module_rbac/contract.py:6
// class MockRbacModule(RbacModule):
txn NumAppArgs
- bz main_create@17
+ bz main_create@20
+ pushbytes 0x914f04eb // method "contract_update()void"
+ txna ApplicationArgs 0
+ match main_contract_update_route@5
+
+main_switch_case_next@6:
+ // smart_contracts/mock_module_rbac/contract.py:6
+ // class MockRbacModule(RbacModule):
txn OnCompletion
!
assert
txn ApplicationID
assert
- pushbytess 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method "rbac_rotate_arranger(address)uint64", method "rbac_set_op_daemon(address)uint64", method "rbac_assign_role(uint8,address,byte[])uint64", method "rbac_revoke_role(uint8,address)uint64", method "rbac_gov_asset_suspension(bool)uint64", method "rbac_get_arranger()address", method "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", method "rbac_get_role_config(uint8,address)(uint64,uint64)"
+ pushbytess 0x82f71b2d 0xef04f5d3 0xdf343550 0x3dbe80bd 0x1e3e48e7 0x39241fa3 0x010c8299 0x7406acd2 0x1a72a2ee // method "rbac_rotate_arranger(address)uint64", method "rbac_set_op_daemon(address)uint64", method "rbac_assign_role(uint8,address,(uint64,uint64))uint64", method "rbac_revoke_role(uint8,address)uint64", method "rbac_contract_suspension(bool)uint64", method "rbac_contract_default(bool)uint64", method "rbac_get_arranger()address", method "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)", method "rbac_get_role_validity(uint8,address)(uint64,uint64)"
txna ApplicationArgs 0
- match rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config
+ match rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_contract_suspension rbac_contract_default rbac_get_arranger rbac_get_address_roles rbac_get_role_validity
err
-main_create@17:
+main_contract_update_route@5:
+ // modules/rbac.py:150
+ // @arc4.abimethod(allow_actions=["UpdateApplication"])
+ txn OnCompletion
+ pushint 4 // UpdateApplication
+ ==
+ txn ApplicationID
+ &&
+ assert
+ b contract_update
+
+main_create@20:
// smart_contracts/mock_module_rbac/contract.py:14
// @arc4.baremethod(create="require")
txn OnCompletion
@@ -56,7 +75,7 @@ main_create@17:
assert
// smart_contracts/mock_module_rbac/contract.py:16
// self.arranger.value = Txn.sender
- bytec_1 // 0x52323023
+ bytec_1 // 0x523a41525223
txn Sender
app_global_put
// smart_contracts/mock_module_rbac/contract.py:14
@@ -65,9 +84,23 @@ main_create@17:
return
+// modules.rbac.RbacModule.contract_update[routing]() -> void:
+contract_update:
+ // modules/rbac.py:161-164
+ // # The reference implementation grants the update permissions to the Arranger.
+ // # ⚠️ WARNING: Application updates must be executed VERY carefully, as they
+ // # might introduce breaking changes.
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:150
+ // @arc4.abimethod(allow_actions=["UpdateApplication"])
+ intc_0 // 1
+ return
+
+
// modules.rbac.RbacModule.rbac_rotate_arranger[routing]() -> void:
rbac_rotate_arranger:
- // modules/rbac.py:147
+ // modules/rbac.py:166
// @arc4.abimethod
txna ApplicationArgs 1
dup
@@ -75,18 +108,18 @@ rbac_rotate_arranger:
intc_2 // 32
==
assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:158
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:159
+ // modules/rbac.py:180
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:181
// self.arranger.value = new_arranger
- bytec_1 // 0x52323023
+ bytec_1 // 0x523a41525223
swap
app_global_put
- // modules/rbac.py:160
+ // modules/rbac.py:182
// return Global.latest_timestamp
global LatestTimestamp
- // modules/rbac.py:147
+ // modules/rbac.py:166
// @arc4.abimethod
itob
bytec_0 // 0x151f7c75
@@ -99,7 +132,7 @@ rbac_rotate_arranger:
// modules.rbac.RbacModule.rbac_set_op_daemon[routing]() -> void:
rbac_set_op_daemon:
- // modules/rbac.py:162
+ // modules/rbac.py:184
// @arc4.abimethod
txna ApplicationArgs 1
dup
@@ -107,18 +140,18 @@ rbac_set_op_daemon:
intc_2 // 32
==
assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:173
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:174
+ // modules/rbac.py:198
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:199
// self.op_daemon.value = address
- bytec 7 // 0x52323523
+ bytec 8 // 0x523a4f504423
swap
app_global_put
- // modules/rbac.py:175
+ // modules/rbac.py:200
// return Global.latest_timestamp
global LatestTimestamp
- // modules/rbac.py:162
+ // modules/rbac.py:184
// @arc4.abimethod
itob
bytec_0 // 0x151f7c75
@@ -131,7 +164,7 @@ rbac_set_op_daemon:
// modules.rbac.RbacModule.rbac_assign_role[routing]() -> void:
rbac_assign_role:
- // modules/rbac.py:177
+ // modules/rbac.py:202
// @arc4.abimethod
txna ApplicationArgs 1
dup
@@ -148,43 +181,38 @@ rbac_assign_role:
assert // invalid number of bytes for arc4.static_array
txna ApplicationArgs 3
dup
- intc_1 // 0
- extract_uint16 // on error: invalid array length header
- pushint 2
- +
- dig 1
+ cover 2
len
+ pushint 16
==
- assert // invalid number of bytes for arc4.dynamic_array
- extract 2 0
- swap
- // modules/rbac.py:199
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:200
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/rbac.py:201
+ assert // invalid number of bytes for smart_contracts.abi_types.RoleValidity
+ // modules/rbac.py:224
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:225
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/rbac.py:226
// self._assert_valid_role(role_id.as_uint64())
btoi
dupn 2
callsub _assert_valid_role
- // modules/rbac.py:101
- // if role_id == UInt64(cst.ROLE_ARRANGER):
+ // modules/rbac.py:104
+ // if role_id == UInt64(enums.ROLE_ARRANGER):
intc_3 // 20
==
bz rbac_assign_role_after_if_else@3
- // modules/rbac.py:102
+ // modules/rbac.py:105
// self.arranger.value = role_address
- bytec_1 // 0x52323023
+ bytec_1 // 0x523a41525223
dig 3
app_global_put
-rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14:
- // modules/rbac.py:203
+rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14:
+ // modules/rbac.py:228
// return Global.latest_timestamp
global LatestTimestamp
- // modules/rbac.py:177
+ // modules/rbac.py:202
// @arc4.abimethod
itob
bytec_0 // 0x151f7c75
@@ -195,15 +223,15 @@ rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14:
return
rbac_assign_role_after_if_else@3:
- // modules/rbac.py:105
- // if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ // modules/rbac.py:108
+ // if role_id == UInt64(enums.ROLE_ACCOUNT_MANAGER):
dup
pushint 40
==
bz rbac_assign_role_after_if_else@5
- // modules/rbac.py:106
+ // modules/rbac.py:109
// assert role_address not in self.account_manager, err.INVALID_ROLE_ADDRESS
- bytec_3 // 0x52343023
+ bytec 4 // 0x523a4d4e4723
dig 3
concat
dup
@@ -211,24 +239,24 @@ rbac_assign_role_after_if_else@3:
bury 1
!
assert // Invalid account role address
- // modules/rbac.py:107
- // self.account_manager[role_address] = typ.RoleConfig.from_bytes(config)
+ // modules/rbac.py:110
+ // self.account_manager[role_address] = validity.copy()
dig 2
box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
rbac_assign_role_after_if_else@5:
- // modules/rbac.py:109
- // if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
+ // modules/rbac.py:112
+ // if role_id == UInt64(enums.ROLE_PRIMARY_DEALER):
dup
pushint 50
==
bz rbac_assign_role_after_if_else@7
- // modules/rbac.py:110
+ // modules/rbac.py:113
// assert role_address not in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- bytec 4 // 0x52353023
+ bytec 5 // 0x523a50594423
dig 3
concat
dup
@@ -236,24 +264,24 @@ rbac_assign_role_after_if_else@5:
bury 1
!
assert // Invalid account role address
- // modules/rbac.py:111
- // self.primary_dealer[role_address] = typ.RoleConfig.from_bytes(config)
+ // modules/rbac.py:114
+ // self.primary_dealer[role_address] = validity.copy()
dig 2
box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
rbac_assign_role_after_if_else@7:
- // modules/rbac.py:113
- // if role_id == UInt64(cst.ROLE_TRUSTEE):
+ // modules/rbac.py:116
+ // if role_id == UInt64(enums.ROLE_TRUSTEE):
dup
pushint 60
==
bz rbac_assign_role_after_if_else@9
- // modules/rbac.py:114
+ // modules/rbac.py:117
// assert role_address not in self.trustee, err.INVALID_ROLE_ADDRESS
- bytec 5 // 0x52363023
+ bytec_2 // 0x523a54525323
dig 3
concat
dup
@@ -261,24 +289,24 @@ rbac_assign_role_after_if_else@7:
bury 1
!
assert // Invalid account role address
- // modules/rbac.py:115
- // self.trustee[role_address] = typ.RoleConfig.from_bytes(config)
+ // modules/rbac.py:118
+ // self.trustee[role_address] = validity.copy()
dig 2
box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
rbac_assign_role_after_if_else@9:
- // modules/rbac.py:117
- // if role_id == UInt64(cst.ROLE_AUTHORITY):
+ // modules/rbac.py:120
+ // if role_id == UInt64(enums.ROLE_AUTHORITY):
dup
pushint 70
==
bz rbac_assign_role_after_if_else@11
- // modules/rbac.py:118
+ // modules/rbac.py:121
// assert role_address not in self.authority, err.INVALID_ROLE_ADDRESS
- bytec_2 // 0x52373023
+ bytec_3 // 0x523a41555423
dig 3
concat
dup
@@ -286,24 +314,24 @@ rbac_assign_role_after_if_else@9:
bury 1
!
assert // Invalid account role address
- // modules/rbac.py:119
- // self.authority[role_address] = typ.RoleConfig.from_bytes(config)
+ // modules/rbac.py:122
+ // self.authority[role_address] = validity.copy()
dig 2
box_put
- // modules/rbac.py:202
- // self._upsert_role(role_id.as_uint64(), role_address, config)
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
+ // modules/rbac.py:227
+ // self._set_role(role_id.as_uint64(), role_address, validity)
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
rbac_assign_role_after_if_else@11:
- // modules/rbac.py:121
- // if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
+ // modules/rbac.py:124
+ // if role_id == UInt64(enums.ROLE_OBSERVER):
dup
pushint 80
==
- bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
- // modules/rbac.py:122
- // assert role_address not in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- bytec 6 // 0x52383023
+ bz rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
+ // modules/rbac.py:125
+ // assert role_address not in self.observer, err.INVALID_ROLE_ADDRESS
+ bytec 6 // 0x523a4d4f4323
dig 3
concat
dup
@@ -311,16 +339,16 @@ rbac_assign_role_after_if_else@11:
bury 1
!
assert // Invalid account role address
- // modules/rbac.py:123
- // self.interest_oracle[role_address] = typ.RoleConfig.from_bytes(config)
+ // modules/rbac.py:126
+ // self.observer[role_address] = validity.copy()
dig 2
box_put
- b rbac_assign_role_after_inlined_modules.rbac.RbacModule._upsert_role@14
+ b rbac_assign_role_after_inlined_modules.rbac.RbacModule._set_role@14
// modules.rbac.RbacModule.rbac_revoke_role[routing]() -> void:
rbac_revoke_role:
- // modules/rbac.py:205
+ // modules/rbac.py:230
// @arc4.abimethod
txna ApplicationArgs 1
dup
@@ -335,47 +363,47 @@ rbac_revoke_role:
intc_2 // 32
==
assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:224
- // self.assert_caller_is_arranger()
- callsub assert_caller_is_arranger
- // modules/rbac.py:225
- // self.assert_is_not_asset_defaulted()
- callsub assert_is_not_asset_defaulted
- // modules/rbac.py:226
+ // modules/rbac.py:249
+ // self._assert_caller_is_arranger()
+ callsub _assert_caller_is_arranger
+ // modules/rbac.py:250
+ // self._assert_is_not_contract_defaulted()
+ callsub _assert_is_not_contract_defaulted
+ // modules/rbac.py:251
// self._assert_valid_role(role_id.as_uint64())
btoi
dupn 2
callsub _assert_valid_role
- // modules/rbac.py:126
- // assert role_id != UInt64(cst.ROLE_ARRANGER), err.INVALID_ROLE
+ // modules/rbac.py:129
+ // assert role_id != UInt64(enums.ROLE_ARRANGER), err.INVALID_ROLE
dup
intc_3 // 20
!=
assert // Invalid role identifier
- // modules/rbac.py:127
- // if role_id == UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ // modules/rbac.py:130
+ // if role_id == UInt64(enums.ROLE_ACCOUNT_MANAGER):
pushint 40
==
bz rbac_revoke_role_after_if_else@3
- // modules/rbac.py:128
+ // modules/rbac.py:131
// assert role_address in self.account_manager, err.INVALID_ROLE_ADDRESS
- bytec_3 // 0x52343023
+ bytec 4 // 0x523a4d4e4723
dig 2
concat
dup
box_len
bury 1
assert // Invalid account role address
- // modules/rbac.py:129
+ // modules/rbac.py:132
// del self.account_manager[role_address]
box_del
pop
rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12:
- // modules/rbac.py:228
+ // modules/rbac.py:253
// return Global.latest_timestamp
global LatestTimestamp
- // modules/rbac.py:205
+ // modules/rbac.py:230
// @arc4.abimethod
itob
bytec_0 // 0x151f7c75
@@ -386,104 +414,104 @@ rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12:
return
rbac_revoke_role_after_if_else@3:
- // modules/rbac.py:131
- // if role_id == UInt64(cst.ROLE_PRIMARY_DEALER):
+ // modules/rbac.py:134
+ // if role_id == UInt64(enums.ROLE_PRIMARY_DEALER):
dup
pushint 50
==
bz rbac_revoke_role_after_if_else@5
- // modules/rbac.py:132
+ // modules/rbac.py:135
// assert role_address in self.primary_dealer, err.INVALID_ROLE_ADDRESS
- bytec 4 // 0x52353023
+ bytec 5 // 0x523a50594423
dig 2
concat
dup
box_len
bury 1
assert // Invalid account role address
- // modules/rbac.py:133
+ // modules/rbac.py:136
// del self.primary_dealer[role_address]
box_del
pop
- // modules/rbac.py:227
+ // modules/rbac.py:252
// self._delete_role(role_id.as_uint64(), role_address)
b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
rbac_revoke_role_after_if_else@5:
- // modules/rbac.py:135
- // if role_id == UInt64(cst.ROLE_TRUSTEE):
+ // modules/rbac.py:138
+ // if role_id == UInt64(enums.ROLE_TRUSTEE):
dup
pushint 60
==
bz rbac_revoke_role_after_if_else@7
- // modules/rbac.py:136
+ // modules/rbac.py:139
// assert role_address in self.trustee, err.INVALID_ROLE_ADDRESS
- bytec 5 // 0x52363023
+ bytec_2 // 0x523a54525323
dig 2
concat
dup
box_len
bury 1
assert // Invalid account role address
- // modules/rbac.py:137
+ // modules/rbac.py:140
// del self.trustee[role_address]
box_del
pop
- // modules/rbac.py:227
+ // modules/rbac.py:252
// self._delete_role(role_id.as_uint64(), role_address)
b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
rbac_revoke_role_after_if_else@7:
- // modules/rbac.py:139
- // if role_id == UInt64(cst.ROLE_AUTHORITY):
+ // modules/rbac.py:142
+ // if role_id == UInt64(enums.ROLE_AUTHORITY):
dup
pushint 70
==
bz rbac_revoke_role_after_if_else@9
- // modules/rbac.py:140
+ // modules/rbac.py:143
// assert role_address in self.authority, err.INVALID_ROLE_ADDRESS
- bytec_2 // 0x52373023
+ bytec_3 // 0x523a41555423
dig 2
concat
dup
box_len
bury 1
assert // Invalid account role address
- // modules/rbac.py:141
+ // modules/rbac.py:144
// del self.authority[role_address]
box_del
pop
- // modules/rbac.py:227
+ // modules/rbac.py:252
// self._delete_role(role_id.as_uint64(), role_address)
b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
rbac_revoke_role_after_if_else@9:
- // modules/rbac.py:143
- // if role_id == UInt64(cst.ROLE_INTEREST_ORACLE):
+ // modules/rbac.py:146
+ // if role_id == UInt64(enums.ROLE_OBSERVER):
dup
pushint 80
==
bz rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
- // modules/rbac.py:144
- // assert role_address in self.interest_oracle, err.INVALID_ROLE_ADDRESS
- bytec 6 // 0x52383023
+ // modules/rbac.py:147
+ // assert role_address in self.observer, err.INVALID_ROLE_ADDRESS
+ bytec 6 // 0x523a4d4f4323
dig 2
concat
dup
box_len
bury 1
assert // Invalid account role address
- // modules/rbac.py:145
- // del self.interest_oracle[role_address]
+ // modules/rbac.py:148
+ // del self.observer[role_address]
box_del
pop
b rbac_revoke_role_after_inlined_modules.rbac.RbacModule._delete_role@12
-// modules.rbac.RbacModule.rbac_gov_asset_suspension[routing]() -> void:
-rbac_gov_asset_suspension:
- // modules/rbac.py:230
- // @arc4.abimethod # TODO: Update specs and add test
+// modules.rbac.RbacModule.rbac_contract_suspension[routing]() -> void:
+rbac_contract_suspension:
+ // modules/rbac.py:255
+ // @arc4.abimethod
txna ApplicationArgs 1
dup
len
@@ -492,22 +520,59 @@ rbac_gov_asset_suspension:
assert // invalid number of bytes for arc4.bool
intc_1 // 0
getbit
- // modules/rbac.py:77
+ // modules/rbac.py:79
// assert self._role_is_active(self.authority, Txn.sender), err.UNAUTHORIZED
- bytec_2 // 0x52373023
+ bytec_3 // 0x523a41555423
txn Sender
callsub _role_is_active
assert // Not authorized
- // modules/rbac.py:246
- // self.asset_suspended = suspended
- bytec 8 // "asset_suspended"
+ // modules/rbac.py:271
+ // self.contract_suspended = suspended
+ bytec 9 // "contract_suspended"
swap
app_global_put
- // modules/rbac.py:247
+ // modules/rbac.py:272
// return Global.latest_timestamp
global LatestTimestamp
- // modules/rbac.py:230
- // @arc4.abimethod # TODO: Update specs and add test
+ // modules/rbac.py:255
+ // @arc4.abimethod
+ itob
+ bytec_0 // 0x151f7c75
+ swap
+ concat
+ log
+ intc_0 // 1
+ return
+
+
+// modules.rbac.RbacModule.rbac_contract_default[routing]() -> void:
+rbac_contract_default:
+ // modules/rbac.py:274
+ // @arc4.abimethod
+ txna ApplicationArgs 1
+ dup
+ len
+ intc_0 // 1
+ ==
+ assert // invalid number of bytes for arc4.bool
+ intc_1 // 0
+ getbit
+ // modules/rbac.py:76
+ // assert self._role_is_active(self.trustee, Txn.sender), err.UNAUTHORIZED
+ bytec_2 // 0x523a54525323
+ txn Sender
+ callsub _role_is_active
+ assert // Not authorized
+ // modules/rbac.py:287
+ // self.defaulted = defaulted
+ bytec 7 // "defaulted"
+ swap
+ app_global_put
+ // modules/rbac.py:288
+ // return Global.latest_timestamp
+ global LatestTimestamp
+ // modules/rbac.py:274
+ // @arc4.abimethod
itob
bytec_0 // 0x151f7c75
swap
@@ -519,13 +584,13 @@ rbac_gov_asset_suspension:
// modules.rbac.RbacModule.rbac_get_arranger[routing]() -> void:
rbac_get_arranger:
- // modules/rbac.py:257
+ // modules/rbac.py:301
// return self.arranger.value
intc_1 // 0
- bytec_1 // 0x52323023
+ bytec_1 // 0x523a41525223
app_global_get_ex
assert // check self.arranger exists
- // modules/rbac.py:249
+ // modules/rbac.py:290
// @arc4.abimethod(readonly=True)
bytec_0 // 0x151f7c75
swap
@@ -537,7 +602,7 @@ rbac_get_arranger:
// modules.rbac.RbacModule.rbac_get_address_roles[routing]() -> void:
rbac_get_address_roles:
- // modules/rbac.py:259
+ // modules/rbac.py:303
// @arc4.abimethod(readonly=True)
txna ApplicationArgs 1
dup
@@ -545,32 +610,32 @@ rbac_get_address_roles:
intc_2 // 32
==
assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:273
+ // modules/rbac.py:321
// self._role_is_active(self.account_manager, address),
- bytec_3 // 0x52343023
+ bytec 4 // 0x523a4d4e4723
dig 1
callsub _role_is_active
- // modules/rbac.py:274
+ // modules/rbac.py:322
// self._role_is_active(self.primary_dealer, address),
- bytec 4 // 0x52353023
+ bytec 5 // 0x523a50594423
dig 2
callsub _role_is_active
- // modules/rbac.py:275
+ // modules/rbac.py:323
// self._role_is_active(self.trustee, address),
- bytec 5 // 0x52363023
+ bytec_2 // 0x523a54525323
dig 3
callsub _role_is_active
- // modules/rbac.py:276
+ // modules/rbac.py:324
// self._role_is_active(self.authority, address),
- bytec_2 // 0x52373023
+ bytec_3 // 0x523a41555423
dig 4
callsub _role_is_active
- // modules/rbac.py:277
- // self._role_is_active(self.interest_oracle, address),
- bytec 6 // 0x52383023
+ // modules/rbac.py:325
+ // self._role_is_active(self.observer, address),
+ bytec 6 // 0x523a4d4f4323
uncover 5
callsub _role_is_active
- // modules/rbac.py:259
+ // modules/rbac.py:303
// @arc4.abimethod(readonly=True)
pushbytes 0x00
intc_1 // 0
@@ -596,9 +661,9 @@ rbac_get_address_roles:
return
-// modules.rbac.RbacModule.rbac_get_role_config[routing]() -> void:
-rbac_get_role_config:
- // modules/rbac.py:280
+// modules.rbac.RbacModule.rbac_get_role_validity[routing]() -> void:
+rbac_get_role_validity:
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
txna ApplicationArgs 1
dup
@@ -613,81 +678,81 @@ rbac_get_role_config:
intc_2 // 32
==
assert // invalid number of bytes for arc4.static_array
- // modules/rbac.py:294
+ // modules/rbac.py:346
// role = role_id.as_uint64()
btoi
- // modules/rbac.py:295
+ // modules/rbac.py:347
// self._assert_valid_role(role)
dup
callsub _assert_valid_role
- // modules/rbac.py:297
- // case UInt64(cst.ROLE_ARRANGER):
+ // modules/rbac.py:349
+ // case UInt64(enums.ROLE_ARRANGER):
intc_3 // 20
- // modules/rbac.py:301
- // case UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ // modules/rbac.py:353
+ // case UInt64(enums.ROLE_ACCOUNT_MANAGER):
pushints 40 50 60 70 80
- // modules/rbac.py:296-327
+ // modules/rbac.py:348-379
// match role:
- // case UInt64(cst.ROLE_ARRANGER):
- // return typ.RoleConfig(
+ // case UInt64(enums.ROLE_ARRANGER):
+ // return typ.RoleValidity(
// role_validity_start=UInt64(0), role_validity_end=UInt64(0)
// )
- // case UInt64(cst.ROLE_ACCOUNT_MANAGER):
+ // case UInt64(enums.ROLE_ACCOUNT_MANAGER):
// assert self._has_role(
// self.account_manager, role_address
// ), err.INVALID_ROLE_ADDRESS
// return self.account_manager[role_address]
- // case UInt64(cst.ROLE_PRIMARY_DEALER):
+ // case UInt64(enums.ROLE_PRIMARY_DEALER):
// assert self._has_role(
// self.primary_dealer, role_address
// ), err.INVALID_ROLE_ADDRESS
// return self.primary_dealer[role_address]
- // case UInt64(cst.ROLE_TRUSTEE):
+ // case UInt64(enums.ROLE_TRUSTEE):
// assert self._has_role(
// self.trustee, role_address
// ), err.INVALID_ROLE_ADDRESS
// return self.trustee[role_address]
- // case UInt64(cst.ROLE_AUTHORITY):
+ // case UInt64(enums.ROLE_AUTHORITY):
// assert self._has_role(
// self.authority, role_address
// ), err.INVALID_ROLE_ADDRESS
// return self.authority[role_address]
- // case UInt64(cst.ROLE_INTEREST_ORACLE):
+ // case UInt64(enums.ROLE_OBSERVER):
// assert self._has_role(
- // self.interest_oracle, role_address
+ // self.observer, role_address
// ), err.INVALID_ROLE_ADDRESS
- // return self.interest_oracle[role_address]
+ // return self.observer[role_address]
// case _:
// op.err(err.INVALID_ROLE)
uncover 6
- match rbac_get_role_config_switch_case_0@2 rbac_get_role_config_switch_case_1@3 rbac_get_role_config_switch_case_2@4 rbac_get_role_config_switch_case_3@5 rbac_get_role_config_switch_case_4@6 rbac_get_role_config_switch_case_5@7
- // modules/rbac.py:327
+ match rbac_get_role_validity_switch_case_0@2 rbac_get_role_validity_switch_case_1@3 rbac_get_role_validity_switch_case_2@4 rbac_get_role_validity_switch_case_3@5 rbac_get_role_validity_switch_case_4@6 rbac_get_role_validity_switch_case_5@7
+ // modules/rbac.py:379
// op.err(err.INVALID_ROLE)
err // Invalid role identifier
-rbac_get_role_config_switch_case_5@7:
- // modules/rbac.py:323
- // self.interest_oracle, role_address
- bytec 6 // 0x52383023
- // modules/rbac.py:55
+rbac_get_role_validity_switch_case_5@7:
+ // modules/rbac.py:375
+ // self.observer, role_address
+ bytec 6 // 0x523a4d4f4323
+ // modules/rbac.py:57
// return role_address in role_map
dig 1
concat
dup
box_len
bury 1
- // modules/rbac.py:322-324
+ // modules/rbac.py:374-376
// assert self._has_role(
- // self.interest_oracle, role_address
+ // self.observer, role_address
// ), err.INVALID_ROLE_ADDRESS
assert // Invalid account role address
- // modules/rbac.py:325
- // return self.interest_oracle[role_address]
+ // modules/rbac.py:377
+ // return self.observer[role_address]
box_get
pop
-rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9:
- // modules/rbac.py:280
+rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9:
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
bytec_0 // 0x151f7c75
swap
@@ -696,120 +761,120 @@ rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@
intc_0 // 1
return
-rbac_get_role_config_switch_case_4@6:
- // modules/rbac.py:318
+rbac_get_role_validity_switch_case_4@6:
+ // modules/rbac.py:370
// self.authority, role_address
- bytec_2 // 0x52373023
- // modules/rbac.py:55
+ bytec_3 // 0x523a41555423
+ // modules/rbac.py:57
// return role_address in role_map
dig 1
concat
dup
box_len
bury 1
- // modules/rbac.py:317-319
+ // modules/rbac.py:369-371
// assert self._has_role(
// self.authority, role_address
// ), err.INVALID_ROLE_ADDRESS
assert // Invalid account role address
- // modules/rbac.py:320
+ // modules/rbac.py:372
// return self.authority[role_address]
box_get
pop
- // modules/rbac.py:280
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
-rbac_get_role_config_switch_case_3@5:
- // modules/rbac.py:313
+rbac_get_role_validity_switch_case_3@5:
+ // modules/rbac.py:365
// self.trustee, role_address
- bytec 5 // 0x52363023
- // modules/rbac.py:55
+ bytec_2 // 0x523a54525323
+ // modules/rbac.py:57
// return role_address in role_map
dig 1
concat
dup
box_len
bury 1
- // modules/rbac.py:312-314
+ // modules/rbac.py:364-366
// assert self._has_role(
// self.trustee, role_address
// ), err.INVALID_ROLE_ADDRESS
assert // Invalid account role address
- // modules/rbac.py:315
+ // modules/rbac.py:367
// return self.trustee[role_address]
box_get
pop
- // modules/rbac.py:280
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
-rbac_get_role_config_switch_case_2@4:
- // modules/rbac.py:308
+rbac_get_role_validity_switch_case_2@4:
+ // modules/rbac.py:360
// self.primary_dealer, role_address
- bytec 4 // 0x52353023
- // modules/rbac.py:55
+ bytec 5 // 0x523a50594423
+ // modules/rbac.py:57
// return role_address in role_map
dig 1
concat
dup
box_len
bury 1
- // modules/rbac.py:307-309
+ // modules/rbac.py:359-361
// assert self._has_role(
// self.primary_dealer, role_address
// ), err.INVALID_ROLE_ADDRESS
assert // Invalid account role address
- // modules/rbac.py:310
+ // modules/rbac.py:362
// return self.primary_dealer[role_address]
box_get
pop
- // modules/rbac.py:280
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
-rbac_get_role_config_switch_case_1@3:
- // modules/rbac.py:303
+rbac_get_role_validity_switch_case_1@3:
+ // modules/rbac.py:355
// self.account_manager, role_address
- bytec_3 // 0x52343023
- // modules/rbac.py:55
+ bytec 4 // 0x523a4d4e4723
+ // modules/rbac.py:57
// return role_address in role_map
dig 1
concat
dup
box_len
bury 1
- // modules/rbac.py:302-304
+ // modules/rbac.py:354-356
// assert self._has_role(
// self.account_manager, role_address
// ), err.INVALID_ROLE_ADDRESS
assert // Invalid account role address
- // modules/rbac.py:305
+ // modules/rbac.py:357
// return self.account_manager[role_address]
box_get
pop
- // modules/rbac.py:280
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
-rbac_get_role_config_switch_case_0@2:
- // modules/rbac.py:298-300
- // return typ.RoleConfig(
+rbac_get_role_validity_switch_case_0@2:
+ // modules/rbac.py:350-352
+ // return typ.RoleValidity(
// role_validity_start=UInt64(0), role_validity_end=UInt64(0)
// )
pushbytes 0x00000000000000000000000000000000
- // modules/rbac.py:280
+ // modules/rbac.py:328
// @arc4.abimethod(readonly=True)
- b rbac_get_role_config_after_inlined_modules.rbac.RbacModule.rbac_get_role_config@9
+ b rbac_get_role_validity_after_inlined_modules.rbac.RbacModule.rbac_get_role_validity@9
// modules.rbac.RbacModule._role_is_active(role_map: bytes, role_address: bytes) -> uint64:
_role_is_active:
- // modules/rbac.py:57
+ // modules/rbac.py:59
// def _role_is_active(self, role_map: typ.RbacRole, role_address: Account) -> bool:
proto 2 1
pushbytes ""
- // modules/rbac.py:55
+ // modules/rbac.py:57
// return role_address in role_map
frame_dig -2
frame_dig -1
@@ -817,47 +882,47 @@ _role_is_active:
dup
box_len
bury 1
- // modules/rbac.py:58-62
+ // modules/rbac.py:60-64
// return self._has_role(role_map, role_address) and (
// role_map[role_address].role_validity_start
// <= Global.latest_timestamp
// <= role_map[role_address].role_validity_end
// )
bz _role_is_active_bool_false@4
- // modules/rbac.py:59
+ // modules/rbac.py:61
// role_map[role_address].role_validity_start
frame_dig 1
box_get
assert // check BoxMap entry exists
intc_1 // 0
extract_uint64
- // modules/rbac.py:60
+ // modules/rbac.py:62
// <= Global.latest_timestamp
global LatestTimestamp
dup
frame_bury 0
- // modules/rbac.py:59-60
+ // modules/rbac.py:61-62
// role_map[role_address].role_validity_start
// <= Global.latest_timestamp
<=
- // modules/rbac.py:59-61
+ // modules/rbac.py:61-63
// role_map[role_address].role_validity_start
// <= Global.latest_timestamp
// <= role_map[role_address].role_validity_end
bz _role_is_active_bool_false@4
- // modules/rbac.py:61
+ // modules/rbac.py:63
// <= role_map[role_address].role_validity_end
frame_dig 1
box_get
assert // check BoxMap entry exists
pushint 8
extract_uint64
- // modules/rbac.py:60-61
+ // modules/rbac.py:62-63
// <= Global.latest_timestamp
// <= role_map[role_address].role_validity_end
frame_dig 0
>=
- // modules/rbac.py:59-61
+ // modules/rbac.py:61-63
// role_map[role_address].role_validity_start
// <= Global.latest_timestamp
// <= role_map[role_address].role_validity_end
@@ -865,7 +930,7 @@ _role_is_active:
intc_0 // 1
_role_is_active_bool_merge@5:
- // modules/rbac.py:58-62
+ // modules/rbac.py:60-64
// return self._has_role(role_map, role_address) and (
// role_map[role_address].role_validity_start
// <= Global.latest_timestamp
@@ -879,32 +944,32 @@ _role_is_active_bool_false@4:
b _role_is_active_bool_merge@5
-// modules.rbac.RbacModule.assert_caller_is_arranger() -> void:
-assert_caller_is_arranger:
- // modules/rbac.py:65
+// modules.rbac.RbacModule._assert_caller_is_arranger() -> void:
+_assert_caller_is_arranger:
+ // modules/rbac.py:67
// assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
txn Sender
- // modules/rbac.py:52
+ // modules/rbac.py:54
// return role_address == self.arranger.value
intc_1 // 0
- bytec_1 // 0x52323023
+ bytec_1 // 0x523a41525223
app_global_get_ex
assert // check self.arranger exists
==
- // modules/rbac.py:65
+ // modules/rbac.py:67
// assert self._is_arranger(Txn.sender), err.UNAUTHORIZED
assert // Not authorized
retsub
-// modules.rbac.RbacModule.assert_is_not_asset_defaulted() -> void:
-assert_is_not_asset_defaulted:
- // modules/rbac.py:83
- // assert not self.asset_defaulted, err.DEFAULTED
+// modules.rbac.RbacModule._assert_is_not_contract_defaulted() -> void:
+_assert_is_not_contract_defaulted:
+ // modules/rbac.py:85
+ // assert not self.defaulted, err.DEFAULTED
intc_1 // 0
- bytec 9 // "asset_defaulted"
+ bytec 7 // "defaulted"
app_global_get_ex
- assert // check self.asset_defaulted exists
+ assert // check self.defaulted exists
!
assert // Defaulted
retsub
@@ -912,125 +977,149 @@ assert_is_not_asset_defaulted:
// modules.rbac.RbacModule._assert_valid_role(role_id: uint64) -> void:
_assert_valid_role:
- // modules/rbac.py:88
+ // modules/rbac.py:90
// def _assert_valid_role(self, role_id: UInt64) -> None:
proto 1 0
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
frame_dig -1
- // modules/rbac.py:90
- // UInt64(cst.ROLE_ARRANGER),
+ // modules/rbac.py:92
+ // UInt64(enums.ROLE_ARRANGER),
intc_3 // 20
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
==
- bnz _assert_valid_role_bool_true@6
+ bnz _assert_valid_role_bool_true@7
frame_dig -1
- // modules/rbac.py:91
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
+ // modules/rbac.py:93
+ // UInt64(enums.ROLE_OP_DAEMON),
+ pushint 25
+ // modules/rbac.py:91-99
+ // assert role_id in (
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
+ // ), err.INVALID_ROLE
+ ==
+ bnz _assert_valid_role_bool_true@7
+ frame_dig -1
+ // modules/rbac.py:94
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
pushint 40
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
==
- bnz _assert_valid_role_bool_true@6
+ bnz _assert_valid_role_bool_true@7
frame_dig -1
- // modules/rbac.py:92
- // UInt64(cst.ROLE_PRIMARY_DEALER),
+ // modules/rbac.py:95
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
pushint 50
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
==
- bnz _assert_valid_role_bool_true@6
+ bnz _assert_valid_role_bool_true@7
frame_dig -1
- // modules/rbac.py:93
- // UInt64(cst.ROLE_TRUSTEE),
+ // modules/rbac.py:96
+ // UInt64(enums.ROLE_TRUSTEE),
pushint 60
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
==
- bnz _assert_valid_role_bool_true@6
+ bnz _assert_valid_role_bool_true@7
frame_dig -1
- // modules/rbac.py:94
- // UInt64(cst.ROLE_AUTHORITY),
+ // modules/rbac.py:97
+ // UInt64(enums.ROLE_AUTHORITY),
pushint 70
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
==
- bnz _assert_valid_role_bool_true@6
+ bnz _assert_valid_role_bool_true@7
frame_dig -1
- // modules/rbac.py:95
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // modules/rbac.py:98
+ // UInt64(enums.ROLE_OBSERVER),
pushint 80
- // modules/rbac.py:89-96
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
==
- bz _assert_valid_role_bool_false@7
+ bz _assert_valid_role_bool_false@8
-_assert_valid_role_bool_true@6:
+_assert_valid_role_bool_true@7:
intc_0 // 1
-_assert_valid_role_bool_merge@8:
- // modules/rbac.py:89-96
+_assert_valid_role_bool_merge@9:
+ // modules/rbac.py:91-99
// assert role_id in (
- // UInt64(cst.ROLE_ARRANGER),
- // UInt64(cst.ROLE_ACCOUNT_MANAGER),
- // UInt64(cst.ROLE_PRIMARY_DEALER),
- // UInt64(cst.ROLE_TRUSTEE),
- // UInt64(cst.ROLE_AUTHORITY),
- // UInt64(cst.ROLE_INTEREST_ORACLE),
+ // UInt64(enums.ROLE_ARRANGER),
+ // UInt64(enums.ROLE_OP_DAEMON),
+ // UInt64(enums.ROLE_ACCOUNT_MANAGER),
+ // UInt64(enums.ROLE_PRIMARY_DEALER),
+ // UInt64(enums.ROLE_TRUSTEE),
+ // UInt64(enums.ROLE_AUTHORITY),
+ // UInt64(enums.ROLE_OBSERVER),
// ), err.INVALID_ROLE
assert // Invalid role identifier
retsub
-_assert_valid_role_bool_false@7:
+_assert_valid_role_bool_false@8:
intc_1 // 0
- b _assert_valid_role_bool_merge@8
+ b _assert_valid_role_bool_merge@9
diff --git a/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.arc56.json b/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.arc56.json
index 2bb07a28..98108694 100644
--- a/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.arc56.json
+++ b/smart_contracts/artifacts/mock_module_rbac/MockRbacModule.arc56.json
@@ -1,7 +1,7 @@
{
"name": "MockRbacModule",
"structs": {
- "RoleConfig": [
+ "RoleValidity": [
{
"name": "role_validity_start",
"type": "uint64"
@@ -13,18 +13,36 @@
]
},
"methods": [
+ {
+ "name": "contract_update",
+ "args": [],
+ "returns": {
+ "type": "void",
+ "desc": "None."
+ },
+ "actions": {
+ "create": [],
+ "call": [
+ "UpdateApplication"
+ ]
+ },
+ "readonly": false,
+ "desc": "Update D-ASA application.",
+ "events": [],
+ "recommendations": {}
+ },
{
"name": "rbac_rotate_arranger",
"args": [
{
"type": "address",
"name": "new_arranger",
- "desc": "New Arranger address"
+ "desc": "New arranger address."
}
],
"returns": {
"type": "uint64",
- "desc": "Timestamp of the role assignment"
+ "desc": "UNIX timestamp of the role assignment."
},
"actions": {
"create": [],
@@ -33,7 +51,7 @@
]
},
"readonly": false,
- "desc": "Rotate the Arranger address",
+ "desc": "Rotate the arranger address.",
"events": [],
"recommendations": {}
},
@@ -43,12 +61,12 @@
{
"type": "address",
"name": "address",
- "desc": "Operation Daemon address"
+ "desc": "Operation daemon address."
}
],
"returns": {
"type": "uint64",
- "desc": "Timestamp of the role assignment"
+ "desc": "UNIX timestamp of the role assignment."
},
"actions": {
"create": [],
@@ -57,7 +75,7 @@
]
},
"readonly": false,
- "desc": "Non-Normative: Set the Operation Daemon address",
+ "desc": "Non-normative helper to set the operation daemon address.",
"events": [],
"recommendations": {}
},
@@ -67,22 +85,23 @@
{
"type": "uint8",
"name": "role_id",
- "desc": "Role Identifier"
+ "desc": "Role identifier."
},
{
"type": "address",
"name": "role_address",
- "desc": "Account Role Address"
+ "desc": "Account role address."
},
{
- "type": "byte[]",
- "name": "config",
- "desc": "Role configuration (Optional)"
+ "type": "(uint64,uint64)",
+ "struct": "RoleValidity",
+ "name": "validity",
+ "desc": "Inclusive validity interval for the assignment."
}
],
"returns": {
"type": "uint64",
- "desc": "Timestamp of the role assignment"
+ "desc": "UNIX timestamp of the role assignment."
},
"actions": {
"create": [],
@@ -91,7 +110,7 @@
]
},
"readonly": false,
- "desc": "Assign a role to an address",
+ "desc": "Assign a role to an address.",
"events": [],
"recommendations": {}
},
@@ -101,17 +120,17 @@
{
"type": "uint8",
"name": "role_id",
- "desc": "Role Identifier"
+ "desc": "Role identifier."
},
{
"type": "address",
"name": "role_address",
- "desc": "Account Role Address"
+ "desc": "Account role address."
}
],
"returns": {
"type": "uint64",
- "desc": "Timestamp of the role revocation"
+ "desc": "UNIX timestamp of the role revocation."
},
"actions": {
"create": [],
@@ -120,22 +139,45 @@
]
},
"readonly": false,
- "desc": "Revoke a role from an address",
+ "desc": "Revoke a role from an address.",
"events": [],
"recommendations": {}
},
{
- "name": "rbac_gov_asset_suspension",
+ "name": "rbac_contract_suspension",
"args": [
{
"type": "bool",
"name": "suspended",
- "desc": "Suspension status"
+ "desc": "Suspension status to apply."
}
],
"returns": {
"type": "uint64",
- "desc": "Timestamp of the set asset suspension status"
+ "desc": "UNIX timestamp of the suspension update."
+ },
+ "actions": {
+ "create": [],
+ "call": [
+ "NoOp"
+ ]
+ },
+ "readonly": false,
+ "desc": "Set the asset-wide suspension status.",
+ "events": [],
+ "recommendations": {}
+ },
+ {
+ "name": "rbac_contract_default",
+ "args": [
+ {
+ "type": "bool",
+ "name": "defaulted",
+ "desc": "Default status"
+ }
+ ],
+ "returns": {
+ "type": "uint64"
},
"actions": {
"create": [],
@@ -144,7 +186,7 @@
]
},
"readonly": false,
- "desc": "Set asset suspension status",
+ "desc": "Set D-ASA default status",
"events": [],
"recommendations": {}
},
@@ -153,7 +195,7 @@
"args": [],
"returns": {
"type": "address",
- "desc": "Arranger address"
+ "desc": "Current arranger address."
},
"actions": {
"create": [],
@@ -162,7 +204,7 @@
]
},
"readonly": true,
- "desc": "Get Arranger address",
+ "desc": "Get the arranger address.",
"events": [],
"recommendations": {}
},
@@ -172,12 +214,12 @@
{
"type": "address",
"name": "address",
- "desc": "Address to get roles for"
+ "desc": "Address to query."
}
],
"returns": {
"type": "(bool,bool,bool,bool,bool)",
- "desc": "Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)"
+ "desc": "Roles mask in the order: account manager, primary dealer, trustee, authority, observer."
},
"actions": {
"create": [],
@@ -186,28 +228,28 @@
]
},
"readonly": true,
- "desc": "Non-normative - Get roles assigned to an address",
+ "desc": "Non-normative helper to get the active roles assigned to an address.",
"events": [],
"recommendations": {}
},
{
- "name": "rbac_get_role_config",
+ "name": "rbac_get_role_validity",
"args": [
{
"type": "uint8",
"name": "role_id",
- "desc": "Role Identifier"
+ "desc": "Role identifier."
},
{
"type": "address",
"name": "role_address",
- "desc": "Account Role Address"
+ "desc": "Account role address."
}
],
"returns": {
"type": "(uint64,uint64)",
- "struct": "RoleConfig",
- "desc": "Role configuration"
+ "struct": "RoleValidity",
+ "desc": "Stored role validity interval."
},
"actions": {
"create": [],
@@ -216,7 +258,7 @@
]
},
"readonly": true,
- "desc": "Get role configuration",
+ "desc": "Get the stored validity interval for a role assignment.",
"events": [],
"recommendations": {}
}
@@ -243,22 +285,22 @@
"arranger": {
"keyType": "AVMBytes",
"valueType": "address",
- "key": "UjIwIw=="
+ "key": "UjpBUlIj"
},
"op_daemon": {
"keyType": "AVMBytes",
"valueType": "address",
- "key": "UjI1Iw=="
+ "key": "UjpPUEQj"
},
- "asset_suspended": {
+ "contract_suspended": {
"keyType": "AVMString",
"valueType": "AVMUint64",
- "key": "YXNzZXRfc3VzcGVuZGVk"
+ "key": "Y29udHJhY3Rfc3VzcGVuZGVk"
},
- "asset_defaulted": {
+ "defaulted": {
"keyType": "AVMString",
"valueType": "AVMUint64",
- "key": "YXNzZXRfZGVmYXVsdGVk"
+ "key": "ZGVmYXVsdGVk"
}
},
"local": {},
@@ -270,28 +312,28 @@
"box": {
"account_manager": {
"keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjQwIw=="
+ "valueType": "RoleValidity",
+ "prefix": "UjpNTkcj"
},
"primary_dealer": {
"keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjUwIw=="
+ "valueType": "RoleValidity",
+ "prefix": "UjpQWUQj"
},
"trustee": {
"keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjYwIw=="
+ "valueType": "RoleValidity",
+ "prefix": "UjpUUlMj"
},
"authority": {
"keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjcwIw=="
+ "valueType": "RoleValidity",
+ "prefix": "UjpBVVQj"
},
- "interest_oracle": {
+ "observer": {
"keyType": "address",
- "valueType": "RoleConfig",
- "prefix": "UjgwIw=="
+ "valueType": "RoleValidity",
+ "prefix": "UjpNT0Mj"
}
}
}
@@ -307,101 +349,97 @@
"sourceInfo": [
{
"pc": [
- 897
+ 968
],
"errorMessage": "Defaulted"
},
{
"pc": [
- 322,
- 346,
- 370,
- 393,
- 417,
- 472,
- 500,
- 522,
- 543,
- 565,
- 741,
- 758,
- 773,
- 788,
- 802
+ 364,
+ 388,
+ 411,
+ 434,
+ 458,
+ 514,
+ 542,
+ 563,
+ 584,
+ 606,
+ 812,
+ 829,
+ 843,
+ 858,
+ 873
],
"errorMessage": "Invalid account role address"
},
{
"pc": [
- 457,
- 731,
- 950
+ 498,
+ 802,
+ 1029
],
"errorMessage": "Invalid role identifier"
},
{
"pc": [
- 587,
- 889
+ 628,
+ 658,
+ 960
],
"errorMessage": "Not authorized"
},
{
"pc": [
- 849,
- 864
+ 920,
+ 935
],
"errorMessage": "check BoxMap entry exists"
},
{
"pc": [
- 604,
- 887
+ 675,
+ 958
],
"errorMessage": "check self.arranger exists"
},
{
"pc": [
- 895
- ],
- "errorMessage": "check self.asset_defaulted exists"
- },
- {
- "pc": [
- 263
+ 966
],
- "errorMessage": "invalid array length header"
+ "errorMessage": "check self.defaulted exists"
},
{
"pc": [
- 578
+ 619,
+ 649
],
"errorMessage": "invalid number of bytes for arc4.bool"
},
{
"pc": [
- 271
+ 248,
+ 271,
+ 305,
+ 482,
+ 689,
+ 772
],
- "errorMessage": "invalid number of bytes for arc4.dynamic_array"
+ "errorMessage": "invalid number of bytes for arc4.static_array"
},
{
"pc": [
- 200,
- 223,
- 257,
- 441,
- 618,
- 701
+ 295,
+ 472,
+ 762
],
- "errorMessage": "invalid number of bytes for arc4.static_array"
+ "errorMessage": "invalid number of bytes for arc4.uint8"
},
{
"pc": [
- 247,
- 431,
- 691
+ 316
],
- "errorMessage": "invalid number of bytes for arc4.uint8"
+ "errorMessage": "invalid number of bytes for smart_contracts.abi_types.RoleValidity"
}
],
"pcOffsetMethod": "none"
@@ -412,11 +450,11 @@
}
},
"source": {
- "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgMjAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDUyMzIzMDIzIDB4NTIzNzMwMjMgMHg1MjM0MzAyMyAweDUyMzUzMDIzIDB4NTIzNjMwMjMgMHg1MjM4MzAyMyAweDUyMzIzNTIzICJhc3NldF9zdXNwZW5kZWQiICJhc3NldF9kZWZhdWx0ZWQiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzAtMzEKICAgIC8vICMgUkJBQyBSb2xlcwogICAgLy8gc2VsZi5hcnJhbmdlciA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNzdC5QUkVGSVhfSURfQVJSQU5HRVIpCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMgogICAgLy8gc2VsZi5vcF9kYWVtb24gPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX09QX0RBRU1PTikKICAgIGJ5dGVjIDcgLy8gMHg1MjMyMzUyMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjQ3LTQ4CiAgICAvLyAjIEQtQVNBIEdvdmVybmFuY2UKICAgIC8vIHNlbGYuYXNzZXRfc3VzcGVuZGVkID0gRmFsc2UKICAgIGJ5dGVjIDggLy8gImFzc2V0X3N1c3BlbmRlZCIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjQ5CiAgICAvLyBzZWxmLmFzc2V0X2RlZmF1bHRlZCA9IEZhbHNlCiAgICBieXRlYyA5IC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX3JiYWMvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgTW9ja1JiYWNNb2R1bGUoUmJhY01vZHVsZSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9jcmVhdGVAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDgyZjcxYjJkIDB4ZWYwNGY1ZDMgMHgwM2I4MzMyOSAweDNkYmU4MGJkIDB4ZGY1NGU4MmMgMHgwMTBjODI5OSAweDc0MDZhY2QyIDB4YzNlNGIyOTcgLy8gbWV0aG9kICJyYmFjX3JvdGF0ZV9hcnJhbmdlcihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19zZXRfb3BfZGFlbW9uKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2Fzc2lnbl9yb2xlKHVpbnQ4LGFkZHJlc3MsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19yZXZva2Vfcm9sZSh1aW50OCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbihib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV9jb25maWcodWludDgsYWRkcmVzcykodWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCByYmFjX3JvdGF0ZV9hcnJhbmdlciByYmFjX3NldF9vcF9kYWVtb24gcmJhY19hc3NpZ25fcm9sZSByYmFjX3Jldm9rZV9yb2xlIHJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb24gcmJhY19nZXRfYXJyYW5nZXIgcmJhY19nZXRfYWRkcmVzc19yb2xlcyByYmFjX2dldF9yb2xlX2NvbmZpZwogICAgZXJyCgptYWluX2NyZWF0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9yYmFjL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX3JiYWMvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfcmJhYy9jb250cmFjdC5weToxNAogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfcm90YXRlX2FycmFuZ2VyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19yb3RhdGVfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE1OAogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE1OQogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IG5ld19hcnJhbmdlcgogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3NldF9vcF9kYWVtb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX3NldF9vcF9kYWVtb246CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3MwogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3NAogICAgLy8gc2VsZi5vcF9kYWVtb24udmFsdWUgPSBhZGRyZXNzCiAgICBieXRlYyA3IC8vIDB4NTIzMjM1MjMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfYXNzaWduX3JvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2Fzc2lnbl9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTk5CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAwCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDEKICAgIC8vIHNlbGYuX2Fzc2VydF92YWxpZF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICBkdXBuIDIKICAgIGNhbGxzdWIgX2Fzc2VydF92YWxpZF9yb2xlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTAxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICBpbnRjXzMgLy8gMjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwMgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcwogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAzCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA3CiAgICAvLyBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gc2VsZi5fdXBzZXJ0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCBjb25maWcpCiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTAKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNCAvLyAweDUyMzUzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTEKICAgIC8vIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTMKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpOgogICAgZHVwCiAgICBwdXNoaW50IDYwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA1IC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNQogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgZHVwCiAgICBwdXNoaW50IDcwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmF1dGhvcml0eSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExOQogICAgLy8gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTIxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgZHVwCiAgICBwdXNoaW50IDgwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNiAvLyAweDUyMzgzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3Jldm9rZV9yb2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19yZXZva2Vfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjQKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjUKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNgogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjYKICAgIC8vIGFzc2VydCByb2xlX2lkICE9IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksIGVyci5JTlZBTElEX1JPTEUKICAgIGR1cAogICAgaW50Y18zIC8vIDIwCiAgICAhPQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI5CiAgICAvLyBkZWwgc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyOAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzIKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMwogICAgLy8gZGVsIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNSAvLyAweDUyMzYzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzcKICAgIC8vIGRlbCBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQxCiAgICAvLyBkZWwgc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0MwogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIGR1cAogICAgcHVzaGludCA4MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNiAvLyAweDUyMzgzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDUKICAgIC8vIGRlbCBzZWxmLmludGVyZXN0X29yYWNsZVtyb2xlX2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGIgcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dvdl9hc3NldF9zdXNwZW5zaW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kICAjIFRPRE86IFVwZGF0ZSBzcGVjcyBhbmQgYWRkIHRlc3QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NgogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGJ5dGVjIDggLy8gImFzc2V0X3N1c3BlbmRlZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ3CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCAgIyBUT0RPOiBVcGRhdGUgc3BlY3MgYW5kIGFkZCB0ZXN0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTcKICAgIC8vIHJldHVybiBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9hZGRyZXNzX3JvbGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfYWRkcmVzc19yb2xlczoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjczCiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmFjY291bnRfbWFuYWdlciwgYWRkcmVzcyksCiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIGRpZyAxCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NAogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5wcmltYXJ5X2RlYWxlciwgYWRkcmVzcyksCiAgICBieXRlYyA0IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDUgLy8gMHg1MjM2MzAyMwogICAgZGlnIDMKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc2CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgYWRkcmVzcyksCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyA0CiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGFkZHJlc3MpLAogICAgYnl0ZWMgNiAvLyAweDUyMzgzMDIzCiAgICB1bmNvdmVyIDUKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA2CiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAxCiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgcHVzaGludCAyCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGludCA0CiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfcm9sZV9jb25maWc6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk0CiAgICAvLyByb2xlID0gcm9sZV9pZC5hc191aW50NjQoKQogICAgYnRvaQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5NQogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZSkKICAgIGR1cAogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTcKICAgIC8vIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMQogICAgLy8gY2FzZSBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIHB1c2hpbnRzIDQwIDUwIDYwIDcwIDgwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk2LTMyNwogICAgLy8gbWF0Y2ggcm9sZToKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICAvLyAgICAgICAgIHJldHVybiB0eXAuUm9sZUNvbmZpZygKICAgIC8vICAgICAgICAgICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICAgICAgICAgKQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSk6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmF1dGhvcml0eVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5pbnRlcmVzdF9vcmFjbGUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuSU5WQUxJRF9ST0xFKQogICAgdW5jb3ZlciA2CiAgICBtYXRjaCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDIgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMUAzIHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzJANCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDUgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNEA2IHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyNwogICAgLy8gb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICBlcnIgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDYgLy8gMHg1MjM4MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMi0zMjQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTgKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMxNy0zMTkKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmF1dGhvcml0eSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIwCiAgICAvLyByZXR1cm4gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEzCiAgICAvLyBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgNSAvLyAweDUyMzYzMDIzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTUKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEyLTMxNAogICAgLy8gYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgIHNlbGYudHJ1c3RlZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzE1CiAgICAvLyByZXR1cm4gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMkA0OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwOAogICAgLy8gc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICBieXRlYyA0IC8vIDB4NTIzNTMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEwCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDkKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMi0zMDQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmFjY291bnRfbWFuYWdlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzA1CiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk4LTMwMAogICAgLy8gcmV0dXJuIHR5cC5Sb2xlQ29uZmlnKAogICAgLy8gICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3JvbGVfaXNfYWN0aXZlKHJvbGVfbWFwOiBieXRlcywgcm9sZV9hZGRyZXNzOiBieXRlcykgLT4gdWludDY0Ogpfcm9sZV9pc19hY3RpdmU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIGRlZiBfcm9sZV9pc19hY3RpdmUoc2VsZiwgcm9sZV9tYXA6IHR5cC5SYmFjUm9sZSwgcm9sZV9hZGRyZXNzOiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OC02MgogICAgLy8gcmV0dXJuIHNlbGYuX2hhc19yb2xlKHJvbGVfbWFwLCByb2xlX2FkZHJlc3MpIGFuZCAoCiAgICAvLyAgICAgcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyAgICAgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICAgICA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICAvLyApCiAgICBieiBfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTkKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjAKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIDw9CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjEKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MQogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjAtNjEKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMAogICAgPj0KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX21lcmdlQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTgtNjIKICAgIC8vIHJldHVybiBzZWxmLl9oYXNfcm9sZShyb2xlX21hcCwgcm9sZV9hZGRyZXNzKSBhbmQgKAogICAgLy8gICAgIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpIC0+IHZvaWQ6CmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjUyCiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzID09IHNlbGYuYXJyYW5nZXIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcnJhbmdlciBleGlzdHMKICAgID09CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjgzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYXNzZXRfZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgOSAvLyAiYXNzZXRfZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2RlZmF1bHRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBEZWZhdWx0ZWQKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkOiB1aW50NjQpIC0+IHZvaWQ6Cl9hc3NlcnRfdmFsaWRfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OAogICAgLy8gZGVmIF9hc3NlcnRfdmFsaWRfcm9sZShzZWxmLCByb2xlX2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MAogICAgLy8gVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MQogICAgLy8gVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICBwdXNoaW50IDQwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkyCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgcHVzaGludCA1MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MwogICAgLy8gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgcHVzaGludCA2MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NAogICAgLy8gVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICBwdXNoaW50IDcwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk1CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIHB1c2hpbnQgODAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfZmFsc2VANwoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2OgogICAgaW50Y18wIC8vIDEKCl9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX21lcmdlQDg6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICByZXRzdWIKCl9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX2ZhbHNlQDc6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9tZXJnZUA4Cg==",
+ "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgMjAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDUyM2E0MTUyNTIyMyAweDUyM2E1NDUyNTMyMyAweDUyM2E0MTU1NTQyMyAweDUyM2E0ZDRlNDcyMyAweDUyM2E1MDU5NDQyMyAweDUyM2E0ZDRmNDMyMyAiZGVmYXVsdGVkIiAweDUyM2E0ZjUwNDQyMyAiY29udHJhY3Rfc3VzcGVuZGVkIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4LTI5CiAgICAvLyAjIFJCQUMgUm9sZXMKICAgIC8vIHNlbGYuYXJyYW5nZXIgPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX0FSUkFOR0VSKQogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwCiAgICAvLyBzZWxmLm9wX2RhZW1vbiA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNzdC5QUkVGSVhfSURfT1BfREFFTU9OKQogICAgYnl0ZWMgOCAvLyAweDUyM2E0ZjUwNDQyMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjQ3LTQ4CiAgICAvLyAjIENvbnRyYWN0IEdvdmVybmFuY2UKICAgIC8vIHNlbGYuY29udHJhY3Rfc3VzcGVuZGVkID0gRmFsc2UKICAgIGJ5dGVjIDkgLy8gImNvbnRyYWN0X3N1c3BlbmRlZCIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjUwLTUxCiAgICAvLyAjIENvbnRyYWN0IFBlcmZvcm1hbmNlCiAgICAvLyBzZWxmLmRlZmF1bHRlZCA9IEZhbHNlCiAgICBieXRlYyA3IC8vICJkZWZhdWx0ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX3JiYWMvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgTW9ja1JiYWNNb2R1bGUoUmJhY01vZHVsZSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9jcmVhdGVAMjAKICAgIHB1c2hieXRlcyAweDkxNGYwNGViIC8vIG1ldGhvZCAiY29udHJhY3RfdXBkYXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jb250cmFjdF91cGRhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfcmJhYy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBNb2NrUmJhY01vZHVsZShSYmFjTW9kdWxlKToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDgyZjcxYjJkIDB4ZWYwNGY1ZDMgMHhkZjM0MzU1MCAweDNkYmU4MGJkIDB4MWUzZTQ4ZTcgMHgzOTI0MWZhMyAweDAxMGM4Mjk5IDB4NzQwNmFjZDIgMHgxYTcyYTJlZSAvLyBtZXRob2QgInJiYWNfcm90YXRlX2FycmFuZ2VyKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX3NldF9vcF9kYWVtb24oYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInJiYWNfYXNzaWduX3JvbGUodWludDgsYWRkcmVzcywodWludDY0LHVpbnQ2NCkpdWludDY0IiwgbWV0aG9kICJyYmFjX3Jldm9rZV9yb2xlKHVpbnQ4LGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2NvbnRyYWN0X3N1c3BlbnNpb24oYm9vbCl1aW50NjQiLCBtZXRob2QgInJiYWNfY29udHJhY3RfZGVmYXVsdChib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV92YWxpZGl0eSh1aW50OCxhZGRyZXNzKSh1aW50NjQsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHJiYWNfcm90YXRlX2FycmFuZ2VyIHJiYWNfc2V0X29wX2RhZW1vbiByYmFjX2Fzc2lnbl9yb2xlIHJiYWNfcmV2b2tlX3JvbGUgcmJhY19jb250cmFjdF9zdXNwZW5zaW9uIHJiYWNfY29udHJhY3RfZGVmYXVsdCByYmFjX2dldF9hcnJhbmdlciByYmFjX2dldF9hZGRyZXNzX3JvbGVzIHJiYWNfZ2V0X3JvbGVfdmFsaWRpdHkKICAgIGVycgoKbWFpbl9jb250cmFjdF91cGRhdGVfcm91dGVANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiVXBkYXRlQXBwbGljYXRpb24iXSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIGNvbnRyYWN0X3VwZGF0ZQoKbWFpbl9jcmVhdGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfcmJhYy9jb250cmFjdC5weToxNAogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9yYmFjL2NvbnRyYWN0LnB5OjE2CiAgICAvLyBzZWxmLmFycmFuZ2VyLnZhbHVlID0gVHhuLnNlbmRlcgogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9yYmFjL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuY29udHJhY3RfdXBkYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKY29udHJhY3RfdXBkYXRlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MS0xNjQKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBncmFudHMgdGhlIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byB0aGUgQXJyYW5nZXIuCiAgICAvLyAjIOKaoO+4jyBXQVJOSU5HOiBBcHBsaWNhdGlvbiB1cGRhdGVzIG11c3QgYmUgZXhlY3V0ZWQgVkVSWSBjYXJlZnVsbHksIGFzIHRoZXkKICAgIC8vICMgbWlnaHQgaW50cm9kdWNlIGJyZWFraW5nIGNoYW5nZXMuCiAgICAvLyBzZWxmLl9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiVXBkYXRlQXBwbGljYXRpb24iXSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3JvdGF0ZV9hcnJhbmdlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfcm90YXRlX2FycmFuZ2VyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxODAKICAgIC8vIHNlbGYuX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBfYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE4MQogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IG5ld19hcnJhbmdlcgogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxODIKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19zZXRfb3BfZGFlbW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19zZXRfb3BfZGFlbW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxOTgKICAgIC8vIHNlbGYuX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBfYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE5OQogICAgLy8gc2VsZi5vcF9kYWVtb24udmFsdWUgPSBhZGRyZXNzCiAgICBieXRlYyA4IC8vIDB4NTIzYTRmNTA0NDIzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2Fzc2lnbl9yb2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19hc3NpZ25fcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBwdXNoaW50IDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBzbWFydF9jb250cmFjdHMuYWJpX3R5cGVzLlJvbGVWYWxpZGl0eQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNAogICAgLy8gc2VsZi5fYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIF9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI1CiAgICAvLyBzZWxmLl9hc3NlcnRfaXNfbm90X2NvbnRyYWN0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIF9hc3NlcnRfaXNfbm90X2NvbnRyYWN0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNgogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDQKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpOgogICAgaW50Y18zIC8vIDIwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDUKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzEgLy8gMHg1MjNhNDE1MjUyMjMKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9zZXRfcm9sZUAxNDoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDgKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIGR1cAogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA5CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmFjY291bnRfbWFuYWdlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzYTRkNGU0NzIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTAKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10gPSB2YWxpZGl0eS5jb3B5KCkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9zZXRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIHZhbGlkaXR5KQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTIKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTMKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNSAvLyAweDUyM2E1MDU5NDQyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE0CiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10gPSB2YWxpZGl0eS5jb3B5KCkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9zZXRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIHZhbGlkaXR5KQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTYKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNwogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi50cnVzdGVlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjNhNTQ1MjUzMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExOAogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB2YWxpZGl0eS5jb3B5KCkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9zZXRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIHZhbGlkaXR5KQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjAKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMQogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5hdXRob3JpdHksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWNfMyAvLyAweDUyM2E0MTU1NTQyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTIyCiAgICAvLyBzZWxmLmF1dGhvcml0eVtyb2xlX2FkZHJlc3NdID0gdmFsaWRpdHkuY29weSgpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNwogICAgLy8gc2VsZi5fc2V0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCB2YWxpZGl0eSkKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9zZXRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyNAogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoZW51bXMuUk9MRV9PQlNFUlZFUik6CiAgICBkdXAKICAgIHB1c2hpbnQgODAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI1CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLm9ic2VydmVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDYgLy8gMHg1MjNhNGQ0ZjQzMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyNgogICAgLy8gc2VsZi5vYnNlcnZlcltyb2xlX2FkZHJlc3NdID0gdmFsaWRpdHkuY29weSgpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19yZXZva2Vfcm9sZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfcmV2b2tlX3JvbGU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ5CiAgICAvLyBzZWxmLl9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTAKICAgIC8vIHNlbGYuX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjUxCiAgICAvLyBzZWxmLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgZHVwbiAyCiAgICBjYWxsc3ViIF9hc3NlcnRfdmFsaWRfcm9sZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyOQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgIT0gVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBkdXAKICAgIGludGNfMyAvLyAyMAogICAgIT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIHJvbGUgaWRlbnRpZmllcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMAogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTMxCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDQgLy8gMHg1MjNhNGQ0ZTQ3MjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMgogICAgLy8gZGVsIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAoKcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTMKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzQKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzUKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA1IC8vIDB4NTIzYTUwNTk0NDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzYKICAgIC8vIGRlbCBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI1MgogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzgKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWNfMiAvLyAweDUyM2E1NDUyNTMyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBkZWwgc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI1MgogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDIKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQzCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjNhNDE1NTU0MjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NAogICAgLy8gZGVsIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI1MgogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDYKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDgwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NwogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLm9ic2VydmVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDYgLy8gMHg1MjNhNGQ0ZjQzMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0OAogICAgLy8gZGVsIHNlbGYub2JzZXJ2ZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2NvbnRyYWN0X3N1c3BlbnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2NvbnRyYWN0X3N1c3BlbnNpb246CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzkKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzMgLy8gMHg1MjNhNDE1NTU0MjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNzEKICAgIC8vIHNlbGYuY29udHJhY3Rfc3VzcGVuZGVkID0gc3VzcGVuZGVkCiAgICBieXRlYyA5IC8vICJjb250cmFjdF9zdXNwZW5kZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3MgogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2NvbnRyYWN0X2RlZmF1bHRbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2NvbnRyYWN0X2RlZmF1bHQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzYKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnRydXN0ZWUsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18yIC8vIDB4NTIzYTU0NTI1MzIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjg3CiAgICAvLyBzZWxmLmRlZmF1bHRlZCA9IGRlZmF1bHRlZAogICAgYnl0ZWMgNyAvLyAiZGVmYXVsdGVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDEKICAgIC8vIHJldHVybiBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFycmFuZ2VyIGV4aXN0cwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYWRkcmVzc19yb2xlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIGFkZHJlc3MpLAogICAgYnl0ZWMgNCAvLyAweDUyM2E0ZDRlNDcyMwogICAgZGlnIDEKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIyCiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnByaW1hcnlfZGVhbGVyLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDUgLy8gMHg1MjNhNTA1OTQ0MjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjXzIgLy8gMHg1MjNhNTQ1MjUzMjMKICAgIGRpZyAzCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyNAogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hdXRob3JpdHksIGFkZHJlc3MpLAogICAgYnl0ZWNfMyAvLyAweDUyM2E0MTU1NTQyMwogICAgZGlnIDQKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLm9ic2VydmVyLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDYgLy8gMHg1MjNhNGQ0ZjQzMjMKICAgIHVuY292ZXIgNQogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDYKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgNQogICAgc2V0Yml0CiAgICBwdXNoaW50IDIKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBwdXNoaW50IDMKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoaW50IDQKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV92YWxpZGl0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzQ2CiAgICAvLyByb2xlID0gcm9sZV9pZC5hc191aW50NjQoKQogICAgYnRvaQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM0NwogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZSkKICAgIGR1cAogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNDkKICAgIC8vIGNhc2UgVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpOgogICAgaW50Y18zIC8vIDIwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzUzCiAgICAvLyBjYXNlIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICBwdXNoaW50cyA0MCA1MCA2MCA3MCA4MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM0OC0zNzkKICAgIC8vIG1hdGNoIHJvbGU6CiAgICAvLyAgICAgY2FzZSBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUik6CiAgICAvLyAgICAgICAgIHJldHVybiB0eXAuUm9sZVZhbGlkaXR5KAogICAgLy8gICAgICAgICAgICAgcm9sZV92YWxpZGl0eV9zdGFydD1VSW50NjQoMCksIHJvbGVfdmFsaWRpdHlfZW5kPVVJbnQ2NCgwKQogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgY2FzZSBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLmFjY291bnRfbWFuYWdlciwgcm9sZV9hZGRyZXNzCiAgICAvLyAgICAgICAgICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICByZXR1cm4gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYudHJ1c3RlZVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLmF1dGhvcml0eSwgcm9sZV9hZGRyZXNzCiAgICAvLyAgICAgICAgICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICByZXR1cm4gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLm9ic2VydmVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLm9ic2VydmVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuSU5WQUxJRF9ST0xFKQogICAgdW5jb3ZlciA2CiAgICBtYXRjaCByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzBAMiByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzFAMyByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzJANCByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzNANSByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzRANiByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzVANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3OQogICAgLy8gb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICBlcnIgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKCnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfc3dpdGNoX2Nhc2VfNUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3NQogICAgLy8gc2VsZi5vYnNlcnZlciwgcm9sZV9hZGRyZXNzCiAgICBieXRlYyA2IC8vIDB4NTIzYTRkNGY0MzIzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mzc0LTM3NgogICAgLy8gYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgIHNlbGYub2JzZXJ2ZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3NwogICAgLy8gcmV0dXJuIHNlbGYub2JzZXJ2ZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX3ZhbGlkaXR5X2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV92YWxpZGl0eUA5OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNzAKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg1MjNhNDE1NTU0MjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNjktMzcxCiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hdXRob3JpdHksIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3MgogICAgLy8gcmV0dXJuIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX3ZhbGlkaXR5QDkKCnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfc3dpdGNoX2Nhc2VfM0A1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM2NQogICAgLy8gc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzIgLy8gMHg1MjNhNTQ1MjUzMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNjQtMzY2CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNjcKICAgIC8vIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV92YWxpZGl0eV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlAOQoKcmJhY19nZXRfcm9sZV92YWxpZGl0eV9zd2l0Y2hfY2FzZV8yQDQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzYwCiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDUgLy8gMHg1MjNhNTA1OTQ0MjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNTktMzYxCiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzYyCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV92YWxpZGl0eUA5CgpyYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNTUKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDQgLy8gMHg1MjNhNGQ0ZTQ3MjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNTQtMzU2CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X21hbmFnZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM1NwogICAgLy8gcmV0dXJuIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX3ZhbGlkaXR5QDkKCnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfc3dpdGNoX2Nhc2VfMEAyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM1MC0zNTIKICAgIC8vIHJldHVybiB0eXAuUm9sZVZhbGlkaXR5KAogICAgLy8gICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV92YWxpZGl0eV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlAOQoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9yb2xlX2lzX2FjdGl2ZShyb2xlX21hcDogYnl0ZXMsIHJvbGVfYWRkcmVzczogYnl0ZXMpIC0+IHVpbnQ2NDoKX3JvbGVfaXNfYWN0aXZlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU5CiAgICAvLyBkZWYgX3JvbGVfaXNfYWN0aXZlKHNlbGYsIHJvbGVfbWFwOiB0eXAuUmJhY1JvbGUsIHJvbGVfYWRkcmVzczogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDIgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjAtNjQKICAgIC8vIHJldHVybiBzZWxmLl9oYXNfcm9sZShyb2xlX21hcCwgcm9sZV9hZGRyZXNzKSBhbmQgKAogICAgLy8gICAgIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKQogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxCiAgICAvLyByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94TWFwIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjIKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxLTYyCiAgICAvLyByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICA8PQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxLTYzCiAgICAvLyByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBieiBfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjMKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94TWFwIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYyLTYzCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjEtNjMKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYwLTY0CiAgICAvLyByZXR1cm4gc2VsZi5faGFzX3JvbGUocm9sZV9tYXAsIHJvbGVfYWRkcmVzcykgYW5kICgKICAgIC8vICAgICByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgX3JvbGVfaXNfYWN0aXZlX2Jvb2xfbWVyZ2VANQoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkgLT4gdm9pZDoKX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjcKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU0CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzID09IHNlbGYuYXJyYW5nZXIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vIDB4NTIzYTQxNTI1MjIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICA9PQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY3CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfYXJyYW5nZXIoVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkKCkgLT4gdm9pZDoKX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNyAvLyAiZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlZmF1bHRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBEZWZhdWx0ZWQKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkOiB1aW50NjQpIC0+IHZvaWQ6Cl9hc3NlcnRfdmFsaWRfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MAogICAgLy8gZGVmIF9hc3NlcnRfdmFsaWRfcm9sZShzZWxmLCByb2xlX2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTIKICAgIC8vIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkxLTk5CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09QX0RBRU1PTiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PQlNFUlZFUiksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTMKICAgIC8vIFVJbnQ2NChlbnVtcy5ST0xFX09QX0RBRU1PTiksCiAgICBwdXNoaW50IDI1CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA3CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NAogICAgLy8gVUludDY0KGVudW1zLlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDcKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk1CiAgICAvLyBVSW50NjQoZW51bXMuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA3CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NgogICAgLy8gVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA3CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NwogICAgLy8gVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDcKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk4CiAgICAvLyBVSW50NjQoZW51bXMuUk9MRV9PQlNFUlZFUiksCiAgICBwdXNoaW50IDgwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9mYWxzZUA4CgpfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDc6CiAgICBpbnRjXzAgLy8gMQoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfbWVyZ2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICByZXRzdWIKCl9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9tZXJnZUA5Cg==",
"clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="
},
"byteCode": {
- "approval": "CyAEAQAgFCYKBBUffHUEUjIwIwRSNzAjBFI0MCMEUjUwIwRSNjAjBFI4MCMEUjI1Iw9hc3NldF9zdXNwZW5kZWQPYXNzZXRfZGVmYXVsdGVkMRhAABEpMgNnJwcyA2cnCCNnJwkjZzEbQQBHMRkURDEYRIIIBIL3Gy0E7wT10wQDuDMpBD2+gL0E31ToLAQBDIKZBHQGrNIEw+SylzYaAI4IAA8AJgA+APYBiQGnAbEB+gAxGRQxGBQQRCkxAGciQzYaAUkVJBJEiAKmKUxnMgcWKExQsCJDNhoBSRUkEkSIAo8nB0xnMgcWKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJENhoDSSNZgQIISwEVEkRXAgBMiAJbiAJhF0cCiAJjJRJBAA0pSwNnMgcWKExQsCJDSYEoEkEAECtLA1BJvUUBFERLAr9C/+BJgTISQQARJwRLA1BJvUUBFERLAr9C/8hJgTwSQQARJwVLA1BJvUUBFERLAr9C/7BJgUYSQQAQKksDUEm9RQEUREsCv0L/mUmBUBJB/5InBksDUEm9RQEUREsCv0L/gTYaAUkVIhJENhoCSU4CFSQSRIgBtYgBuxdHAogBvUklE0SBKBJBABQrSwJQSb1FAUS8SDIHFihMULAiQ0mBMhJBAA8nBEsCUEm9RQFEvEhC/+FJgTwSQQAPJwVLAlBJvUUBRLxIQv/LSYFGEkEADipLAlBJvUUBRLxIQv+2SYFQEkH/rycGSwJQSb1FAUS8SEL/oDYaAUkVIhJEI1MqMQCIAPJEJwhMZzIHFihMULAiQyMpZUQoTFCwIkM2GgFJFSQSRCtLAYgAzCcESwKIAMUnBUsDiAC+KksEiAC4JwZPBYgAsYABACNPBlQiTwVUgQJPBFSBA08DVIEETwJUKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJEF0mIAMAlgwUoMjxGUE8GjgYATQA/ADAAIQATAAEAJwZLAVBJvUUBRL5IKExQsCJDKksBUEm9RQFEvkhC/+wnBUsBUEm9RQFEvkhC/90nBEsBUEm9RQFEvkhC/84rSwFQSb1FAUS+SEL/wIAQAAAAAAAAAAAAAAAAAAAAAEL/q4oCAYAAi/6L/1BJvUUBQQAgiwG+RCNbMgdJjAAOQQARiwG+RIEIW4sAD0EABCKMAIkjQv/5MQAjKWVEEkSJIycJZUQURImKAQCL/yUSQAAoi/+BKBJAACCL/4EyEkAAGIv/gTwSQAAQi/+BRhJAAAiL/4FQEkEAAyJEiSNC//o=",
+ "approval": "CyAEAQAgFCYKBBUffHUGUjpBUlIjBlI6VFJTIwZSOkFVVCMGUjpNTkcjBlI6UFlEIwZSOk1PQyMJZGVmYXVsdGVkBlI6T1BEIxJjb250cmFjdF9zdXNwZW5kZWQxGEAAESkyA2cnCDIDZycJI2cnByNnMRtBAGeABJFPBOs2GgCOAQBOMRkURDEYRIIJBIL3Gy0E7wT10wTfNDVQBD2+gL0EHj5I5wQ5JB+jBAEMgpkEdAas0gQacqLuNhoAjgkAIAA3AE8BAAGTAbEBzwHZAiIAMRmBBBIxGBBEQgAOMRkUMRgUEEQpMQBnIkOIAsoiQzYaAUkVJBJEiAK9KUxnMgcWKExQsCJDNhoBSRUkEkSIAqYnCExnMgcWKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJENhoDSU4CFYEQEkSIAnmIAn8XRwKIAoElEkEADSlLA2cyBxYoTFCwIkNJgSgSQQARJwRLA1BJvUUBFERLAr9C/99JgTISQQARJwVLA1BJvUUBFERLAr9C/8dJgTwSQQAQKksDUEm9RQEUREsCv0L/sEmBRhJBABArSwNQSb1FARRESwK/Qv+ZSYFQEkH/kicGSwNQSb1FARRESwK/Qv+BNhoBSRUiEkQ2GgJJTgIVJBJEiAHTiAHZF0cCiAHbSSUTRIEoEkEAFScESwJQSb1FAUS8SDIHFihMULAiQ0mBMhJBAA8nBUsCUEm9RQFEvEhC/+FJgTwSQQAOKksCUEm9RQFEvEhC/8xJgUYSQQAOK0sCUEm9RQFEvEhC/7dJgVASQf+wJwZLAlBJvUUBRLxIQv+hNhoBSRUiEkQjUysxAIgBEEQnCUxnMgcWKExQsCJDNhoBSRUiEkQjUyoxAIgA8kQnB0xnMgcWKExQsCJDIyllRChMULAiQzYaAUkVJBJEJwRLAYgAyycFSwKIAMQqSwOIAL4rSwSIALgnBk8FiACxgAEAI08GVCJPBVSBAk8EVIEDTwNUgQRPAlQoTFCwIkM2GgFJFSISRDYaAklOAhUkEkQXSYgAwCWDBSgyPEZQTwaOBgBNAD4ALwAhABMAAQAnBksBUEm9RQFEvkgoTFCwIkMrSwFQSb1FAUS+SEL/7CpLAVBJvUUBRL5IQv/eJwVLAVBJvUUBRL5IQv/PJwRLAVBJvUUBRL5IQv/AgBAAAAAAAAAAAAAAAAAAAAAAQv+rigIBgACL/ov/UEm9RQFBACCLAb5EI1syB0mMAA5BABGLAb5EgQhbiwAPQQAEIowAiSNC//kxACMpZUQSRIkjJwdlRBREiYoBAIv/JRJAADCL/4EZEkAAKIv/gSgSQAAgi/+BMhJAABiL/4E8EkAAEIv/gUYSQAAIi/+BUBJBAAMiRIkjQv/6",
"clear": "C4EBQw=="
},
"compilerInfo": {
diff --git a/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_avm_client.py b/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_avm_client.py
new file mode 100644
index 00000000..e2b93855
--- /dev/null
+++ b/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_avm_client.py
@@ -0,0 +1,108 @@
+# This file is auto-generated, do not modify
+# flake8: noqa
+# fmt: off
+import typing
+
+import algopy
+
+class RoleValidity(algopy.arc4.Struct):
+ role_validity_start: algopy.arc4.UIntN[typing.Literal[64]]
+ role_validity_end: algopy.arc4.UIntN[typing.Literal[64]]
+
+class MockRbacModule(algopy.arc4.ARC4Client, typing.Protocol):
+ """
+
+ RBAC Module for testing
+
+ """
+ @algopy.arc4.abimethod(allow_actions=['UpdateApplication'])
+ def contract_update(
+ self,
+ ) -> None:
+ """
+ Update D-ASA application.
+ """
+
+ @algopy.arc4.abimethod
+ def rbac_rotate_arranger(
+ self,
+ new_arranger: algopy.arc4.Address,
+ ) -> algopy.arc4.UIntN[typing.Literal[64]]:
+ """
+ Rotate the arranger address.
+ """
+
+ @algopy.arc4.abimethod
+ def rbac_set_op_daemon(
+ self,
+ address: algopy.arc4.Address,
+ ) -> algopy.arc4.UIntN[typing.Literal[64]]:
+ """
+ Non-normative helper to set the operation daemon address.
+ """
+
+ @algopy.arc4.abimethod
+ def rbac_assign_role(
+ self,
+ role_id: algopy.arc4.UIntN[typing.Literal[8]],
+ role_address: algopy.arc4.Address,
+ validity: RoleValidity,
+ ) -> algopy.arc4.UIntN[typing.Literal[64]]:
+ """
+ Assign a role to an address.
+ """
+
+ @algopy.arc4.abimethod
+ def rbac_revoke_role(
+ self,
+ role_id: algopy.arc4.UIntN[typing.Literal[8]],
+ role_address: algopy.arc4.Address,
+ ) -> algopy.arc4.UIntN[typing.Literal[64]]:
+ """
+ Revoke a role from an address.
+ """
+
+ @algopy.arc4.abimethod
+ def rbac_contract_suspension(
+ self,
+ suspended: algopy.arc4.Bool,
+ ) -> algopy.arc4.UIntN[typing.Literal[64]]:
+ """
+ Set the asset-wide suspension status.
+ """
+
+ @algopy.arc4.abimethod
+ def rbac_contract_default(
+ self,
+ defaulted: algopy.arc4.Bool,
+ ) -> algopy.arc4.UIntN[typing.Literal[64]]:
+ """
+ Set D-ASA default status
+ """
+
+ @algopy.arc4.abimethod(readonly=True)
+ def rbac_get_arranger(
+ self,
+ ) -> algopy.arc4.Address:
+ """
+ Get the arranger address.
+ """
+
+ @algopy.arc4.abimethod(readonly=True)
+ def rbac_get_address_roles(
+ self,
+ address: algopy.arc4.Address,
+ ) -> algopy.arc4.Tuple[algopy.arc4.Bool, algopy.arc4.Bool, algopy.arc4.Bool, algopy.arc4.Bool, algopy.arc4.Bool]:
+ """
+ Non-normative helper to get the active roles assigned to an address.
+ """
+
+ @algopy.arc4.abimethod(readonly=True)
+ def rbac_get_role_validity(
+ self,
+ role_id: algopy.arc4.UIntN[typing.Literal[8]],
+ role_address: algopy.arc4.Address,
+ ) -> RoleValidity:
+ """
+ Get the stored validity interval for a role assignment.
+ """
diff --git a/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_client.py b/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_client.py
index 6e6b1228..77744888 100644
--- a/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_client.py
+++ b/smart_contracts/artifacts/mock_module_rbac/mock_rbac_module_client.py
@@ -19,7 +19,7 @@
import algokit_utils
from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient
-_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "New Arranger address", "name": "new_arranger"}], "name": "rbac_rotate_arranger", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Rotate the Arranger address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Operation Daemon address", "name": "address"}], "name": "rbac_set_op_daemon", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Non-Normative: Set the Operation Daemon address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}, {"type": "byte[]", "desc": "Role configuration (Optional)", "name": "config"}], "name": "rbac_assign_role", "returns": {"type": "uint64", "desc": "Timestamp of the role assignment"}, "desc": "Assign a role to an address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}], "name": "rbac_revoke_role", "returns": {"type": "uint64", "desc": "Timestamp of the role revocation"}, "desc": "Revoke a role from an address", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "bool", "desc": "Suspension status", "name": "suspended"}], "name": "rbac_gov_asset_suspension", "returns": {"type": "uint64", "desc": "Timestamp of the set asset suspension status"}, "desc": "Set asset suspension status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "rbac_get_arranger", "returns": {"type": "address", "desc": "Arranger address"}, "desc": "Get Arranger address", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Address to get roles for", "name": "address"}], "name": "rbac_get_address_roles", "returns": {"type": "(bool,bool,bool,bool,bool)", "desc": "Roles mask: (Account Manager, Primary Dealer, Trustee, Authority, Interest Oracle)"}, "desc": "Non-normative - Get roles assigned to an address", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role Identifier", "name": "role_id"}, {"type": "address", "desc": "Account Role Address", "name": "role_address"}], "name": "rbac_get_role_config", "returns": {"type": "(uint64,uint64)", "desc": "Role configuration", "struct": "RoleConfig"}, "desc": "Get role configuration", "events": [], "readonly": true, "recommendations": {}}], "name": "MockRbacModule", "state": {"keys": {"box": {}, "global": {"arranger": {"key": "UjIwIw==", "keyType": "AVMBytes", "valueType": "address"}, "op_daemon": {"key": "UjI1Iw==", "keyType": "AVMBytes", "valueType": "address"}, "asset_suspended": {"key": "YXNzZXRfc3VzcGVuZGVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "asset_defaulted": {"key": "YXNzZXRfZGVmYXVsdGVk", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"account_manager": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjQwIw=="}, "primary_dealer": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjUwIw=="}, "trustee": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjYwIw=="}, "authority": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjcwIw=="}, "interest_oracle": {"keyType": "address", "valueType": "RoleConfig", "prefix": "UjgwIw=="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 2, "ints": 2}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"RoleConfig": [{"name": "role_validity_start", "type": "uint64"}, {"name": "role_validity_end", "type": "uint64"}]}, "byteCode": {"approval": "CyAEAQAgFCYKBBUffHUEUjIwIwRSNzAjBFI0MCMEUjUwIwRSNjAjBFI4MCMEUjI1Iw9hc3NldF9zdXNwZW5kZWQPYXNzZXRfZGVmYXVsdGVkMRhAABEpMgNnJwcyA2cnCCNnJwkjZzEbQQBHMRkURDEYRIIIBIL3Gy0E7wT10wQDuDMpBD2+gL0E31ToLAQBDIKZBHQGrNIEw+SylzYaAI4IAA8AJgA+APYBiQGnAbEB+gAxGRQxGBQQRCkxAGciQzYaAUkVJBJEiAKmKUxnMgcWKExQsCJDNhoBSRUkEkSIAo8nB0xnMgcWKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJENhoDSSNZgQIISwEVEkRXAgBMiAJbiAJhF0cCiAJjJRJBAA0pSwNnMgcWKExQsCJDSYEoEkEAECtLA1BJvUUBFERLAr9C/+BJgTISQQARJwRLA1BJvUUBFERLAr9C/8hJgTwSQQARJwVLA1BJvUUBFERLAr9C/7BJgUYSQQAQKksDUEm9RQEUREsCv0L/mUmBUBJB/5InBksDUEm9RQEUREsCv0L/gTYaAUkVIhJENhoCSU4CFSQSRIgBtYgBuxdHAogBvUklE0SBKBJBABQrSwJQSb1FAUS8SDIHFihMULAiQ0mBMhJBAA8nBEsCUEm9RQFEvEhC/+FJgTwSQQAPJwVLAlBJvUUBRLxIQv/LSYFGEkEADipLAlBJvUUBRLxIQv+2SYFQEkH/rycGSwJQSb1FAUS8SEL/oDYaAUkVIhJEI1MqMQCIAPJEJwhMZzIHFihMULAiQyMpZUQoTFCwIkM2GgFJFSQSRCtLAYgAzCcESwKIAMUnBUsDiAC+KksEiAC4JwZPBYgAsYABACNPBlQiTwVUgQJPBFSBA08DVIEETwJUKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJEF0mIAMAlgwUoMjxGUE8GjgYATQA/ADAAIQATAAEAJwZLAVBJvUUBRL5IKExQsCJDKksBUEm9RQFEvkhC/+wnBUsBUEm9RQFEvkhC/90nBEsBUEm9RQFEvkhC/84rSwFQSb1FAUS+SEL/wIAQAAAAAAAAAAAAAAAAAAAAAEL/q4oCAYAAi/6L/1BJvUUBQQAgiwG+RCNbMgdJjAAOQQARiwG+RIEIW4sAD0EABCKMAIkjQv/5MQAjKWVEEkSJIycJZUQURImKAQCL/yUSQAAoi/+BKBJAACCL/4EyEkAAGIv/gTwSQAAQi/+BRhJAAAiL/4FQEkEAAyJEiSNC//o=", "clear": "C4EBQw=="}, "desc": "\n RBAC Module for testing\n ", "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgMjAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDUyMzIzMDIzIDB4NTIzNzMwMjMgMHg1MjM0MzAyMyAweDUyMzUzMDIzIDB4NTIzNjMwMjMgMHg1MjM4MzAyMyAweDUyMzIzNTIzICJhc3NldF9zdXNwZW5kZWQiICJhc3NldF9kZWZhdWx0ZWQiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzAtMzEKICAgIC8vICMgUkJBQyBSb2xlcwogICAgLy8gc2VsZi5hcnJhbmdlciA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNzdC5QUkVGSVhfSURfQVJSQU5HRVIpCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMgogICAgLy8gc2VsZi5vcF9kYWVtb24gPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX09QX0RBRU1PTikKICAgIGJ5dGVjIDcgLy8gMHg1MjMyMzUyMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjQ3LTQ4CiAgICAvLyAjIEQtQVNBIEdvdmVybmFuY2UKICAgIC8vIHNlbGYuYXNzZXRfc3VzcGVuZGVkID0gRmFsc2UKICAgIGJ5dGVjIDggLy8gImFzc2V0X3N1c3BlbmRlZCIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjQ5CiAgICAvLyBzZWxmLmFzc2V0X2RlZmF1bHRlZCA9IEZhbHNlCiAgICBieXRlYyA5IC8vICJhc3NldF9kZWZhdWx0ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX3JiYWMvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgTW9ja1JiYWNNb2R1bGUoUmJhY01vZHVsZSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9jcmVhdGVAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDgyZjcxYjJkIDB4ZWYwNGY1ZDMgMHgwM2I4MzMyOSAweDNkYmU4MGJkIDB4ZGY1NGU4MmMgMHgwMTBjODI5OSAweDc0MDZhY2QyIDB4YzNlNGIyOTcgLy8gbWV0aG9kICJyYmFjX3JvdGF0ZV9hcnJhbmdlcihhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19zZXRfb3BfZGFlbW9uKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2Fzc2lnbl9yb2xlKHVpbnQ4LGFkZHJlc3MsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19yZXZva2Vfcm9sZSh1aW50OCxhZGRyZXNzKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nb3ZfYXNzZXRfc3VzcGVuc2lvbihib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV9jb25maWcodWludDgsYWRkcmVzcykodWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCByYmFjX3JvdGF0ZV9hcnJhbmdlciByYmFjX3NldF9vcF9kYWVtb24gcmJhY19hc3NpZ25fcm9sZSByYmFjX3Jldm9rZV9yb2xlIHJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb24gcmJhY19nZXRfYXJyYW5nZXIgcmJhY19nZXRfYWRkcmVzc19yb2xlcyByYmFjX2dldF9yb2xlX2NvbmZpZwogICAgZXJyCgptYWluX2NyZWF0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9yYmFjL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX3JiYWMvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfcmJhYy9jb250cmFjdC5weToxNAogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfcm90YXRlX2FycmFuZ2VyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19yb3RhdGVfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE1OAogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE1OQogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IG5ld19hcnJhbmdlcgogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3NldF9vcF9kYWVtb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX3NldF9vcF9kYWVtb246CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3MwogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3NAogICAgLy8gc2VsZi5vcF9kYWVtb24udmFsdWUgPSBhZGRyZXNzCiAgICBieXRlYyA3IC8vIDB4NTIzMjM1MjMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTc1CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfYXNzaWduX3JvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2Fzc2lnbl9yb2xlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTk5CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAwCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDEKICAgIC8vIHNlbGYuX2Fzc2VydF92YWxpZF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCkpCiAgICBidG9pCiAgICBkdXBuIDIKICAgIGNhbGxzdWIgX2Fzc2VydF92YWxpZF9yb2xlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTAxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICBpbnRjXzMgLy8gMjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwMgogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcwogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAzCiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA1CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDQwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA3CiAgICAvLyBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gc2VsZi5fdXBzZXJ0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCBjb25maWcpCiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCnJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEwOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTAKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNCAvLyAweDUyMzUzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTEKICAgIC8vIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTMKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpOgogICAgZHVwCiAgICBwdXNoaW50IDYwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA1IC8vIDB4NTIzNjMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNQogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjAyCiAgICAvLyBzZWxmLl91cHNlcnRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIGNvbmZpZykKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgZHVwCiAgICBwdXNoaW50IDcwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmF1dGhvcml0eSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExOQogICAgLy8gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnKQogICAgZGlnIDIKICAgIGJveF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIHNlbGYuX3Vwc2VydF9yb2xlKHJvbGVfaWQuYXNfdWludDY0KCksIHJvbGVfYWRkcmVzcywgY29uZmlnKQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3Vwc2VydF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTIxCiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgZHVwCiAgICBwdXNoaW50IDgwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl91cHNlcnRfcm9sZUAxNAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNiAvLyAweDUyMzgzMDIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZykKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICBiIHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fdXBzZXJ0X3JvbGVAMTQKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3Jldm9rZV9yb2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19yZXZva2Vfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjQKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjUKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9hc3NldF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNgogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjYKICAgIC8vIGFzc2VydCByb2xlX2lkICE9IFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksIGVyci5JTlZBTElEX1JPTEUKICAgIGR1cAogICAgaW50Y18zIC8vIDIwCiAgICAhPQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI3CiAgICAvLyBpZiByb2xlX2lkID09IFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI5CiAgICAvLyBkZWwgc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyOAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzIKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMwogICAgLy8gZGVsIHNlbGYucHJpbWFyeV9kZWFsZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzNgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNSAvLyAweDUyMzYzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzcKICAgIC8vIGRlbCBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQxCiAgICAvLyBkZWwgc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9kZWxldGVfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MpCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCnJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0MwogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIGR1cAogICAgcHVzaGludCA4MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDQKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNiAvLyAweDUyMzgzMDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDUKICAgIC8vIGRlbCBzZWxmLmludGVyZXN0X29yYWNsZVtyb2xlX2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGIgcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ292X2Fzc2V0X3N1c3BlbnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dvdl9hc3NldF9zdXNwZW5zaW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kICAjIFRPRE86IFVwZGF0ZSBzcGVjcyBhbmQgYWRkIHRlc3QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI0NgogICAgLy8gc2VsZi5hc3NldF9zdXNwZW5kZWQgPSBzdXNwZW5kZWQKICAgIGJ5dGVjIDggLy8gImFzc2V0X3N1c3BlbmRlZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ3CiAgICAvLyByZXR1cm4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCAgIyBUT0RPOiBVcGRhdGUgc3BlY3MgYW5kIGFkZCB0ZXN0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTcKICAgIC8vIHJldHVybiBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMSAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9hZGRyZXNzX3JvbGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfYWRkcmVzc19yb2xlczoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjczCiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmFjY291bnRfbWFuYWdlciwgYWRkcmVzcyksCiAgICBieXRlY18zIC8vIDB4NTIzNDMwMjMKICAgIGRpZyAxCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NAogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5wcmltYXJ5X2RlYWxlciwgYWRkcmVzcyksCiAgICBieXRlYyA0IC8vIDB4NTIzNTMwMjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDUgLy8gMHg1MjM2MzAyMwogICAgZGlnIDMKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc2CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgYWRkcmVzcyksCiAgICBieXRlY18yIC8vIDB4NTIzNzMwMjMKICAgIGRpZyA0CiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5pbnRlcmVzdF9vcmFjbGUsIGFkZHJlc3MpLAogICAgYnl0ZWMgNiAvLyAweDUyMzgzMDIzCiAgICB1bmNvdmVyIDUKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA2CiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAxCiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgcHVzaGludCAyCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGludCA0CiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19nZXRfcm9sZV9jb25maWc6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk0CiAgICAvLyByb2xlID0gcm9sZV9pZC5hc191aW50NjQoKQogICAgYnRvaQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5NQogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZSkKICAgIGR1cAogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyOTcKICAgIC8vIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMQogICAgLy8gY2FzZSBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIHB1c2hpbnRzIDQwIDUwIDYwIDcwIDgwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk2LTMyNwogICAgLy8gbWF0Y2ggcm9sZToKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUik6CiAgICAvLyAgICAgICAgIHJldHVybiB0eXAuUm9sZUNvbmZpZygKICAgIC8vICAgICAgICAgICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICAgICAgICAgKQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmFjY291bnRfbWFuYWdlcltyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSk6CiAgICAvLyAgICAgICAgIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICAgICAgICAgIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLmF1dGhvcml0eVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgICAgICAgICAgc2VsZi5pbnRlcmVzdF9vcmFjbGUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJlc3Rfb3JhY2xlW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuSU5WQUxJRF9ST0xFKQogICAgdW5jb3ZlciA2CiAgICBtYXRjaCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDIgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMUAzIHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzJANCByYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDUgcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfNEA2IHJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyNwogICAgLy8gb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICBlcnIgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzVANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMjMKICAgIC8vIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDYgLy8gMHg1MjM4MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMi0zMjQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmludGVyZXN0X29yYWNsZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyByZXR1cm4gc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMTgKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzIgLy8gMHg1MjM3MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMxNy0zMTkKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmF1dGhvcml0eSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIwCiAgICAvLyByZXR1cm4gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8zQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEzCiAgICAvLyBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgYnl0ZWMgNSAvLyAweDUyMzYzMDIzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTUKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEyLTMxNAogICAgLy8gYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgIHNlbGYudHJ1c3RlZSwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzE1CiAgICAvLyByZXR1cm4gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfY29uZmlnX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV9jb25maWdAOQoKcmJhY19nZXRfcm9sZV9jb25maWdfc3dpdGNoX2Nhc2VfMkA0OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwOAogICAgLy8gc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICBieXRlYyA0IC8vIDB4NTIzNTMwMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDctMzA5CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzEwCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX2NvbmZpZ19hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfY29uZmlnQDkKCnJiYWNfZ2V0X3JvbGVfY29uZmlnX3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg1MjM0MzAyMwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU1CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzIGluIHJvbGVfbWFwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwMi0zMDQKICAgIC8vIGFzc2VydCBzZWxmLl9oYXNfcm9sZSgKICAgIC8vICAgICBzZWxmLmFjY291bnRfbWFuYWdlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzA1CiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgpyYmFjX2dldF9yb2xlX2NvbmZpZ19zd2l0Y2hfY2FzZV8wQDI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjk4LTMwMAogICAgLy8gcmV0dXJuIHR5cC5Sb2xlQ29uZmlnKAogICAgLy8gICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV9jb25maWdfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX2NvbmZpZ0A5CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3JvbGVfaXNfYWN0aXZlKHJvbGVfbWFwOiBieXRlcywgcm9sZV9hZGRyZXNzOiBieXRlcykgLT4gdWludDY0Ogpfcm9sZV9pc19hY3RpdmU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIGRlZiBfcm9sZV9pc19hY3RpdmUoc2VsZiwgcm9sZV9tYXA6IHR5cC5SYmFjUm9sZSwgcm9sZV9hZGRyZXNzOiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NQogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OC02MgogICAgLy8gcmV0dXJuIHNlbGYuX2hhc19yb2xlKHJvbGVfbWFwLCByb2xlX2FkZHJlc3MpIGFuZCAoCiAgICAvLyAgICAgcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyAgICAgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICAgICA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICAvLyApCiAgICBieiBfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTkKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjAKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIDw9CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTktNjEKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo2MQogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3hNYXAgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjAtNjEKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMAogICAgPj0KICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1OS02MQogICAgLy8gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX21lcmdlQDU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTgtNjIKICAgIC8vIHJldHVybiBzZWxmLl9oYXNfcm9sZShyb2xlX21hcCwgcm9sZV9hZGRyZXNzKSBhbmQgKAogICAgLy8gICAgIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpIC0+IHZvaWQ6CmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjUyCiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzID09IHNlbGYuYXJyYW5nZXIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vIDB4NTIzMjMwMjMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcnJhbmdlciBleGlzdHMKICAgID09CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjUKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICByZXRzdWIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5hc3NlcnRfaXNfbm90X2Fzc2V0X2RlZmF1bHRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3RfYXNzZXRfZGVmYXVsdGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjgzCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYXNzZXRfZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgOSAvLyAiYXNzZXRfZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2RlZmF1bHRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBEZWZhdWx0ZWQKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkOiB1aW50NjQpIC0+IHZvaWQ6Cl9hc3NlcnRfdmFsaWRfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OAogICAgLy8gZGVmIF9hc3NlcnRfdmFsaWRfcm9sZShzZWxmLCByb2xlX2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MAogICAgLy8gVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MQogICAgLy8gVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICBwdXNoaW50IDQwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkyCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgcHVzaGludCA1MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MwogICAgLy8gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgcHVzaGludCA2MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg5LTk2CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NAogICAgLy8gVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICBwdXNoaW50IDcwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk1CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIHB1c2hpbnQgODAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo4OS05NgogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfZmFsc2VANwoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA2OgogICAgaW50Y18wIC8vIDEKCl9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX21lcmdlQDg6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6ODktOTYKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICByZXRzdWIKCl9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX2ZhbHNlQDc6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9tZXJnZUA4Cg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [897], "errorMessage": "Defaulted"}, {"pc": [322, 346, 370, 393, 417, 472, 500, 522, 543, 565, 741, 758, 773, 788, 802], "errorMessage": "Invalid account role address"}, {"pc": [457, 731, 950], "errorMessage": "Invalid role identifier"}, {"pc": [587, 889], "errorMessage": "Not authorized"}, {"pc": [849, 864], "errorMessage": "check BoxMap entry exists"}, {"pc": [604, 887], "errorMessage": "check self.arranger exists"}, {"pc": [895], "errorMessage": "check self.asset_defaulted exists"}, {"pc": [263], "errorMessage": "invalid array length header"}, {"pc": [578], "errorMessage": "invalid number of bytes for arc4.bool"}, {"pc": [271], "errorMessage": "invalid number of bytes for arc4.dynamic_array"}, {"pc": [200, 223, 257, 441, 618, 701], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [247, 431, 691], "errorMessage": "invalid number of bytes for arc4.uint8"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}"""
+_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["UpdateApplication"], "create": []}, "args": [], "name": "contract_update", "returns": {"type": "void", "desc": "None."}, "desc": "Update D-ASA application.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "New arranger address.", "name": "new_arranger"}], "name": "rbac_rotate_arranger", "returns": {"type": "uint64", "desc": "UNIX timestamp of the role assignment."}, "desc": "Rotate the arranger address.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Operation daemon address.", "name": "address"}], "name": "rbac_set_op_daemon", "returns": {"type": "uint64", "desc": "UNIX timestamp of the role assignment."}, "desc": "Non-normative helper to set the operation daemon address.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role identifier.", "name": "role_id"}, {"type": "address", "desc": "Account role address.", "name": "role_address"}, {"type": "(uint64,uint64)", "desc": "Inclusive validity interval for the assignment.", "name": "validity", "struct": "RoleValidity"}], "name": "rbac_assign_role", "returns": {"type": "uint64", "desc": "UNIX timestamp of the role assignment."}, "desc": "Assign a role to an address.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role identifier.", "name": "role_id"}, {"type": "address", "desc": "Account role address.", "name": "role_address"}], "name": "rbac_revoke_role", "returns": {"type": "uint64", "desc": "UNIX timestamp of the role revocation."}, "desc": "Revoke a role from an address.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "bool", "desc": "Suspension status to apply.", "name": "suspended"}], "name": "rbac_contract_suspension", "returns": {"type": "uint64", "desc": "UNIX timestamp of the suspension update."}, "desc": "Set the asset-wide suspension status.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "bool", "desc": "Default status", "name": "defaulted"}], "name": "rbac_contract_default", "returns": {"type": "uint64"}, "desc": "Set D-ASA default status", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "rbac_get_arranger", "returns": {"type": "address", "desc": "Current arranger address."}, "desc": "Get the arranger address.", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "desc": "Address to query.", "name": "address"}], "name": "rbac_get_address_roles", "returns": {"type": "(bool,bool,bool,bool,bool)", "desc": "Roles mask in the order: account manager, primary dealer, trustee, authority, observer."}, "desc": "Non-normative helper to get the active roles assigned to an address.", "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "desc": "Role identifier.", "name": "role_id"}, {"type": "address", "desc": "Account role address.", "name": "role_address"}], "name": "rbac_get_role_validity", "returns": {"type": "(uint64,uint64)", "desc": "Stored role validity interval.", "struct": "RoleValidity"}, "desc": "Get the stored validity interval for a role assignment.", "events": [], "readonly": true, "recommendations": {}}], "name": "MockRbacModule", "state": {"keys": {"box": {}, "global": {"arranger": {"key": "UjpBUlIj", "keyType": "AVMBytes", "valueType": "address"}, "op_daemon": {"key": "UjpPUEQj", "keyType": "AVMBytes", "valueType": "address"}, "contract_suspended": {"key": "Y29udHJhY3Rfc3VzcGVuZGVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "defaulted": {"key": "ZGVmYXVsdGVk", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"account_manager": {"keyType": "address", "valueType": "RoleValidity", "prefix": "UjpNTkcj"}, "primary_dealer": {"keyType": "address", "valueType": "RoleValidity", "prefix": "UjpQWUQj"}, "trustee": {"keyType": "address", "valueType": "RoleValidity", "prefix": "UjpUUlMj"}, "authority": {"keyType": "address", "valueType": "RoleValidity", "prefix": "UjpBVVQj"}, "observer": {"keyType": "address", "valueType": "RoleValidity", "prefix": "UjpNT0Mj"}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 2, "ints": 2}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"RoleValidity": [{"name": "role_validity_start", "type": "uint64"}, {"name": "role_validity_end", "type": "uint64"}]}, "byteCode": {"approval": "CyAEAQAgFCYKBBUffHUGUjpBUlIjBlI6VFJTIwZSOkFVVCMGUjpNTkcjBlI6UFlEIwZSOk1PQyMJZGVmYXVsdGVkBlI6T1BEIxJjb250cmFjdF9zdXNwZW5kZWQxGEAAESkyA2cnCDIDZycJI2cnByNnMRtBAGeABJFPBOs2GgCOAQBOMRkURDEYRIIJBIL3Gy0E7wT10wTfNDVQBD2+gL0EHj5I5wQ5JB+jBAEMgpkEdAas0gQacqLuNhoAjgkAIAA3AE8BAAGTAbEBzwHZAiIAMRmBBBIxGBBEQgAOMRkUMRgUEEQpMQBnIkOIAsoiQzYaAUkVJBJEiAK9KUxnMgcWKExQsCJDNhoBSRUkEkSIAqYnCExnMgcWKExQsCJDNhoBSRUiEkQ2GgJJTgIVJBJENhoDSU4CFYEQEkSIAnmIAn8XRwKIAoElEkEADSlLA2cyBxYoTFCwIkNJgSgSQQARJwRLA1BJvUUBFERLAr9C/99JgTISQQARJwVLA1BJvUUBFERLAr9C/8dJgTwSQQAQKksDUEm9RQEUREsCv0L/sEmBRhJBABArSwNQSb1FARRESwK/Qv+ZSYFQEkH/kicGSwNQSb1FARRESwK/Qv+BNhoBSRUiEkQ2GgJJTgIVJBJEiAHTiAHZF0cCiAHbSSUTRIEoEkEAFScESwJQSb1FAUS8SDIHFihMULAiQ0mBMhJBAA8nBUsCUEm9RQFEvEhC/+FJgTwSQQAOKksCUEm9RQFEvEhC/8xJgUYSQQAOK0sCUEm9RQFEvEhC/7dJgVASQf+wJwZLAlBJvUUBRLxIQv+hNhoBSRUiEkQjUysxAIgBEEQnCUxnMgcWKExQsCJDNhoBSRUiEkQjUyoxAIgA8kQnB0xnMgcWKExQsCJDIyllRChMULAiQzYaAUkVJBJEJwRLAYgAyycFSwKIAMQqSwOIAL4rSwSIALgnBk8FiACxgAEAI08GVCJPBVSBAk8EVIEDTwNUgQRPAlQoTFCwIkM2GgFJFSISRDYaAklOAhUkEkQXSYgAwCWDBSgyPEZQTwaOBgBNAD4ALwAhABMAAQAnBksBUEm9RQFEvkgoTFCwIkMrSwFQSb1FAUS+SEL/7CpLAVBJvUUBRL5IQv/eJwVLAVBJvUUBRL5IQv/PJwRLAVBJvUUBRL5IQv/AgBAAAAAAAAAAAAAAAAAAAAAAQv+rigIBgACL/ov/UEm9RQFBACCLAb5EI1syB0mMAA5BABGLAb5EgQhbiwAPQQAEIowAiSNC//kxACMpZUQSRIkjJwdlRBREiYoBAIv/JRJAADCL/4EZEkAAKIv/gSgSQAAgi/+BMhJAABiL/4E8EkAAEIv/gUYSQAAIi/+BUBJBAAMiRIkjQv/6", "clear": "C4EBQw=="}, "desc": "\n RBAC Module for testing\n ", "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgMjAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDUyM2E0MTUyNTIyMyAweDUyM2E1NDUyNTMyMyAweDUyM2E0MTU1NTQyMyAweDUyM2E0ZDRlNDcyMyAweDUyM2E1MDU5NDQyMyAweDUyM2E0ZDRmNDMyMyAiZGVmYXVsdGVkIiAweDUyM2E0ZjUwNDQyMyAiY29udHJhY3Rfc3VzcGVuZGVkIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI4LTI5CiAgICAvLyAjIFJCQUMgUm9sZXMKICAgIC8vIHNlbGYuYXJyYW5nZXIgPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jc3QuUFJFRklYX0lEX0FSUkFOR0VSKQogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMwCiAgICAvLyBzZWxmLm9wX2RhZW1vbiA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNzdC5QUkVGSVhfSURfT1BfREFFTU9OKQogICAgYnl0ZWMgOCAvLyAweDUyM2E0ZjUwNDQyMwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjQ3LTQ4CiAgICAvLyAjIENvbnRyYWN0IEdvdmVybmFuY2UKICAgIC8vIHNlbGYuY29udHJhY3Rfc3VzcGVuZGVkID0gRmFsc2UKICAgIGJ5dGVjIDkgLy8gImNvbnRyYWN0X3N1c3BlbmRlZCIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjUwLTUxCiAgICAvLyAjIENvbnRyYWN0IFBlcmZvcm1hbmNlCiAgICAvLyBzZWxmLmRlZmF1bHRlZCA9IEZhbHNlCiAgICBieXRlYyA3IC8vICJkZWZhdWx0ZWQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL21vY2tfbW9kdWxlX3JiYWMvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgTW9ja1JiYWNNb2R1bGUoUmJhY01vZHVsZSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9jcmVhdGVAMjAKICAgIHB1c2hieXRlcyAweDkxNGYwNGViIC8vIG1ldGhvZCAiY29udHJhY3RfdXBkYXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jb250cmFjdF91cGRhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfcmJhYy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBNb2NrUmJhY01vZHVsZShSYmFjTW9kdWxlKToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDgyZjcxYjJkIDB4ZWYwNGY1ZDMgMHhkZjM0MzU1MCAweDNkYmU4MGJkIDB4MWUzZTQ4ZTcgMHgzOTI0MWZhMyAweDAxMGM4Mjk5IDB4NzQwNmFjZDIgMHgxYTcyYTJlZSAvLyBtZXRob2QgInJiYWNfcm90YXRlX2FycmFuZ2VyKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX3NldF9vcF9kYWVtb24oYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInJiYWNfYXNzaWduX3JvbGUodWludDgsYWRkcmVzcywodWludDY0LHVpbnQ2NCkpdWludDY0IiwgbWV0aG9kICJyYmFjX3Jldm9rZV9yb2xlKHVpbnQ4LGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJyYmFjX2NvbnRyYWN0X3N1c3BlbnNpb24oYm9vbCl1aW50NjQiLCBtZXRob2QgInJiYWNfY29udHJhY3RfZGVmYXVsdChib29sKXVpbnQ2NCIsIG1ldGhvZCAicmJhY19nZXRfYXJyYW5nZXIoKWFkZHJlc3MiLCBtZXRob2QgInJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXMoYWRkcmVzcykoYm9vbCxib29sLGJvb2wsYm9vbCxib29sKSIsIG1ldGhvZCAicmJhY19nZXRfcm9sZV92YWxpZGl0eSh1aW50OCxhZGRyZXNzKSh1aW50NjQsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHJiYWNfcm90YXRlX2FycmFuZ2VyIHJiYWNfc2V0X29wX2RhZW1vbiByYmFjX2Fzc2lnbl9yb2xlIHJiYWNfcmV2b2tlX3JvbGUgcmJhY19jb250cmFjdF9zdXNwZW5zaW9uIHJiYWNfY29udHJhY3RfZGVmYXVsdCByYmFjX2dldF9hcnJhbmdlciByYmFjX2dldF9hZGRyZXNzX3JvbGVzIHJiYWNfZ2V0X3JvbGVfdmFsaWRpdHkKICAgIGVycgoKbWFpbl9jb250cmFjdF91cGRhdGVfcm91dGVANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiVXBkYXRlQXBwbGljYXRpb24iXSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIGNvbnRyYWN0X3VwZGF0ZQoKbWFpbl9jcmVhdGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbW9ja19tb2R1bGVfcmJhYy9jb250cmFjdC5weToxNAogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9yYmFjL2NvbnRyYWN0LnB5OjE2CiAgICAvLyBzZWxmLmFycmFuZ2VyLnZhbHVlID0gVHhuLnNlbmRlcgogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9tb2NrX21vZHVsZV9yYmFjL2NvbnRyYWN0LnB5OjE0CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuY29udHJhY3RfdXBkYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKY29udHJhY3RfdXBkYXRlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2MS0xNjQKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBncmFudHMgdGhlIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byB0aGUgQXJyYW5nZXIuCiAgICAvLyAjIOKaoO+4jyBXQVJOSU5HOiBBcHBsaWNhdGlvbiB1cGRhdGVzIG11c3QgYmUgZXhlY3V0ZWQgVkVSWSBjYXJlZnVsbHksIGFzIHRoZXkKICAgIC8vICMgbWlnaHQgaW50cm9kdWNlIGJyZWFraW5nIGNoYW5nZXMuCiAgICAvLyBzZWxmLl9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiVXBkYXRlQXBwbGljYXRpb24iXSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX3JvdGF0ZV9hcnJhbmdlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfcm90YXRlX2FycmFuZ2VyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxODAKICAgIC8vIHNlbGYuX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBfYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE4MQogICAgLy8gc2VsZi5hcnJhbmdlci52YWx1ZSA9IG5ld19hcnJhbmdlcgogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxODIKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19zZXRfb3BfZGFlbW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19zZXRfb3BfZGFlbW9uOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIG1vZHVsZXMvcmJhYy5weToxOTgKICAgIC8vIHNlbGYuX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBfYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE5OQogICAgLy8gc2VsZi5vcF9kYWVtb24udmFsdWUgPSBhZGRyZXNzCiAgICBieXRlYyA4IC8vIDB4NTIzYTRmNTA0NDIzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMAogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2Fzc2lnbl9yb2xlW3JvdXRpbmddKCkgLT4gdm9pZDoKcmJhY19hc3NpZ25fcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBwdXNoaW50IDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBzbWFydF9jb250cmFjdHMuYWJpX3R5cGVzLlJvbGVWYWxpZGl0eQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNAogICAgLy8gc2VsZi5fYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIF9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI1CiAgICAvLyBzZWxmLl9hc3NlcnRfaXNfbm90X2NvbnRyYWN0X2RlZmF1bHRlZCgpCiAgICBjYWxsc3ViIF9hc3NlcnRfaXNfbm90X2NvbnRyYWN0X2RlZmF1bHRlZAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNgogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSkKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDQKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpOgogICAgaW50Y18zIC8vIDIwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDUKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzEgLy8gMHg1MjNhNDE1MjUyMjMKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9zZXRfcm9sZUAxNDoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyMjgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMDgKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQUNDT1VOVF9NQU5BR0VSKToKICAgIGR1cAogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTA5CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmFjY291bnRfbWFuYWdlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA0IC8vIDB4NTIzYTRkNGU0NzIzCiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTAKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10gPSB2YWxpZGl0eS5jb3B5KCkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9zZXRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIHZhbGlkaXR5KQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTIKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTMKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgNSAvLyAweDUyM2E1MDU5NDQyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTE0CiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10gPSB2YWxpZGl0eS5jb3B5KCkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9zZXRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIHZhbGlkaXR5KQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMTYKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExNwogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi50cnVzdGVlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjNhNTQ1MjUzMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjExOAogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB2YWxpZGl0eS5jb3B5KCkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjI3CiAgICAvLyBzZWxmLl9zZXRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpLCByb2xlX2FkZHJlc3MsIHZhbGlkaXR5KQogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgpyYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMjAKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfYXNzaWduX3JvbGVfYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyMQogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5hdXRob3JpdHksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWNfMyAvLyAweDUyM2E0MTU1NTQyMwogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTIyCiAgICAvLyBzZWxmLmF1dGhvcml0eVtyb2xlX2FkZHJlc3NdID0gdmFsaWRpdHkuY29weSgpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIyNwogICAgLy8gc2VsZi5fc2V0X3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzLCB2YWxpZGl0eSkKICAgIGIgcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9zZXRfcm9sZUAxNAoKcmJhY19hc3NpZ25fcm9sZV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyNAogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoZW51bXMuUk9MRV9PQlNFUlZFUik6CiAgICBkdXAKICAgIHB1c2hpbnQgODAKICAgID09CiAgICBieiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTI1CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLm9ic2VydmVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDYgLy8gMHg1MjNhNGQ0ZjQzMjMKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyNgogICAgLy8gc2VsZi5vYnNlcnZlcltyb2xlX2FkZHJlc3NdID0gdmFsaWRpdHkuY29weSgpCiAgICBkaWcgMgogICAgYm94X3B1dAogICAgYiByYmFjX2Fzc2lnbl9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX3NldF9yb2xlQDE0CgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19yZXZva2Vfcm9sZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfcmV2b2tlX3JvbGU6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjQ5CiAgICAvLyBzZWxmLl9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTAKICAgIC8vIHNlbGYuX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjUxCiAgICAvLyBzZWxmLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgZHVwbiAyCiAgICBjYWxsc3ViIF9hc3NlcnRfdmFsaWRfcm9sZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEyOQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgIT0gVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBkdXAKICAgIGludGNfMyAvLyAyMAogICAgIT0KICAgIGFzc2VydCAvLyBJbnZhbGlkIHJvbGUgaWRlbnRpZmllcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMAogICAgLy8gaWYgcm9sZV9pZCA9PSBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgcHVzaGludCA0MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTMxCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDQgLy8gMHg1MjNhNGQ0ZTQ3MjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzMgogICAgLy8gZGVsIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAoKcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNTMKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzQKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDUwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzUKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyA1IC8vIDB4NTIzYTUwNTk0NDIzCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzYKICAgIC8vIGRlbCBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI1MgogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxMzgKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNjAKICAgID09CiAgICBieiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjEzOQogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWNfMiAvLyAweDUyM2E1NDUyNTMyMwogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQwCiAgICAvLyBkZWwgc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI1MgogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDIKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKToKICAgIGR1cAogICAgcHVzaGludCA3MAogICAgPT0KICAgIGJ6IHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MTQzCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjXzMgLy8gMHg1MjNhNDE1NTU0MjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NAogICAgLy8gZGVsIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI1MgogICAgLy8gc2VsZi5fZGVsZXRlX3JvbGUocm9sZV9pZC5hc191aW50NjQoKSwgcm9sZV9hZGRyZXNzKQogICAgYiByYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2RlbGV0ZV9yb2xlQDEyCgpyYmFjX3Jldm9rZV9yb2xlX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weToxNDYKICAgIC8vIGlmIHJvbGVfaWQgPT0gVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpOgogICAgZHVwCiAgICBwdXNoaW50IDgwCiAgICA9PQogICAgYnogcmJhY19yZXZva2Vfcm9sZV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9kZWxldGVfcm9sZUAxMgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0NwogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLm9ic2VydmVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDYgLy8gMHg1MjNhNGQ0ZjQzMjMKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjE0OAogICAgLy8gZGVsIHNlbGYub2JzZXJ2ZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2RlbAogICAgcG9wCiAgICBiIHJiYWNfcmV2b2tlX3JvbGVfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5fZGVsZXRlX3JvbGVAMTIKCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2NvbnRyYWN0X3N1c3BlbnNpb25bcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2NvbnRyYWN0X3N1c3BlbnNpb246CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzkKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLmF1dGhvcml0eSwgVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzMgLy8gMHg1MjNhNDE1NTU0MjMKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyNzEKICAgIC8vIHNlbGYuY29udHJhY3Rfc3VzcGVuZGVkID0gc3VzcGVuZGVkCiAgICBieXRlYyA5IC8vICJjb250cmFjdF9zdXNwZW5kZWQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3MgogICAgLy8gcmV0dXJuIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBtb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2NvbnRyYWN0X2RlZmF1bHRbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2NvbnRyYWN0X2RlZmF1bHQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NzYKICAgIC8vIGFzc2VydCBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnRydXN0ZWUsIFR4bi5zZW5kZXIpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBieXRlY18yIC8vIDB4NTIzYTU0NTI1MzIzCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mjg3CiAgICAvLyBzZWxmLmRlZmF1bHRlZCA9IGRlZmF1bHRlZAogICAgYnl0ZWMgNyAvLyAiZGVmYXVsdGVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIG1vZHVsZXMvcmJhYy5weToyODgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYXJyYW5nZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyYmFjX2dldF9hcnJhbmdlcjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDEKICAgIC8vIHJldHVybiBzZWxmLmFycmFuZ2VyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMSAvLyAweDUyM2E0MTUyNTIyMwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFycmFuZ2VyIGV4aXN0cwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfYWRkcmVzc19yb2xlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ2V0X2FkZHJlc3Nfcm9sZXM6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMQogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hY2NvdW50X21hbmFnZXIsIGFkZHJlc3MpLAogICAgYnl0ZWMgNCAvLyAweDUyM2E0ZDRlNDcyMwogICAgZGlnIDEKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzIyCiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLnByaW1hcnlfZGVhbGVyLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDUgLy8gMHg1MjNhNTA1OTQ0MjMKICAgIGRpZyAyCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyMwogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi50cnVzdGVlLCBhZGRyZXNzKSwKICAgIGJ5dGVjXzIgLy8gMHg1MjNhNTQ1MjUzMjMKICAgIGRpZyAzCiAgICBjYWxsc3ViIF9yb2xlX2lzX2FjdGl2ZQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyNAogICAgLy8gc2VsZi5fcm9sZV9pc19hY3RpdmUoc2VsZi5hdXRob3JpdHksIGFkZHJlc3MpLAogICAgYnl0ZWNfMyAvLyAweDUyM2E0MTU1NTQyMwogICAgZGlnIDQKICAgIGNhbGxzdWIgX3JvbGVfaXNfYWN0aXZlCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI1CiAgICAvLyBzZWxmLl9yb2xlX2lzX2FjdGl2ZShzZWxmLm9ic2VydmVyLCBhZGRyZXNzKSwKICAgIGJ5dGVjIDYgLy8gMHg1MjNhNGQ0ZjQzMjMKICAgIHVuY292ZXIgNQogICAgY2FsbHN1YiBfcm9sZV9pc19hY3RpdmUKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDYKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgNQogICAgc2V0Yml0CiAgICBwdXNoaW50IDIKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBwdXNoaW50IDMKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoaW50IDQKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV92YWxpZGl0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHk6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzQ2CiAgICAvLyByb2xlID0gcm9sZV9pZC5hc191aW50NjQoKQogICAgYnRvaQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM0NwogICAgLy8gc2VsZi5fYXNzZXJ0X3ZhbGlkX3JvbGUocm9sZSkKICAgIGR1cAogICAgY2FsbHN1YiBfYXNzZXJ0X3ZhbGlkX3JvbGUKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNDkKICAgIC8vIGNhc2UgVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpOgogICAgaW50Y18zIC8vIDIwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzUzCiAgICAvLyBjYXNlIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICBwdXNoaW50cyA0MCA1MCA2MCA3MCA4MAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM0OC0zNzkKICAgIC8vIG1hdGNoIHJvbGU6CiAgICAvLyAgICAgY2FzZSBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUik6CiAgICAvLyAgICAgICAgIHJldHVybiB0eXAuUm9sZVZhbGlkaXR5KAogICAgLy8gICAgICAgICAgICAgcm9sZV92YWxpZGl0eV9zdGFydD1VSW50NjQoMCksIHJvbGVfdmFsaWRpdHlfZW5kPVVJbnQ2NCgwKQogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgY2FzZSBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLmFjY291bnRfbWFuYWdlciwgcm9sZV9hZGRyZXNzCiAgICAvLyAgICAgICAgICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICByZXR1cm4gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnRydXN0ZWUsIHJvbGVfYWRkcmVzcwogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgcmV0dXJuIHNlbGYudHJ1c3RlZVtyb2xlX2FkZHJlc3NdCiAgICAvLyAgICAgY2FzZSBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLmF1dGhvcml0eSwgcm9sZV9hZGRyZXNzCiAgICAvLyAgICAgICAgICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICByZXR1cm4gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXQogICAgLy8gICAgIGNhc2UgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgICAgICAgICBzZWxmLm9ic2VydmVyLCByb2xlX2FkZHJlc3MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHJldHVybiBzZWxmLm9ic2VydmVyW3JvbGVfYWRkcmVzc10KICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuSU5WQUxJRF9ST0xFKQogICAgdW5jb3ZlciA2CiAgICBtYXRjaCByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzBAMiByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzFAMyByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzJANCByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzNANSByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzRANiByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzVANwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3OQogICAgLy8gb3AuZXJyKGVyci5JTlZBTElEX1JPTEUpCiAgICBlcnIgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKCnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfc3dpdGNoX2Nhc2VfNUA3OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3NQogICAgLy8gc2VsZi5vYnNlcnZlciwgcm9sZV9hZGRyZXNzCiAgICBieXRlYyA2IC8vIDB4NTIzYTRkNGY0MzIzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6Mzc0LTM3NgogICAgLy8gYXNzZXJ0IHNlbGYuX2hhc19yb2xlKAogICAgLy8gICAgIHNlbGYub2JzZXJ2ZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3NwogICAgLy8gcmV0dXJuIHNlbGYub2JzZXJ2ZXJbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCgpyYmFjX2dldF9yb2xlX3ZhbGlkaXR5X2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV92YWxpZGl0eUA5OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpyYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzRANjoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNzAKICAgIC8vIHNlbGYuYXV0aG9yaXR5LCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzMgLy8gMHg1MjNhNDE1NTU0MjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNjktMzcxCiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hdXRob3JpdHksIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM3MgogICAgLy8gcmV0dXJuIHNlbGYuYXV0aG9yaXR5W3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX3ZhbGlkaXR5QDkKCnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfc3dpdGNoX2Nhc2VfM0A1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM2NQogICAgLy8gc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjXzIgLy8gMHg1MjNhNTQ1MjUzMjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNjQtMzY2CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi50cnVzdGVlLCByb2xlX2FkZHJlc3MKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNjcKICAgIC8vIHJldHVybiBzZWxmLnRydXN0ZWVbcm9sZV9hZGRyZXNzXQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV92YWxpZGl0eV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlAOQoKcmJhY19nZXRfcm9sZV92YWxpZGl0eV9zd2l0Y2hfY2FzZV8yQDQ6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzYwCiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDUgLy8gMHg1MjNhNTA1OTQ0MjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNTktMzYxCiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5wcmltYXJ5X2RlYWxlciwgcm9sZV9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzYyCiAgICAvLyByZXR1cm4gc2VsZi5wcmltYXJ5X2RlYWxlcltyb2xlX2FkZHJlc3NdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiByYmFjX2dldF9yb2xlX3ZhbGlkaXR5X2FmdGVyX2lubGluZWRfbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUucmJhY19nZXRfcm9sZV92YWxpZGl0eUA5CgpyYmFjX2dldF9yb2xlX3ZhbGlkaXR5X3N3aXRjaF9jYXNlXzFAMzoKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNTUKICAgIC8vIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCByb2xlX2FkZHJlc3MKICAgIGJ5dGVjIDQgLy8gMHg1MjNhNGQ0ZTQ3MjMKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo1NwogICAgLy8gcmV0dXJuIHJvbGVfYWRkcmVzcyBpbiByb2xlX21hcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTozNTQtMzU2CiAgICAvLyBhc3NlcnQgc2VsZi5faGFzX3JvbGUoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50X21hbmFnZXIsIHJvbGVfYWRkcmVzcwogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM1NwogICAgLy8gcmV0dXJuIHNlbGYuYWNjb3VudF9tYW5hZ2VyW3JvbGVfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjMyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIHJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfYWZ0ZXJfaW5saW5lZF9tb2R1bGVzLnJiYWMuUmJhY01vZHVsZS5yYmFjX2dldF9yb2xlX3ZhbGlkaXR5QDkKCnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlfc3dpdGNoX2Nhc2VfMEAyOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjM1MC0zNTIKICAgIC8vIHJldHVybiB0eXAuUm9sZVZhbGlkaXR5KAogICAgLy8gICAgIHJvbGVfdmFsaWRpdHlfc3RhcnQ9VUludDY0KDApLCByb2xlX3ZhbGlkaXR5X2VuZD1VSW50NjQoMCkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgcmJhY19nZXRfcm9sZV92YWxpZGl0eV9hZnRlcl9pbmxpbmVkX21vZHVsZXMucmJhYy5SYmFjTW9kdWxlLnJiYWNfZ2V0X3JvbGVfdmFsaWRpdHlAOQoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9yb2xlX2lzX2FjdGl2ZShyb2xlX21hcDogYnl0ZXMsIHJvbGVfYWRkcmVzczogYnl0ZXMpIC0+IHVpbnQ2NDoKX3JvbGVfaXNfYWN0aXZlOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU5CiAgICAvLyBkZWYgX3JvbGVfaXNfYWN0aXZlKHNlbGYsIHJvbGVfbWFwOiB0eXAuUmJhY1JvbGUsIHJvbGVfYWRkcmVzczogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDIgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NTcKICAgIC8vIHJldHVybiByb2xlX2FkZHJlc3MgaW4gcm9sZV9tYXAKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjAtNjQKICAgIC8vIHJldHVybiBzZWxmLl9oYXNfcm9sZShyb2xlX21hcCwgcm9sZV9hZGRyZXNzKSBhbmQgKAogICAgLy8gICAgIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKQogICAgYnogX3JvbGVfaXNfYWN0aXZlX2Jvb2xfZmFsc2VANAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxCiAgICAvLyByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94TWFwIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjIKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxLTYyCiAgICAvLyByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICA8PQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYxLTYzCiAgICAvLyByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBieiBfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjMKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94TWFwIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYyLTYzCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gcm9sZV9tYXBbcm9sZV9hZGRyZXNzXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjEtNjMKICAgIC8vIHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IF9yb2xlX2lzX2FjdGl2ZV9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9tZXJnZUA1OgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjYwLTY0CiAgICAvLyByZXR1cm4gc2VsZi5faGFzX3JvbGUocm9sZV9tYXAsIHJvbGVfYWRkcmVzcykgYW5kICgKICAgIC8vICAgICByb2xlX21hcFtyb2xlX2FkZHJlc3NdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHJvbGVfbWFwW3JvbGVfYWRkcmVzc10ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfcm9sZV9pc19hY3RpdmVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgX3JvbGVfaXNfYWN0aXZlX2Jvb2xfbWVyZ2VANQoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkgLT4gdm9pZDoKX2Fzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXI6CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6NjcKICAgIC8vIGFzc2VydCBzZWxmLl9pc19hcnJhbmdlcihUeG4uc2VuZGVyKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjU0CiAgICAvLyByZXR1cm4gcm9sZV9hZGRyZXNzID09IHNlbGYuYXJyYW5nZXIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vIDB4NTIzYTQxNTI1MjIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICA9PQogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjY3CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfYXJyYW5nZXIoVHhuLnNlbmRlciksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgcmV0c3ViCgoKLy8gbW9kdWxlcy5yYmFjLlJiYWNNb2R1bGUuX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkKCkgLT4gdm9pZDoKX2Fzc2VydF9pc19ub3RfY29udHJhY3RfZGVmYXVsdGVkOgogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojg1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNyAvLyAiZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlZmF1bHRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBEZWZhdWx0ZWQKICAgIHJldHN1YgoKCi8vIG1vZHVsZXMucmJhYy5SYmFjTW9kdWxlLl9hc3NlcnRfdmFsaWRfcm9sZShyb2xlX2lkOiB1aW50NjQpIC0+IHZvaWQ6Cl9hc3NlcnRfdmFsaWRfcm9sZToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MAogICAgLy8gZGVmIF9hc3NlcnRfdmFsaWRfcm9sZShzZWxmLCByb2xlX2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTIKICAgIC8vIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIGludGNfMyAvLyAyMAogICAgLy8gbW9kdWxlcy9yYmFjLnB5OjkxLTk5CiAgICAvLyBhc3NlcnQgcm9sZV9pZCBpbiAoCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09QX0RBRU1PTiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PQlNFUlZFUiksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IF9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX3RydWVANwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTMKICAgIC8vIFVJbnQ2NChlbnVtcy5ST0xFX09QX0RBRU1PTiksCiAgICBwdXNoaW50IDI1CiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA3CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NAogICAgLy8gVUludDY0KGVudW1zLlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDcKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk1CiAgICAvLyBVSW50NjQoZW51bXMuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA3CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NgogICAgLy8gVUludDY0KGVudW1zLlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfdHJ1ZUA3CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5NwogICAgLy8gVUludDY0KGVudW1zLlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDcKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gbW9kdWxlcy9yYmFjLnB5Ojk4CiAgICAvLyBVSW50NjQoZW51bXMuUk9MRV9PQlNFUlZFUiksCiAgICBwdXNoaW50IDgwCiAgICAvLyBtb2R1bGVzL3JiYWMucHk6OTEtOTkKICAgIC8vIGFzc2VydCByb2xlX2lkIGluICgKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT1BfREFFTU9OKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX09CU0VSVkVSKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9mYWxzZUA4CgpfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF90cnVlQDc6CiAgICBpbnRjXzAgLy8gMQoKX2Fzc2VydF92YWxpZF9yb2xlX2Jvb2xfbWVyZ2VAOToKICAgIC8vIG1vZHVsZXMvcmJhYy5weTo5MS05OQogICAgLy8gYXNzZXJ0IHJvbGVfaWQgaW4gKAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoZW51bXMuUk9MRV9PUF9EQUVNT04pLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChlbnVtcy5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGVudW1zLlJPTEVfT0JTRVJWRVIpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICByZXRzdWIKCl9hc3NlcnRfdmFsaWRfcm9sZV9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzEgLy8gMAogICAgYiBfYXNzZXJ0X3ZhbGlkX3JvbGVfYm9vbF9tZXJnZUA5Cg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [968], "errorMessage": "Defaulted"}, {"pc": [364, 388, 411, 434, 458, 514, 542, 563, 584, 606, 812, 829, 843, 858, 873], "errorMessage": "Invalid account role address"}, {"pc": [498, 802, 1029], "errorMessage": "Invalid role identifier"}, {"pc": [628, 658, 960], "errorMessage": "Not authorized"}, {"pc": [920, 935], "errorMessage": "check BoxMap entry exists"}, {"pc": [675, 958], "errorMessage": "check self.arranger exists"}, {"pc": [966], "errorMessage": "check self.defaulted exists"}, {"pc": [619, 649], "errorMessage": "invalid number of bytes for arc4.bool"}, {"pc": [248, 271, 305, 482, 689, 772], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [295, 472, 762], "errorMessage": "invalid number of bytes for arc4.uint8"}, {"pc": [316], "errorMessage": "invalid number of bytes for smart_contracts.abi_types.RoleValidity"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}"""
APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON)
def _parse_abi_args(args: object | None = None) -> list[object] | None:
@@ -65,8 +65,8 @@ def _init_dataclass(cls: type, data: dict) -> object:
return cls(**field_values)
@dataclasses.dataclass(frozen=True)
-class RoleConfig:
- """Struct for RoleConfig"""
+class RoleValidity:
+ """Struct for RoleValidity"""
role_validity_start: int
role_validity_end: int
@@ -94,11 +94,11 @@ class RbacAssignRoleArgs:
"""Dataclass for rbac_assign_role arguments"""
role_id: int
role_address: str
- config: bytes | str
+ validity: RoleValidity
@property
def abi_method_signature(self) -> str:
- return "rbac_assign_role(uint8,address,byte[])uint64"
+ return "rbac_assign_role(uint8,address,(uint64,uint64))uint64"
@dataclasses.dataclass(frozen=True, kw_only=True)
class RbacRevokeRoleArgs:
@@ -111,13 +111,22 @@ def abi_method_signature(self) -> str:
return "rbac_revoke_role(uint8,address)uint64"
@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGovAssetSuspensionArgs:
- """Dataclass for rbac_gov_asset_suspension arguments"""
+class RbacContractSuspensionArgs:
+ """Dataclass for rbac_contract_suspension arguments"""
suspended: bool
@property
def abi_method_signature(self) -> str:
- return "rbac_gov_asset_suspension(bool)uint64"
+ return "rbac_contract_suspension(bool)uint64"
+
+@dataclasses.dataclass(frozen=True, kw_only=True)
+class RbacContractDefaultArgs:
+ """Dataclass for rbac_contract_default arguments"""
+ defaulted: bool
+
+ @property
+ def abi_method_signature(self) -> str:
+ return "rbac_contract_default(bool)uint64"
@dataclasses.dataclass(frozen=True, kw_only=True)
class RbacGetAddressRolesArgs:
@@ -129,20 +138,42 @@ def abi_method_signature(self) -> str:
return "rbac_get_address_roles(address)(bool,bool,bool,bool,bool)"
@dataclasses.dataclass(frozen=True, kw_only=True)
-class RbacGetRoleConfigArgs:
- """Dataclass for rbac_get_role_config arguments"""
+class RbacGetRoleValidityArgs:
+ """Dataclass for rbac_get_role_validity arguments"""
role_id: int
role_address: str
@property
def abi_method_signature(self) -> str:
- return "rbac_get_role_config(uint8,address)(uint64,uint64)"
+ return "rbac_get_role_validity(uint8,address)(uint64,uint64)"
+
+
+class _MockRbacModuleUpdate:
+ def __init__(self, app_client: algokit_utils.AppClient):
+ self.app_client = app_client
+
+ def contract_update(
+ self,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> algokit_utils.AppUpdateMethodCallParams:
+
+ params = params or algokit_utils.CommonAppCallParams()
+ compilation_params = compilation_params or algokit_utils.AppClientCompilationParams()
+ return self.app_client.params.update(algokit_utils.AppClientMethodCallParams(**{
+ **dataclasses.asdict(params),
+ "method": "contract_update()void",
+ }))
class MockRbacModuleParams:
def __init__(self, app_client: algokit_utils.AppClient):
self.app_client = app_client
+ @property
+ def update(self) -> "_MockRbacModuleUpdate":
+ return _MockRbacModuleUpdate(self.app_client)
+
def rbac_rotate_arranger(
self,
args: tuple[str] | RbacRotateArrangerArgs,
@@ -171,14 +202,14 @@ def rbac_set_op_daemon(
def rbac_assign_role(
self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
+ args: tuple[int, str, RoleValidity] | RbacAssignRoleArgs,
params: algokit_utils.CommonAppCallParams | None = None
) -> algokit_utils.AppCallMethodCallParams:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
+ "method": "rbac_assign_role(uint8,address,(uint64,uint64))uint64",
"args": method_args,
}))
@@ -195,16 +226,29 @@ def rbac_revoke_role(
"args": method_args,
}))
- def rbac_gov_asset_suspension(
+ def rbac_contract_suspension(
self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
+ args: tuple[bool] | RbacContractSuspensionArgs,
params: algokit_utils.CommonAppCallParams | None = None
) -> algokit_utils.AppCallMethodCallParams:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
+ "method": "rbac_contract_suspension(bool)uint64",
+ "args": method_args,
+ }))
+
+ def rbac_contract_default(
+ self,
+ args: tuple[bool] | RbacContractDefaultArgs,
+ params: algokit_utils.CommonAppCallParams | None = None
+ ) -> algokit_utils.AppCallMethodCallParams:
+ method_args = _parse_abi_args(args)
+ params = params or algokit_utils.CommonAppCallParams()
+ return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
+ **dataclasses.asdict(params),
+ "method": "rbac_contract_default(bool)uint64",
"args": method_args,
}))
@@ -232,16 +276,16 @@ def rbac_get_address_roles(
"args": method_args,
}))
- def rbac_get_role_config(
+ def rbac_get_role_validity(
self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
+ args: tuple[int, str] | RbacGetRoleValidityArgs,
params: algokit_utils.CommonAppCallParams | None = None
) -> algokit_utils.AppCallMethodCallParams:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
return self.app_client.params.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
+ "method": "rbac_get_role_validity(uint8,address)(uint64,uint64)",
"args": method_args,
}))
@@ -256,10 +300,32 @@ def clear_state(
)
+class _MockRbacModuleUpdateTransaction:
+ def __init__(self, app_client: algokit_utils.AppClient):
+ self.app_client = app_client
+
+ def contract_update(
+ self,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> algokit_utils.BuiltTransactions:
+
+ params = params or algokit_utils.CommonAppCallParams()
+ compilation_params = compilation_params or algokit_utils.AppClientCompilationParams()
+ return self.app_client.create_transaction.update(algokit_utils.AppClientMethodCallParams(**{
+ **dataclasses.asdict(params),
+ "method": "contract_update()void",
+ }))
+
+
class MockRbacModuleCreateTransactionParams:
def __init__(self, app_client: algokit_utils.AppClient):
self.app_client = app_client
+ @property
+ def update(self) -> "_MockRbacModuleUpdateTransaction":
+ return _MockRbacModuleUpdateTransaction(self.app_client)
+
def rbac_rotate_arranger(
self,
args: tuple[str] | RbacRotateArrangerArgs,
@@ -288,14 +354,14 @@ def rbac_set_op_daemon(
def rbac_assign_role(
self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
+ args: tuple[int, str, RoleValidity] | RbacAssignRoleArgs,
params: algokit_utils.CommonAppCallParams | None = None
) -> algokit_utils.BuiltTransactions:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
+ "method": "rbac_assign_role(uint8,address,(uint64,uint64))uint64",
"args": method_args,
}))
@@ -312,16 +378,29 @@ def rbac_revoke_role(
"args": method_args,
}))
- def rbac_gov_asset_suspension(
+ def rbac_contract_suspension(
+ self,
+ args: tuple[bool] | RbacContractSuspensionArgs,
+ params: algokit_utils.CommonAppCallParams | None = None
+ ) -> algokit_utils.BuiltTransactions:
+ method_args = _parse_abi_args(args)
+ params = params or algokit_utils.CommonAppCallParams()
+ return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
+ **dataclasses.asdict(params),
+ "method": "rbac_contract_suspension(bool)uint64",
+ "args": method_args,
+ }))
+
+ def rbac_contract_default(
self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
+ args: tuple[bool] | RbacContractDefaultArgs,
params: algokit_utils.CommonAppCallParams | None = None
) -> algokit_utils.BuiltTransactions:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
+ "method": "rbac_contract_default(bool)uint64",
"args": method_args,
}))
@@ -349,16 +428,16 @@ def rbac_get_address_roles(
"args": method_args,
}))
- def rbac_get_role_config(
+ def rbac_get_role_validity(
self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
+ args: tuple[int, str] | RbacGetRoleValidityArgs,
params: algokit_utils.CommonAppCallParams | None = None
) -> algokit_utils.BuiltTransactions:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
return self.app_client.create_transaction.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
+ "method": "rbac_get_role_validity(uint8,address)(uint64,uint64)",
"args": method_args,
}))
@@ -373,10 +452,35 @@ def clear_state(
)
+class _MockRbacModuleUpdateSend:
+ def __init__(self, app_client: algokit_utils.AppClient):
+ self.app_client = app_client
+
+ def contract_update(
+ self,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ send_params: algokit_utils.SendParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> algokit_utils.SendAppTransactionResult[None]:
+
+ params = params or algokit_utils.CommonAppCallParams()
+ compilation_params = compilation_params or algokit_utils.AppClientCompilationParams()
+ response = self.app_client.send.update(algokit_utils.AppClientMethodCallParams(**{
+ **dataclasses.asdict(params),
+ "method": "contract_update()void",
+ }), send_params=send_params, compilation_params=compilation_params)
+ parsed_response = response
+ return typing.cast(algokit_utils.SendAppUpdateTransactionResult[None], parsed_response)
+
+
class MockRbacModuleSend:
def __init__(self, app_client: algokit_utils.AppClient):
self.app_client = app_client
+ @property
+ def update(self) -> "_MockRbacModuleUpdateSend":
+ return _MockRbacModuleUpdateSend(self.app_client)
+
def rbac_rotate_arranger(
self,
args: tuple[str] | RbacRotateArrangerArgs,
@@ -411,7 +515,7 @@ def rbac_set_op_daemon(
def rbac_assign_role(
self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
+ args: tuple[int, str, RoleValidity] | RbacAssignRoleArgs,
params: algokit_utils.CommonAppCallParams | None = None,
send_params: algokit_utils.SendParams | None = None
) -> algokit_utils.SendAppTransactionResult[int]:
@@ -419,7 +523,7 @@ def rbac_assign_role(
params = params or algokit_utils.CommonAppCallParams()
response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
+ "method": "rbac_assign_role(uint8,address,(uint64,uint64))uint64",
"args": method_args,
}), send_params=send_params)
parsed_response = response
@@ -441,9 +545,25 @@ def rbac_revoke_role(
parsed_response = response
return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
- def rbac_gov_asset_suspension(
+ def rbac_contract_suspension(
+ self,
+ args: tuple[bool] | RbacContractSuspensionArgs,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ send_params: algokit_utils.SendParams | None = None
+ ) -> algokit_utils.SendAppTransactionResult[int]:
+ method_args = _parse_abi_args(args)
+ params = params or algokit_utils.CommonAppCallParams()
+ response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
+ **dataclasses.asdict(params),
+ "method": "rbac_contract_suspension(bool)uint64",
+ "args": method_args,
+ }), send_params=send_params)
+ parsed_response = response
+ return typing.cast(algokit_utils.SendAppTransactionResult[int], parsed_response)
+
+ def rbac_contract_default(
self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
+ args: tuple[bool] | RbacContractDefaultArgs,
params: algokit_utils.CommonAppCallParams | None = None,
send_params: algokit_utils.SendParams | None = None
) -> algokit_utils.SendAppTransactionResult[int]:
@@ -451,7 +571,7 @@ def rbac_gov_asset_suspension(
params = params or algokit_utils.CommonAppCallParams()
response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
+ "method": "rbac_contract_default(bool)uint64",
"args": method_args,
}), send_params=send_params)
parsed_response = response
@@ -487,21 +607,21 @@ def rbac_get_address_roles(
parsed_response = response
return typing.cast(algokit_utils.SendAppTransactionResult[tuple[bool, bool, bool, bool, bool]], parsed_response)
- def rbac_get_role_config(
+ def rbac_get_role_validity(
self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
+ args: tuple[int, str] | RbacGetRoleValidityArgs,
params: algokit_utils.CommonAppCallParams | None = None,
send_params: algokit_utils.SendParams | None = None
- ) -> algokit_utils.SendAppTransactionResult[RoleConfig]:
+ ) -> algokit_utils.SendAppTransactionResult[RoleValidity]:
method_args = _parse_abi_args(args)
params = params or algokit_utils.CommonAppCallParams()
response = self.app_client.send.call(algokit_utils.AppClientMethodCallParams(**{
**dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
+ "method": "rbac_get_role_validity(uint8,address)(uint64,uint64)",
"args": method_args,
}), send_params=send_params)
- parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(RoleConfig, typing.cast(dict, response.abi_return))) # type: ignore
- return typing.cast(algokit_utils.SendAppTransactionResult[RoleConfig], parsed_response)
+ parsed_response = dataclasses.replace(response, abi_return=_init_dataclass(RoleValidity, typing.cast(dict, response.abi_return))) # type: ignore
+ return typing.cast(algokit_utils.SendAppTransactionResult[RoleValidity], parsed_response)
def clear_state(
self,
@@ -518,8 +638,8 @@ class GlobalStateValue(typing.TypedDict):
"""Shape of global_state state key values"""
arranger: str
op_daemon: str
- asset_suspended: int
- asset_defaulted: int
+ contract_suspended: int
+ defaulted: int
class MockRbacModuleState:
"""Methods to access state for the current MockRbacModule app"""
@@ -581,17 +701,17 @@ def op_daemon(self) -> str:
return typing.cast(str, value)
@property
- def asset_suspended(self) -> int:
- """Get the current value of the asset_suspended key in global_state state"""
- value = self.app_client.state.global_state.get_value("asset_suspended")
+ def contract_suspended(self) -> int:
+ """Get the current value of the contract_suspended key in global_state state"""
+ value = self.app_client.state.global_state.get_value("contract_suspended")
if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
return typing.cast(int, value)
@property
- def asset_defaulted(self) -> int:
- """Get the current value of the asset_defaulted key in global_state state"""
- value = self.app_client.state.global_state.get_value("asset_defaulted")
+ def defaulted(self) -> int:
+ """Get the current value of the defaulted key in global_state state"""
+ value = self.app_client.state.global_state.get_value("defaulted")
if isinstance(value, dict) and "AVMUint64" in self._struct_classes:
return _init_dataclass(self._struct_classes["AVMUint64"], value) # type: ignore
return typing.cast(int, value)
@@ -602,7 +722,7 @@ def __init__(self, app_client: algokit_utils.AppClient):
# Pre-generated mapping of value types to their struct classes
self._struct_classes: dict[str, typing.Type[typing.Any]] = {
- "RoleConfig": RoleConfig
+ "RoleValidity": RoleValidity
}
def get_all(self) -> dict[str, typing.Any]:
@@ -622,48 +742,48 @@ def get_all(self) -> dict[str, typing.Any]:
return converted
@property
- def account_manager(self) -> "_MapState[str, RoleConfig]":
+ def account_manager(self) -> "_MapState[str, RoleValidity]":
"""Get values from the account_manager map in box state"""
return _MapState(
self.app_client.state.box,
"account_manager",
- self._struct_classes.get("RoleConfig")
+ self._struct_classes.get("RoleValidity")
)
@property
- def primary_dealer(self) -> "_MapState[str, RoleConfig]":
+ def primary_dealer(self) -> "_MapState[str, RoleValidity]":
"""Get values from the primary_dealer map in box state"""
return _MapState(
self.app_client.state.box,
"primary_dealer",
- self._struct_classes.get("RoleConfig")
+ self._struct_classes.get("RoleValidity")
)
@property
- def trustee(self) -> "_MapState[str, RoleConfig]":
+ def trustee(self) -> "_MapState[str, RoleValidity]":
"""Get values from the trustee map in box state"""
return _MapState(
self.app_client.state.box,
"trustee",
- self._struct_classes.get("RoleConfig")
+ self._struct_classes.get("RoleValidity")
)
@property
- def authority(self) -> "_MapState[str, RoleConfig]":
+ def authority(self) -> "_MapState[str, RoleValidity]":
"""Get values from the authority map in box state"""
return _MapState(
self.app_client.state.box,
"authority",
- self._struct_classes.get("RoleConfig")
+ self._struct_classes.get("RoleValidity")
)
@property
- def interest_oracle(self) -> "_MapState[str, RoleConfig]":
- """Get values from the interest_oracle map in box state"""
+ def observer(self) -> "_MapState[str, RoleValidity]":
+ """Get values from the observer map in box state"""
return _MapState(
self.app_client.state.box,
- "interest_oracle",
- self._struct_classes.get("RoleConfig")
+ "observer",
+ self._struct_classes.get("RoleValidity")
)
_KeyType = typing.TypeVar("_KeyType")
@@ -859,7 +979,7 @@ def decode_return_value(
@typing.overload
def decode_return_value(
self,
- method: typing.Literal["rbac_assign_role(uint8,address,byte[])uint64"],
+ method: typing.Literal["rbac_assign_role(uint8,address,(uint64,uint64))uint64"],
return_value: algokit_utils.ABIReturn | None
) -> int | None: ...
@typing.overload
@@ -871,7 +991,13 @@ def decode_return_value(
@typing.overload
def decode_return_value(
self,
- method: typing.Literal["rbac_gov_asset_suspension(bool)uint64"],
+ method: typing.Literal["rbac_contract_suspension(bool)uint64"],
+ return_value: algokit_utils.ABIReturn | None
+ ) -> int | None: ...
+ @typing.overload
+ def decode_return_value(
+ self,
+ method: typing.Literal["rbac_contract_default(bool)uint64"],
return_value: algokit_utils.ABIReturn | None
) -> int | None: ...
@typing.overload
@@ -889,9 +1015,15 @@ def decode_return_value(
@typing.overload
def decode_return_value(
self,
- method: typing.Literal["rbac_get_role_config(uint8,address)(uint64,uint64)"],
+ method: typing.Literal["rbac_get_role_validity(uint8,address)(uint64,uint64)"],
+ return_value: algokit_utils.ABIReturn | None
+ ) -> RoleValidity | None: ...
+ @typing.overload
+ def decode_return_value(
+ self,
+ method: typing.Literal["contract_update()void"],
return_value: algokit_utils.ABIReturn | None
- ) -> RoleConfig | None: ...
+ ) -> None: ...
@typing.overload
def decode_return_value(
self,
@@ -903,7 +1035,7 @@ def decode_return_value(
self,
method: str,
return_value: algokit_utils.ABIReturn | None
- ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | None | RoleConfig | int | str | tuple[bool, bool, bool, bool, bool]:
+ ) -> algokit_utils.ABIValue | algokit_utils.ABIStruct | None | RoleValidity | int | str | tuple[bool, bool, bool, bool, bool]:
"""Decode ABI return value for the given method."""
if return_value is None:
return None
@@ -930,7 +1062,28 @@ class MockRbacModuleBareCallCreateParams(algokit_utils.AppClientBareCallCreatePa
def to_algokit_utils_params(self) -> algokit_utils.AppClientBareCallCreateParams:
return algokit_utils.AppClientBareCallCreateParams(**self.__dict__)
-class MockRbacModuleFactory(algokit_utils.TypedAppFactoryProtocol[MockRbacModuleBareCallCreateParams, None, None]):
+@dataclasses.dataclass(frozen=True)
+class MockRbacModuleMethodCallUpdateParams(
+ algokit_utils.BaseAppClientMethodCallParams[
+ typing.Any,
+ str | None,
+ ]
+):
+ """Parameters for calling MockRbacModule contract using ABI"""
+ on_complete: typing.Literal[OnComplete.UpdateApplicationOC] | None = None
+ method: str | None = None
+
+ def to_algokit_utils_params(self) -> algokit_utils.AppClientMethodCallParams:
+ method_args = _parse_abi_args(self.args)
+ return algokit_utils.AppClientMethodCallParams(
+ **{
+ **self.__dict__,
+ "method": self.method or getattr(self.args, "abi_method_signature", None),
+ "args": method_args,
+ }
+ )
+
+class MockRbacModuleFactory(algokit_utils.TypedAppFactoryProtocol[MockRbacModuleBareCallCreateParams, MockRbacModuleMethodCallUpdateParams, None]):
"""Factory for deploying and managing MockRbacModuleClient smart contracts"""
def __init__(
@@ -976,7 +1129,7 @@ def deploy(
on_update: algokit_utils.OnUpdate | None = None,
on_schema_break: algokit_utils.OnSchemaBreak | None = None,
create_params: MockRbacModuleBareCallCreateParams | None = None,
- update_params: None = None,
+ update_params: MockRbacModuleMethodCallUpdateParams | None = None,
delete_params: None = None,
existing_deployments: algokit_utils.ApplicationLookup | None = None,
ignore_cache: bool = False,
@@ -989,7 +1142,7 @@ def deploy(
on_update=on_update,
on_schema_break=on_schema_break,
create_params=create_params.to_algokit_utils_params() if create_params else None,
- update_params=update_params,
+ update_params=update_params.to_algokit_utils_params() if update_params else None,
delete_params=delete_params,
existing_deployments=existing_deployments,
ignore_cache=ignore_cache,
@@ -1116,18 +1269,18 @@ def rbac_set_op_daemon(
def rbac_assign_role(
self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
+ args: tuple[int, str, RoleValidity] | RbacAssignRoleArgs,
*,
params: algokit_utils.CommonAppCallCreateParams | None = None,
compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_assign_role(uint8,address,byte[])uint64 ABI method"""
+ """Creates a new instance using the rbac_assign_role(uint8,address,(uint64,uint64))uint64 ABI method"""
params = params or algokit_utils.CommonAppCallCreateParams()
return self.app_factory.params.create(
algokit_utils.AppFactoryCreateMethodCallParams(
**{
**dataclasses.asdict(params),
- "method": "rbac_assign_role(uint8,address,byte[])uint64",
+ "method": "rbac_assign_role(uint8,address,(uint64,uint64))uint64",
"args": _parse_abi_args(args),
}
),
@@ -1154,20 +1307,40 @@ def rbac_revoke_role(
compilation_params=compilation_params
)
- def rbac_gov_asset_suspension(
+ def rbac_contract_suspension(
self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
+ args: tuple[bool] | RbacContractSuspensionArgs,
*,
params: algokit_utils.CommonAppCallCreateParams | None = None,
compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_gov_asset_suspension(bool)uint64 ABI method"""
+ """Creates a new instance using the rbac_contract_suspension(bool)uint64 ABI method"""
params = params or algokit_utils.CommonAppCallCreateParams()
return self.app_factory.params.create(
algokit_utils.AppFactoryCreateMethodCallParams(
**{
**dataclasses.asdict(params),
- "method": "rbac_gov_asset_suspension(bool)uint64",
+ "method": "rbac_contract_suspension(bool)uint64",
+ "args": _parse_abi_args(args),
+ }
+ ),
+ compilation_params=compilation_params
+ )
+
+ def rbac_contract_default(
+ self,
+ args: tuple[bool] | RbacContractDefaultArgs,
+ *,
+ params: algokit_utils.CommonAppCallCreateParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> algokit_utils.AppCreateMethodCallParams:
+ """Creates a new instance using the rbac_contract_default(bool)uint64 ABI method"""
+ params = params or algokit_utils.CommonAppCallCreateParams()
+ return self.app_factory.params.create(
+ algokit_utils.AppFactoryCreateMethodCallParams(
+ **{
+ **dataclasses.asdict(params),
+ "method": "rbac_contract_default(bool)uint64",
"args": _parse_abi_args(args),
}
),
@@ -1213,26 +1386,45 @@ def rbac_get_address_roles(
compilation_params=compilation_params
)
- def rbac_get_role_config(
+ def rbac_get_role_validity(
self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
+ args: tuple[int, str] | RbacGetRoleValidityArgs,
*,
params: algokit_utils.CommonAppCallCreateParams | None = None,
compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> algokit_utils.AppCreateMethodCallParams:
- """Creates a new instance using the rbac_get_role_config(uint8,address)(uint64,uint64) ABI method"""
+ """Creates a new instance using the rbac_get_role_validity(uint8,address)(uint64,uint64) ABI method"""
params = params or algokit_utils.CommonAppCallCreateParams()
return self.app_factory.params.create(
algokit_utils.AppFactoryCreateMethodCallParams(
**{
**dataclasses.asdict(params),
- "method": "rbac_get_role_config(uint8,address)(uint64,uint64)",
+ "method": "rbac_get_role_validity(uint8,address)(uint64,uint64)",
"args": _parse_abi_args(args),
}
),
compilation_params=compilation_params
)
+ def contract_update(
+ self,
+ *,
+ params: algokit_utils.CommonAppCallCreateParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> algokit_utils.AppCreateMethodCallParams:
+ """Creates a new instance using the contract_update()void ABI method"""
+ params = params or algokit_utils.CommonAppCallCreateParams()
+ return self.app_factory.params.create(
+ algokit_utils.AppFactoryCreateMethodCallParams(
+ **{
+ **dataclasses.asdict(params),
+ "method": "contract_update()void",
+ "args": None,
+ }
+ ),
+ compilation_params=compilation_params
+ )
+
class MockRbacModuleFactoryUpdateParams:
"""Parameters for 'update' operations of MockRbacModule contract"""
@@ -1326,6 +1518,29 @@ def bare(
return MockRbacModuleClient(result[0]), result[1]
+class _MockRbacModuleUpdateComposer:
+ def __init__(self, composer: "MockRbacModuleComposer"):
+ self.composer = composer
+ def contract_update(
+ self,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> "MockRbacModuleComposer":
+ self.composer._composer.add_app_update_method_call(
+ self.composer.client.params.update.contract_update(
+
+ params=params,
+ compilation_params=compilation_params
+ )
+ )
+ self.composer._result_mappers.append(
+ lambda v: self.composer.client.decode_return_value(
+ "contract_update()void", v
+ )
+ )
+ return self.composer
+
+
class MockRbacModuleComposer:
"""Composer for creating transaction groups for MockRbacModule contract calls"""
@@ -1334,10 +1549,15 @@ def __init__(self, client: "MockRbacModuleClient"):
self._composer = client.algorand.new_group()
self._result_mappers: list[typing.Callable[[algokit_utils.ABIReturn | None], object] | None] = []
+ @property
+ def update(self) -> "_MockRbacModuleUpdateComposer":
+ return _MockRbacModuleUpdateComposer(self)
+
def rbac_rotate_arranger(
self,
args: tuple[str] | RbacRotateArrangerArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
self.client.params.rbac_rotate_arranger(
@@ -1355,7 +1575,8 @@ def rbac_rotate_arranger(
def rbac_set_op_daemon(
self,
args: tuple[str] | RbacSetOpDaemonArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
self.client.params.rbac_set_op_daemon(
@@ -1372,8 +1593,9 @@ def rbac_set_op_daemon(
def rbac_assign_role(
self,
- args: tuple[int, str, bytes | str] | RbacAssignRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ args: tuple[int, str, RoleValidity] | RbacAssignRoleArgs,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
self.client.params.rbac_assign_role(
@@ -1383,7 +1605,7 @@ def rbac_assign_role(
)
self._result_mappers.append(
lambda v: self.client.decode_return_value(
- "rbac_assign_role(uint8,address,byte[])uint64", v
+ "rbac_assign_role(uint8,address,(uint64,uint64))uint64", v
)
)
return self
@@ -1391,7 +1613,8 @@ def rbac_assign_role(
def rbac_revoke_role(
self,
args: tuple[int, str] | RbacRevokeRoleArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
self.client.params.rbac_revoke_role(
@@ -1406,27 +1629,48 @@ def rbac_revoke_role(
)
return self
- def rbac_gov_asset_suspension(
+ def rbac_contract_suspension(
self,
- args: tuple[bool] | RbacGovAssetSuspensionArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ args: tuple[bool] | RbacContractSuspensionArgs,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
- self.client.params.rbac_gov_asset_suspension(
+ self.client.params.rbac_contract_suspension(
args=args,
params=params,
)
)
self._result_mappers.append(
lambda v: self.client.decode_return_value(
- "rbac_gov_asset_suspension(bool)uint64", v
+ "rbac_contract_suspension(bool)uint64", v
+ )
+ )
+ return self
+
+ def rbac_contract_default(
+ self,
+ args: tuple[bool] | RbacContractDefaultArgs,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
+ ) -> "MockRbacModuleComposer":
+ self._composer.add_app_call_method_call(
+ self.client.params.rbac_contract_default(
+ args=args,
+ params=params,
+ )
+ )
+ self._result_mappers.append(
+ lambda v: self.client.decode_return_value(
+ "rbac_contract_default(bool)uint64", v
)
)
return self
def rbac_get_arranger(
self,
- params: algokit_utils.CommonAppCallParams | None = None
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
self.client.params.rbac_get_arranger(
@@ -1444,7 +1688,8 @@ def rbac_get_arranger(
def rbac_get_address_roles(
self,
args: tuple[str] | RbacGetAddressRolesArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
self.client.params.rbac_get_address_roles(
@@ -1459,20 +1704,21 @@ def rbac_get_address_roles(
)
return self
- def rbac_get_role_config(
+ def rbac_get_role_validity(
self,
- args: tuple[int, str] | RbacGetRoleConfigArgs,
- params: algokit_utils.CommonAppCallParams | None = None
+ args: tuple[int, str] | RbacGetRoleValidityArgs,
+ params: algokit_utils.CommonAppCallParams | None = None,
+ compilation_params: algokit_utils.AppClientCompilationParams | None = None
) -> "MockRbacModuleComposer":
self._composer.add_app_call_method_call(
- self.client.params.rbac_get_role_config(
+ self.client.params.rbac_get_role_validity(
args=args,
params=params,
)
)
self._result_mappers.append(
lambda v: self.client.decode_return_value(
- "rbac_get_role_config(uint8,address)(uint64,uint64)", v
+ "rbac_get_role_validity(uint8,address)(uint64,uint64)", v
)
)
return self
diff --git a/smart_contracts/artifacts/perpetual_bond/PerpetualBond.approval.puya.map b/smart_contracts/artifacts/perpetual_bond/PerpetualBond.approval.puya.map
deleted file mode 100644
index 6424533d..00000000
--- a/smart_contracts/artifacts/perpetual_bond/PerpetualBond.approval.puya.map
+++ /dev/null
@@ -1,35014 +0,0 @@
-{
- "version": 3,
- "sources": [
- "../../../modules/accounting.py",
- "../../../modules/actus/pbn.py",
- "../../../modules/core_financial/common.py",
- "../../../modules/core_financial/coupon.py",
- "../../../modules/payment_agent/common.py",
- "../../../modules/payment_agent/coupon.py",
- "../../../modules/rbac.py",
- "../../../modules/transfer_agent/coupon.py",
- "../../perpetual_bond/contract.py"
- ],
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AM8BmD;;AAAf;;AAA5B;AAC4C;;AAAf;;AAA7B;AAgBA;;AAAuB;AAAvB;AACA;;AAAuB;AAAvB;AN9BA;;AAAmB;AAAnB;AACA;;AAAyB;AAAzB;AACA;;AAAkB;AAAlB;AACA;AAAc;AAAd;AEUA;;AAA6B;AAA7B;AACA;;AAA2B;AAA3B;AACA;;AAAkB;AAAlB;AACA;;AAA4B;AAA5B;AAGA;;AAAgB;;AAAhB;AAGA;;AAA0B;AAA1B;AACA;;AAAqB;AAArB;AACA;;AAAqB;AAArB;AAIA;;AAAyC;AAAzC;AACA;;AAAyC;AAAzC;AACA;AAAqB;AAArB;AACA;;AAAqC;AAArC;AACA;;AAAqC;AAArC;AACA;;AAAqB;AAArB;AC5BA;;AAAyB;AAAzB;AAyTA;;AAAqB;AAArB;AKlTO;;AAA6B;;AAA7B;AAAP;AACO;;AAAuB;;AAAvB;AAAP;AACO;;AAAA;AAAP;AACO;;AAAA;AAAP;AAnBR;;;;;;AAAA;;;AAAA;;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;ANwQK;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;;;ADvPA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;ACmMG;;;AACO;AAAA;AAAA;AAAA;AAAA;AAAP;AA5KmB;;AAAA;;AAAA;;AACnB;AAGA;;AAAA;;AAAA;AAKI;;AAAA;;AAAA;AADJ;AAKA;;AAAA;;AAAA;AAEA;AAIQ;;AAFW;;AACF;;;;;;;;;AAHjB;;;;;;AAAA;AAwKO;;AAAA;;AAAA;AAAA;AAAP;AACA;;AAAA;;AAAA;AACmB;;AAAA;;AAAA;AAAnB;;AAAA;AAAA;AACA;;AAAA;;AAAA;AAGiC;AAAA;AArK1B;;;AAAA;AAEH;;;AAFG;AAAA;;;;AAAP;AAMA;;AAAA;;AAAA;AAmK0B;;AAAA;AAAA;;AA/JnB;AAAA;;AAAA;AAAA;AAAf;;;AACY;;AAAA;AAGJ;;AAAA;;AAAA;AAGO;;AAAA;AAAA;AAAP;AAGA;;AAAA;;AAAA;ADlF+C;;AAArB;AAAtB;;AAAA;AADJ;ACiPA;;AAAA;;;AD5OA;;AAAA;;AAAA;;AAAA;;AAAA;AACyC;;;AAAA;AAAzC;;AAAA;AAAA;AAGyC;;;AAAA;AAAzC;;AAAA;AAAA;;;AAGqB;AAArB;AAAA;AAAA;AACA;;AAAqB;AAArB;AEuTO;;AAAuB;AAAvB;AAAP;AACyB;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEzB;AAAA;AACO;AAAP;AAGA;;AAAA;;AAAA;;AAAA;AAAA;AACqB;;AAAA;;;;AAAA;AAAA;AAAA;AAArB;;AAAA;AAAA;ADpFA;AAAc;;AAAd;ADzOH;AAAA;;;;;AAyDA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AKT+B;;AAAsB;;AAA3C;;;AAAP;AL2BA;;;AACA;;;AACc;;;AACP;;;AAAP;AAGqB;AAArB;;AAAA;AAAA;AACO;;AAzBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AEwUA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBO;AAAA;;AAAA;AAAA;AAAA;;;AACI;;AAA2B;AAAA;;AAAA;AAAA;AAA3B;AADJ;;;;AADJ;AHtZ0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAP;AG2ZO;AAAA;;;AAAa;;AAAA;AAAA;AAAA;AAAA;AAAT;;AAAA;AAAJ;;;;AAAP;AAG8B;;AAAA;AAAA;;AAAA;;;AAAA;;AAEX;AAAnB;;AACY;AAAZ;;AACc;AAAd;;AAGc;;;AAAA;AAAA;;AACd;AAAA;;AAAA;;;AACG;;;AAAX;;;AAC+B;;AAAA;AAAA;;;AACA;;AAAA;;AAAA;;AAAA;;;AAAA;;AAGP;AAAA;AAAA;AAAA;;AACE;AAAA;AAAA;;AAKG;;AAAA;AAAA;;AAAA;AAAA;AAHd;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AA7CV;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;AAsDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AHxb6B;AAAnB;;AAAA;AAAA;AAAA;;AAAP;AGwcI;;;AACE;AAAA;;AAAA;AAAA;AADF;AAEG;;AAFH;AAIG;AAEO;AAFP;AAAA;AApBV;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;AH9bU;AAAA;AAAA;AAAA;AAAe;;AAAf;AGgeO;;;AAAA;;;;;AAxIc;;AAAA;AAAc;AAAd;AAArB;;;AAAA;;AA0IgB;AAAA;;;AAAA;;AACX;AAAZ;;AACc;AAAd;;AACG;;;AAAX;;;AAC+B;;AAAA;;;AACP;AAAA;AAAA;AAAA;;AACE;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAGG;;AAAA;AAAA;;AAAA;AAAA;AAJd;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAlBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAS0E;;;;;;AA4BxD;;AH5fR;AAAA;AAAA;AAAA;AAAe;;AAAf;AG6ff;;;AAC2B;;AAAA;AAAA;AAAA;;AAAA;AAVtB;AAAA;;AAAA;AAAA;AAAA;AAAA;AE/eA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;ALLU;AAAA;AAAA;AAAA;AAAe;;AAAf;AGcP;AACA;;;AACA;;;AHV0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AGaQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACR;AAEc;;;AACS;AAAA;AAAA;AAAA;;AAAA;AAChB;AAAA;;AAAA;AAAP;AAEO;;;AAAP;AA2WI;;;AAxCsB;AAAA;;AAAA;AAAA;AAAnB;AAAyC;;AAAzC;ACzWJ;AAAA;;AAAA;AAAA;AAAwB;;AAAxB;AAAX;;;AAEgB;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAA;;;AACG;;AAAA;;AAAA;AADH;;;AAEG;;AAAc;;AAAA;AAAA;AAAA;;;AAAd;AAFH;;;;AADJ;AAQA;;AAAA;AAAA;AAAA;;;AACI;AAAA;;AAAA;AAAA;AADJ;;AAAA;;AAAA;;;AAGQ;;AAAA;AAAA;AAAA;;;AAAA;AAAJ;;;;ACgChB;;;AD3B6C;;AAAjC;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AADJ;ACgCa;;AAAA;AAAA;AAAA;;;AD1Bb;AAIQ;;;;;;;;;;;;AAJR;;;;;;AAAA;AD4BA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAA8C;AAA9C;AAAA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AE/CoB;;AAGP;;AAEO;AAAA;;AAAA;AAAA;AACE;AAAA;;AAAA;AACA;AAAA;;AAAA;AAAA;AAAyB;AAAA;;AAAA;AAAA;AAAzB;AARlB;;AAAA;AAAA;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;;AAAA;AAAA;AASqB;;AATrB;AAUoB;AAVpB;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AADJ;;;;;;AAAA;AAAA;AAAA;AAuDc;;AAFP;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAtCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCwB;AAAjB;;;;;;;;;;;;;;;;;;;AEvDP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;APgBU;AAAA;AAAA;AAAA;AAAe;;AAAf;AEgIH;;;AACI;AAAA;;AAAA;AAAA;AAAsC;;AAAtC;AADJ;;;AAGQ;AAAA;;AAAA;AAAA;AAAJ;;;AACG;;AAA0B;AAAA;;AAAA;AAAA;AAA1B;AADH;;;;AAJR;AAmBO;;AAAA;;AAAA;AAAA;;AAAA;AAAP;AACA;;;AACA;;;AF9I0B;AAAnB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AAA0B;AAAnB;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAP;AEiJA;;AAAA;;;AACA;;AAAA;;;AAaO;;AAAA;;AAAA;AAAP;AACA;;AAAA;AAAA;AACgB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;;AAAA;AAAP;AFjIoB;;;AAAA;;AACjB;AAAA;AAAA;AAAA;AAAX;;;AANY;;AAAA;AAAA;AAAA;;AAAA;AAAmC;;AAAA;AAAA;AAAA;;AAAA;AAAnC;AAAA;;;AACI;;AAAA;AAAA;AAAA;;AAAA;AAAqC;;AAAA;AAAA;AAAA;;AAAA;AAArC;AADJ;;;;AADJ;AOVoB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AJuBN;;;AACd;;AAAA;AAAA;;AAAA;;AAAA;;;AACO;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;;AAAA;;AHDS;;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAP;AACA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AApBG;AAAA;AAAA;AAAA;AAAX;;;AACuD;AAA3C;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAsBJ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AOvBO;;AAAA;AAAA;;AAAA;AA5CV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;AP0DO;;AAAA;AAAA;;AAAA;;AAAA;AACsC;;AAAA;AAAA;AAAA;;;AAAtC;;AAAA;AAAA;;;;;;;;AEuMP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AASG;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAVH;AAAA;AAYA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAQG;;;AACA;;AAAA;AAAA;AATH;AAAA;;AAWA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAqBG;;;AF3RO;AAAA;AAAA;AAAA;AAAe;;AAAf;AE4RA;AAAP;AACA;;;AAEA;AAAA;AACyC;AAAtC;AAAX;;;AACY;AAAA;;;AAAA;;AAGA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;;AAAA;;;;AAAA;AADH;AAAA;;AAAA;AADJ;AAIA;;AAAA;AAAA;AAGG;AAAA;;AAAA;AAAA;AAAX;;;AAEgB;AAAA;;AAAA;AAAA;AACgC;;AAAA;AAAA;AAA7B;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AADH;AAAA;;AAAA;AADJ;AAIA;;AAAA;AAAA;AAI8B;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AAF3B;AAAA;AAAA;AAAA;AAAA;AA5CV;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AIzQ+B;;AAAc;;AAAnC;;;AAAP;AJsRA;;AAAA;AAAA;AACO;;AAdV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAgBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AF1UU;AAAA;AAAA;AAAA;AAAe;;AAAf;AEwHH;;;AACI;AAAA;;AAAA;AAAA;AACD;;AAAA;AAAA;;AADC;AAAA;;;AAEF;AAAA;;AAAA;AAAA;AADC;;AAAA;AADC;;;;AAFR;AIzE4B;;AAAqB;;AAA1C;;;AAAP;ANxC0B;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AEgWA;;;AACA;;;AACA;;AAAA;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAkC;AAAA;;AAAA;AAAA;AAAlC;;AAAA;AAAP;AAEA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAC2C;AAAA;;AAAA;AAAA;AAA3C;AAAA;;AAAA;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;AAAA;AApCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;AAgDiB;AACX;;AAA0B;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAA1B;AAAA;;;AAAA;AAAA;;;AACe;;AAAd;;AAED;AAAA;;AAAA;AAAA;AAAX;;;AAC0B;;AAAd;;AAGsB;AAAA;;AAAA;AAAA;AACF;AAAA;;AAAA;AAAA;AF/WjB;AAAA;;AAAA;AAAA;AAAyB;AAAA;;AAAA;AAAA;AAAzB;AAAA;AEkX6B;AAAA;;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AACU;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AACO;AAAA;;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AACD;AAAA;;AAAA;AAAA;AAEqB;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACpB;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACJ;AAAA;;AAAA;AAAA;AACE;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAfT;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CiB;;AF3ZP;AAAA;AAAA;AAAA;AAAe;;AAAf;AE4Zf;;;AAC0B;;AAAA;AAAA;AAAA;;AAAA;AAVrB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAsBQ;AAAA;;AAAA;AAAA;AAAoC;AAAA;;AAAA;AAAA;AADlC;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AARV;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBuC;AAAA;;AAAA;AAAA;AATvC;AAAA;AAAA;AAAA;AAAA;AAAA;AFvWA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AMjB+B;;AAAgB;;AAArC;;;AAAP;AN9C0B;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AAmFA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACO;;AArBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AMjD+B;;AAAsB;;AAA3C;;;AAAP;ANxCO;AAAA;AAAA;AAAA;AAAe;;AAAf;AA+GA;AAAP;AACA;;;AACA;;;AAC8B;AAAvB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AAIU;AAFsB;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAhC;AAOO;;AAlCV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AMrF+B;;AAAsB;;AAA3C;;;AAAP;ANuGA;;;AA5I0B;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA+Ie;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACf;;AACA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAhIR;;;AACY;AAAc;;AAAd;AAiIiB;;AAzBxB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBU;;AAAA;;AAAA;AAAP;AACA;;;AACA;;;AA3K0B;AAAnB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AA6KA;AAAA;;AAAA;AACO;;AAzBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAhL6B;AAAnB;AAAA;AAAA;AAAA;AAAA;;AAAP;AA+LO;AAAA;AAfV;AAAA;AAAA;AAAA;AAAA;AAAA;AM5DA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWG;;;AACA;;AAAA;AAAA;AACO;;AAbV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAsBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGc;;AAAX;AAAX;;;AACY;;AAAA;;AAAA;AAqGG;;AA1BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxEM;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA+FJ;;;AA7FG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AA2FJ;;;AAzFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAuFJ;;;AArFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;AAmFJ;;;AAjFG;AAAW;;AAAX;AAAX;;;AACuC;;AAApB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACA;;AAAA;;;;AAkFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAmBG;;;AACA;;;AACwB;AAAA;;AAAxB;;;AApGO;AAAW;;AAAX;AAAP;AACc;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAmGG;;AAvBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1EM;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA8FJ;;;AA5FG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AA0FJ;;;AAxFG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;AAsFJ;;;AApFG;AAAW;;AAAX;AAAX;;;AACmC;;AAAhB;;AAAA;AAAA;AAAA;AAAA;;AAAP;AACA;;;;;AAqFP;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzJ+B;;AAAgB;;AAArC;;;AAAP;AAyKA;;AAAA;AAAA;AACO;;AAjBV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BU;AAAA;;AAAA;AAAA;AARV;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAc4B;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AACqB;;AAArB;;AAAA;;;AAlBP;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAcU;AACP;AAAA;;;AAES;;;;;;;;AADT;;AAAA;;;;;;;;;;;;;;AA+BQ;AAJI;;AA5QL;;AAAA;AAAA;AAAA;AAAA;;AA2QC;AAGO;AAAA;AA7ClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCe;;AAvQL;;AAAA;AAAA;AAAA;AAAA;;AAsQC;AAGO;AAAA;AAxClB;;;AAiCe;;AAlQL;;AAAA;AAAA;AAAA;AAAA;;AAiQC;AAGO;AAAA;AAnClB;;;AA4Be;;AA7PL;;AAAA;AAAA;AAAA;AAAA;;AA4PC;AAGO;AAAA;AA9BlB;;;AAuBe;;AAxPL;;AAAA;AAAA;AAAA;AAAA;;AAuPC;AAGO;AAAA;AAzBlB;;;AAkBkB;;;;;;;;;;;;;;;;;;AAlBlB;;;AHuED;;;AACkB;AACD;;AAAA;AACG;AAAA;AAAA;AAAA;AAAb;AAAX;;;AACwC;AAAA;AAAA;AAAA;AAAb;;AAAA;AAAA;AAAoC;AAAA;;AAAA;AAAA;AAArC;AAAA;;AAElB;AAEJ;;;AACW;AAAA;AAAA;AAAA;AAA8B;AAAA;;AAAA;AAAA;AAAT;;AAAA;AAArB;AAAP;AAgBJ;;;;;;AAEJ;;AAAA;;;AACkC;AAAA;AAAA;AAAA;AAGF;;AAAA;AAAA;AAAA;;AACR;AAAA;;AAAA;AAAA;AACb;AAAA;;AAAA;AAAA;AAAX;;;AD9Ne;;AAAe;;AAAf;AAAA;;AAAe;;AAAf;ACiOA;;AAAA;AAAA;AAAA;AAAA;AAAP;;AAAA;AAxBkB;AAAlB;;AACR;;AAAA;;;AAC8B;;AAAA;;;AAAA;;;;;;;AA2B1B;;;AACW;AAAA;AAAA;AAAA;AAAA;;;AAA4B;;AAA0B;AAAA;AAAA;AAAA;AAA1B;AAA5B;;;;AAAP;;AAAA;AAEJ;;;AAII;;AAAA;;AAAA;;;AACmB;;AAAA;;;AACK;AAAA;AAAA;AACR;AAAA;AAAA;AAEZ;;AAAA;;AAAA;;;AACE;AAAA;;AAAA;AAAA;AADF;AAAA;;AAAA;AAGI;;AAAA;;AAAA;AAHJ;AADJ;AAzXJ;;;AACW;AAAA;;AAAA;AAAA;AAA0B;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAA1B;AAAP;AAEJ;;;AAIQ;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AADJ;;AD2EJ;;;;;;;AAEQ;;AAAA;;;AAAA;;;;AAAA;AACE;;AADF;AADJ;AAIkB;;AAAA;AAAA;AAAqB;AAArB;AAAP;AAAnB;;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKqB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AACkB;AAAN;AAAA;AAAA;;AAAZ;AAAA;AAAA;AAAA;AAAA;;AACF;AAAP;AACG;AAAA;;AAAA;AAAA;AAA6B;;;AAA7B;AAAf;;;AAEwB;;AAAA;;AAAA;AAAmB;;AAApB;AAAA;AAAP;;;;;;;;;;;;;AFzFZ;;;AACe;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAJ;AAAP;;AAEJ;;;AACmB;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAR;;AAAA;AAAP;AAEJ;;;AAEyB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AADd;;AAAA;AAAA;;;AAAP;AMiBJ;;;;;AAFW;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAGA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AACG;;AAAA;AAAA;;AADH;AAAA;;;AAEG;;AAAA;AAAA;AAAA;AAAA;AADA;;AAAA;AADH;;;;AADJ;;AAAA;;;;;AAOyB;;AAbF;AAAA;;AAAA;AAAA;AAAhB;AAaP;;AAkBW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAGW;AAAA;;AAAA;AAAA;AAAJ;AAAP;;AAEJ;;;AACW;;AACH;;AADG;AAAA;;;AAAA;;AAEH;;AAFG;AAAA;;;AAAA;;AAGH;;AAHG;AAAA;;;AAAA;;AAIH;;AAJG;AAAA;;;AAAA;;AAKH;;AALG;AAAA;;;AAAA;;AAMH;;AANG;AAAA;;;;AAAP;;;",
- "op_pc_offset": 0,
- "pc_events": {
- "1": {
- "subroutine": "algopy.arc4.ARC4Contract.approval_program",
- "params": {},
- "block": "main",
- "stack_in": [],
- "op": "intcblock 0 1 32 8 10000 200 86400"
- },
- "14": {
- "op": "bytecblock 0x151f7c75 0x52333023 \"status\" \"issuance_date\" \"circulating_units\" \"interest_rate\" 0x52323023 \"unit_value\" \"primary_distribution_opening_date\" \"secondary_market_closure_date\" \"maturity_date\" 0x52373023 0x52343023 \"total_units\" \"settlement_asset_id\" \"day_count_convention\" \"secondary_market_opening_date\" \"coupon_period\" 0x52383023 0x52363023 0x52353023 0x52323523 \"asset_suspended\" \"asset_defaulted\" \"denomination_asset_id\" \"metadata\" \"principal_discount\" \"primary_distribution_closure_date\" \"paid_coupon_units\" 0x74696d65506572696f6473 0x00 \"total_coupons\" 0x74696d654576656e7473 0x0000 0x068101"
- },
- "480": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "tmp%0#0"
- ]
- },
- "482": {
- "op": "bnz main_after_if_else@2",
- "stack_out": []
- },
- "485": {
- "op": "bytec 6 // 0x52323023",
- "defined_out": [
- "0x52323023"
- ],
- "stack_out": [
- "0x52323023"
- ]
- },
- "487": {
- "op": "global ZeroAddress",
- "defined_out": [
- "0x52323023",
- "tmp%0#3"
- ],
- "stack_out": [
- "0x52323023",
- "tmp%0#3"
- ]
- },
- "489": {
- "op": "app_global_put",
- "stack_out": []
- },
- "490": {
- "op": "bytec 21 // 0x52323523",
- "defined_out": [
- "0x52323523"
- ],
- "stack_out": [
- "0x52323523"
- ]
- },
- "492": {
- "op": "global ZeroAddress",
- "defined_out": [
- "0x52323523",
- "tmp%1#3"
- ],
- "stack_out": [
- "0x52323523",
- "tmp%1#3"
- ]
- },
- "494": {
- "op": "app_global_put",
- "stack_out": []
- },
- "495": {
- "op": "bytec 22 // \"asset_suspended\"",
- "defined_out": [
- "\"asset_suspended\""
- ],
- "stack_out": [
- "\"asset_suspended\""
- ]
- },
- "497": {
- "op": "intc_0 // 0",
- "defined_out": [
- "\"asset_suspended\"",
- "0"
- ],
- "stack_out": [
- "\"asset_suspended\"",
- "0"
- ]
- },
- "498": {
- "op": "app_global_put",
- "stack_out": []
- },
- "499": {
- "op": "bytec 23 // \"asset_defaulted\"",
- "defined_out": [
- "\"asset_defaulted\""
- ],
- "stack_out": [
- "\"asset_defaulted\""
- ]
- },
- "501": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"asset_defaulted\"",
- "0"
- ]
- },
- "502": {
- "op": "app_global_put",
- "stack_out": []
- },
- "503": {
- "op": "bytec 13 // \"total_units\"",
- "defined_out": [
- "\"total_units\""
- ],
- "stack_out": [
- "\"total_units\""
- ]
- },
- "505": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"total_units\"",
- "0"
- ]
- },
- "506": {
- "op": "app_global_put",
- "stack_out": []
- },
- "507": {
- "op": "bytec 4 // \"circulating_units\"",
- "defined_out": [
- "\"circulating_units\""
- ],
- "stack_out": [
- "\"circulating_units\""
- ]
- },
- "509": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"circulating_units\"",
- "0"
- ]
- },
- "510": {
- "op": "app_global_put",
- "stack_out": []
- },
- "511": {
- "op": "bytec 7 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\""
- ],
- "stack_out": [
- "\"unit_value\""
- ]
- },
- "513": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"unit_value\"",
- "0"
- ]
- },
- "514": {
- "op": "app_global_put",
- "stack_out": []
- },
- "515": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\""
- ],
- "stack_out": [
- "\"status\""
- ]
- },
- "516": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"status\"",
- "0"
- ]
- },
- "517": {
- "op": "app_global_put",
- "stack_out": []
- },
- "518": {
- "op": "bytec 24 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\""
- ],
- "stack_out": [
- "\"denomination_asset_id\""
- ]
- },
- "520": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"denomination_asset_id\"",
- "0"
- ]
- },
- "521": {
- "op": "app_global_put",
- "stack_out": []
- },
- "522": {
- "op": "bytec 14 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\""
- ],
- "stack_out": [
- "\"settlement_asset_id\""
- ]
- },
- "524": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"settlement_asset_id\"",
- "0"
- ]
- },
- "525": {
- "op": "app_global_put",
- "stack_out": []
- },
- "526": {
- "op": "bytec 7 // \"unit_value\"",
- "stack_out": [
- "\"unit_value\""
- ]
- },
- "528": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"unit_value\"",
- "0"
- ]
- },
- "529": {
- "op": "app_global_put",
- "stack_out": []
- },
- "530": {
- "op": "bytec 15 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\""
- ],
- "stack_out": [
- "\"day_count_convention\""
- ]
- },
- "532": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"day_count_convention\"",
- "0"
- ]
- },
- "533": {
- "op": "app_global_put",
- "stack_out": []
- },
- "534": {
- "op": "bytec 25 // \"metadata\"",
- "defined_out": [
- "\"metadata\""
- ],
- "stack_out": [
- "\"metadata\""
- ]
- },
- "536": {
- "op": "pushbytes 0x",
- "defined_out": [
- "\"metadata\"",
- "0x"
- ],
- "stack_out": [
- "\"metadata\"",
- "0x"
- ]
- },
- "538": {
- "op": "app_global_put",
- "stack_out": []
- },
- "539": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\""
- ],
- "stack_out": [
- "\"principal_discount\""
- ]
- },
- "541": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"principal_discount\"",
- "0"
- ]
- },
- "542": {
- "op": "app_global_put",
- "stack_out": []
- },
- "543": {
- "op": "bytec 5 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\""
- ],
- "stack_out": [
- "\"interest_rate\""
- ]
- },
- "545": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"interest_rate\"",
- "0"
- ]
- },
- "546": {
- "op": "app_global_put",
- "stack_out": []
- },
- "547": {
- "op": "bytec 31 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\""
- ],
- "stack_out": [
- "\"total_coupons\""
- ]
- },
- "549": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"total_coupons\"",
- "0"
- ]
- },
- "550": {
- "op": "app_global_put",
- "stack_out": []
- },
- "551": {
- "op": "bytec 8 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\""
- ],
- "stack_out": [
- "\"primary_distribution_opening_date\""
- ]
- },
- "553": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"primary_distribution_opening_date\"",
- "0"
- ]
- },
- "554": {
- "op": "app_global_put",
- "stack_out": []
- },
- "555": {
- "op": "bytec 27 // \"primary_distribution_closure_date\"",
- "defined_out": [
- "\"primary_distribution_closure_date\""
- ],
- "stack_out": [
- "\"primary_distribution_closure_date\""
- ]
- },
- "557": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"primary_distribution_closure_date\"",
- "0"
- ]
- },
- "558": {
- "op": "app_global_put",
- "stack_out": []
- },
- "559": {
- "op": "bytec_3 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\""
- ],
- "stack_out": [
- "\"issuance_date\""
- ]
- },
- "560": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"issuance_date\"",
- "0"
- ]
- },
- "561": {
- "op": "app_global_put",
- "stack_out": []
- },
- "562": {
- "op": "bytec 16 // \"secondary_market_opening_date\"",
- "defined_out": [
- "\"secondary_market_opening_date\""
- ],
- "stack_out": [
- "\"secondary_market_opening_date\""
- ]
- },
- "564": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"secondary_market_opening_date\"",
- "0"
- ]
- },
- "565": {
- "op": "app_global_put",
- "stack_out": []
- },
- "566": {
- "op": "bytec 9 // \"secondary_market_closure_date\"",
- "defined_out": [
- "\"secondary_market_closure_date\""
- ],
- "stack_out": [
- "\"secondary_market_closure_date\""
- ]
- },
- "568": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"secondary_market_closure_date\"",
- "0"
- ]
- },
- "569": {
- "op": "app_global_put",
- "stack_out": []
- },
- "570": {
- "op": "bytec 10 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\""
- ],
- "stack_out": [
- "\"maturity_date\""
- ]
- },
- "572": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"maturity_date\"",
- "0"
- ]
- },
- "573": {
- "op": "app_global_put",
- "stack_out": []
- },
- "574": {
- "op": "bytec 28 // \"paid_coupon_units\"",
- "defined_out": [
- "\"paid_coupon_units\""
- ],
- "stack_out": [
- "\"paid_coupon_units\""
- ]
- },
- "576": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"paid_coupon_units\"",
- "0"
- ]
- },
- "577": {
- "op": "app_global_put",
- "stack_out": []
- },
- "578": {
- "op": "bytec 17 // \"coupon_period\"",
- "defined_out": [
- "\"coupon_period\""
- ],
- "stack_out": [
- "\"coupon_period\""
- ]
- },
- "580": {
- "op": "intc_0 // 0",
- "stack_out": [
- "\"coupon_period\"",
- "0"
- ]
- },
- "581": {
- "op": "app_global_put",
- "stack_out": []
- },
- "582": {
- "op": "txn GlobalNumByteSlice",
- "defined_out": [
- "tmp%0#2"
- ],
- "stack_out": [
- "tmp%0#2"
- ]
- },
- "584": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "tmp%0#2"
- ],
- "stack_out": [
- "tmp%0#2",
- "3"
- ]
- },
- "586": {
- "op": "==",
- "defined_out": [
- "tmp%1#2"
- ],
- "stack_out": [
- "tmp%1#2"
- ]
- },
- "587": {
- "error": "Wrong Global Bytes allocation",
- "op": "assert // Wrong Global Bytes allocation",
- "stack_out": []
- },
- "588": {
- "op": "txn GlobalNumUint",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1"
- ]
- },
- "590": {
- "op": "pushint 20",
- "defined_out": [
- "20",
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "20"
- ]
- },
- "592": {
- "op": "==",
- "defined_out": [
- "tmp%3#1"
- ],
- "stack_out": [
- "tmp%3#1"
- ]
- },
- "593": {
- "error": "Wrong Global UInts allocation",
- "op": "assert // Wrong Global UInts allocation",
- "stack_out": []
- },
- "594": {
- "op": "txn LocalNumByteSlice",
- "defined_out": [
- "tmp%4#1"
- ],
- "stack_out": [
- "tmp%4#1"
- ]
- },
- "596": {
- "op": "!",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "597": {
- "error": "Wrong Local Bytes allocation",
- "op": "assert // Wrong Local Bytes allocation",
- "stack_out": []
- },
- "598": {
- "op": "txn LocalNumUint",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "600": {
- "op": "!",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "tmp%7#0"
- ]
- },
- "601": {
- "error": "Wrong Local UInts allocation",
- "op": "assert // Wrong Local UInts allocation",
- "stack_out": []
- },
- "602": {
- "block": "main_after_if_else@2",
- "stack_in": [],
- "op": "pushbytes 0x25dba95b // method \"asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void\"",
- "defined_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ],
- "stack_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ]
- },
- "608": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%0#1"
- ],
- "stack_out": [
- "Method(asset_update((uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%0#1"
- ]
- },
- "611": {
- "op": "match main_asset_update_route@4",
- "stack_out": []
- },
- "615": {
- "block": "main_switch_case_next@5",
- "stack_in": [],
- "op": "txn OnCompletion",
- "defined_out": [
- "tmp%6#0"
- ],
- "stack_out": [
- "tmp%6#0"
- ]
- },
- "617": {
- "op": "!",
- "defined_out": [
- "tmp%7#0"
- ],
- "stack_out": [
- "tmp%7#0"
- ]
- },
- "618": {
- "op": "assert",
- "stack_out": []
- },
- "619": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%8#0"
- ],
- "stack_out": [
- "tmp%8#0"
- ]
- },
- "621": {
- "op": "bz main_create_NoOp@36",
- "stack_out": []
- },
- "624": {
- "op": "pushbytess 0x89474134 0x9316298d 0x44363d49 0x67db4f20 0xf6a96c8d 0x229b706f 0x8cf14b51 0x4fd6a3cc 0x1d6fc255 0x25e9997f 0x6c85e3ee 0x402dba47 0xfad2173e 0x08efea35 0xe4a5ab54 0xdc063b35 0x14fc10ef 0x4c113ed5 0x74a7297f 0x105c184e 0x82f71b2d 0xef04f5d3 0x03b83329 0x3dbe80bd 0xdf54e82c 0x010c8299 0x7406acd2 0xc3e4b297 // method \"asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void\", method \"update_interest_rate(uint16)uint64\", method \"get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64))\", method \"get_payment_amount(address)(uint64,uint64)\", method \"get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool)\", method \"get_time_periods()(uint64,uint64)[]\", method \"pay_coupon(address,byte[])(uint64,uint64,byte[])\", method \"asset_transfer(address,address,uint64)uint64\", method \"set_secondary_time_events(uint64[])(uint64,uint64)\", method \"set_default_status(bool)uint64\", method \"primary_distribution(address,uint64)uint64\", method \"get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)\", method \"get_time_events()uint64[]\", method \"get_secondary_market_schedule()uint64[]\", method \"get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)\", method \"account_gov_suspension(address,bool)uint64\", method \"account_open(address,address)uint64\", method \"account_close(address)(uint64,uint64)\", method \"account_update_payment_address(address,address)uint64\", method \"account_get_info(address)(address,uint64,uint64,uint64,bool)\", method \"rbac_rotate_arranger(address)uint64\", method \"rbac_set_op_daemon(address)uint64\", method \"rbac_assign_role(uint8,address,byte[])uint64\", method \"rbac_revoke_role(uint8,address)uint64\", method \"rbac_gov_asset_suspension(bool)uint64\", method \"rbac_get_arranger()address\", method \"rbac_get_address_roles(address)(bool,bool,bool,bool,bool)\", method \"rbac_get_role_config(uint8,address)(uint64,uint64)\"",
- "defined_out": [
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_time_events()uint64[])",
- "Method(get_time_periods()(uint64,uint64)[])",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(set_default_status(bool)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "Method(update_interest_rate(uint16)uint64)"
- ],
- "stack_out": [
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(update_interest_rate(uint16)uint64)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(get_time_periods()(uint64,uint64)[])",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "Method(set_default_status(bool)uint64)",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_time_events()uint64[])",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))"
- ]
- },
- "766": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_time_events()uint64[])",
- "Method(get_time_periods()(uint64,uint64)[])",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(set_default_status(bool)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "Method(update_interest_rate(uint16)uint64)",
- "tmp%10#0"
- ],
- "stack_out": [
- "Method(asset_config(uint64,uint64,uint64,uint64,uint64,uint8,uint16,uint16[],uint64[],(uint64,uint64)[])void)",
- "Method(update_interest_rate(uint16)uint64)",
- "Method(get_account_units_current_value(address,uint64)(uint64,uint64,(uint64,uint64)))",
- "Method(get_payment_amount(address)(uint64,uint64))",
- "Method(get_coupons_status()(uint64,uint64,uint64,(uint64,uint64),bool))",
- "Method(get_time_periods()(uint64,uint64)[])",
- "Method(pay_coupon(address,byte[])(uint64,uint64,byte[]))",
- "Method(asset_transfer(address,address,uint64)uint64)",
- "Method(set_secondary_time_events(uint64[])(uint64,uint64))",
- "Method(set_default_status(bool)uint64)",
- "Method(primary_distribution(address,uint64)uint64)",
- "Method(get_asset_info()(uint64,uint64,uint64,uint64,uint8,uint16,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8))",
- "Method(get_time_events()uint64[])",
- "Method(get_secondary_market_schedule()uint64[])",
- "Method(get_asset_metadata()(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))",
- "Method(account_gov_suspension(address,bool)uint64)",
- "Method(account_open(address,address)uint64)",
- "Method(account_close(address)(uint64,uint64))",
- "Method(account_update_payment_address(address,address)uint64)",
- "Method(account_get_info(address)(address,uint64,uint64,uint64,bool))",
- "Method(rbac_rotate_arranger(address)uint64)",
- "Method(rbac_set_op_daemon(address)uint64)",
- "Method(rbac_assign_role(uint8,address,byte[])uint64)",
- "Method(rbac_revoke_role(uint8,address)uint64)",
- "Method(rbac_gov_asset_suspension(bool)uint64)",
- "Method(rbac_get_arranger()address)",
- "Method(rbac_get_address_roles(address)(bool,bool,bool,bool,bool))",
- "Method(rbac_get_role_config(uint8,address)(uint64,uint64))",
- "tmp%10#0"
- ]
- },
- "769": {
- "op": "match asset_config update_interest_rate get_account_units_current_value get_payment_amount get_coupons_status get_time_periods pay_coupon asset_transfer set_secondary_time_events set_default_status primary_distribution get_asset_info get_time_events get_secondary_market_schedule get_asset_metadata account_gov_suspension account_open account_close account_update_payment_address account_get_info rbac_rotate_arranger rbac_set_op_daemon rbac_assign_role rbac_revoke_role rbac_gov_asset_suspension rbac_get_arranger rbac_get_address_roles rbac_get_role_config",
- "stack_out": []
- },
- "827": {
- "op": "err"
- },
- "828": {
- "block": "main_create_NoOp@36",
- "stack_in": [],
- "op": "pushbytes 0x3f0efc6c // method \"asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void\"",
- "defined_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ],
- "stack_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)"
- ]
- },
- "834": {
- "op": "txna ApplicationArgs 0",
- "defined_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%11#0"
- ],
- "stack_out": [
- "Method(asset_create(address,(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string))void)",
- "tmp%11#0"
- ]
- },
- "837": {
- "op": "match asset_create",
- "stack_out": []
- },
- "841": {
- "op": "err"
- },
- "842": {
- "block": "main_asset_update_route@4",
- "stack_in": [],
- "op": "txn OnCompletion",
- "defined_out": [
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1"
- ]
- },
- "844": {
- "op": "pushint 4 // UpdateApplication",
- "defined_out": [
- "UpdateApplication",
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "UpdateApplication"
- ]
- },
- "846": {
- "op": "==",
- "defined_out": [
- "tmp%2#0"
- ],
- "stack_out": [
- "tmp%2#0"
- ]
- },
- "847": {
- "op": "txn ApplicationID",
- "defined_out": [
- "tmp%2#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%2#0",
- "tmp%3#0"
- ]
- },
- "849": {
- "op": "&&",
- "defined_out": [
- "tmp%5#0"
- ],
- "stack_out": [
- "tmp%5#0"
- ]
- },
- "850": {
- "op": "assert",
- "stack_out": []
- },
- "851": {
- "op": "b asset_update"
- },
- "854": {
- "subroutine": "modules.actus.pbn.PBNCoreMixin.asset_config[routing]",
- "params": {},
- "block": "asset_config",
- "stack_in": [],
- "op": "pushbytes \"\"",
- "stack_out": [
- "interest_rate#2"
- ]
- },
- "856": {
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0"
- ]
- },
- "859": {
- "op": "dup",
- "defined_out": [
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "tmp%0#0 (copy)"
- ]
- },
- "860": {
- "op": "len",
- "defined_out": [
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "len%0#0"
- ]
- },
- "861": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "len%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "len%0#0",
- "8"
- ]
- },
- "862": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0",
- "eq%0#0"
- ]
- },
- "863": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "tmp%0#0"
- ]
- },
- "864": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0"
- ]
- },
- "865": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "denomination_asset_id#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0"
- ]
- },
- "868": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "869": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "870": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "len%1#0",
- "8"
- ]
- },
- "871": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "872": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "tmp%2#0"
- ]
- },
- "873": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0"
- ]
- },
- "874": {
- "op": "txna ApplicationArgs 3",
- "defined_out": [
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ]
- },
- "877": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "tmp%4#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "tmp%4#0 (copy)"
- ]
- },
- "878": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%2#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "len%2#0"
- ]
- },
- "879": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "len%2#0",
- "8"
- ]
- },
- "880": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%2#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0",
- "eq%2#0"
- ]
- },
- "881": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "tmp%4#0"
- ]
- },
- "882": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0"
- ]
- },
- "883": {
- "op": "txna ApplicationArgs 4",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0"
- ]
- },
- "886": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0",
- "tmp%6#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "tmp%6#0 (copy)"
- ]
- },
- "887": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%3#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "len%3#0"
- ]
- },
- "888": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "len%3#0",
- "8"
- ]
- },
- "889": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%3#0",
- "principal#0",
- "settlement_asset_id#0",
- "tmp%6#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0",
- "eq%3#0"
- ]
- },
- "890": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "tmp%6#0"
- ]
- },
- "891": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0"
- ]
- },
- "892": {
- "op": "txna ApplicationArgs 5",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0"
- ]
- },
- "895": {
- "op": "dup",
- "defined_out": [
- "denomination_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0",
- "tmp%8#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "tmp%8#0 (copy)"
- ]
- },
- "896": {
- "op": "len",
- "defined_out": [
- "denomination_asset_id#0",
- "len%4#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "len%4#0"
- ]
- },
- "897": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "len%4#0",
- "8"
- ]
- },
- "898": {
- "op": "==",
- "defined_out": [
- "denomination_asset_id#0",
- "eq%4#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "tmp%8#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0",
- "eq%4#0"
- ]
- },
- "899": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "tmp%8#0"
- ]
- },
- "900": {
- "op": "btoi",
- "defined_out": [
- "denomination_asset_id#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0"
- ]
- },
- "901": {
- "op": "txna ApplicationArgs 6",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "904": {
- "op": "dup",
- "defined_out": [
- "day_count_convention#0",
- "day_count_convention#0 (copy)",
- "denomination_asset_id#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "day_count_convention#0 (copy)"
- ]
- },
- "905": {
- "op": "len",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "len%5#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%5#0"
- ]
- },
- "906": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "len%5#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%5#0",
- "1"
- ]
- },
- "907": {
- "op": "==",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%5#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%5#0"
- ]
- },
- "908": {
- "error": "invalid number of bytes for arc4.uint8",
- "op": "assert // invalid number of bytes for arc4.uint8",
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "909": {
- "op": "txna ApplicationArgs 7"
- },
- "912": {
- "op": "dup",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "interest_rate#0",
- "interest_rate#0"
- ]
- },
- "913": {
- "op": "cover 7",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "interest_rate#0"
- ]
- },
- "915": {
- "op": "len",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%6#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%6#0"
- ]
- },
- "916": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%6#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "len%6#0",
- "2"
- ]
- },
- "918": {
- "op": "==",
- "defined_out": [
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%6#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%6#0"
- ]
- },
- "919": {
- "error": "invalid number of bytes for arc4.uint16",
- "op": "assert // invalid number of bytes for arc4.uint16",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "920": {
- "op": "txna ApplicationArgs 8",
- "defined_out": [
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0"
- ]
- },
- "923": {
- "op": "dup",
- "defined_out": [
- "coupon_rates#0",
- "coupon_rates#0 (copy)",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "coupon_rates#0 (copy)"
- ]
- },
- "924": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "coupon_rates#0 (copy)",
- "0"
- ]
- },
- "925": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0"
- ]
- },
- "926": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0"
- ]
- },
- "927": {
- "op": "cover 8",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0"
- ]
- },
- "929": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "931": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "mul%0#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "mul%0#0"
- ]
- },
- "932": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "mul%0#0",
- "2"
- ]
- },
- "934": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "aggregate%array_length%0#0",
- "coupon_rates#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "coupon_rates#0",
- "add%0#0"
- ]
- },
- "935": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%0#0",
- "coupon_rates#0"
- ]
- },
- "936": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "aggregate%array_length%0#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%7#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%0#0",
- "len%7#0"
- ]
- },
- "937": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%7#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%7#0"
- ]
- },
- "938": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "939": {
- "op": "txna ApplicationArgs 9"
- },
- "942": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "time_events#0"
- ]
- },
- "943": {
- "op": "cover 7",
- "defined_out": [
- "aggregate%array_length%0#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0"
- ]
- },
- "945": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "time_events#0 (copy)"
- ]
- },
- "946": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "time_events#0 (copy)",
- "0"
- ]
- },
- "947": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0"
- ]
- },
- "948": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%1#0"
- ]
- },
- "949": {
- "op": "cover 8",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0"
- ]
- },
- "951": {
- "op": "intc_3 // 8",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "8"
- ]
- },
- "952": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "mul%1#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "mul%1#0"
- ]
- },
- "953": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "mul%1#0",
- "2"
- ]
- },
- "955": {
- "op": "+",
- "defined_out": [
- "add%1#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_events#0",
- "add%1#0"
- ]
- },
- "956": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%1#0",
- "time_events#0"
- ]
- },
- "957": {
- "op": "len",
- "defined_out": [
- "add%1#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%8#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%1#0",
- "len%8#0"
- ]
- },
- "958": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%8#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%8#0"
- ]
- },
- "959": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "960": {
- "op": "txna ApplicationArgs 10"
- },
- "963": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "time_periods#0"
- ]
- },
- "964": {
- "op": "cover 7",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0"
- ]
- },
- "966": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0",
- "time_periods#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "time_periods#0 (copy)"
- ]
- },
- "967": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "time_periods#0 (copy)",
- "0"
- ]
- },
- "968": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0"
- ]
- },
- "969": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "aggregate%array_length%2#0"
- ]
- },
- "970": {
- "op": "cover 8",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0"
- ]
- },
- "972": {
- "op": "pushint 16",
- "defined_out": [
- "16",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "16"
- ]
- },
- "974": {
- "op": "*",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "mul%2#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "mul%2#0"
- ]
- },
- "975": {
- "op": "pushint 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "mul%2#0",
- "2"
- ]
- },
- "977": {
- "op": "+",
- "defined_out": [
- "add%2#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "time_periods#0",
- "add%2#0"
- ]
- },
- "978": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%2#0",
- "time_periods#0"
- ]
- },
- "979": {
- "op": "len",
- "defined_out": [
- "add%2#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "len%9#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "add%2#0",
- "len%9#0"
- ]
- },
- "980": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "eq%9#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "eq%9#0"
- ]
- },
- "981": {
- "error": "invalid number of bytes for arc4.dynamic_array>",
- "op": "assert // invalid number of bytes for arc4.dynamic_array>",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "982": {
- "callsub": "modules.rbac.RbacModule.assert_caller_is_arranger",
- "op": "callsub assert_caller_is_arranger"
- },
- "985": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "0"
- ]
- },
- "986": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "0",
- "\"status\""
- ]
- },
- "987": {
- "op": "app_global_get_ex",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "988": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "maybe_value%0#0"
- ]
- },
- "989": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%0#1"
- ]
- },
- "990": {
- "error": "D-ASA already configured",
- "op": "assert // D-ASA already configured",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "991": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "denomination_asset_id#0 (copy)",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "denomination_asset_id#0 (copy)"
- ]
- },
- "993": {
- "op": "asset_params_get AssetCreator",
- "defined_out": [
- "_creator#0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "exists#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "_creator#0",
- "exists#0"
- ]
- },
- "995": {
- "op": "bury 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "exists#0"
- ]
- },
- "997": {
- "error": "Denomination asset is not properly set",
- "op": "assert // Denomination asset is not properly set",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "998": {
- "op": "bytec 24 // \"denomination_asset_id\"",
- "defined_out": [
- "\"denomination_asset_id\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"denomination_asset_id\""
- ]
- },
- "1000": {
- "op": "dig 6",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"denomination_asset_id\"",
- "denomination_asset_id#0 (copy)"
- ]
- },
- "1002": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1003": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "denomination_asset_id#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "settlement_asset_id#0 (copy)",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "denomination_asset_id#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "settlement_asset_id#0 (copy)"
- ]
- },
- "1005": {
- "op": "uncover 6",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "settlement_asset_id#0 (copy)",
- "denomination_asset_id#0"
- ]
- },
- "1007": {
- "op": "==",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%0#1"
- ]
- },
- "1008": {
- "error": "Different settlement asset not supported, must be equal to denomination asset",
- "op": "assert // Different settlement asset not supported, must be equal to denomination asset",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1009": {
- "op": "bytec 14 // \"settlement_asset_id\"",
- "defined_out": [
- "\"settlement_asset_id\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"settlement_asset_id\""
- ]
- },
- "1011": {
- "op": "dig 5",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"settlement_asset_id\"",
- "settlement_asset_id#0 (copy)"
- ]
- },
- "1013": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1014": {
- "op": "itxn_begin"
- },
- "1015": {
- "op": "global MinTxnFee",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1017": {
- "op": "global CurrentApplicationAddress",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "settlement_asset_id#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0"
- ]
- },
- "1019": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0",
- "0"
- ]
- },
- "1020": {
- "op": "itxn_field AssetAmount",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "inner_txn_params%0%%param_AssetReceiver_idx_0#0"
- ]
- },
- "1022": {
- "op": "itxn_field AssetReceiver",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "settlement_asset_id#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1024": {
- "op": "uncover 5",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "settlement_asset_id#0"
- ]
- },
- "1026": {
- "op": "itxn_field XferAsset",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1028": {
- "op": "pushint 4 // axfer",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "axfer",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0",
- "axfer"
- ]
- },
- "1030": {
- "op": "itxn_field TypeEnum",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "inner_txn_params%0%%param_Fee_idx_0#0"
- ]
- },
- "1032": {
- "op": "itxn_field Fee",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1034": {
- "op": "itxn_submit"
- },
- "1035": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal#0 (copy)",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "principal#0 (copy)"
- ]
- },
- "1037": {
- "op": "dig 2",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "minimum_denomination#0 (copy)",
- "principal#0",
- "principal#0 (copy)",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "principal#0 (copy)",
- "minimum_denomination#0 (copy)"
- ]
- },
- "1039": {
- "op": "%",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%1#0"
- ]
- },
- "1040": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0",
- "tmp%2#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "tmp%2#1"
- ]
- },
- "1041": {
- "error": "Minimum denomination is not a divisor of principal",
- "op": "assert // Minimum denomination is not a divisor of principal",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1042": {
- "op": "bytec 7 // \"unit_value\"",
- "defined_out": [
- "\"unit_value\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "minimum_denomination#0",
- "principal#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"unit_value\""
- ]
- },
- "1044": {
- "op": "dig 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "\"unit_value\"",
- "minimum_denomination#0 (copy)"
- ]
- },
- "1046": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0"
- ]
- },
- "1047": {
- "op": "uncover 3",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "minimum_denomination#0",
- "day_count_convention#0",
- "principal#0"
- ]
- },
- "1049": {
- "op": "uncover 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "principal#0",
- "minimum_denomination#0"
- ]
- },
- "1051": {
- "op": "/",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "tmp%3#0"
- ]
- },
- "1052": {
- "op": "bytec 13 // \"total_units\"",
- "defined_out": [
- "\"total_units\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "tmp%3#0",
- "\"total_units\""
- ]
- },
- "1054": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "\"total_units\"",
- "tmp%3#0"
- ]
- },
- "1055": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0"
- ]
- },
- "1056": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "interest_rate#0",
- "principal_discount#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "principal_discount#0",
- "day_count_convention#0",
- "\"principal_discount\""
- ]
- },
- "1058": {
- "op": "uncover 2",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0",
- "\"principal_discount\"",
- "principal_discount#0"
- ]
- },
- "1060": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#0"
- ]
- },
- "1061": {
- "op": "btoi",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1062": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "day_count_convention#2"
- ]
- },
- "1063": {
- "op": "bz asset_config_bool_true@3",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1066": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "day_count_convention#2"
- ]
- },
- "1067": {
- "op": "pushint 255",
- "defined_out": [
- "255",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "day_count_convention#2",
- "255"
- ]
- },
- "1070": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#0",
- "time_events#0",
- "time_periods#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#1"
- ]
- },
- "1071": {
- "op": "bz asset_config_bool_false@4",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1074": {
- "block": "asset_config_bool_true@3",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ],
- "op": "intc_1 // 1",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "or_result%0#0"
- ]
- },
- "1075": {
- "error": "Invalid day-count convention ID",
- "block": "asset_config_bool_merge@5",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "or_result%0#0"
- ],
- "op": "assert // Invalid day-count convention ID",
- "defined_out": [],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1076": {
- "op": "bytec 15 // \"day_count_convention\"",
- "defined_out": [
- "\"day_count_convention\""
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"day_count_convention\""
- ]
- },
- "1078": {
- "op": "dig 1",
- "defined_out": [
- "\"day_count_convention\"",
- "day_count_convention#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"day_count_convention\"",
- "day_count_convention#2"
- ]
- },
- "1080": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1081": {
- "op": "dig 6",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#0"
- ]
- },
- "1083": {
- "op": "btoi",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#2"
- ]
- },
- "1084": {
- "op": "bury 8",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1086": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0"
- ]
- },
- "1087": {
- "op": "bytec 26 // \"principal_discount\"",
- "defined_out": [
- "\"principal_discount\"",
- "0",
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0",
- "\"principal_discount\""
- ]
- },
- "1089": {
- "op": "app_global_get_ex",
- "defined_out": [
- "day_count_convention#2",
- "interest_rate#0",
- "interest_rate#2",
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1090": {
- "error": "check self.principal_discount exists",
- "op": "assert // check self.principal_discount exists",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "maybe_value%0#0"
- ]
- },
- "1091": {
- "op": "bnz asset_config_after_if_else@7",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1094": {
- "op": "dig 7",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "interest_rate#2"
- ]
- },
- "1096": {
- "error": "Interest rate is not properly defined",
- "op": "assert // Interest rate is not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1097": {
- "block": "asset_config_after_if_else@7",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ],
- "op": "bytec 5 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\""
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"interest_rate\""
- ]
- },
- "1099": {
- "op": "dig 8",
- "defined_out": [
- "\"interest_rate\"",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"interest_rate\"",
- "interest_rate#2"
- ]
- },
- "1101": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1102": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%array_length%0#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1104": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "aggregate%array_length%0#0 (copy)"
- ]
- },
- "1105": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "interest_rate#2",
- "tmp%1#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "tmp%1#1"
- ]
- },
- "1106": {
- "error": "Coupon rates are not properly defined",
- "op": "assert // Coupon rates are not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1107": {
- "op": "bytec 31 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "aggregate%array_length%0#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "\"total_coupons\""
- ]
- },
- "1109": {
- "op": "dig 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "\"total_coupons\"",
- "aggregate%array_length%0#0 (copy)"
- ]
- },
- "1111": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0"
- ]
- },
- "1112": {
- "op": "pushint 3",
- "defined_out": [
- "3",
- "aggregate%array_length%0#0",
- "interest_rate#2"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%0#0",
- "3"
- ]
- },
- "1114": {
- "op": "+",
- "defined_out": [
- "aggregate%array_length%0#0",
- "interest_rate#2",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#0"
- ]
- },
- "1115": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "tmp%1#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#0",
- "aggregate%array_length%1#0"
- ]
- },
- "1117": {
- "op": "==",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "tmp%2#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%2#1"
- ]
- },
- "1118": {
- "error": "Time events length is invalid",
- "op": "assert // Time events length is invalid",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1119": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1121": {
- "callsub": "modules.core_financial.common.CoreFinancialCommonMixin.assert_time_events_sorted",
- "op": "callsub assert_time_events_sorted"
- },
- "1124": {
- "op": "bytec 32 // 0x74696d654576656e7473",
- "defined_out": [
- "0x74696d654576656e7473",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "0x74696d654576656e7473"
- ]
- },
- "1126": {
- "op": "box_del",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "{box_del}"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "{box_del}"
- ]
- },
- "1127": {
- "op": "pop",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1128": {
- "op": "bytec 32 // 0x74696d654576656e7473",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "0x74696d654576656e7473"
- ]
- },
- "1130": {
- "op": "dig 1",
- "defined_out": [
- "0x74696d654576656e7473",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "0x74696d654576656e7473",
- "time_events#0 (copy)"
- ]
- },
- "1132": {
- "op": "box_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1133": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "time_events#0 (copy)"
- ]
- },
- "1134": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "time_events#0 (copy)",
- "2"
- ]
- },
- "1136": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "values%0#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "values%0#1"
- ]
- },
- "1137": {
- "op": "bytec 8 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "values%0#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "values%0#1",
- "\"primary_distribution_opening_date\""
- ]
- },
- "1139": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "\"primary_distribution_opening_date\"",
- "values%0#1"
- ]
- },
- "1140": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1141": {
- "op": "dup",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "time_events#0 (copy)"
- ]
- },
- "1142": {
- "op": "pushint 10",
- "defined_out": [
- "10",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "time_events#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "time_events#0 (copy)",
- "10"
- ]
- },
- "1144": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "values%1#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "values%1#1"
- ]
- },
- "1145": {
- "op": "bytec 27 // \"primary_distribution_closure_date\"",
- "defined_out": [
- "\"primary_distribution_closure_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "values%1#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "values%1#1",
- "\"primary_distribution_closure_date\""
- ]
- },
- "1147": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "\"primary_distribution_closure_date\"",
- "values%1#1"
- ]
- },
- "1148": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0"
- ]
- },
- "1149": {
- "op": "pushint 18",
- "defined_out": [
- "18",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_events#0",
- "18"
- ]
- },
- "1151": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "values%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "values%2#0"
- ]
- },
- "1152": {
- "op": "bytec_3 // \"issuance_date\"",
- "defined_out": [
- "\"issuance_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0",
- "values%2#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "values%2#0",
- "\"issuance_date\""
- ]
- },
- "1153": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"issuance_date\"",
- "values%2#0"
- ]
- },
- "1154": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1155": {
- "op": "bytec 10 // \"maturity_date\"",
- "defined_out": [
- "\"maturity_date\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"maturity_date\""
- ]
- },
- "1157": {
- "op": "intc_0 // 0",
- "defined_out": [
- "\"maturity_date\"",
- "0",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"maturity_date\"",
- "0"
- ]
- },
- "1158": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1159": {
- "op": "dig 1",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%2#0"
- ]
- },
- "1161": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%array_length%2#0",
- "1"
- ]
- },
- "1162": {
- "op": "==",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "tmp%1#1"
- ]
- },
- "1163": {
- "error": "Time periods are not properly defined",
- "op": "assert // Time periods are not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1164": {
- "op": "dig 2",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0"
- ]
- },
- "1166": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0",
- "time_periods#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "time_periods#0 (copy)"
- ]
- },
- "1167": {
- "op": "extract 2 16",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "aggregate%encoded_element%3#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "aggregate%encoded_element%3#0"
- ]
- },
- "1170": {
- "op": "dup",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "aggregate%encoded_element%3#0",
- "aggregate%encoded_element%3#0 (copy)",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "aggregate%encoded_element%3#0",
- "aggregate%encoded_element%3#0 (copy)"
- ]
- },
- "1171": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "aggregate%encoded_element%3#0",
- "aggregate%encoded_element%3#0 (copy)",
- "0"
- ]
- },
- "1172": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "aggregate%encoded_element%3#0",
- "coupon_period_duration#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "aggregate%encoded_element%3#0",
- "coupon_period_duration#0"
- ]
- },
- "1173": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "coupon_period_duration#0",
- "aggregate%encoded_element%3#0"
- ]
- },
- "1174": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "aggregate%encoded_element%3#0",
- "coupon_period_duration#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "coupon_period_duration#0",
- "aggregate%encoded_element%3#0",
- "8"
- ]
- },
- "1175": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "coupon_period_duration#0",
- "interest_rate#2",
- "repetitions#0",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "coupon_period_duration#0",
- "repetitions#0"
- ]
- },
- "1176": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "repetitions#0",
- "coupon_period_duration#0"
- ]
- },
- "1177": {
- "error": "Time period durations must be strictly greater than zero",
- "op": "assert // Time period durations must be strictly greater than zero",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "repetitions#0"
- ]
- },
- "1178": {
- "op": "!",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0",
- "tmp%3#1"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "tmp%3#1"
- ]
- },
- "1179": {
- "error": "Time period repetitions are not properly defined",
- "op": "assert // Time period repetitions are not properly defined",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0"
- ]
- },
- "1180": {
- "op": "bytec 29 // 0x74696d65506572696f6473",
- "defined_out": [
- "0x74696d65506572696f6473",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "0x74696d65506572696f6473"
- ]
- },
- "1182": {
- "op": "box_del",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "{box_del}"
- ]
- },
- "1183": {
- "op": "pop",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0"
- ]
- },
- "1184": {
- "op": "bytec 29 // 0x74696d65506572696f6473",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "time_periods#0",
- "0x74696d65506572696f6473"
- ]
- },
- "1186": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0x74696d65506572696f6473",
- "time_periods#0"
- ]
- },
- "1187": {
- "op": "box_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1188": {
- "op": "bytec 29 // 0x74696d65506572696f6473",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0x74696d65506572696f6473"
- ]
- },
- "1190": {
- "op": "pushints 2 16",
- "defined_out": [
- "0x74696d65506572696f6473",
- "16",
- "2",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "0x74696d65506572696f6473",
- "2",
- "16"
- ]
- },
- "1194": {
- "op": "box_extract",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "box%box_extract%0#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "box%box_extract%0#0"
- ]
- },
- "1195": {
- "op": "intc_0 // 0",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "box%box_extract%0#0",
- "0"
- ]
- },
- "1196": {
- "op": "extract_uint64",
- "defined_out": [
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "aggregate%item0%1#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%item0%1#0"
- ]
- },
- "1197": {
- "op": "bytec 17 // \"coupon_period\"",
- "defined_out": [
- "\"coupon_period\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "aggregate%item0%1#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "aggregate%item0%1#0",
- "\"coupon_period\""
- ]
- },
- "1199": {
- "op": "swap",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"coupon_period\"",
- "aggregate%item0%1#0"
- ]
- },
- "1200": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1201": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"status\""
- ]
- },
- "1202": {
- "op": "pushint 100",
- "defined_out": [
- "\"status\"",
- "100",
- "aggregate%array_length%0#0",
- "aggregate%array_length%1#0",
- "aggregate%array_length%2#0",
- "interest_rate#2",
- "time_events#0",
- "time_periods#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "\"status\"",
- "100"
- ]
- },
- "1204": {
- "op": "app_global_put",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1205": {
- "op": "intc_1 // 1",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "1"
- ]
- },
- "1206": {
- "op": "return",
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ]
- },
- "1207": {
- "block": "asset_config_bool_false@4",
- "stack_in": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "or_result%0#0"
- ],
- "stack_out": [
- "interest_rate#2",
- "interest_rate#0",
- "aggregate%array_length%0#0",
- "time_events#0",
- "aggregate%array_length%1#0",
- "time_periods#0",
- "aggregate%array_length%2#0",
- "day_count_convention#2",
- "or_result%0#0"
- ]
- },
- "1208": {
- "op": "b asset_config_bool_merge@5"
- },
- "1211": {
- "subroutine": "modules.actus.pbn.PBNCoreMixin.update_interest_rate[routing]",
- "params": {},
- "block": "update_interest_rate",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "interest_rate#0"
- ],
- "stack_out": [
- "interest_rate#0"
- ]
- },
- "1214": {
- "op": "dup",
- "defined_out": [
- "interest_rate#0",
- "interest_rate#0 (copy)"
- ],
- "stack_out": [
- "interest_rate#0",
- "interest_rate#0 (copy)"
- ]
- },
- "1215": {
- "op": "len",
- "defined_out": [
- "interest_rate#0",
- "len%0#0"
- ],
- "stack_out": [
- "interest_rate#0",
- "len%0#0"
- ]
- },
- "1216": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "interest_rate#0",
- "len%0#0"
- ],
- "stack_out": [
- "interest_rate#0",
- "len%0#0",
- "2"
- ]
- },
- "1218": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "interest_rate#0"
- ],
- "stack_out": [
- "interest_rate#0",
- "eq%0#0"
- ]
- },
- "1219": {
- "error": "invalid number of bytes for arc4.uint16",
- "op": "assert // invalid number of bytes for arc4.uint16",
- "stack_out": [
- "interest_rate#0"
- ]
- },
- "1220": {
- "op": "bytec 18 // 0x52383023",
- "defined_out": [
- "0x52383023",
- "interest_rate#0"
- ],
- "stack_out": [
- "interest_rate#0",
- "0x52383023"
- ]
- },
- "1222": {
- "op": "txn Sender",
- "defined_out": [
- "0x52383023",
- "interest_rate#0",
- "tmp%0#0"
- ],
- "stack_out": [
- "interest_rate#0",
- "0x52383023",
- "tmp%0#0"
- ]
- },
- "1224": {
- "callsub": "modules.rbac.RbacModule._role_is_active",
- "op": "callsub _role_is_active",
- "defined_out": [
- "interest_rate#0",
- "tmp%1#1"
- ],
- "stack_out": [
- "interest_rate#0",
- "tmp%1#1"
- ]
- },
- "1227": {
- "error": "Not authorized",
- "op": "assert // Not authorized",
- "stack_out": [
- "interest_rate#0"
- ]
- },
- "1228": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_defaulted",
- "op": "callsub assert_is_not_asset_defaulted"
- },
- "1231": {
- "callsub": "modules.rbac.RbacModule.assert_is_not_asset_suspended",
- "op": "callsub assert_is_not_asset_suspended"
- },
- "1234": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "due_coupons#0",
- "interest_rate#0"
- ],
- "stack_out": [
- "interest_rate#0",
- "due_coupons#0"
- ]
- },
- "1237": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid",
- "op": "callsub all_due_coupons_paid",
- "stack_out": [
- "interest_rate#0",
- "tmp%1#1"
- ]
- },
- "1240": {
- "error": "Pending due coupon payment",
- "op": "assert // Pending due coupon payment",
- "stack_out": [
- "interest_rate#0"
- ]
- },
- "1241": {
- "op": "btoi",
- "defined_out": [
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1"
- ]
- },
- "1242": {
- "op": "bytec 5 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\"",
- "tmp%2#1"
- ],
- "stack_out": [
- "tmp%2#1",
- "\"interest_rate\""
- ]
- },
- "1244": {
- "op": "swap",
- "stack_out": [
- "\"interest_rate\"",
- "tmp%2#1"
- ]
- },
- "1245": {
- "op": "app_global_put",
- "stack_out": []
- },
- "1246": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "tmp%3#1"
- ],
- "stack_out": [
- "tmp%3#1"
- ]
- },
- "1248": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1249": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0x151f7c75"
- ]
- },
- "1250": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1251": {
- "op": "concat",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "1252": {
- "op": "log",
- "stack_out": []
- },
- "1253": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "1254": {
- "op": "return",
- "stack_out": []
- },
- "1255": {
- "subroutine": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.get_account_units_current_value[routing]",
- "params": {},
- "block": "get_account_units_current_value",
- "stack_in": [],
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1"
- ]
- },
- "1256": {
- "op": "pushbytes \"\"",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0"
- ]
- },
- "1258": {
- "op": "dupn 4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ]
- },
- "1260": {
- "op": "txna ApplicationArgs 1"
- },
- "1263": {
- "op": "dup",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "holding_address#0"
- ]
- },
- "1264": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1265": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1266": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1267": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0"
- ]
- },
- "1268": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1271": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1272": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "len%1#0"
- ]
- },
- "1273": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "len%1#0",
- "8"
- ]
- },
- "1274": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "1275": {
- "error": "invalid number of bytes for arc4.uint64",
- "op": "assert // invalid number of bytes for arc4.uint64",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1276": {
- "op": "btoi",
- "defined_out": [
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1277": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0"
- ]
- },
- "1278": {
- "op": "bytec 8 // \"primary_distribution_opening_date\"",
- "defined_out": [
- "\"primary_distribution_opening_date\"",
- "0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "1280": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1281": {
- "error": "check self.primary_distribution_opening_date exists",
- "op": "assert // check self.primary_distribution_opening_date exists",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "maybe_value%0#0"
- ]
- },
- "1282": {
- "op": "bz get_account_units_current_value_bool_false@4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1285": {
- "op": "global LatestTimestamp",
- "defined_out": [
- "holding_address#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1"
- ]
- },
- "1287": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "0"
- ]
- },
- "1288": {
- "op": "bytec 8 // \"primary_distribution_opening_date\"",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "0",
- "\"primary_distribution_opening_date\""
- ]
- },
- "1290": {
- "op": "app_global_get_ex",
- "defined_out": [
- "holding_address#0",
- "maybe_exists%1#0",
- "maybe_value%1#0",
- "tmp%1#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0",
- "maybe_exists%1#0"
- ]
- },
- "1291": {
- "error": "check self.primary_distribution_opening_date exists",
- "op": "assert // check self.primary_distribution_opening_date exists",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%1#1",
- "maybe_value%1#0"
- ]
- },
- "1292": {
- "op": ">=",
- "defined_out": [
- "holding_address#0",
- "tmp%2#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%2#1"
- ]
- },
- "1293": {
- "op": "bz get_account_units_current_value_bool_false@4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1296": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%0#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "1297": {
- "error": "Primary distribution not yet executed",
- "block": "get_account_units_current_value_bool_merge@5",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ],
- "op": "assert // Primary distribution not yet executed",
- "defined_out": [],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1298": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0x52333023"
- ]
- },
- "1299": {
- "op": "dig 2",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0x52333023",
- "holding_address#0"
- ]
- },
- "1301": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1302": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1",
- "box_prefixed_key%0#1"
- ]
- },
- "1303": {
- "op": "bury 9",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1305": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1306": {
- "op": "bury 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "maybe_exists%0#0"
- ]
- },
- "1308": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1309": {
- "op": "dup",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "units#0"
- ]
- },
- "1310": {
- "op": "bz get_account_units_current_value_bool_false@8",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1313": {
- "op": "dig 7",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "box_prefixed_key%0#1"
- ]
- },
- "1315": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%box_get%0#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1316": {
- "error": "check self.account entry exists",
- "op": "assert // check self.account entry exists",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%box_get%0#0"
- ]
- },
- "1317": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "aggregate%box_get%0#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%box_get%0#0",
- "32"
- ]
- },
- "1318": {
- "op": "extract_uint64",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0",
- "values%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "values%0#0"
- ]
- },
- "1319": {
- "op": "dig 1",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "values%0#0",
- "units#0"
- ]
- },
- "1321": {
- "op": ">=",
- "defined_out": [
- "box_prefixed_key%0#1",
- "holding_address#0",
- "tmp%4#1",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%4#1"
- ]
- },
- "1322": {
- "op": "bz get_account_units_current_value_bool_false@8",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1325": {
- "op": "intc_1 // 1",
- "defined_out": [
- "and_result%1#0",
- "box_prefixed_key%0#1",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%1#0"
- ]
- },
- "1326": {
- "error": "Invalid amount of units for the account",
- "block": "get_account_units_current_value_bool_merge@9",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%1#0"
- ],
- "op": "assert // Invalid amount of units for the account",
- "defined_out": [],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1327": {
- "op": "dig 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1329": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1330": {
- "op": "dig 2",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "holding_address#0 (copy)",
- "units#0"
- ]
- },
- "1332": {
- "callsub": "modules.accounting.AccountingModule.account_units_value",
- "op": "callsub account_units_value",
- "defined_out": [
- "account_units_nominal_value#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "account_units_nominal_value#0"
- ]
- },
- "1335": {
- "op": "bury 8",
- "defined_out": [
- "account_units_nominal_value#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1337": {
- "op": "intc_0 // 0",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "accrued_interest#0"
- ]
- },
- "1338": {
- "op": "bury 7",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "holding_address#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1340": {
- "op": "intc_0 // 0",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "numerator#0"
- ]
- },
- "1341": {
- "op": "bury 4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1343": {
- "op": "intc_0 // 0",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "denominator#0"
- ]
- },
- "1344": {
- "op": "bury 6",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0"
- ]
- },
- "1346": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "due_coupons#0"
- ]
- },
- "1349": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "due_coupons#0",
- "due_coupons#0"
- ]
- },
- "1350": {
- "op": "bury 6",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "holding_address#0",
- "due_coupons#0"
- ]
- },
- "1352": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "holding_address#0"
- ]
- },
- "1353": {
- "op": "dig 1",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "due_coupons#0 (copy)",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "holding_address#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1355": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.assert_no_pending_coupon_payment",
- "op": "callsub assert_no_pending_coupon_payment",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0"
- ]
- },
- "1358": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.is_accruing_interest",
- "op": "callsub is_accruing_interest",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "tmp%7#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%7#0"
- ]
- },
- "1361": {
- "op": "bz get_account_units_current_value_after_if_else@11",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1364": {
- "op": "dig 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0"
- ]
- },
- "1366": {
- "op": "dup",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1367": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.day_count_factor",
- "op": "callsub day_count_factor",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "day_count_factor#0"
- ]
- },
- "1370": {
- "op": "dig 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "day_count_factor#0",
- "holding_address#0"
- ]
- },
- "1372": {
- "op": "dig 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0",
- "day_count_factor#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1374": {
- "op": "uncover 3",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "holding_address#0",
- "units#0",
- "due_coupons#0"
- ]
- },
- "1376": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.accrued_interest_amount",
- "op": "callsub accrued_interest_amount",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "accrued_interest#0"
- ]
- },
- "1379": {
- "op": "bury 7",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0"
- ]
- },
- "1381": {
- "op": "dup",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ]
- },
- "1382": {
- "op": "intc_0 // 0",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "0"
- ]
- },
- "1383": {
- "op": "extract_uint64",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "numerator#0"
- ]
- },
- "1384": {
- "op": "bury 4",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0"
- ]
- },
- "1386": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "holding_address#0",
- "numerator#0",
- "units#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "day_count_factor#0",
- "8"
- ]
- },
- "1387": {
- "op": "extract_uint64",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "denominator#0"
- ]
- },
- "1388": {
- "op": "bury 5",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1390": {
- "block": "get_account_units_current_value_after_if_else@11",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "dig 2",
- "defined_out": [
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "numerator#0"
- ]
- },
- "1392": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1393": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%0#0",
- "denominator#0"
- ]
- },
- "1395": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1396": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0"
- ]
- },
- "1397": {
- "op": "dig 7",
- "defined_out": [
- "account_units_nominal_value#0",
- "aggregate%head%1#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "account_units_nominal_value#0"
- ]
- },
- "1399": {
- "op": "itob",
- "defined_out": [
- "account_units_nominal_value#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "1400": {
- "op": "dig 7",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "accrued_interest#0"
- ]
- },
- "1402": {
- "op": "itob",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "1403": {
- "op": "concat",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0"
- ]
- },
- "1404": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%3#0",
- "aggregate%head%1#0"
- ]
- },
- "1405": {
- "op": "concat",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%4#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%4#0"
- ]
- },
- "1406": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "aggregate%head%4#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "aggregate%head%4#0",
- "0x151f7c75"
- ]
- },
- "1407": {
- "op": "swap",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "0x151f7c75",
- "aggregate%head%4#0"
- ]
- },
- "1408": {
- "op": "concat",
- "defined_out": [
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "numerator#0",
- "tmp%5#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "tmp%5#0"
- ]
- },
- "1409": {
- "op": "log",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1410": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "1"
- ]
- },
- "1411": {
- "op": "return",
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ]
- },
- "1412": {
- "block": "get_account_units_current_value_bool_false@8",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%1#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%1#0"
- ]
- },
- "1413": {
- "op": "b get_account_units_current_value_bool_merge@9"
- },
- "1416": {
- "block": "get_account_units_current_value_bool_false@4",
- "stack_in": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "and_result%0#0"
- ],
- "stack_out": [
- "box_prefixed_key%0#1",
- "account_units_nominal_value#0",
- "accrued_interest#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0",
- "holding_address#0",
- "units#0",
- "and_result%0#0"
- ]
- },
- "1417": {
- "op": "b get_account_units_current_value_bool_merge@5"
- },
- "1420": {
- "subroutine": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.get_payment_amount[routing]",
- "params": {},
- "block": "get_payment_amount",
- "stack_in": [],
- "op": "txna ApplicationArgs 1",
- "defined_out": [
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1423": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1424": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1425": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1426": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1427": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1428": {
- "op": "bytec_1 // 0x52333023",
- "defined_out": [
- "0x52333023",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "0x52333023"
- ]
- },
- "1429": {
- "op": "dig 1",
- "stack_out": [
- "holding_address#0",
- "0x52333023",
- "holding_address#0 (copy)"
- ]
- },
- "1431": {
- "op": "concat",
- "defined_out": [
- "box_prefixed_key%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "box_prefixed_key%0#0"
- ]
- },
- "1432": {
- "op": "box_len",
- "defined_out": [
- "_%0#0",
- "holding_address#0",
- "maybe_exists%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "_%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1433": {
- "op": "bury 1",
- "stack_out": [
- "holding_address#0",
- "maybe_exists%0#0"
- ]
- },
- "1435": {
- "error": "Invalid account holding address",
- "op": "assert // Invalid account holding address",
- "stack_out": [
- "holding_address#0"
- ]
- },
- "1436": {
- "callsub": "modules.accounting.AccountingModule.account_total_units_value",
- "op": "callsub account_total_units_value",
- "defined_out": [
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1"
- ]
- },
- "1439": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0",
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "0"
- ]
- },
- "1440": {
- "op": "bytec 5 // \"interest_rate\"",
- "defined_out": [
- "\"interest_rate\"",
- "0",
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "0",
- "\"interest_rate\""
- ]
- },
- "1442": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "tmp%0#1"
- ],
- "stack_out": [
- "tmp%0#1",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1443": {
- "error": "check self.interest_rate exists",
- "op": "assert // check self.interest_rate exists",
- "stack_out": [
- "tmp%0#1",
- "maybe_value%0#0"
- ]
- },
- "1444": {
- "op": "*",
- "defined_out": [
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1"
- ]
- },
- "1445": {
- "op": "intc 4 // 10000",
- "defined_out": [
- "10000",
- "tmp%1#1"
- ],
- "stack_out": [
- "tmp%1#1",
- "10000"
- ]
- },
- "1447": {
- "op": "/",
- "defined_out": [
- "interest_amount#0"
- ],
- "stack_out": [
- "interest_amount#0"
- ]
- },
- "1448": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1449": {
- "op": "intc_0 // 0",
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "0"
- ]
- },
- "1450": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ],
- "stack_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1451": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%head%1#0"
- ]
- },
- "1452": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ],
- "stack_out": [
- "aggregate%head%1#0",
- "0x151f7c75"
- ]
- },
- "1453": {
- "op": "swap",
- "stack_out": [
- "0x151f7c75",
- "aggregate%head%1#0"
- ]
- },
- "1454": {
- "op": "concat",
- "defined_out": [
- "tmp%3#0"
- ],
- "stack_out": [
- "tmp%3#0"
- ]
- },
- "1455": {
- "op": "log",
- "stack_out": []
- },
- "1456": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1"
- ],
- "stack_out": [
- "1"
- ]
- },
- "1457": {
- "op": "return",
- "stack_out": []
- },
- "1458": {
- "subroutine": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.get_coupons_status[routing]",
- "params": {},
- "block": "get_coupons_status",
- "stack_in": [],
- "op": "pushbytes \"\"",
- "stack_out": [
- "all_due_coupons_paid#0"
- ]
- },
- "1460": {
- "op": "dupn 4",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1462": {
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "0"
- ]
- },
- "1463": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "0",
- "\"status\""
- ]
- },
- "1464": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1465": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0"
- ]
- },
- "1466": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "1468": {
- "op": "==",
- "defined_out": [
- "tmp%0#3"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%0#3"
- ]
- },
- "1469": {
- "op": "bz get_coupons_status_ternary_false@3",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1472": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.count_due_coupons",
- "op": "callsub count_due_coupons",
- "defined_out": [
- "due_coupons#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1475": {
- "op": "bury 3",
- "defined_out": [
- "due_coupons#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1477": {
- "block": "get_coupons_status_ternary_merge@4",
- "stack_in": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "op": "dig 2",
- "defined_out": [
- "due_coupons#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1479": {
- "op": "dup",
- "defined_out": [
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1480": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "due_coupons#0 (copy)",
- "1"
- ]
- },
- "1481": {
- "op": "+",
- "defined_out": [
- "due_coupons#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "tmp%0#2"
- ]
- },
- "1482": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.coupon_due_date",
- "op": "callsub coupon_due_date",
- "defined_out": [
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "next_coupon_due_date#0"
- ]
- },
- "1485": {
- "op": "bury 3",
- "defined_out": [
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1487": {
- "op": "dup",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "due_coupons#0 (copy)"
- ]
- },
- "1488": {
- "callsub": "modules.core_financial.coupon.CouponCashflowMixin.all_due_coupons_paid",
- "op": "callsub all_due_coupons_paid",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "all_due_coupons_paid#0"
- ]
- },
- "1491": {
- "op": "bury 6",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1493": {
- "op": "intc_0 // 0",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "numerator#0"
- ]
- },
- "1494": {
- "op": "bury 2",
- "defined_out": [
- "all_due_coupons_paid#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1496": {
- "op": "intc_0 // 0",
- "defined_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0",
- "denominator#0"
- ]
- },
- "1497": {
- "op": "bury 5",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1499": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.is_accruing_interest",
- "op": "callsub is_accruing_interest",
- "defined_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%3#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%3#0"
- ]
- },
- "1502": {
- "op": "bz get_coupons_status_after_if_else@6",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1505": {
- "op": "dig 2",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1507": {
- "callsub": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.day_count_factor",
- "op": "callsub day_count_factor",
- "defined_out": [
- "all_due_coupons_paid#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "day_count_factor#0"
- ]
- },
- "1510": {
- "op": "dup",
- "defined_out": [
- "all_due_coupons_paid#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)"
- ]
- },
- "1511": {
- "op": "intc_0 // 0",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "day_count_factor#0",
- "day_count_factor#0 (copy)",
- "0"
- ]
- },
- "1512": {
- "op": "extract_uint64",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "day_count_factor#0",
- "numerator#0"
- ]
- },
- "1513": {
- "op": "bury 2",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "day_count_factor#0"
- ]
- },
- "1515": {
- "op": "intc_3 // 8",
- "defined_out": [
- "8",
- "all_due_coupons_paid#0",
- "day_count_factor#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "day_count_factor#0",
- "8"
- ]
- },
- "1516": {
- "op": "extract_uint64",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "denominator#0"
- ]
- },
- "1517": {
- "op": "bury 4",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1519": {
- "block": "get_coupons_status_after_if_else@6",
- "stack_in": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "0"
- ]
- },
- "1520": {
- "op": "bytec 31 // \"total_coupons\"",
- "defined_out": [
- "\"total_coupons\"",
- "0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "0",
- "\"total_coupons\""
- ]
- },
- "1522": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1523": {
- "error": "check self.total_coupons exists",
- "op": "assert // check self.total_coupons exists",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0"
- ]
- },
- "1524": {
- "op": "dig 1",
- "defined_out": [
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "numerator#0"
- ]
- },
- "1526": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "aggregate%val_as_bytes%0#0"
- ]
- },
- "1527": {
- "op": "dig 5",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "aggregate%val_as_bytes%0#0",
- "denominator#0"
- ]
- },
- "1529": {
- "op": "itob",
- "defined_out": [
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "aggregate%val_as_bytes%0#0",
- "aggregate%val_as_bytes%1#0"
- ]
- },
- "1530": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "denominator#0",
- "maybe_value%0#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "maybe_value%0#0",
- "aggregate%head%1#0"
- ]
- },
- "1531": {
- "op": "swap",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "maybe_value%0#0"
- ]
- },
- "1532": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0"
- ]
- },
- "1533": {
- "op": "dig 4",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "due_coupons#0"
- ]
- },
- "1535": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%val_as_bytes%2#0",
- "aggregate%val_as_bytes%3#0"
- ]
- },
- "1536": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "denominator#0",
- "due_coupons#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0"
- ]
- },
- "1537": {
- "op": "dig 3",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "next_coupon_due_date#0"
- ]
- },
- "1539": {
- "op": "itob",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%4#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%head%3#0",
- "aggregate%val_as_bytes%4#0"
- ]
- },
- "1540": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%1#0",
- "aggregate%head%4#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%1#0",
- "aggregate%head%4#0"
- ]
- },
- "1541": {
- "op": "swap",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%4#0",
- "aggregate%head%1#0"
- ]
- },
- "1542": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%5#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%5#0"
- ]
- },
- "1543": {
- "op": "bytec 30 // 0x00",
- "defined_out": [
- "0x00",
- "aggregate%head%5#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%5#0",
- "0x00"
- ]
- },
- "1545": {
- "op": "intc_0 // 0",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%5#0",
- "0x00",
- "0"
- ]
- },
- "1546": {
- "op": "dig 7",
- "defined_out": [
- "0",
- "0x00",
- "aggregate%head%5#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%5#0",
- "0x00",
- "0",
- "all_due_coupons_paid#0"
- ]
- },
- "1548": {
- "op": "setbit",
- "defined_out": [
- "aggregate%encoded_bool%0#0",
- "aggregate%head%5#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%5#0",
- "aggregate%encoded_bool%0#0"
- ]
- },
- "1549": {
- "op": "concat",
- "defined_out": [
- "aggregate%head%6#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%6#0"
- ]
- },
- "1550": {
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75",
- "aggregate%head%6#0",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "aggregate%head%6#0",
- "0x151f7c75"
- ]
- },
- "1551": {
- "op": "swap",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "0x151f7c75",
- "aggregate%head%6#0"
- ]
- },
- "1552": {
- "op": "concat",
- "defined_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "tmp%1#0"
- ]
- },
- "1553": {
- "op": "log",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1554": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "1"
- ]
- },
- "1555": {
- "op": "return",
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1556": {
- "block": "get_coupons_status_ternary_false@3",
- "stack_in": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ],
- "op": "intc_0 // 0",
- "defined_out": [
- "due_coupons#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0",
- "due_coupons#0"
- ]
- },
- "1557": {
- "op": "bury 3",
- "defined_out": [
- "due_coupons#0"
- ],
- "stack_out": [
- "all_due_coupons_paid#0",
- "denominator#0",
- "due_coupons#0",
- "next_coupon_due_date#0",
- "numerator#0"
- ]
- },
- "1559": {
- "op": "b get_coupons_status_ternary_merge@4"
- },
- "1562": {
- "subroutine": "modules.core_financial.coupon.PerpetualCouponCashflowMixin.get_time_periods[routing]",
- "params": {},
- "block": "get_time_periods",
- "stack_in": [],
- "op": "bytec 33 // 0x0000"
- },
- "1564": {
- "op": "intc_0 // 0"
- },
- "1565": {
- "op": "bytec_2 // \"status\"",
- "defined_out": [
- "\"status\"",
- "0",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "0",
- "\"status\""
- ]
- },
- "1566": {
- "op": "app_global_get_ex",
- "defined_out": [
- "maybe_exists%0#0",
- "maybe_value%0#0",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "maybe_value%0#0",
- "maybe_exists%0#0"
- ]
- },
- "1567": {
- "error": "check self.status exists",
- "op": "assert // check self.status exists",
- "stack_out": [
- "time_periods#0",
- "maybe_value%0#0"
- ]
- },
- "1568": {
- "op": "pushint 100",
- "defined_out": [
- "100",
- "maybe_value%0#0",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "maybe_value%0#0",
- "100"
- ]
- },
- "1570": {
- "op": "==",
- "defined_out": [
- "time_periods#0",
- "tmp%0#2"
- ],
- "stack_out": [
- "time_periods#0",
- "tmp%0#2"
- ]
- },
- "1571": {
- "op": "bz get_time_periods_after_if_else@3",
- "stack_out": [
- "time_periods#0"
- ]
- },
- "1574": {
- "op": "bytec 29 // 0x74696d65506572696f6473",
- "defined_out": [
- "0x74696d65506572696f6473",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "0x74696d65506572696f6473"
- ]
- },
- "1576": {
- "op": "box_get",
- "defined_out": [
- "aggregate%box_get%1#0",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "time_periods#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1577": {
- "op": "swap",
- "stack_out": [
- "time_periods#0",
- "aggregate%box_get%1#0",
- "time_periods#0"
- ]
- },
- "1578": {
- "op": "bury 2",
- "stack_out": [
- "time_periods#0",
- "aggregate%box_get%1#0"
- ]
- },
- "1580": {
- "error": "check self.time_periods exists",
- "op": "assert // check self.time_periods exists",
- "stack_out": [
- "time_periods#0"
- ]
- },
- "1581": {
- "block": "get_time_periods_after_if_else@3",
- "stack_in": [
- "time_periods#0"
- ],
- "op": "bytec_0 // 0x151f7c75",
- "defined_out": [
- "0x151f7c75"
- ],
- "stack_out": [
- "time_periods#0",
- "0x151f7c75"
- ]
- },
- "1582": {
- "op": "dig 1",
- "defined_out": [
- "0x151f7c75",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "0x151f7c75",
- "time_periods#0"
- ]
- },
- "1584": {
- "op": "concat",
- "defined_out": [
- "time_periods#0",
- "tmp%1#0"
- ],
- "stack_out": [
- "time_periods#0",
- "tmp%1#0"
- ]
- },
- "1585": {
- "op": "log",
- "stack_out": [
- "time_periods#0"
- ]
- },
- "1586": {
- "op": "intc_1 // 1",
- "defined_out": [
- "1",
- "time_periods#0"
- ],
- "stack_out": [
- "time_periods#0",
- "1"
- ]
- },
- "1587": {
- "op": "return",
- "stack_out": [
- "time_periods#0"
- ]
- },
- "1588": {
- "subroutine": "modules.payment_agent.coupon.CouponPaymentAgentMixin.pay_coupon[routing]",
- "params": {},
- "block": "pay_coupon",
- "stack_in": [],
- "op": "txna ApplicationArgs 1"
- },
- "1591": {
- "op": "dupn 2",
- "defined_out": [
- "holding_address#0",
- "holding_address#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "holding_address#0 (copy)"
- ]
- },
- "1593": {
- "op": "len",
- "defined_out": [
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "len%0#0"
- ]
- },
- "1594": {
- "op": "intc_2 // 32",
- "defined_out": [
- "32",
- "holding_address#0",
- "len%0#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "len%0#0",
- "32"
- ]
- },
- "1595": {
- "op": "==",
- "defined_out": [
- "eq%0#0",
- "holding_address#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "eq%0#0"
- ]
- },
- "1596": {
- "error": "invalid number of bytes for arc4.static_array",
- "op": "assert // invalid number of bytes for arc4.static_array",
- "stack_out": [
- "holding_address#0",
- "holding_address#0"
- ]
- },
- "1597": {
- "op": "txna ApplicationArgs 2",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0"
- ]
- },
- "1600": {
- "op": "dup",
- "defined_out": [
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1601": {
- "op": "intc_0 // 0",
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "tmp%2#0 (copy)",
- "0"
- ]
- },
- "1602": {
- "error": "invalid array length header",
- "op": "extract_uint16 // on error: invalid array length header",
- "defined_out": [
- "aggregate%array_length%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "aggregate%array_length%0#0"
- ]
- },
- "1603": {
- "op": "pushint 2",
- "defined_out": [
- "2",
- "aggregate%array_length%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "aggregate%array_length%0#0",
- "2"
- ]
- },
- "1605": {
- "op": "+",
- "defined_out": [
- "add%0#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "add%0#0"
- ]
- },
- "1606": {
- "op": "dig 1",
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "add%0#0",
- "tmp%2#0 (copy)"
- ]
- },
- "1608": {
- "op": "len",
- "defined_out": [
- "add%0#0",
- "holding_address#0",
- "len%1#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "add%0#0",
- "len%1#0"
- ]
- },
- "1609": {
- "op": "==",
- "defined_out": [
- "eq%1#0",
- "holding_address#0",
- "tmp%2#0"
- ],
- "stack_out": [
- "holding_address#0",
- "holding_address#0",
- "tmp%2#0",
- "eq%1#0"
- ]
- },
- "1610": {
- "error": "invalid number of bytes for arc4.dynamic_array",
- "op": "assert // invalid number of bytes for arc4.dynamic_array