pax_global_header00006660000000000000000000000064150265704630014522gustar00rootroot0000000000000052 comment=7dc2bb8d41e8e01fe6c7839e103f950826fcf5e4 rocm-docs-core-1.21.1/000077500000000000000000000000001502657046300144205ustar00rootroot00000000000000rocm-docs-core-1.21.1/.devcontainer/000077500000000000000000000000001502657046300171575ustar00rootroot00000000000000rocm-docs-core-1.21.1/.devcontainer/Dockerfile000066400000000000000000000016711502657046300211560ustar00rootroot00000000000000FROM python:3.10-bullseye ENV LANG=C.UTF-8 \ LC_ALL=C.UTF-8 RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ doxygen \ graphviz \ ssh \ sudo \ zsh \ && rm -rf /var/lib/apt/lists/* # Install just RUN curl --proto '=https' -sSf https://just.systems/install.sh \ | sudo bash -s -- --tag 1.13.0 --to /usr/local/bin # Add the render group and a user with sudo permissions for the container RUN useradd -Um developer \ && echo developer ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/developer \ && chmod 0440 /etc/sudoers.d/developer CMD mkdir -p /workspace && chown developer:developer /workspace WORKDIR /workspace VOLUME /workspace USER developer rocm-docs-core-1.21.1/.devcontainer/devcontainer.json000066400000000000000000000005701502657046300225350ustar00rootroot00000000000000{ "build": { "dockerfile": "Dockerfile" }, "updateContentCommand": "just devenv docs", "customizations": { "vscode": { "extensions": [ "ms-python.black-formatter", "ms-python.python", "ritwickdey.LiveServer", "tamasfe.even-better-toml" ] } } } rocm-docs-core-1.21.1/.dockerignore000066400000000000000000000000211502657046300170650ustar00rootroot00000000000000* !.devcontainer rocm-docs-core-1.21.1/.gitattributes000066400000000000000000000001171502657046300173120ustar00rootroot00000000000000# Force lf to workaround pre-commit hook limitation /.wordlist.txt text eol=lf rocm-docs-core-1.21.1/.github/000077500000000000000000000000001502657046300157605ustar00rootroot00000000000000rocm-docs-core-1.21.1/.github/CODEOWNERS000077500000000000000000000001631502657046300173560ustar00rootroot00000000000000# Documentation files docs/* @ROCm/rocm-documentation *.md @ROCm/rocm-documentation *.rst @ROCm/rocm-documentation rocm-docs-core-1.21.1/.github/dependabot.yml000066400000000000000000000012331502657046300206070ustar00rootroot00000000000000# To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: - package-ecosystem: "pip" # See documentation for possible values directory: "/" # Location of package manifests open-pull-requests-limit: 10 schedule: interval: "daily" commit-message: prefix: "build" labels: - "documentation" - "dependencies" reviewers: - "samjwu" rocm-docs-core-1.21.1/.github/workflows/000077500000000000000000000000001502657046300200155ustar00rootroot00000000000000rocm-docs-core-1.21.1/.github/workflows/linting.yml000066400000000000000000000043241502657046300222070ustar00rootroot00000000000000name: Docs Linting on: workflow_call: push: branches: [develop, main] pull_request: branches: [develop, main] concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true jobs: lint-md: name: "Markdown" runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Fetch config shell: sh run: | test -f .markdownlint.yaml && echo "Using local config file" || curl --silent --show-error --fail --location https://raw.github.com/ROCm/rocm-docs-core/develop/.markdownlint.yaml -O - name: Use markdownlint-cli2 uses: DavidAnson/markdownlint-cli2-action@v10.0.1 with: globs: "**/*.md" spelling: name: "Spelling" runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Fetch config if: ${{ ! contains( github.repository, 'rocm-docs-core') }} shell: sh run: | curl --silent --show-error --fail --location https://raw.github.com/ROCm/rocm-docs-core/develop/.github/workflows/yaml_merger.py -o .github/workflows/yaml_merger.py curl --silent --show-error --fail --location https://raw.github.com/ROCm/rocm-docs-core/develop/.spellcheck.yaml -O curl --silent --show-error --fail --location https://raw.github.com/ROCm/rocm-docs-core/develop/.wordlist.txt >> .wordlist.txt - name: Check local spelling file id: check_local_spelling run: | if [ -f .spellcheck.local.yaml ]; then echo "check_result=true" >> $GITHUB_OUTPUT else echo "check_result=false" >> $GITHUB_OUTPUT fi - name: Merge local and main YAML files if: steps.check_local_spelling.outputs.check_result == 'true' shell: sh run: | python3 .github/workflows/yaml_merger.py .spellcheck.yaml .spellcheck.local.yaml .spellcheck.yaml - name: Run spellcheck uses: rojopolis/spellcheck-github-actions@0.46.0 - name: On fail if: failure() run: | echo "Please check for spelling mistakes or add them to '.wordlist.txt' in either the root of this project or in rocm-docs-core." rocm-docs-core-1.21.1/.github/workflows/pull_request.yml000066400000000000000000000055341502657046300232730ustar00rootroot00000000000000name: Code on: pull_request: jobs: lint: name: Python Linting strategy: matrix: os: ["ubuntu-latest", "windows-latest"] python-version: ["3.10"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "${{ matrix.python-version }}" cache: pip cache-dependency-path: | pyproject.toml requirements.txt - name: Cache venv uses: actions/cache@v4.2.0 with: path: .venv key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml','requirements.txt') }} - run: echo "PRE_COMMIT_HOME=$Env:GITHUB_WORKSPACE/.cache/pre-commit" >> "$Env:GITHUB_ENV" if: ${{ startsWith(matrix.os, 'windows') }} - run: echo "PRE_COMMIT_HOME=$GITHUB_WORKSPACE/.cache/pre-commit" >> "$GITHUB_ENV" if: ${{ !startsWith(matrix.os, 'windows') }} - name: Cache pre-commit uses: actions/cache@v4.2.0 with: path: ${{ env.PRE_COMMIT_HOME }} key: pre-commit-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('.pre-commit-config.yaml') }} - name: Install just uses: extractions/setup-just@v1 with: just-version: '1.13.0' - name: Create virtual env, install requirements run: just deps - name: Check commit messages run: just _check-commit-range "refs/remotes/origin/${{ github.base_ref }}..HEAD" - name: Check linting, formatting, types run: just --set verbose_errors true -- check-codestyle test: name: Python Tests strategy: fail-fast: true matrix: os: ["ubuntu-latest", "windows-latest"] python-version: ["3.10"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "${{ matrix.python-version }}" cache: pip cache-dependency-path: | pyproject.toml requirements.txt - name: Set up Doxygen uses: ssciwr/doxygen-install@v1.2.0 with: version: 1.9.8 - name: Set up Graphviz uses: ts-graphviz/setup-graphviz@v2.0.2 with: ubuntu-graphviz-version: 2.42.2-9ubuntu0.1 windows-graphviz-version: '9.0.0' - name: Cache venv uses: actions/cache@v4.2.0 with: path: .venv key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml','requirements.txt') }} - name: Install just uses: extractions/setup-just@v1 with: just-version: '1.13.0' - name: Create virtual env, install requirements run: just deps - name: Install run: just install - name: Run tests run: just test rocm-docs-core-1.21.1/.github/workflows/release.yml000066400000000000000000000022451502657046300221630ustar00rootroot00000000000000name: Release on: push: tags: - v[0-9]+.[0-9]+.[0-9]+* workflow_call: inputs: revision: required: true type: string secrets: PYPI_TOKEN: required: true workflow_dispatch: jobs: build: strategy: matrix: python-version: ["3.10"] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.revision || github.sha }} - uses: actions/setup-python@v4 with: python-version: "${{ matrix.python-version }}" cache: pip - name: Build python package shell: sh run: | pip install build==0.10.0 python -m build - uses: actions/upload-artifact@v4.3.6 with: name: dist-python${{ matrix.python-version }} path: dist publish: concurrency: publish needs: [build] runs-on: ubuntu-latest env: PYTHON_VERSION: "3.10" steps: - uses: actions/download-artifact@v4.1.8 with: name: dist-python${{ env.PYTHON_VERSION }} path: dist - uses: pypa/gh-action-pypi-publish@v1.12.4 with: password: ${{ secrets.PYPI_TOKEN }} rocm-docs-core-1.21.1/.github/workflows/sync_branches.yml000066400000000000000000000014771502657046300233720ustar00rootroot00000000000000name: "Sync to develop" on: workflow_call: inputs: sha: required: true type: string workflow_dispatch: jobs: sync_branches: runs-on: ubuntu-latest concurrency: sync_branches name: Sync the branch with the default branch (develop) steps: - name: Push develop forward (ff only) shell: sh run: | REF="refs/heads/${{ github.event.repository.default_branch }}" gh api "/repos/${{ github.repository }}/git/$REF" \ --method PATCH \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28" \ --raw-field sha='${{ inputs.sha || github.sha }}' \ --field force=false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} rocm-docs-core-1.21.1/.github/workflows/version-bump.yml000066400000000000000000000101531502657046300231660ustar00rootroot00000000000000name: Version Bump on: push: branches: - "main" workflow_dispatch: jobs: bump-version: name: "Bump version and create changelog with commitizen" if: "!startsWith(github.event.head_commit.message, 'bump:')" concurrency: bump-version runs-on: ubuntu-latest env: PYTHON_VERSION: "3.10" outputs: bumped: ${{ steps.cz-bump.outputs.bumped }} revision: ${{ steps.cz-bump.outputs.revision }} sha: ${{ steps.cz-bump.outputs.sha }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "${{ env.PYTHON_VERSION }}" cache: pip cache-dependency-path: | pyproject.toml requirements.txt - name: Set up cache uses: actions/cache@v4.2.0 with: path: .venv key: venv-${{ env.PYTHON_VERSION }}-${{ hashFiles('pyproject.toml','requirements.txt') }} - name: Create virtual env, install requirements shell: sh run: | python -m venv .venv . .venv/bin/activate python -m pip install pip-tools python -m piptools sync requirements.txt echo "PATH=$PATH" >> "$GITHUB_ENV" - name: Bump version and generate changelog shell: sh id: cz-bump run: | git config --local user.name "github-actions[bot]" git config --local user.email "github-actions[bot]@users.noreply.github.com" RESULT=0 # Answer yes if asked if this is the first tag created cz bump --yes --changelog-to-stdout > body.md || RESULT=$? if [ "$RESULT" -eq 0 ]; then echo "bumped=true" >> "$GITHUB_OUTPUT" echo "revision=v$(cz version --project)" >> "$GITHUB_OUTPUT" echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" # https://commitizen-tools.github.io/commitizen/exit_codes/ # NoneIncrementExit(21): No need to increment the version number elif [ "$RESULT" -eq 21 ]; then echo "bumped=false" >> "$GITHUB_OUTPUT" else exit $RESULT fi - name: Push changes if: steps.cz-bump.outputs.bumped == 'true' shell: sh run: | git push --atomic origin "HEAD:${{ github.ref }}" \ "${{ steps.cz-bump.outputs.revision }}" - name: Release if: steps.cz-bump.outputs.bumped == 'true' uses: softprops/action-gh-release@v0.1.15 with: body_path: "body.md" tag_name: ${{ steps.cz-bump.outputs.revision }} call-release: name: Trigger a Release needs: [bump-version] if: needs.bump-version.outputs.bumped == 'true' uses: ./.github/workflows/release.yml with: revision: ${{ needs.bump-version.outputs.revision }} secrets: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} mark-status-checks: name: Mark required status checks as succeeded needs: [bump-version] runs-on: ubuntu-latest if: needs.bump-version.outputs.bumped == 'true' steps: - shell: sh run: | REPO="${{ github.repository }}" SHA="${{ needs.bump-version.outputs.sha }}" printf '%s' "${{ vars.REQUIRED_CHECK_CONTEXTS }}" | \ while IFS="" read -r CONTEXT; do # Mark each check as succeeded gh api "/repos/$REPO/statuses/$SHA" \ --method POST \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28" \ --field state=success \ --field description='Skipped for version bump commit' \ --raw-field context="$CONTEXT" done env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} call-sync-branches: name: Trigger merge needs: [bump-version, mark-status-checks] if: needs.bump-version.outputs.bumped == 'true' uses: ./.github/workflows/sync_branches.yml with: sha: ${{ needs.bump-version.outputs.sha }} rocm-docs-core-1.21.1/.github/workflows/yaml_merger.py000066400000000000000000000111561502657046300226760ustar00rootroot00000000000000import yaml from typing import List, Dict, Any import sys class ListFlowStyleRepresenter: """ Custom representer to force specific flow style for nested lists """ def __init__(self): self.add_representer() def represent_list(self, dumper, data): # Check if this is a nested list containing strings/patterns if data and isinstance(data[0], str): return dumper.represent_sequence('tag:yaml.org,2002:seq', data, flow_style=True) return dumper.represent_sequence('tag:yaml.org,2002:seq', data, flow_style=False) def add_representer(self): yaml.add_representer(list, self.represent_list) def load_yaml(file_path: str) -> Any: """ Load YAML file with error handling. """ try: with open(file_path, 'r', encoding='utf-8') as f: return yaml.safe_load(f) except yaml.scanner.ScannerError as e: print(f"\nYAML Syntax Error in {file_path}:") print(f"Line {e.problem_mark.line + 1}, Column {e.problem_mark.column + 1}") print(f"Error: {e.problem}") return None except Exception as e: print(f"\nError loading {file_path}:") print(str(e)) return None def merge_matrix_entries(default_entries: List[Dict], user_entries: List[Dict]) -> List[Dict]: """ Merge matrix entries, combining sources only for entries with matching names. - Skip merging if the 'sources' list in the user entries is empty. - If the main configuration has an empty 'sources' list, replace it with the user's list. """ result = default_entries.copy() default_map = {entry.get('name'): entry for entry in result} for user_entry in user_entries: user_name = user_entry.get('name') if user_name and user_name in default_map: if 'sources' in user_entry: user_sources = user_entry['sources'] # Skip merging if user sources are empty if not user_sources or all(not source for source in user_sources): continue # Check the main configuration's sources default_sources = default_map[user_name].get('sources', []) # If the main config's sources are empty, replace them if not default_sources or all(not source for source in default_sources): default_map[user_name]['sources'] = user_sources else: # Otherwise, merge the lists default_map[user_name]['sources'].extend(user_sources) return result def merge_configs(default: Any, user: Any) -> Any: """ Recursively merge two configurations. """ if user is None: return default if isinstance(default, dict) and isinstance(user, dict): result = default.copy() for key, value in user.items(): if key in result: result[key] = merge_configs(result[key], value) else: result[key] = value return result if isinstance(default, list) and isinstance(user, list): if (len(default) > 0 and isinstance(default[0], dict) and 'name' in default[0] and 'sources' in default[0]): return merge_matrix_entries(default, user) return default + user return user def save_yaml(data: Dict, file_path: str) -> bool: """ Save YAML file with custom formatting. """ try: # Initialize custom representer ListFlowStyleRepresenter() with open(file_path, 'w', encoding='utf-8') as f: yaml.dump(data, f, default_flow_style=False, sort_keys=False, allow_unicode=True) return True except Exception as e: print(f"\nError saving {file_path}:") print(str(e)) return False if __name__ == '__main__': import argparse parser = argparse.ArgumentParser(description='Merge spellcheck YAML configurations') parser.add_argument('template', help='Path to template YAML configuration') parser.add_argument('local', help='Path to local YAML configuration') parser.add_argument('output', help='Path to save merged configuration') args = parser.parse_args() # Load configurations template_config = load_yaml(args.template) if template_config is None: sys.exit(1) local_config = load_yaml(args.local) if local_config is None: sys.exit(1) # Merge configurations merged_config = merge_configs(template_config, local_config) # Save merged configuration if not save_yaml(merged_config, args.output): sys.exit(1) print(f"\nSuccessfully merged configurations into {args.output}") rocm-docs-core-1.21.1/.gitignore000066400000000000000000000001431502657046300164060ustar00rootroot00000000000000/.mypy_cache /.ruff_cache /.venv **/__pycache__/**/* **/*.egg-info/**/* .sass-cache/* /build /dist rocm-docs-core-1.21.1/.gitpod.yml000066400000000000000000000003751502657046300165140ustar00rootroot00000000000000image: file: .devcontainer/Dockerfile tasks: - name: Create development environment init: just devenv docs vscode: extensions: - ms-python.black-formatter - ms-python.python - ritwickdey.LiveServer - tamasfe.even-better-toml rocm-docs-core-1.21.1/.markdownlint-cli2.yaml000066400000000000000000000001411502657046300207160ustar00rootroot00000000000000ignores: - CHANGELOG.md - "{,docs/}{RELEASE,release}.md" - tools/autotag/templates/**/*.md rocm-docs-core-1.21.1/.markdownlint.yaml000066400000000000000000000002251502657046300200720ustar00rootroot00000000000000default: true MD013: false MD024: siblings_only: true MD026: punctuation: ".,;:!" MD029: style: ordered MD033: false MD034: false MD041: false rocm-docs-core-1.21.1/.pre-commit-config.yaml000066400000000000000000000026451502657046300207100ustar00rootroot00000000000000default_language_version: python: python3.10 default_install_hook_types: [pre-commit, commit-msg] default_stages: [commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: check-yaml - id: check-json - id: check-toml - id: end-of-file-fixer - id: file-contents-sorter files: '^.wordlist.txt$' args: [--unique] - id: trailing-whitespace args: [--markdown-linebreak-ext=md] - repo: local hooks: - id: mypy name: mypy entry: just mypy types_or: [python, pyi] language: system exclude: ^docs/|^tests/(sites|templates) - id: ruff name: ruff entry: just ruff types_or: [python, pyi] language: system exclude: ^docs/|^tests/(sites|templates) require_serial: true - id: isort name: isort entry: just isort types_or: [python, pyi] language: system - id: format name: format entry: just format types_or: [python, pyi] language: system - id: commitizen name: commitizen entry: just _check-commit-mesg stages: [commit-msg] language: system - id: pip-compile name: pip-compile entry: just lock-deps files: ^pyproject.toml|requirements.txt$ pass_filenames: false language: system rocm-docs-core-1.21.1/.readthedocs.yaml000066400000000000000000000007261502657046300176540ustar00rootroot00000000000000# Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details version: 2 sphinx: configuration: docs/conf.py formats: [htmlzip, pdf, epub] python: install: - method: pip path: . extra_requirements: - "api_reference" - requirements: requirements.txt build: os: ubuntu-22.04 tools: python: "3.10" apt_packages: - "doxygen" - "graphviz" # For dot graphs in doxygen rocm-docs-core-1.21.1/.spellcheck.local.yaml000066400000000000000000000001501502657046300205640ustar00rootroot00000000000000matrix: - name: Markdown sources: - [] - name: reST sources: - [] - name: Cpp sources: - [] rocm-docs-core-1.21.1/.spellcheck.yaml000066400000000000000000000147331502657046300175070ustar00rootroot00000000000000# BSD 3-Clause License # # Copyright (c) 2017-2022, Pytorch contributors # All rights reserved. # Modifications Copyright (c) 2023, Advanced Micro Devices, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # * Neither the name of the copyright holder nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. matrix: - name: Markdown sources: - ['docs/**/*.md'] expect_match: false aspell: lang: en dictionary: wordlists: - .wordlist.txt pipeline: - pyspelling.filters.context: context_visible_first: true delimiters: # Manual disabling via: #spellcheck-disable - open : '^ *$' content: '[\s\S]*?' close: '^ *$' # Ignore URLs in [text](URL) - open : '\[[^]]*?]\(' content: '[^)]*?' close: '\)' # Ignore out-of-line URL references in [text][reference-name] - open : '\[[^\]]*?\]\[' content: '[^\]]*?' close: '\]' # Ignore out-of-line URL definitions - open : '^ {0,3}\[[^\]]*?\]:\s*\S+' close: '$' # Ignore URLs in - open : '\<' content: '[^]]*?' close: '\>' # Ignore text in backtick code blocks. - open : '(?s)^(?P *`{3,})[^\n]*$' close: '^(?P=open)$' # Ignore text between inline back ticks - open : '(?P`+)' content: '[^\n]+' close: '(?P=open)' # Ignore block classes and extra in :::{class} extra - open : '^ *:{3,}' content: '[^\n]+' close: '' # Ignore keys in :property: key - open : '^ *:[^\n:]*: +' content: '[^\n]+' close: '$' # Ignore properties in :property: - open : '^ *:' close: ':' # Ignore tag in (tag)= - open : '(' content: '[^\n]+' close: ')=$' - pyspelling.filters.url: - name: reST sources: - ['docs/**/*.rst'] expect_match: false aspell: lang: en dictionary: wordlists: - .wordlist.txt pipeline: - pyspelling.filters.text: - pyspelling.filters.context: context_visible_first: true delimiters: # Ignore possessive endings - open: '(?<=\w)''s(?!\w)' close: '\b' # Ignore text between inline back ticks - open: '(div style|iframe).*' close: '\n' - open: '(- )?(?P`+)' close: '(?P=open)' # Ignore reStructuredText roles - open: ':(?:(class|file|func|math|ref|octicon|meth|obj)):`' content: '[^`]*' close: '`' - open: ':width:' close: '$' # Exclude raw directive - open: '\.\. (raw|grid-item-card|galleryitem|includenodoc)::.*$\n*' close: '\n' # Ignore reStructuredText literals - open: '::$' close: '(?P(?:((?P[ ]+).*$)|(\n))+)' # Ignore reStructuredText hyperlinks - open: '\s' content: '\w*' close: '_' # Ignore reStructuredText header --- - open: '^' content: '--*' close: '$' # Ignore reStructuredText header ''' - open: '^' content: '''''*' close: '$' # Ignore reStructuredText block directives - open: '\.\. (code-block|math|csv-table)::.*$\n*' content: '(?P(^(?P[ ]+).*$\n))(?P(^([ \t]+.*|[ \t]*)$\n)*)' close: '(^(?![ \t]+.*$))' - open: '\.\. (raw)::.*$\n*' close: '^\s*$' # Ignore reStructuredText substitution definitions - open: '^\.\. \|[^|]+\|' close: '$' # Ignore reStructuredText substitutions - open: '\|' content: '[^|]*' close: '\|_?' # Ignore reStructuredText toctree - open: '\.\.\s+toctree::' close: '(?P(?:((?P[ ]+).*$)|(\n))+)' # Ignore directives - open: '\.\.\s+(figure|image|include|only|tabularcolumns|datatemplate:nodata)::' close: '$' # Ignore reStructuredText reference - open: '^.{2}[ ]+_' close: '$' # Ignore doxygen directives - open: '\.\. (autodoxygenindex|doxygenfunction|doxygenstruct|doxygenclass|doxygennamespace|doxygenconcept|doxygenenum|doxygenenumvalue|doxygentypedef|doxygenunion|doxygendefine|doxygenvariable|doxygenfile|doxygengroup|autodoxygenfile|doxygenpage)::.*$\n*' content: '(?P(^(?P[ ]+).*$\n))(?P(^([ \t]+.*|[ \t]*)$\n)*)' close: '(^(?![ \t]+.*$))' # Ignore doxygen one line directives - open: '\.\. (autodoxygenindex|doxygenfunction|doxygenstruct|doxygenclass|doxygennamespace|doxygenconcept|doxygenenum|doxygenenumvalue|doxygentypedef|doxygenunion|doxygendefine|doxygenvariable|doxygenfile|doxygengroup|autodoxygenfile|doxygenpage)::' content: '[ \S]*' close: '\n' # Manual disabling via: #spellcheck-disable - open : '^.. $' content: '[\s\S]*?' close: '^.. $' - pyspelling.filters.url: - name: Cpp # The sources below are simply a placeholder as it cannot be empty sources: - ['docs/**/*.cpp', 'doc/**/*.hpp'] expect_match: false aspell: lang: en pipeline: - pyspelling.filters.cpp: block_comments: false line_comments: false rocm-docs-core-1.21.1/.vscode/000077500000000000000000000000001502657046300157615ustar00rootroot00000000000000rocm-docs-core-1.21.1/.vscode/settings.json000066400000000000000000000010121502657046300205060ustar00rootroot00000000000000{ "liveServer.settings.root": "docs/_build/html", "liveServer.settings.wait": 1000, "python.terminal.activateEnvInCurrentTerminal": true, "[python]": { "editor.defaultFormatter": "ms-python.black-formatter" }, "black-formatter.args": [ "--config", "pyproject.toml" ], "editor.rulers": [ 80 ], "python.testing.pytestArgs": [ "src", "tests" ], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true } rocm-docs-core-1.21.1/.vscode/tasks.json000066400000000000000000000016311502657046300200020ustar00rootroot00000000000000{ "version": "2.0.0", "tasks": [ { "label": "Build Docs", "type": "process", "command": "just", "args": [ "docs" ], "problemMatcher": [ { "owner": "sphinx", "fileLocation": "absolute", "pattern": { "regexp": "^(?:.*\\.{3}\\s+)?(\\/[^:]*|[a-zA-Z]:\\\\[^:]*):(\\d+):\\s+(WARNING|ERROR):\\s+(.*)$", "file": 1, "line": 2, "severity": 3, "message": 4 } }, { "owner": "sphinx", "fileLocation": "absolute", "pattern": { "regexp": "^(?:.*\\.{3}\\s+)?(\\/[^:]*|[a-zA-Z]:\\\\[^:]*):{1,2}\\s+(WARNING|ERROR):\\s+(.*)$", "file": 1, "severity": 2, "message": 3 } } ], "group": { "kind": "build", "isDefault": true } } ] } rocm-docs-core-1.21.1/.wordlist.txt000066400000000000000000000130301502657046300171030ustar00rootroot00000000000000AAC ABI ALU AMD AMDGPU AMDGPUs AMDMIGraphX AMI AOCC AOMP APIC APIs ASIC ASICs ASan ASm ATI AWQ AdaLoRA AddressSanitizer AlexNet Arb AutoAWQ AutoGPTQ BLAS BMC BitCode Blit Bluefield CCD CDNA CIFAR CLI CLion CMake CMakeLists CMakePackage CP CPC CPF CPP CPU CPUs CSC CSE CSV CSn CTests CU CUDA CUs CXX Cavium CentOS ChatGPT CoRR Codespaces Commitizen CommonMark Concretized Conda ConnectX DDP DGEMM DKMS DL DLM DMA DNN DNNL DPM DRI DW DWORD Dask DataFrame DataLoader DataParallel DeepSpeed Dependabot DevCap Diffusers Dockerfile Dockerfiles Doxygen ELMo ENDPGM EPEL EPYC ESXi EU ExLlama FFT FFTs FFmpeg FHS FMA FP FSDP Filesystem Flang Fortran Fuyu GALB GCD GCDs GCN GDB GDDR GDR GDS GEMM GEMMs GFortran GIM GL GLXT GMI GPG GPR GPT GPTQ GPU GPU's GPUs GQA GRBM GenAI GenZ GitHub Gitpod HBM HCA HIPCC HIPExtension HIPIFY HPC HPCG HPE HPL HSA HWE Haswell Higgs Hyperparameters ICV IDE IDEs IMDb IOMMU IOP IOPM IOV IRQ ISA ISV ISVs ImageNet InfiniBand Inlines IntelliSense Intersphinx Intra Ioffe JAX JIT JSON Jupyter KFD KVM Keras Khronos Kubernetes LAPACK LCLK LDS LLM LLMs LLVM LM LSAN LSTM LTS LinearReLU LoRA MEM MERCHANTABILITY MFMA MHA MIGraphX MIOpen MIOpenGEMM MIVisionX MLIR MLM MLP MMA MMIO MMIOH MNIST MPI MQA MSVC MVAPICH MVFFR Makefile Makefiles Matplotlib Megatron Mellanox Mellanox's Meta's MirroredStrategy MoE Multicore Multithreaded MyEnvironment MyST NBIO NBIOs NHWC NIC NICs NLI NLP NPS NSP NUMA NVCC NVIDIA NVPTX Nano Navi Noncoherently NousResearch's NumPy OAM OAMs OCP OEM OFED OMP OMPI OMPT OMPX ONNX OSS OSU Omniperf Omnitrace OpenAI OpenCL OpenCV OpenFabrics OpenGL OpenMP OpenSSL OpenVX PCI PCIe PEFT PIL PILImage PPO PRNG PRs PaLM Pageable PeerDirect Perfetto PipelineParallel PnP PowerShell PyPi PyTorch QLoRA Qcycles RAII RCCL RDC RDMA RDNA RHEL RNN ROC ROCProfiler ROCTracer ROCclr ROCdbgapi ROCgdb ROCk ROCm ROCmCC ROCmSoftwarePlatform ROCmValidationSuite ROCr RPC RST RW Radeon ReLU RelWithDebInfo Req Rickle RoCE Roofline Ryzen SALU SBIOS SCA SDK SDMA SDRAM SENDMSG SFT SGPR SGPRs SHA SIGQUIT SIMD SIMDs SKU SKUs SLES SMEM SMI SMT SPI SQs SRAM SRAMECC SVD SWE SciPy SerDes Shlens Skylake SmoothQuant Softmax Spack StarCoder Supermicro Szegedy TCA TCC TCI TCIU TCP TCR TFLOPS TGI TPOT TPU TPUs TRL TTFT TTGIR TTIR Templated TensorBoard TensorFlow TensorParallel ToC TorchAudio TorchInductor TorchMIGraphX TorchScript TorchServe TorchVision TransferBench TrapStatus Tunable TunableOp UAC UC UCC UCX UIF URI USM UTCL UTIL Uncached Unhandled VALU VBIOS VGPR VGPRs VGPU VM VMEM VMWare VRAM VSIX VSkipped Vanhoucke Vulkan WGP WX WikiText Wojna Workgroups Writebacks XDL XGBoost XGBoost's XGMI XLA XT XTX Xeon Xilinx Xnack Xteam YAML YML YModel ZeRO ZenDNN accuracies activations addr alloc allocator allocators amdgpu api atmi atomics autogenerated autoregression autoregressive avx awk backend backends backpropagation backtick benchmarking bilinear bitsandbytes blit boson bosons buildable bursty bzip cacheable cd centos centric changelog chiplet ckProfiler cmake cmd coalescable codebase codebases codename collater comgr completers composability composable concretization config conformant convolutional convolves cpp csn cuBLAS cuFFT cuLIB cuRAND cuSOLVER cuSPARSE customizations dataset dataset's datasets dataspace datatype datatypes dbgapi de deallocation denoise denoised denoises denormalize deserializers detections dev devicelibs devsel dimensionality disambiguates distro doxysphinx dropdown el embeddings enablement endpgm env epilog etcetera ethernet exascale executables ffmpeg filesystem fortran galb gcc gdb gfortran gfx githooks github gnupg grayscale gzip heterogenous hipBLAS hipBLASLt hipCUB hipFFT hipLIB hipRAND hipSOLVER hipSPARSE hipSPARSELt hipTensor hipamd hipblas hipcub hipfft hipfort hipify hipsolver hipsparse hpp hsa hsakmt html hyperparameter ib_core inband incrementing inferencing inflight init initializer inlining installable instantiation interprocedural intersphinx intra invariants invocating invoker ipo kdb libfabric libjpeg libs linearized linter linux llvm localscratch logits lossy macOS matchers microarchitecture migraphx miopen miopengemm mivisionx mkdir mlirmiopen mtypes mvffr myst namespace namespaces natively numref ocl opencl opencv openmp openssl optimizers os pageable parallelization parallelize parameterization passthrough perfcounter performant perl pragma pre prebuilt precisions precompiled prefetch prefetchable preprocess preprocessed preprocessing prequantized prerequisites profiler protobuf pseudorandom py quantized quantizing quasirandom queueing rccl rdc reStructuredText reformats repos representativeness req resampling rescaling reusability roadmap roc rocAL rocALUTION rocBLAS rocFFT rocLIB rocMLIR rocPRIM rocRAND rocSOLVER rocSPARSE rocThrust rocWMMA rocalution rocblas rocclr rocfft rocm rocminfo rocprim rocprof rocprofiler rocr rocrand rocsolver rocsparse rocthrust roctracer runtime runtimes sL scalability scalable sendmsg serializers shader sharded sharding sigmoid sm smi softmax spack src stochastically strided struct subdirectories subdirectory subexpression subfolder subfolders suboptimal supercomputing templated th tokenization tokenize tokenized tokenizer tokenizes toolchain toolchains toolset toolsets torchtune torchvision tqdm tracebacks tunable tunings txt uarch unallocated uncached uncorrectable uninstallation unsqueeze unstacking unswitching untrusted untuned upstreamed upvote utils vL vLLM variational vdi vectorizable vectorization vectorize vectorized vectorizer vectorizes vjxb walkthrough walkthroughs wavefront wavefronts whitespaces workgroup workgroups writeback writebacks wrreq wzo xFormers xargs xz yaml ysvmadyb zyppe rocm-docs-core-1.21.1/CHANGELOG.md000066400000000000000000000543161502657046300162420ustar00rootroot00000000000000## v1.21.1 (2025-06-24) ### Fix - add missing theme name to supported_flavors list ## v1.21.0 (2025-06-23) ### Feat - Add rocm-ls project - correct project name - Add hipcim and rocm-ls theme ## v1.20.1 (2025-06-09) ### Fix - Pin pydata-sphinx-theme ver to fix sidebar ## v1.20.0 (2025-05-30) ### Feat - **projects.yaml**: Add new component rocm-compute-viewer to projects.yaml ## v1.19.1 (2025-05-29) ### Fix - repo publication approved; revert back menu items ## v1.19.0 (2025-05-26) ### Feat - **projects.yaml**: Add new ROCm-DS components and rocSHMEM to projects.yaml ### Fix - Update LICENSE.txt ## v1.18.4 (2025-05-02) ### Fix - remove header tab 'github', 'support' and 'community' due to private status of the repo ## v1.18.3 (2025-05-02) ### Fix - add a hardcoded change that updates ROCm-DS header version, will implement a more robust solution after EA ## v1.18.2 (2025-04-02) ### Fix - change label from 'Statement on Forced Labor' to 'Supply Chain Transparency' for consistency with amd.com - fix a broken link in the footer ## v1.18.1 (2025-03-12) ### Fix - rename header ## v1.18.0 (2025-03-12) ### Feat - add ai-developer-hub flavor ### Fix - fix linting - fix typo - remove -docs suffix for consistency ## v1.17.1 (2025-03-03) ### Fix - prevent rocm-ds using rocm latest version - add version_list() definition ## v1.17.0 (2025-02-19) ### Feat - add rocm-ds to project list - add rocm-ds flavor ### Fix - unify rocm docs menu item ## v1.16.0 (2025-02-11) ### Feat - add custom javascript to trigger RTD new search interface - migrate js files from rtd - add javascript function to trigger search model ### Fix - remove unnecessary js files ### Refactor - **article_info.py**: Count words with regex - **article_info.py**: Change findAll to find_all for bs4 4.13.0 ## v1.15.0 (2025-01-29) ### Feat - add rocm develop hub to instinct flavor - add AI developer Hub link to header. ### Fix - captalize 'D' from 'developer' ## v1.14.1 (2025-01-21) ### Fix - replace myst-parser with myst-nb for notebook support ## v1.14.0 (2025-01-21) ### Feat - add new project gpuaidev to projects.yaml ### Fix - Update .wordlist.txt to include Kubernetes - update copyright year to 2025 in docs and tests - **footer.html**: update copyright year to 2025 ## v1.13.0 (2025-01-06) ### Feat - Update new url for Instinct docs ## v1.12.1 (2025-01-02) ### Fix - scale down z-axis of multiple elements to preent covering flyout - reducing sidebar z-index - Replace copy_from_package with shutil.copytree ## v1.12.0 (2024-12-16) ### Feat - Instinct documentation link in ROCm docs ## v1.11.0 (2024-12-05) ### Feat - **projects.yaml**: Add tensile to intersphinx mapping ### Fix - **article_info.py**: Remove svg if article info is empty - **core.py**: Apply os list for article info fix for all article info option - **article-info.html**: Only add apply to string if os list is not empty ### Refactor - **article_info.py**: Apply mypy type check suggestions - **article-info.html**: Add custom class to span with svgs in article info - **core.py**: Split out article info logic into article_info.py - Remove default author - Modify markers in article-info.html - **core.py**: Set default OS and date to empty - **core.py**: Join article os info from list - **core.py**: Set default article info os using all_article_info_os if not present ## v1.10.0 (2024-11-29) ### Feat - Added Instinct flavor ## v1.9.2 (2024-11-28) ### Fix - add "generic" to supported_flavors list ## v1.9.1 (2024-11-27) ### Fix - add User-Agent headers to github request ## v1.9.0 (2024-11-22) ### Feat - add generic theme flavor - **projects.yaml**: add rocprof-sys, rocprof-comp, and rocJPEG ## v1.8.5 (2024-11-18) ### Fix - reformat to pass 'black' linting check - remove unnecessary space - delete space - add a check for MAX_RETRY ## v1.8.4 (2024-11-15) ### Fix - resort import statements - separate import time from other import statements as time is standard python library but others are third party - sort import statement - add retry loop around http request - **header.jinja**: Replace http with https in repo URL ## v1.8.3 (2024-10-18) ### Fix - **projects.yaml**: Update omniperf and omnitrace dev branch ## v1.8.2 (2024-09-24) ### Fix - **theme.py**: Update path to favicon ## v1.8.1 (2024-09-17) ### Fix - **projects.yaml**: Remove non-doc cross refs ## v1.8.0 (2024-09-16) ### Feat - **custom.css**: Use light blue text for banner hyperlinks ### Fix - **theme.py**: Fix phrasing of banner for old doc versions ## v1.7.2 (2024-08-21) ### Fix - **projects.py**: Update pattern matching for old release announcement ## v1.7.1 (2024-08-19) ### Fix - crop image from left side - make cards brighter - adjust padding back to 1 - change card font to san-serif and adjust padding - change bg image to default one from ROCm/ROCm ## v1.7.0 (2024-08-14) ### Feat - Add css classes for card banners ### Fix - **projects.yaml**: Update doc dev branch for HIP to docs/develop ## v1.6.2 (2024-08-06) ### Fix - **projects.yaml**: Update development branches for projects ### Refactor - **Doxyfile**: Remove unused tags from Doxyfile - **doxygen.py**: Fix warning for progress_message ## v1.6.1 (2024-07-25) ### Fix - **project.yaml**: rocDecode and rocAL default to develop branch now ### Refactor - Remove unused import - Remove unused test code - Remove SphinxTestApp - Removed deprecated code - **test_projects.py**: Format with black - Update conf.py for site tests - **test_doxygen.py**: Fix typo in doxygen dir ## v1.6.0 (2024-07-24) ### Feat - **projects**: Add intersphinx links to github and files ### Refactor - Set github version ## v1.5.1 (2024-07-23) ### Fix - Update rocPyDecode link - **projects.yaml**: Add llvm-project and rocpydecode ## v1.5.0 (2024-07-04) ### Feat - **projects.yaml**: Add omniperf and omnitrace ## v1.4.1 (2024-06-27) ### Fix - **header.jinja**: Make GitHub repo url for install docs point to install docs instead of ROCm home ### Refactor - **core.py**: Apply ruff suggested fix - **core.py**: Apply ruff suggested fix ## v1.4.0 (2024-06-06) ### Feat - Add google site verification content to theme context - Add template for google site verification content ### Refactor - Get versions from data branch instead of header-versions branch ## v1.3.0 (2024-06-04) ### Feat - **projects.yaml**: Add rocprofiler-sdk to projects - **projects.yaml**: add rocminfo and rocm_bandwidth_test to projects list ## v1.2.1 (2024-06-03) ### Fix - **custom.css**: Change line color at dark mode of multiline list ## v1.2.0 (2024-05-27) ### Feat - **projects.yaml**: Add rocr_debug_agent to projects.yaml ## v1.1.3 (2024-05-22) ### Fix - Get header version from URL instead of theme.conf ### Refactor - **projects.py**: Use ROCm org when checking versions for banner - **theme.py**: Point to ROCm org instead of RadeonOpenCompute for rocm-docs-core ## v1.1.2 (2024-05-16) ### Fix - **projects.yaml**: add rocr-runtime - **custom.css**: add bottom margin to images in rst files - **404.html**: Remove relative link in 404.html page ## v1.1.1 (2024-04-26) ### Fix - **core.py**: Update Sphinx API call to doc2path ### Refactor - **core.py**: Format core.py with black - Address mypy type warnings ## v1.1.0 (2024-04-24) ### Feat - **theme.conf**: Update header latest version ### Fix - **footer.html**: Bump year to 2024 in footer ### Refactor - Correct major version for breaking change ## v1.0.0 (2024-04-17) ### BREAKING CHANGE - This requires updating `.readthedocs.yaml` (`tools.python`) and re-generating `requirements.txt` for all dependent projects. ### Feat - **theme.py**: Update banner announcement about docs.amd.com redirect ### Fix - **layout.html**: Update google-site-verification metadata - **header.jinja**: Update link to infinity hub - Update rocm flavor header.jinja to Blogs - **header.jinja**: Replace Lab Notes link with Blogs ### Refactor - Fix mypy and isort errors - Apply black formatting - fixes for isort - fixes for isort - fixes for isort - mypy fixes - isort fixes - Ruff fixes - Fixes for ruff - **projects.py**: Ignore mypy limitation for dynamic type checking - **theme.py**: Modify new banner announcement message for latest - Use type instead of instanceof - Fix type hints and assertions to pass Python linting ## v0.38.1 (2024-04-10) ### Fix - **extra_stylesheet.css**: Fix flexbox positioning for doxygen content ### Refactor - Specify left instead of flex-end ## v0.38.0 (2024-03-26) ### Feat - **theme.conf**: Update latest version for header ## v0.37.1 (2024-03-21) ### Fix - **theme.conf**: Create point fix for 6.0.2 ## v0.37.0 (2024-03-19) ### Feat - **theme.py**: Remove banner on latest release ## v0.36.0 (2024-03-11) ### Feat - **theme.conf**: Update latest header version ## v0.35.1 (2024-03-05) ### Fix - **footer.jinja**: Fix license link for rocm flavor - **header.jinja**: Update link to infinity hub ## v0.35.0 (2024-02-22) ### Feat - **theme.py**: Update banner announcement about docs.amd.com redirect ### Fix - Update rocm flavor header.jinja to Blogs - **header.jinja**: Replace Lab Notes link with Blogs ### Refactor - **theme.py**: Modify new banner announcement message for latest ## v0.34.2 (2024-02-15) ### Fix - **left-side-menu.jinja**: Fix main doc link for rocm flavor left side menu ## v0.34.1 (2024-02-15) ### Fix - Update left side menu ## v0.34.0 (2024-02-08) ### Feat - **core.py**: Add html_image myst extension - **core.py**: Enable dollarmath myst extension for inline latex math ## v0.33.2 (2024-02-06) ### Fix - **left-side-menu.jinja**: Set main doc link for blogs flavor ## v0.33.1 (2024-02-05) ### Fix - remove old folder - Revert "fix: remove toc" - remove toc - remove duplicates - merge conflicts - **header.html**: Import version_list macro from header.jinja into header.html - Change rocm-blogs flavor top level header to ROCm Blogs - Change rocm-blogs second level header Lab Notes to ROCm Docs - Remove version list from rocm-blogs header ## v0.33.0 (2024-01-26) ### Feat - **theme.py**: Add rocm-blogs to lsit of supported flavors - Add ROCm blogs flavor ### Fix - **header.jinja**: New statement block for setting custom repo url ### Refactor - **rocm-blogs/footer.jinja**: Refactor to pass Python linting ## v0.32.0 (2024-01-26) ### Feat - **theme.conf**: Update header latest version ## v0.31.0 (2024-01-12) ### Feat - **theme.conf**: Update header latest version - Read versions for theme header from link instead of setting in theme.conf - **projects.py**: Read header versions from link instead of hard-coding ### Fix - Remove carriage return and newline when checking versions - sync wordlist - **header.jinja**: Fix support link in header for rocm-docs-core ### Refactor - **theme.conf**: Add back header options to theme.conf to pass RTD PR build - Use requests instead of urllib3 - **theme.py**: Set html_context in default_config_opts rather than theme_opts ## v0.30.3 (2023-12-20) ### Fix - **dependabot.yml**: Change dependabot config ## v0.30.2 (2023-12-15) ### Fix - adding linux and windows site fixes ## v0.30.1 (2023-12-06) ### Fix - **flavors**: Fix the rocm-docs-home flavor ### Refactor - Don't add a subproject link as its own project in projects.yaml - Rename rocm-api-tools-list theme to rocm-docs-home ## v0.30.0 (2023-11-29) ### Feat - Updating our links for installation subprojects ### Fix - **theme.py**: Add list flavor to list of supported flavors ### Refactor - Rename list theme to rocm-api-tools-list ## v0.29.0 (2023-11-24) ### Feat - **projects.yaml**: Add linux install guide to projects.yaml - Add new flavor - list theme - Add all versions link to header - Header name change to AMD ROCm Software - **projects.yaml**: Add rocDecode to projects ## v0.28.0 (2023-11-16) ### Feat - **doxygen.py**: Enable doxygen extended toc with forked doxysphinx ## v0.27.0 (2023-11-02) ### Feat - **projects.yaml**: Add hip-vs - **doxygen.py**: automatic setup of doxylink - Update latest ROCm version in projects.py and theme.conf - **doxygen,projects**: Make doxygen tagfile available - **projects.py**: Allow to fetch project indices explicitly ### Fix - **projects**: always resolve project references in TOC and templates - **util.py**: Modify RTD regex to allow for .org sites - **theme.py**: Partially handle not being in a git repository - **doxygen.py**: Pass doxygen executable to doxysphinx ### Refactor - **tests**: Move project tests to separate file ## v0.26.0 (2023-10-12) ### Feat - Set latest version to 5.7.1 ### Fix - Reduce footer padding https://github.com/RadeonOpenCompute/rocm-docs-core/issues/394 - Increase z-index of content sidebar https://github.com/RadeonOpenCompute/rocm-docs-core/issues/396 ## v0.25.0 (2023-10-03) ### Feat - **projects.yaml**: add radeon ## v0.24.2 (2023-09-20) ### Fix - **util.py**: Copy files relative to the source directory - **doxygen.py**: Only continue if existing file is directory ### Refactor - **theme.py**: Simplify 404 document handling ## v0.24.1 (2023-09-13) ### Fix - **header.jinja**: only modify theme_repository_url if it ends with -docs ## v0.24.0 (2023-09-07) ### Feat - **theme.conf**: update header version ## v0.23.0 (2023-09-05) ### Feat - copy common 404.md source file to projects ### Refactor - **theme.py**: copy theme util pages on builder init ## v0.22.1 (2023-09-05) ### Fix - **projects.yaml**: add hipsparselt to projects yaml ## v0.22.0 (2023-08-31) ### Feat - **projects.yaml**: add hiptensor to projects.yaml ### Fix - **projects.yaml**: Add ROCmCMakeBuildTools to projects.yaml ## v0.21.0 (2023-08-29) ### Feat - update latest version to 5.6.1 ### Fix - **projects.yaml**: add dev branch for rvs and rocal ## v0.20.0 (2023-07-28) ### Feat - Add config option to specify doxygen exe - Add reusable md rst linting - Turn linting workflow into reusable ### Fix - **core.py**: fix setting up the base url for the 404 page - one-off indentation - config handling style - MD032 - MD031 - add missing mdlint config file ## v0.19.0 (2023-07-11) ### Feat - Add "local" flavor for providing the flavor in the project - Add support for theme "flavors" ### Refactor - **projects.py,theme.py**: Decouple announcement strings from projects.py - **projects.py**: Don't read projects.yaml again for release announcement - **projects.py**: replace uses of _load_mapping with _create_mapping - **projects.py**: Make Project creation more explicit ## v0.18.4 (2023-07-05) ### Fix - **projects.yaml**: add rpp to projects.yaml ## v0.18.3 (2023-06-29) ### Fix - **projects.yaml**: add more projects to yaml - **projects.py**: use development_branch string instead of variable ## v0.18.2 (2023-06-28) ### Fix - update latest version to 5.6.0 ## v0.18.1 (2023-06-27) ### Fix - **projects.py**: do not have an announcement stating the latest version ### Refactor - **header.html**: revert flyout to default position for consistency ## v0.18.0 (2023-06-27) ### Feat - add extrahead block with metadata in layout.html ### Fix - update announcement for RC of ROCm - map rocm version in projects.yaml to header.html version number ### Refactor - use theme.conf for header version numbers - place rocm latest version in projects.yaml ## v0.17.2 (2023-06-27) ### Fix - hardcode the url for ROCm docs ### Refactor - **util.py**: formatting fix for ruff; return result of regex on remote_url ## v0.17.1 (2023-06-26) ### Fix - **projects.py**: use formatted string for doc latest url ## v0.17.0 (2023-06-26) ### Feat - add announcement for unreleased and old branches ### Fix - **header.html**: remove "docs-" from theme repo branch in header - update banner ### Refactor - formatting fixes for ruff linting - **header.html**: test rtd embed flyout div - **theme.py**: remove unnecessary open mode param UP015 for ruff - remove trailing whitespaces - refactor theme announcement logic - move banner logic to projects.py - include latest version url in announcement if not on latest ## v0.16.0 (2023-06-22) ### Feat - Updating announcement banner ## v0.15.0 (2023-06-20) ### Feat - **projects**: expose project urls to html templates ### Fix - **projects.yaml**: remove hardcoding of rocm to develop ## v0.14.0 (2023-06-16) ### Feat - **header.html**: write to header in italics if future release or release candidate - **header.html**: include the version number in the top level header if the branch contains it - **rdcMisc.js**: toggle light/dark mode caption when changing themes ### Refactor - **header.html**: make the added part in italics for top level header - **_toc.yml.in**: correct toc typo - move theme mode captions to separate js file - **rdcMisc.js**: use 4 spaces for tabs in rdcMisc ## v0.13.4 (2023-06-07) ### Fix - **__init__.py**: stop searching CMakeLists.txt for version string ## v0.13.3 (2023-06-01) ### Fix - New email address ## v0.13.2 (2023-05-31) ### Fix - **custom.css**: force navbar text to left align - Fix footer interaction with flyout nav - CSS fixes around announcement banner ## v0.13.1 (2023-05-29) ### Refactor - **doxygen.py**: remove extra print statement when copying over doxygen styling files - **left-side-menu**: rename main doc link to ROCm Documentation Home ## v0.13.0 (2023-05-27) ### Feat - **left-side-menu.html**: dynamically change homepage link for develop branch - add link to ROCm docs home to top of TOC ### Fix - **header.html**: fix link to amd.com ### Refactor - include master branch for left side menu - update development_branches - include dev branch names in left-side-menu - move yaml file to data folder - add yaml with development branches - dynamically change branch in left side menu ## v0.12.0 (2023-05-24) ### Feat - Add announcement banner. ### Fix - announcement URL and phrasing ## v0.11.1 (2023-05-23) ### Fix - **header.html**: point docs repos to library repos - **core.py**: use round to nearest minute for read time - versioning script mismatch ## v0.11.0 (2023-05-17) ### Feat - Nav bar links to project GitHub - **projects**: allow overriding toc template path - **projects**: mapping between project versions - **projects**: allow overriding and disabling external mappings from conf.py - **intersphinx**: Support intersphinx base urls in toc.yml - **intersphinx**: support single strings for project - **intersphinx**: add version replacement in the yaml - **intersphinx**: Allow overriding branch name via environment variable - fetch intersphinx config from a remote file ### Fix - **rocm_footer.css**: Fix overlap with sidebar - **renameVersionLinks.js**: Wait for RTD injection ### Refactor - Still get PR branch using pygithub - Use RTD environment variables - Remove edit button, simplify get_branch - **__init__.py**: remove deprecated and unused method - **projects**: rename external_intersphinx to projects - **doxygen**: Copy only doxygen folder from data ## v0.10.3 (2023-05-15) ### Fix - **article-info**: hotfix non-html builds breaking ## v0.10.2 (2023-05-15) ### Fix - Fix python typing, formatting, PEP8 ## v0.10.1 (2023-05-11) ### Fix - **sidebar**: fix rtd version selector not appearing on the sidebar for small screens - **sidebar**: fix page jump when sidebar is opened, animate header - **header**: don't show scroll-bar on menu when its not needed - **article-info**: Use app.outdir for html directory - allow overriding path to external toc path - **custom.css**: restore cookie settings button styling ### Refactor - **core.py**: fix mypy errors - **article-info**: Simplify article-info handling ## v0.10.0 (2023-05-09) ### Fix - Fix header on narrow screens - Remove left side menu & buttons - Fix lengths on shorter breadcrumbs - Add zero width spaces when testing width ### Refactor - Add links to header - Merge remote-tracking branch 'upstream/develop' into HEAD ## v0.9.2 (2023-05-05) ### Fix - check for existing article info before inserting ## v0.9.1 (2023-05-04) ### Fix - **core.py**: use older version of pretty format in git log command ## v0.9.0 (2023-05-03) ### Feat - Bring into compliance with AMD styling - **core.py**: set default publish date as time article was last modified - **core.py**: set default read time by counting visible words in html output ### Fix - deprecate disable_main_doc_link - fix breadcrumbs and scrolling - update ROCm Documentation url - Tighten secondary nav - Improve transitioning on resize ### Refactor - add back linkify - merge with develop branch - get file modification time using git - import article info via importlib.resources ## v0.8.0 (2023-05-02) ### Feat - Rename versioned doc links with version number ### Fix - Remove unintended CSS changes ### Refactor - convert myst_enable_extensions to set and add configunion helper - **core.py**: explicitly cast to list ## v0.7.1 (2023-04-26) ### Fix - docutil dependency ## v0.7.0 (2023-04-26) ### Feat - **core.py**: set specific page settings first before setting general settings - **core.py**: add ability to set article info for all pages - allow substitutions for author, date, and read time in article info - add article info for linux and windows - **core.py**: add article info with supported os info ### Fix - **deps**: Fix search highlight in doxysphinx by updating sphinx version ### Refactor - use consistent formatting for init and remove empty list from core - **core.py**: move linkcheck configs to core from init ## v0.6.0 (2023-04-18) ### Feat - use different link color based on theme - increase font size ### Fix - **header**: direct GitHub header link to ROCm ## v0.5.0 (2023-04-14) ### Feat - **__init__.py**: add version numbers ### Fix - ensure compatibility for 3.8 through 3.11 - **dependabot.yml**: remove extra spaces ## v0.4.0 (2023-04-13) ### BREAKING CHANGE - users of the non-legacy API have to set `html_theme` to `rocm_docs_theme` to maintain the current behaviour. ### Fix - **legacy**: fix builds without doxygen - **extension**: no longer set the html_theme by default in the extension - **legacy**: restore custom theme on readthedocs ## v0.3.0 (2023-04-13) ### Feat - move automatic doxygen and doxysphinx to an extension - move core settings to a sphinx extension ### Fix - restore cookie permissions / analytics script ### Refactor - various formatting and type fixes in util.py ## v0.2.2 (2023-04-13) ### Fix - various stlysheet fixes ## v0.2.1 (2023-04-13) ### Fix - update links in header and footer (#87) ## v0.0.1 (2023-03-13) rocm-docs-core-1.21.1/LICENSE.txt000066400000000000000000000413301502657046300162440ustar00rootroot00000000000000Copyright (c) 2023 Advanced Micro Devices, Inc. =========================================================================== All files exclusive of files in src/rocm_docs/data/_images are governed by the following terms: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =========================================================================== Files in src/rocm_docs/rocm_docs_theme/static/images and its subdirectories are governed by the following terms: Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.†The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. rocm-docs-core-1.21.1/README.md000066400000000000000000000044361502657046300157060ustar00rootroot00000000000000# ROCm Documentation Core Utilities ROCm Docs Core is also distributed as a pip package available from PyPi as [rocm-docs-core](https://pypi.org/project/rocm-docs-core/) ## Purpose This repository is comprised of utilities, styling, scripts, and additional HTML content that is common to all ROCm projects' documentation. This greatly aids in maintaining the documentation, as any change to the appearance only needs to be modified in one location. ## Usage ### Setup - Install this repository as a Python package using pip - From PyPi: `pip install rocm-docs-core` - From GitHub: `pip install git+https://github.com/ROCm/rocm-docs-core.git`. - Set `rocm_docs_theme` as the HTML theme - Add `rocm_docs` as an extension - Optionally, add `rocm_docs.doxygen` and `sphinxcontrib.doxylink` as extensions For an example, see the [test conf.py](./tests/sites/doxygen/extension/conf.py) ### Legacy Setup - From the `rocm_docs` package import the function `setup_rocm_docs` into `conf.py` for the ReadTheDocs project. - Call exactly the following, replacing `` with the name of the project. For an example, see the [test legacy conf.py](./tests/sites/doxygen/legacy/conf.py) ## Documentation The `rocm-docs-core` documentation is viewable at [https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/](https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/) ### User Guide The User Guide describes how users can make use of functionality in `rocm-docs-core` It is viewable at [https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/user_guide/user_guide.html](https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/user_guide/user_guide.html) ### Developer Guide The Developer Guide provides additional information on the processes in toolchains for `rocm-docs-core` It is viewable at [https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/developer_guide/developer_guide.html](https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/developer_guide/developer_guide.html) ### Build Documentation Locally To build the `rocm-docs-core` documentation locally, run the commands below: ```bash pip install -r requirements.txt cd docs python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html ``` rocm-docs-core-1.21.1/docs/000077500000000000000000000000001502657046300153505ustar00rootroot00000000000000rocm-docs-core-1.21.1/docs/.gitignore000066400000000000000000000000221502657046300173320ustar00rootroot00000000000000/_build /_doxygen rocm-docs-core-1.21.1/docs/building_documentation.md000066400000000000000000000120571502657046300224250ustar00rootroot00000000000000# Building documentation ## GitHub If you open a pull request and scroll down to the summary panel, there is a commit status section. Next to the line `docs/readthedocs.com:advanced-micro-devices-demo`, there is a `Details` link. If you click this, it takes you to the Read the Docs build for your pull request. ![GitHub PR commit status](data/commit-status.png) If you don't see this line, click `Show all checks` to get an itemized view. ## Command line You can build our documentation via the command line using Python. See the `build.tools.python` setting in the [Read the Docs configuration file](https://github.com/ROCm/ROCm/blob/develop/.readthedocs.yaml) for the Python version used by Read the Docs to build documentation. See the [Python requirements file](https://github.com/ROCm/ROCm/blob/develop/docs/sphinx/requirements.txt) for Python packages needed to build the documentation. Use the Python Virtual Environment (`venv`) and run the following commands from the project root: ```sh python3 -mvenv .venv .venv/bin/python -m pip install -r docs/sphinx/requirements.txt .venv/bin/python -m sphinx -T -E -b html -d _build/doctrees -D language=en docs _build/html ``` Navigate to `_build/html/index.html` and open this file in a web browser. ## Visual Studio Code With the help of a few extensions, you can create a productive environment to author and test documentation locally using Visual Studio (VS) Code. Follow these steps to configure VS Code: 1. Install the required extensions: * Python: `(ms-python.python)` * Live Server: `(ritwickdey.LiveServer)` 2. Add the following entries to `.vscode/settings.json`. ```json { "liveServer.settings.root": "/.vscode/build/html", "liveServer.settings.wait": 1000, "python.terminal.activateEnvInCurrentTerminal": true } ``` * `liveServer.settings.root`: Sets the root of the output website for live previews. Must be changed alongside the `tasks.json` command. * `liveServer.settings.wait`: Tells the live server to wait with the update in order to give Sphinx time to regenerate the site contents and not refresh before the build is complete. * `python.terminal.activateEnvInCurrentTerminal`: Activates the automatic virtual environment, so you can build the site from the integrated terminal. 3. Add the following tasks to `.vscode/tasks.json`. ```json { "version": "2.0.0", "tasks": [ { "label": "Build Docs", "type": "process", "windows": { "command": "${workspaceFolder}/.venv/Scripts/python.exe" }, "command": "${workspaceFolder}/.venv/bin/python3", "args": [ "-m", "sphinx", "-j", "auto", "-T", "-b", "html", "-d", "${workspaceFolder}/.vscode/build/doctrees", "-D", "language=en", "${workspaceFolder}/docs", "${workspaceFolder}/.vscode/build/html" ], "problemMatcher": [ { "owner": "sphinx", "fileLocation": "absolute", "pattern": { "regexp": "^(?:.*\\.{3}\\s+)?(\\/[^:]*|[a-zA-Z]:\\\\[^:]*):(\\d+):\\s+(WARNING|ERROR):\\s+(.*)$", "file": 1, "line": 2, "severity": 3, "message": 4 } }, { "owner": "sphinx", "fileLocation": "absolute", "pattern": { "regexp": "^(?:.*\\.{3}\\s+)?(\\/[^:]*|[a-zA-Z]:\\\\[^:]*):{1,2}\\s+(WARNING|ERROR):\\s+(.*)$", "file": 1, "severity": 2, "message": 3 } } ], "group": { "kind": "build", "isDefault": true } } ] } ``` > Implementation detail: two problem matchers were needed to be defined, > because VS Code doesn't tolerate some problem information being potentially > absent. While a single regex could match all types of errors, if a capture > group remains empty (the line number doesn't show up in all warning/error > messages) but the `pattern` references said empty capture group, VS Code > discards the message completely. 4. Configure the Python virtual environment (`venv`). From the Command Palette, run `Python: Create Environment`. Select `venv` environment and `docs/sphinx/requirements.txt`. 5. Build the docs. Launch the default build task using one of the following options: * A hotkey (the default is `Ctrl+Shift+B`) * Issuing the `Tasks: Run Build Task` from the Command Palette 6. Open the live preview. Navigate to the site output within VS Code: right-click on `.vscode/build/html/index.html` and select `Open with Live Server`. The contents should update on every rebuild without having to refresh the browser. rocm-docs-core-1.21.1/docs/conf.py000066400000000000000000000033541502657046300166540ustar00rootroot00000000000000"""Configuration file for the Sphinx documentation builder. This file only contains a selection of the most common options. For a full list see the documentation: https://www.sphinx-doc.org/en/master/usage/configuration.html For a list of options specific to rocm-docs-core, see the user guide: https://rocm.docs.amd.com/projects/rocm-docs-core/en/latest/ """ # Disable fetching projects.yaml, it would be the same as the local one anyway # except if a PR modifies it. We want to test with its version in that case external_projects_remote_repository = "" external_projects = ["hipify", "python", "rocm-docs-core", "rocm"] external_projects_current_project = "rocm-docs-core" setting_all_article_info = True all_article_info_os = [] all_article_info_author = "" # specific settings override any general settings (eg: all_article_info_) article_pages = [ { "file": "index", "os": ["linux", "windows"], "author": "Author: AMD", "date": "2024-07-03", "read-time": "2 min read", }, { "file": "user_guide/article_info", "os": [], "author": "", "date": "", "read-time": "", }, { "file": "developer_guide/commitizen", }, ] html_theme = "rocm_docs_theme" html_theme_options = {"flavor": "rocm"} external_toc_path = "./sphinx/_toc.yml" extensions = ["rocm_docs", "rocm_docs.doxygen"] doxygen_root = "demo/doxygen" doxysphinx_enabled = True doxygen_project = { "name": "doxygen", "path": "demo/doxygen/xml", } version = "1.21.1" release = "1.21.1" html_title = f"ROCm Docs Core {version}" project = "ROCm Docs Core" author = "Advanced Micro Devices, Inc." copyright = ( "Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved." ) rocm-docs-core-1.21.1/docs/data/000077500000000000000000000000001502657046300162615ustar00rootroot00000000000000rocm-docs-core-1.21.1/docs/data/commit-status.png000066400000000000000000002000421502657046300215760ustar00rootroot00000000000000‰PNG  IHDRJyˆÏDsBIT|dˆtEXtSoftwaregnome-screenshotï¿>)tEXtCreation TimeMon 07 Oct 2024 05:17:12 PM£Ã IDATxœìÝwtUÆñïìnz!¤R ´PHh¡†Þ‹( ¢¨  t»(*E_”¢b”Þ{/B –„„BBzÛÝyÿH@:¢ý}ÎÉ9awæÎ½wg—̳÷ÞQlÊ»¨<ç ^$ÏŒ}”"„B!„B!IiåšR¨‹B!„B!Ä¿‚%B!„B!„Å$(B!„B!„(&A‰B!„B!D1 J„B!„B!ŠIP"„B!„BQL‚!„B!„Bˆb”!„B!„B“ D!„B!„¢˜%B!„B!„Å$(B!„B!„(¦{Üø;(:0­l‰iE3´.fhíth,´(:Põ`Ì5`¸ªÇp)Ÿ‚„| Îæ êw­…B!„Bñ¸ý«‚«)–õl0óµF¹KËhm´hm´àa†…Qx’‘ENH&ú¤‚¶ÒB!„B!„xbü+‚­«fv˜×´z¨ý˜×±Æ¼Ž5yáÙdﻊ᪠1B!„B!þkÊü%um°Vñ¡C’[™×´Â~XE,êÚ”JyB!„B!žPý¨þv8Uj˜Þö”â>¿·×SÑY oÜFFP³iÅ»¤Å¢ÕZ ˆ‰ò7ÔÓ´;>oîÆÓSJ\Ÿ V‹Ê<衯éÔ›6—òË Sìû…áTÿëõ¤)ÓA‰MëòØÙßušÍÃRt`dMëò¥V¦u‡9O >!¸¨Åôu¸ýÔQìú³ä\ñ çYóJe´wyìQ”vyBWo*;cˆ¿pš¯»ÜþATLÛÍæÔ…âãöó–ÿ¿bÀÔ¿ƒRžþ?ž#>!³ëGSõŸ<ñ„B!„xTj:Ù¡‹¸’˜õ¸k"þe6(±í者¿íßz [l;:Îöe³x©eLî´½ÆF#ç°úPÑQÇÙ±ìSžkhóIaêA૳ø}çq"ÎÆpâàf~øpO¹Þ’±=豯íV.€·¶%.ágvÍ ­“(ØÔêË´ïÖ²ïäiΞ?é#[ùéóQº?À”›Ú üx»OÅyr?+¿|•n7Ö[‹ãSÃùxéf†áìù³„ßÍŠùéRÅÛ®ó9Ÿ@||(³Ú[þµ«® ïŒ#>áQKRTm+ªvÈ׫÷q"æ,‘!ûY»ð-ú׳¿÷Í´=³#.ŸÇþwÛã?l6«Eyj«–Ì`ä­}hY•®¿á=!Dœ‹åìéSØ´”ŸoŒã2©@ËQŸó˶£„Ÿ;Ï™èìY½€©ýêPNyˆíJÜ>n-_泟6q("†“û–óÑÓ¾XË*!„BñDRЕ÷ÅÒõ–{‡»ÌÐaÙbÕ*“³ ‹Ç‘œ×ÆÕÿ*¯úûÔèÙÉw‰ú¶?§wÄ¢õT ¨zç2Ë?Kå¾O£‰z‡Èo:þÛ|ò+¾Aåæ~8Aƒ©ßçTo_üÈøn}pfŽ×þ ׵ã©ö"ô¯“ªtÁ»SL@S ·‹q³=J⊧ ûá-R ]¨úÜØY*`R÷g¿ÂÉd'ñ¿ô#bå ÔÚ_P-°ÞÍõÔTÀ¾û÷TrÚΙ¥3ÈÈQ0­ÿ1>MIßøOü/*ô™ŒÙ5ðQ¦F”hítX·µ,ǶnkOA\îƒß GãJÇžX*P¾’™³Íñj3–êfþtëT‘¥ ã1–J ­ðŸð+?Žñ»á‚ÔŸ€þLmÜ”£º3~}ò I÷sYìትÀ–ªÏòÞR7 Ú=Ç/ FÐzÒoÞJ>íè‚NQÑê±t¯Eë¡ïÓ¼µ?ãúfÕc‰}ýg}͈f¨É[yûù·ØvYEWí-›§lÿºü.WÁ—–OO# UmÆtÍšäûôšRžNþHE¯kñ^4ì=™E•ºöø’(=˜7xƒŸ~MMó¿ÞÒ&ÎUhÜ} ¹RÐöu¶ìZË®Œ®t·³£Yëú˜nÙG óiN€›Ô­ÛFŠjŠïÈ%üþVvU¯Goá‰_Ç—ø¬e µGögúŽ+÷IJì:¼ÇBwÏâiZ¶4h_‰ú­Ûá7º £W_¨q£÷œåÌêìtC8Q÷Ú­R« µÌºÐg~4ÅŽ6,ç»g½0Q@UU0q¤RÃ.ŒjHÓŠýè;ûù%ÝS|_(IûÚ~Èoß=‹·iq¿Ú6eÐ'ß’–U¦>n„B!Ć%vVcw§§ a·?¦mŒs£jäîéÊù#1¨@ÖÅ×1q_KҦ]0~†³‡BŠ®.…sƪ!uöÂòÀL²o½œQc¸²i<Gw‘g’ÏsùÜXìlœP ä#.4•q|ª…‡úp>ø*½ñ-L¬Gaz}×$R6@Ê… –‹GƒqiZ…žƒpu>HüœÏ¹’­aäü©ÇrÜ<œ«~HfáPœmws~É\R³U ‚ó]ñ®ä‰‰^T¼â‚]çO©R9”³ß¾ÃÕ,# ÃÔÞåê*RcŽ“«‡Ü­¯Rã@Á“6œ„26¢Äª™]©/ÜZRŠ®èøJãÞ…ÍQÔBN­]GLØZÖEëA1¥a·Nx”Ò+ ­:”é£êbžøÕSèPŸ­G°8,tô˜4œ:7õ—<6½=˜î]0uùi TÐØ4£sK{ÊuœÄ´ ´†8VŽiI­ÊUñëü;®¨˜xuçí‰A”WæØ¶4šð?ÞïàŒ’ÂW#_åç3…€ŽºýŸ£‘­cÆ.Þkç‹·W5šœÇ‰\йuaDoÏû/B«±ÁUs„O†÷ kŸ×X|" óZiWI XÐâ¹AÔ0W0$­cjçFÔ­UŸ ‰ë¸dPкÑÑß2w³vG:F´8·lM-€×fͨª5÷ ë·]F©8€·ÞhŠR@äâçxÊÇ›j ú178 ,«3øýÑ4²¸o¥±ñp$ù·‰ôk׎>ã~àd¦Š¢s£ó#ð3m¥^ mï„FÍåÄ7ƒiåW¿€§™¢U±¤nç6xhA)ßžÁ}<1Qôœþ~MªV¢jÝöLZ{ƒbEÝáCifVòí4%mŸY#^yo Þ¦ ¿´™Ïw¦}—øò;Û2õq#„B!þ3²IùÙ‡Co{ÝôsxÁ|òîto탅ÅE2Îû+À0Æ{©èw'æöæX4[A£wÎÐø34~'¿õÑX»`r§?‹¯î#%2‹ú#qúˆªƒþ¤²ßC ÐVÇÊ1‡ì¸¨¿êf8ÎÅßF’_Xüï²“Š§Ù bÔo« sðFgÖ–ÊN×û §-ÄÉÊGÌ]«£¹Löõé@F ÂÞ!jÝêâÀCÁ´þ *×r@µðÄìú—ÒzrB—’i;ššcþ¤Z÷ ¸ú8þyתò)3_ñê\MKíÀ˼¦9G3Ð'•ô•ÔâÕ¥ LT}(ë6ÄbÐúµ‘Œ®Y]½ît®´ùg X3-ží;RËTÂP¾ÿä'ŽÄ€|öÑÿ¨8¼.¦p´Qnˆ"\Zþ“ï"8ññ"ºôøˆf&ìË£!—f]Ú`¯}èOÌYy–#ä„.fÎòa´|Ñ §ö]yÊr3‘%=ö õuïù_ÕÆÂx‰5Gðù‘ÌëoN K @±¨LË>}HØ´ƒ½ûçðR¯M¸šCþ¥+÷…£f³õ“qÌߘŽJ01óÚÓÿ›®Xiìq´/Êd#—Žç…õŒ—N°ãDŠuEªÚZ¢+:8ÖVZ “=ëvpµGoìÝ[Òªª–ãQåhÚ¢:E%÷àz¶]§A]ib© æïcáìí$¨|€¯¾ÚÀàEý(ïÙ™.~pøà½G$éÏ,aâÔŸ8^D¼ÅÏF¬ç‹Î3VUfry'Ÿ<ƒ™šÉÙƒ8›mŠƒ½-VÅ@Š¥ V (¦–Xê@ƒSýnôí¦gÛ®Cü>u QßÙ¡Ó9o(év NmJÖ¾ãÚžtõÔ‚1­ŒãËM)¨œ ú5êíú˜––2ÿF!„B”qªPoæa,Ì/~>£¾€ô5͈!–•/zݺØÂ‹J.&~lÅ”Ûã¦U@SwwÛNÄBޝ\FD¶ŠbâAà¨øßʽ„œÜÌW¯õÂß!ƒsñ™÷zf¼B||öõí ³3ÉW‹úJQòˆ?z˜‹štû ›ŽDqˆ?ÞlÃ-=kÙyÕ&ÕhÕÊ­E#š74GQs9¸n)ª¯ª^hPÌ[3óÄ…â¾J zI?Êk­•<­ï3¿P%ëøA®çpz¢sÅè*âå®E½Îð*<Ë{¿íåxt Çw,`Hu“›Ê6&ocùÖKèU åêöcâìŸÙx4ŒÃ¿½Ç 6>(Î’¢/év%mŸ-.Õ«­“bˆàÀáÔëýo¼t€18mM!„Bˆ'Qv ¹9°©äù×ßàJl<*ýnƒêXÿúµ `Rw~#^ÃJ`¤ zéégHÞðy^ãð¨åXaÝp"«jÉ:µ„ k_&ü«\VÛâäãø ­üÛ•‰%ŠÌ|ÿ™»ÜÜ™¯5ÊÖ+¨%¸æÓùv§»oÑ2œ¦¦³7~ú-[˜P£[|¾Ž&ò•hµÅo7ÕøkžÜ+nС+~W.…°ýxÒíåHÔ«wlc:I—Mpq±ÄoÔz¯xžß/ísx½Úì¤SÏ.th×––õ=±±õ¢a§¡4ìØ— zÐo^$vÙmNý7~ç·1µ1/¼È‘?óáþN¥ø1mÉXê߸zjÖ^ÖnO£g_{ê¶Àíd šØjPs°~ÛeT´ètº¢¹ƒùqï 'õ¶®5•r¿\òöTZ5ŠúT5`0ªhÜz3wÍl:;+dFnâ÷9ó9v" «?òIÏ>øŒXöR[NµîN·Nhצ)5ÍqòmI_ßôìÓˆƒÆ³9­$ÛM$«„í3u¸¶“ñæ”ZÍ%;ç>ÍB!„¢,0“|4†Z-çà•ó—õXøMÂÕÕ2¸zh9S¥•–Ĉ3Pá9*µ®KΟ“¹ýÒO¥0+ª6ÇÎué¹vXÕgM[”Xgt:…ÏN1Frø.m?ÅóêG\N,À¢þt\ÊG›÷ÉJÔK˹;ÏÞï£ßú ™9ÎØ·}G“¥„§0dü@J›Åxö‰q÷ Ì›Q±mŒ'Ÿ!×7®Ëj¼¸€¸àîTo?žr§§cpèD꾍ÆÙ¤¥`âÕ[Ëˤ§`Ú´%ηåÙì_³ÔÞýqhОa]=pÑO»IQ#‰ñ‰pC§?ÉâÑ#Y“]¼«Æ++34€>÷~#a4X×kŒ¯É6Nè¨ÒØ¿h„Fá9bΪ¸vHg-Já~fÉ’D#(. ~Å \ªL콨ädŽáüæ½þ=Ÿ*VTôkIçao0¡w ,*t¢kãÉì8âZ‚í¦òE Û§³M¢@­/MÙñýª¢Q%Šm=ü«=úØ)!„B!?=9»G£}v‹q6Ë&7r.g7_¥ZÍ¢- çgµBW›÷¨ÑÒÃÕ¤nxžøˆ;MÅÑ“³qïã1l;^ygÉ ýг¦R¹çÛÔhÎÉ]%­›‘¼#£‰ÖMýù—Ô´3¡0i ¿~@J†å~ƒJÔx’—CÓñM*ô_މšBîÙŸ9½z>9À°Ÿ¸¥ã1½D¥Á¯¡ÓÇ“:ž˜Ç1rëJ³ÉØ5ƒÔZ_âÙ|a»_#Öj:n½–á®Ë¥05”´u/pá|~I÷yBâ‡{3­ø÷Þ/¨{­ >ëöcþœÊƨ%ªÏ}ƒÓ†tïâ…•ÂŒž±ôgŸ¸våÝÏ㣫Jçnµ™u*äÉbI8·mgÆ×¡†I}^|ÿN½¹Œ(?¯½5š®µÍЇ‡ñE¶ %˜£¦³gÓA²Û¶ÆªÑPÆwÙÍ;ëÎRàØŒ± ¾ãÕF6"çÒ#èS"Jzìë ‰f†ùðü╌ª¬%÷ØW {qOsôÀÎ\}‘æÎ*†ô42u ›b†¹YÑ­ˆËÕ  ~…Sœ¶ôgø¤>¸Ýáz>{ÿZ¶_éKÇ–<7КËîµÛ¸¢‰ß¾…ˆÉ ¨kÙŠ‘ãZstæN.j<èðæ"¾~ÎÓܼۮ? cï]qÏP>yï4o.:Ž¡ÎÞ±&&¨ä_æx3só¢ 5^ø7óaÍÖL¼:¿É‹OÝ8FÁ¦í»¬ÕKc«'aÚò(OâÀÉ‹äõª…šNZº±„Û–¸}‹ìçDA'ÌìèøæŒÊü„M]i?a:ìËÌL?!„Bñ_‘»Œ¨÷–Ýñ)õ N¼7£ø_q$}çKÒµ'‰\ÝöW·Ý¸Ç÷_û½€¼ðˆ ÿ¨dõÈåÒò\ºéÁ „†½Yüûqb>X]ü{"I‹n¨ËmO%sÿëDì¿ÃS±ïòáÍB_ 8ô†rŽ‘ôGï»–o¼²Ž¸Ÿ×wÛ3¤.«EêålâÌgÕ®ÿóÒŸ}niã“©L%Z—¿/(éâ۞Ϻ½ƒÞ¨çbænaûõ1oÜ“ÎîZP 9±ê{6쉽yZŠî*F ħ†ï.Ý𛱇kúðoywI'¨KÛ·ù½íÛןS Nó󇋈x A+F’–Ȭ^ ˜àÃÓßì¦o^FSsL5 ÆŒ£|5i>§ô –ðØ·åj f}Kh‡ÉÔ3óåù©ÏðÛÀ¥ü¾øϼیr FóëáW1h4ZÔÂó,ûv-Éz ©ÂvìI£OW{,¾Æ²#¯*ùÉÉdm±ÓhprqBC\Ñë–s€uÛRèû´3f¦ f`Ýö”ë#D 1KxwAW~|¹6õFýÈÁyäa†¹‰ —Ùýñ4–Þ'$#™Óq4›?‡ÜÐMYÇ™÷îRÎ èöìâta}|M*Òcövzª!Ë©ù¨Næhì]p2Q ßü=ËÏ2Ø»"Ý?ßF·™ŒhÐjÀHúþoù1¸´ˆ’l§Ç`(YûŒÊJ¾[ý Múº¡«Ðž)?¶g €1“Œ,#&6–!„B!žleâªEk÷÷ä9k´á‹ïa0þÛ8N$ÞáÙUKšö ÂU ªþ›¶^¸}í}$›·Æ¢´žèÚÐäå<5½ïõ£ÿä…l=™@F~YÉg9±ýÞЗé;¯–üÞÛ×DðíО¼:w-Çc¯R¨1’Îî¥ïò\Ç|\<•䎭úžÏ—'b@Á:à5&t*Ç™ÅÃèùÒg,ßABzFT 2/¹ç>Ü—··?D[n¥^aíäç˜þûabS³H¿pŠ]?L¦w·éìÉR Jƒë/uÖn#¥hÁr®c{Ê µP39üñúMø–-§.’iРO‹%tó·Líבa‹¢¸ÿ€2•«Þâ…÷ÿ$ôb9Wc9¾e1Ó fvHnQú’FÍckD™Y)œ>²†9ÏwâùÎb4N=ÖÝÒw0½÷Þ\¸‘cç.“­WQ 9\‰=Ɔycé÷üBNëA-áv%nŸšÆ– Ýôî6ŽárvñÁüþæKÌ –Å\…B!„O>Ŧ¼Ë#]s:Oð"yfliÕ玜Æy•ú%m}Z0¯Ï§^\>Ýg”x_U—gý½mÿ!¦í™}b1}lÄÛ—–ï~Ä…j…B!„â¿§´ò‰21¢äïI¾îý ªª>pHòwÔG!„B!„O†2”<ˆÕ‰ž|€®5Ûßñùv>-™×çS4ŠÂè?§'ÖL%ãXÂíëÙ!„B!„øÇ”‰%ÆÜ’ß87$á/üþ:FUeNÏ ¬@ËÊMùº÷Ç×C’‘Ûÿ‘úq_†³lúz³¾˜Í”!„B!ÄãT&‚ÃÕ±ïüa^[9 ¢ðMß™Œi>‚ý>ÃDk¤uï?RHò0õB!„B!DÙP6‚’K÷¿±ê­6Eí`ܪ·Ñ*ZÆ´x­¢eʺøóäúÇR!„B!„B<ùÊDPRðpÁĺˆ-¼¹qªªòö¦OXºæ±ÖG!„B!„O¶2±˜kÁÙœZÐõF¿…¬ä·•¥VU_T!„B!„Büû”‰%ªò#²w5€¢zÈ]o„B!„Bˆ§2”ä„d>î*ON=„B!„BQúÊLP¢O* /<û±Ö!/<}RÁc­ƒB!„B!þ>eb’k²÷]ŬšÕC­Uò¨T}ÑñKN‹o{ºvðÇÛÑ}F2q¡ÛX¿5Œ4ÃßVÍ'Œ‚¹w;žéׂ )ë™»ø ê=67­Ç3Ó‚H]ôc¬“´•º3v¨5>ø™ðÒž¥­L×7†`¶êVDʼ+!„B!„ø7+3#J WõdmK},ÇÎÚ–ŠájÉ/’5ÎÍéÿtÌ¢7ðóÿæóó–³X5y†-]ËV§?ª´ÀáÜ æýr”Ì{…$B!„B!Ä Ì]³ç†f’œñÏ38ƒÜÐY›Dƒ½o]ÜR°nÓQÎ\H 6d[Žgá\½vÊßVÕ'‹¢ÃÔD!;%‰«¹…HN"„B!„âIW¦¦Þ\“¹# ÅLƒyë¿ýXy'³ÈÜ‘ö€{©äÇ`ãå \1^{¬(Q (¼ã>:k·'¨u}*9Z f%½-ë÷Ç’£8ÓjÔ¼ƒ?áûC™Eƒ¶*Ý'<ƒöù3ÚŠ9w¡C“ê¸;š‘{1‚ë×p 6+ï–tjïO• åÑfÆsj×6M$_´vø´êL _e\ítd_Œ"xË:öžÉÀˆ‚™[CÚwjEM{ÌôWIÛÁúõÁ$;|»Ð¦aU\¬5ä\>ÍÑM«ÙuZÅøºWÑBõיY¿Òã¦ÄÎû’—Š:FãÖž—_ªÈÞ–r¿$åm¼ÆÂ+g»·¢jy Y‰'ÙþÇJŽ'ë³ þtè@5G, iĆîdÓæã\*(:°ÖΗÀ.m¨ã튭z•óÇ·°ns(Wn©—bãK×áOS%~‹þG÷ž$ë€Æ¹ýúׇ,ž7_v§âÑq ^ÚOÁ¶þžëèAÚÁe,þæ{¶'8ÓvHül4Î-xæ¹@Ê_ØÁo æóÛ¾t¼»¥“9`‚gûçØÐ„¨Í?J¸Qÿ IDATòí7KØmAã!ÃiçiZ/Ú<Û‹ªY{Y¾`. —¡°foz5sAƒ‚mÃ> °æÌúÅüoþb¶Ä;Ðr@'ª›fpxáûü•OâæÏywÁ>ÒiHɽÛ èjÒ®½aË¿bî׿qJ©K·. ±Q@±kH¿a]¨ºŸ•‹æ±hÙ~2¼{òü€”SOÚ>÷, L¢Øòã7,\qc<ÛÆƒ_Ū*AÏ=ÏÅ•|¿òÆ{ôÙ£´W!„B!ÄãP&G”\“¹# ý=ÖmíKuWU_´&ɃM·¹ ­#UýSÃÉ›¬p.eÝy‘R¥¼#å¹Ì±ÐÓ¼š_Ò<Ñ•d0‹Æ‰úÕÈ:0µ‡0 ëVbeˆmy<êà–¸¯6#UW²Îæiê•/‡ÆÌ™¦,9ùûWìŽ*º£ORÒ¯èܧÐÑß›íÉÖ8Øp1ò$ç.æ ^¼ÌÊ.áf,©bë`îj§¢â¸¤‡äM?“eÅÕÒžgsÏ6^ËûÒ9±a-!ñz •½GbiÒ¬ÖŠËÍ©re;_®9RÔ\$)¯<^/4¦–Ý1‚Ýšáoͺï¶–­‰¬2±¥§·ÖJQ §XT¢ÍÁ4ÈÞĂNjåýû@!„B!Äß®L%P´fIA\.VÍì0¯iõÈåå…g“½ïê-ÜzO1l]ÃVU»ŽbÐ3H™µšs·o<Ìᤡtûµ££9wî4ÑáQ\È0ÜÜÖ7§.lIâz cˆcïO?€RŽ&A6dÄÅÞpážÇé-K8 hœká`fƒÛ÷¨c™Š‚1Ê“‚(‚eÓ¿ÿFûGsî,g#Ã9}1 H 9Èù†ùz5NGŸáÜÙ("#Ï“VÀµÙF¥ã^m´•Ã%/^ëX½þÚïìÐyvfìo*V!ö\1¹|”øõúþ™'WóãI@[0¥z×g1Á,×+ ¤`¼w!„B!„(SÊ|PEwÃÉX—BÎÑ ,ëÙ`æký@#LT=äGd‘’‰>©®nS\k6À%ó¡qEÆlΈ$Ãß7…si77Póϱõ›œðö¥ZÕÊTjЃò9þË|ÖDßé 4×EƒFQQï¸ †‚F£ñÎÃT½žBc[¿úŠ]Éw^Q#rå,>?X•Õ«RÉ;€^mº¾{1‹¶œ'?ißÏ Ã«†/U¼½©Õ!€ ŽÑ¬\ð!%¹›²F[²ù_÷lcq[T=ú;>_šäŸø•¿…q{¦¡Bu ¨Æ{,8«z ‹7@Ð+}èÜü( ¶_ÄèïÕi2¬D!„B!Ê’2»FÉè“ ÈØx…”/cI_u™Üà âó1dP‹¯ŽU=2 Ä瓜AúªË¤|KÆÆ+¥’¨*öµ;ѽ•æ×GU(˜”³ÃBÍ%'ÿÖ¬«4§}€yg±oÓr~š÷9Ë#¬ñ«_ùzš¥Óþ•þ(v®8[®¿Lrª9=œþzAµž´5‘¾u\NÎÅÎÛëu1ŧûxFwóA›žHRŽ#•*Ùü5D±§aÿQôªWmùZ´ j„ÃÕhŽîZÇŠ%søzmÎ ëQAkŠ{£Žú(Ä…îcÛª¥|7û{‚U_êW³¹Ë€ºë‹~(X¸¸R®$gá½ÚègyŸÁ+F’“ÐxTÆÝä¯GM+1tX[率råj·ÇâТþàaú@!„B!Ä“ê_1¢äVªò£sÈÎyL5Ðs6ä$¹ƒ‚èÕ<]Q©àPƒVA5)8õѹ·Ž2P)0q£APSÊV±÷ÌUT»êøyšœ‚AÍ&#S¥BýæT?½›$MEv Ä] —Œ‰;xŽ&úÑùê:‚ô86ìÎSöI¬;—ɹËIy±½Ûe±5ô2÷ætlhFüÏ0 8rè2#; $H¿… …86ìJPõ¶lÍÀ¨7Çã©.ԶгþPY:'êÔvŘJšÑ€µcýÜ0·‘¢ÇºRC*[erör*¦7·2?ƒÌjÔ#lËôN~th_S"ïߥ÷lc.ªý½vVÉÝGxà@zöIgãþh®šU¡UØE.&I‘i7ŒŽ}Z¢ßIº¹ík¡?±€KÆß&FR¯aoƒWiÓÑðŸCáž} „B!„¢,ÑšYX¿ó(X5³#{z)UçßCŸz†³éå©Ñ´ M©ãiCføþØÊÕ;¬çj¸G¢Ñ¿æ­iÕ¢)u¼mÉ]ÃÊgÈ1r9! ›êMiݾ=-›ÖÄ}íæ¶Ä¿š=™§ÖðǦH2€!•³1)XW{Šf­iâë@VèjþØC6å©à‡.j7)FP³H¼lI½ͰO8BpÈ™{ôB!„BˆBiåŠMy—GúÒÛy‚É3c¹"¢„4&X˜)äçpå:žxŠÎsm>¹ùe¹B!„B!ž¥•Oü+§Þü« ÉÍ}Ü•xtª>—ÜRº±B!„BQZþU‹¹ !„B!„B< J„B!„B!ŠIP"„B!„BQL‚!„B!„Bˆb”!„B!„B“ D!„B!„¢˜%B!„B!„Å$(B!„B!„(&A‰B!„B!D1 J„B!„B!ŠIP"„B!„BQL‚!„B!„Bˆb”!„B!„B“ D!„B!„¢˜%B!„B!„Å$(B!„B!„(&A‰B!„B!D1 J„B!„B!ŠIP"„B!„BQL‚!„B!„Bˆb”!„B!„B“ D!„B!„¢˜%B!„B!„Åt¥QH½†K£!„B!„Bˆ‡’È¥R)§T‚’ȈðÒ(F!„B!„â¡Ø¶q(•rdêB!„B!D1 J„B!„B!ŠIP"„B!„BQL‚!„B!„Bˆb”!„B!„B“ D!„B!„¢˜%B!„B!„Åt»e‰N§¥\¹rØX[£ÕjºƒÁ@fVéééèõ†R¬¡B!„B!…%%dmm…“£#Nöå)ÈË"**‚ .`4QFƒ¢((Š‚ªª¨ªŠÑh¼^†¢(¸»»S½º/Ξ\NMãrJ YYÙ«YB!„B!„¸%%`mm…‹³3Nå­Y»æTUEQ”ë#K ÃG‡\ÛÆh4G||<]»õ@£ÑÉ–!„B!„O JîC§Ó$)oÍÚ5«®?~-$ÑëõXXXРA¼½½±´´$77—óçÏsìØ1²³‹B­V‹Ñh¼²¬]³Š®Ýz`4ÉËË“i8B!„B!Äc&AÉ}”+W'ûò·$Ðëõx{{3jÔ(úõ뇫«+æææ×÷ÍÏÏçÒ¥KüñÇÌŸ?Ÿèè蛦æ\ K:wíMFf&W®¤>–6 !„B!„¢ˆÜõæ>l¬­)ÈËnITUåÅ_dÿþýL˜0J•*annŽÑhÄ`0`4133ÃÓÓ“±cDzoß>^{íµëk—\ K ò²°±¶~lmB!„B!D JîC«Õq=ܸp|öÙg|óÍ7¸ººPPP@aa!z½ƒÁ€^¯G¯×SXX€££#³gÏæë¯¿¾mÑר¨ˆÝEÇ¢Ë\NÅD¹q;õ¿Ø>ä‘ÿŠ--?ØNøŽé”âûòÖsâŸ>G¿[ß'Z¼†.%ôØ÷ özø»›]g^zAO3bÌD&OÂc_âÙnMñ¶)û«XW£Ãóã˜8¡75îû_Ž×ÀQLX;¾ZŸ¼>®+•¦Ë­òìÔ·yó­Û¦¾ˆKÙïj!„â)nã©11 ¿ÉÅ?“B©3v3>½Æbç`ù%iИۣ5)áÒŠÎC‚©ê_ÐbÑruú÷*sSYäχ¸pኢ Ñh0Lœ8‘×_üü|ÂÃÃIIIÁÔÔLMM¯ÿèt:LLLHKK#,,Œ¼¼<^~ùeÞ~ûmŒFãõÀäÂ… ¥TÓB®ÆÇ}†äµ„ûè¨ýÊÏìÞ»“ŠÀ˜IÂéh¢c.’YÒb…Ož©XÈeãݶP)¼Ott4§cÓ0Ú¸S·ýó|ºt6z†«wýàrcØþëOüüó?p(!´óçI{˜2…BˆõWV>Mô’þD?„s¾'DzžÏÎÆÁ¾¤Á‡ ö½7ã]¿B ™ANؤ%e=|½Ÿe-Øy,®&1 øûû3}útŒF#—/_¦aƸ¸¸0~üxªT©Btt4999XXXàããC||<³gÏæôéÓÄÄÄàííÍ”)Sؾ};»wï¾¾” cNèÅŸZNÎÞï¹£4jT&ÔiÑØ½³É¸ë…»‘K+'Ñããè­sK¦|7—!¾ÍóJKÖLÞÜ3¨dôÁsØmî?s0meš7Écÿ”‹Üí WósÉ7±¦¶_U´[NbÐ8Q§NE4y¹ä™YP¦¯#K“bGûᨒ»‡ «âïÚŸ¢”díå—Uqô6œþ>™ýp m+Ž5ñsÏáè+9x¡¸ŒäK\HÈÃúåî4ª¶“s¡e7õÒ™š f¦p)=ŸG]Š\M c×î;=£  rÏ\×Áų7=dæÝ™ ³“lØyž‚G¬›BQf©y¦„“›Rü?uRYgB0<ûn-;¾rúR?hYGçP“”Ý/µÿS#JÊ5±Ã÷»ÚØ4,÷@û][W`Ú´iXZZ¢( yyyäççËk¯½F·nÝ?~·OÝ(×ûÂb"9¹è FÍßJhT!»~åýžÕðn?™Ÿvs2dk¿y…ÇkÖáÖòef¯ØNðÉŽìüƒ¯ßèHåâ@ã6ˆ¥áQD™AŸ6cY²õ0¡!ûØ´d*A:”r½Y°ÿcM³Ž|yb9/VÖ‚Æÿa3øeËBÃÃ8¼ƒ?秃‡ h½ñÛz&ùé@ãÊ ³°_yLï0­â~ýv}*Ê·Ch5â+Ö !ôÈV~ù°Õï1Dã@€Å!öž¹û%”1=’°xp¯[G `Z“º5´äD†sî¦Ý´¸µ|…9Ë·säd¡ÙöûŒ p*úø½áÔ.W¾\Á–ín›ncUo +NDü#|‹*oY½/ïý¸ž'ޱgùGô©zk<£Å%à>ýe‡BOrêØNV}3‰îÕ,QÐQòf"cÂÙ:©:@WÛ"£ˆ>ù?zÛ)E¯Å²0b¢ðIk‹‡êO[´±%s×v¦©Üt¾ÎJ¯é?³ëø1l\Êç/·ÀM%=§Õ_çïÇtk2„OÙÄ×QîsÞƒ‚Mí|üóFfÇÏo1`ô·„ÅDqêë®X–¸þ÷;Ž{ÿ¡Ìøi{‚Ovb›~üçüíÑÜå}¢ 'lõZb”ôë߀’Od¼™¢Ñ¢QL±¶¹eòYîivüú+{Î<:Œaboßþ”ÐáÛw2£ÚT(þ|U°ò  Çs£;i ã_B§ú®½~:Gjuxšá£'0iÒ8FômEeÛ¿>ìk¶£ßó¯2~Òdƽ<„.þÿšþ¢±¥r‹> ý'Odôˆ~´¨lS<­Q‡½o[ú¿0–7&Ofü«ÃèÑÄ œ[Žä¥¶1­Ü•qSúQËÔ‘fçðLƒÖÛÒzÓéµ×éZåþ$i«tcܵ©7Úôš0‚V5Óoô¦N›Êø—Ѿz¹’M·ÔU i;wìâ|~ÑCf®õzv¯MœÂÄñ¯0¨s=\Jã „B”5úpRŽF©„õµ?Q,àÔyÕ_>H±Û¨Ö{4åìL‹¦Ñ ÞHEO ¬Úl¤NßîhSw*ö_EÍñ!Ô}c5ž}«¢²wœ]›zs +6ŸáóÒ^ê¼~ß¡³qñvy"—SøÏ%¶ËQáw0¨¦=Ø÷KUU©Q£íÚµ»š(Š‚™™Ùõi9ªª^Ÿn£Óé®ï{íçÚcF£‘-ZаaÃÒ JîF[§?~‡V©$djqªÑ–Wf¾Nk#që¿`þ®ŒHÜ2‡w~¸{ªx×rPìi÷Îb¾Ö OÍRÌšòƇCî°îÈ-Ez5ã)ÃAö^x°ï#³O…rÚÛªTuÓ¢qîÌŒŸæòrÇZX§œàà‰¬kw╯࣎(€Æ£?³—¼Ï fÈ8Ä‘3|»Œaþâ7hü@k>(˜7ÎK5³9Ÿ¹[}|¼‚µ³{ã’ž@ªâ@õ¶¯ðɘ§0¬ŸšÈ’oÆÐÑ3“àu8tÅ…6#¿à§Ï{pÃÒ(Ö™þY?\3IUíñn6„ßîs^0‹?XF¤Ї²ô­¯ØqYűë»ÌŸÜ“úåS9¾sG’,ðm7’Ï>@E®°ëëY¬3€1ý ¦³ðpömaTIúíÓ&ã™=²‰Éä[»ãßo: ®r—œXÁ> .Göq¯—Vš“™hkÖ£¶h+ס¶µˆSäÞPY­× >ÿj4jšqñÈvœ¸Jy¿.Œû&ËÝPK§ÍdLÇZ¸˜Ýüñ¦uëÂs^¢Ž&†ÆŒaaD.÷þÌYú>›x¢M:ÃÇŽ¼9ªùMášmÀT~øîuz6p 3ìGLðió<3—Îa€‡‘𽇸bÔR¡^]\4œëÔÆM Š©/~¾:°¨I]-jn0{å=D*Ø6iN=³BN<Ê­ƒ-ÚŽãÝnN¤œMFçåO÷±óXðjíR A„bÖ„q³&ÓË¿VÊýÏ{m•çøßÓéë_ÏrÕ­'ï¼ÜìC‰ûGãÒ“ßL¢w;.ÞÌÆƒ—°õïô3éï–v×÷‰áÌa'ƒ[@ÕòËãå0BâµÔêõÃûàçƒ[9S HK8ÏÅŒ’}‡£qlBߨ%ìåï—ðçÁL*  }3À‚ªŸ¡«O§6üÌ’¥9mÙˆ¾½c¯€…OgžéZ•ü“›øuÉ÷ü±÷"-Ÿ¥ßSŽhP°ñëJŸÆVœÛò ‹ýÂŽÄòôjG53Pœž¢WÏ:pr-?-ZÌŠýéTlÛ‹ É»ðͶ ήeÖÇË{Ä©7·7Ú‰&í|IÙºˆyó³9Ά†ÝÚRý¾‹4)Øùµ¡~ÁAöDå=¤õ eßÎTÎ:ξã‡UÇÑWïLׯNOäfB!ÄßKÅp)œ7ævZÐTŹ÷<œlC¸´f§Ÿ4CžO¿‰­yÉ?v$!.—ìí9¹|5/ÎÝßÁ¶pñ?÷%ú§©¤´¤B‡~˜Ýó?V &uÞÅ«‘™Û_&懗Iºès·qØ–|ÆÌ"(±ñ·¥â ¨Fˆ›}ž¼³6ÔY£)ê¦Ö­[ceeEaa!Š¢0kÖ,òòònºÝïµ…\ ÃMw¶1Ìœ9EQ(,,ÄÌÌŒÀÀ@€-äúh „ÍíO›n}èÖykShÊûQß[!õäVvÅ]dDlgmðݧIܽ Zï¾Œêæ†’±‹wzu£w·.ŒZžˆæ>o—fM±=¼—Ó8nÛ˜~•t#€6VZ|ž~‰N. ™{Þ£w×! Ôƒ~$[ãJç—úPY«¥ö€a4³ƒä•oÐkà Œè?„σóÀ½3==Øe¥áôB†õ g——YzÁ€¢U ý¼A={Ò}Ú²T->UqÐ:Ðax?¼µWX=y/MžÂ«Ï¼Ê’sàØfƒjÿõÚ+ijtx{:öîIÇ‘?oP°òk@ucÖ#É9´z'Ñ™ NVéìY¿š9c2ôåWyៈ6(˜UñÁK“EÌî-œLS\ÎîYÍþØ[Â’ôÛ }žºžñ:Ò³Wgžù2 ½bFõµ¸óRP64i^…ã{NÜgØ{§ŽG`°ª…_Ê×®‹§’Hè‰ä›ÎCS'¶­cùÇ/ÑïùWyy们¾h@cUŸŠ7|Œil0þšAmh>uû_ǶªÃ¨¹ïÓÙù맽ČýWQÑQ÷™á´°ƒäõ“èÚ¹=;=ËÜS7\¼j\éöR_¼uù„ÎL·#x®gO&nHòÍxqp} !{9’¥¢«^Ÿ:fÔò«Ž&-…TÕZµ+bæS—ZæPðöî;¬Š+}àøwæ^@z‘&vÅÞ{ïQcL4UMUM6=»Iv“ýiš1M5–MìÄØKTlˆ)Òν3óûAP‘¢¦ìžÏóð$Â3gΜ™{ç½ç¼çìQNT™_V÷öÔáÝÆS5èØ¼[‚]rY(ÿœ0œ‰G2jñn²4S|'O"ðwŽ”HfV¤nxŠ!Ý{2g³Äà»ö{sº>2‹+•ôí 9r ã‡Meé¹zN’j¿¾t~é`-£&îeù‡ïðÊÓÓyú½µügG"’}qÍ׉r™˜8Gkü¬ø8­frrÝ׬ù5Œ4]3†Naös/3ÿ™é hZÇ©e2n]iœ~˜mûÂILK%þôvOGogƒdåO—62á¿sâÒUÒ¯FqhÇ~¢J-°7³¦uPkŒ¡ÛùåT,)é©$œßËöLšvj«,aí`./ ±WÉÌH"bß&6l;M† ²­¶Zq.“š‘NBØN6nØId^Ú£~d²Bƒ9•FNN*‘ÇÏ“¡·ÁƼ–saÒ‚nݸr–k‹‰=Ve¤ÇFq%-“´ËÇøeÃϼTôÀBAþŒ´²,ЙJHÍÂÑ9”ÔmŸ‘›EqÊA2wü“\“a8´´¾ÃÖ%yÄ=kÈO»DIê!²/„ƒ¥+ú»¾MK˜Ø»!å"÷òyJ2Ïsp!ñ;~¢øO8¯ü¿>G‰u'kš=펦AÒ§W(Œjx6  íðodƒ¹¿:­”3¿'O”VNïÈÊòÊà<µîû7ÆE]èrÈÊÕ i6"®¢ Q”sb Ì$Y×’6>fH²ã—‡2¾Z)nøz[!e–ÿK+ŒàdDù÷Ò„x’h®3©á†£µþC¾ÌœÀ¸QgåKÞøúµÀIš$×-*Õ¡ÝÌ ¥b1§ËU•„ËIµ¶ÈztÜ6TÅ<€Þm£8üFmAI•káçHd6Ú¹Ò¦m+ôE'8k¤}•W‡®äý’aLý0KVyãí烇½ ŠLµYJ&»W¬áT’°/?Põ}‚§%©ô2ÑÑéåùdÚwtC§^çð–JÜDá IDAT=d(@q4[·‡ól‡Àòòô~´km†d<ËŽíÑßØÇžm! ƒkÛ6¸ÿ‘°FônKÇÖ~ÚXRxü[‚}Ÿdb‡vx”¶¥‰N!òÈ1²5*GzÔ½=eììm‘µ®ß–ÈG£ìt0Áå'ô]Ûykcì}ðu–‰­¥õï'­$„Õ_!¾Ðw¹{¿÷õ&¯:5‡ƒ›÷“¥¥—Ù¾#‚:w©ûNëp}©‡C8–5ž-§òÅÞ‰ä^9ω£GØ¿e3¿„jž:«w]A“íp°—!¯Y8Œy$œ9H™ƒ ›a×Ô ÿŽÝé>ü\tß°æTîÝ·—¬puµäzrrù} €Râ®'е肋”FDÊÍ “–Æöõ€ìÎ{=޳XÔ½Z¡H¥×°”Tâ#BIì0ˆÇæyù W.›H®H:KXæT?=ÿ¸Ë$\‰çRÌ%®æ«ðÀÇb”žž{óR0ë”Å¢UÚhØWZ¥¨Ë„/b¸y<Ýé2q Wˆ!>ýöQv‚ ‚ð¿@2µBGJèš´ÀÄ´ÍŸ=G󪯑TЬìn]–Açzx–^SpqñÀÌÞ ®HekkÙ«Bñ…ÿPØn>Oõ$?þ$ G¸~9Œ²û=2õ>ø¯”Xw²¦Ù\àF$¢a™w+vvvèõzòóó+—þ­-HRñwƒÁ@^^NNNhš†½½}µòMC­¬b-IñTŽ„ÞD,ªo¾Æh¸û[Ë.ôò=Ï®3¥w{ÕY´i·Ô¼ËĦ*8TÖªz}5IF–tÜ„¢Ü‡ÆÚíí¨Ýñ4ªåí¡$³sÉ2T[ÚG!ãLie9ZÕ2k ¼™à?ç6¼èÏõ£+ølù¼ŸÖž7~ZL×zÌÝÚ­ê¯Õ*¯»{?2i׋€+Gø¿š3ôV2^:GxŽ~‡èc‡}–ðâêa–ݳá»GpKÙË—Ë>å«s¥ \º‚9Þ·H1EÅ·ïS"ŸØèZúµåñ—dzõ©ŸH‘ÌhdV•Ъôë’â’jÇ&Ýø}µ_V¶‘„¤åpìh$ƾèØ†æQ?nå¤q:w d¼Ñ½1Ž£!ÉÕ®‡º·§FY™ =&wºc«Uê¦Ýèo((¿sd^++¢¸2âYK¿?g Í´ÛU9p¥Þ•®ýúR2aÁˆ6€~}éÛ£#CftfÈ´‡éõâhì©©lz½ Zee ¹gHصL?ç+ì9SžpZ-%7ùÇ’ãÈ3{ޱþ^X‡ž¾Ã¶2ºÊ‹OB’A«é}B–‘Pk¸ÿ1* q;>aÝ™FO¤Ÿ`íçѸ{ûâÙÂVý§1`àe~Yµ‘ðÜD®ø”ð>x{¶À£ã0º.ãüÆïù5¶.#3åÊûn½iJýïÕ’5~í<)º¸†”jo>…ÄîøŠÏO{âã剻GWF÷LÞ±õ¬9˜(’½ ‚ ÿc$t.þ˜ªñ”äÑœKÑòÖ÷õ?)¼Óç ©Iõ›÷¡ÙŒ±)=@Nô)ò#v“•XŒwPí{Ö2V÷Õ~,[öÅÚ£3v}§Ó¤ÿQ’\HNÞŸkXÉ_vêu€ þß¶Å&èΉY­:Ù”I$Hú2±ÁA’ª*#F£;;;ÌÍÍ‘$©Ö#¯±°°ÀÑѱ20RQÞŸ…t÷y2w¡Qp)–d£„iÀ ú:Ë€%F¤Å]f5êÔ‹ÑG8UÏA>:§<;o²Jö=„r!â ŠdBàÈa¸éô¸I€ (q\,ÎåRL:ŠdJ@¿îØJ€ÎƒÇÖ„~þo÷0ÅhT 37w\d@²¦u[{ËÕ¬ÄSŠ&Y¢&ícó¦ÍlÚB–ƒ7>Þ1-«ÿGtYtnôØ s-›ýß|ʆ}a¤7õ¯6U¦ÊÈwê£ZÚ­äöÍj§£Uï®d‡” ¨Uig.(Øt›Æ‰ÔsçI¯ö£Ç¯o?ÜMT⃿àËM¿^èNëfu=3¥GþÅc~ȯY`ÛëY^èo‡¤¤s%±M¶¡÷˜þåÉdMÜ>¼ÃÍ<Æ"¢ÊÐô­6Ê3Ù™Aczb-)d\ˆ"CUI;Â%EO›Ii''sî\2çcQ݆1¡§5jÚ1ŽÄ6t]•Œ´L4Ùg§[oÙ&G2¼™q4ŠVJJá™êƒéÓuQ[¿/I 2*U¶§ÏèÞ8H€i FŽhW-z_kýk½¾Œ4í÷$ ž‡OÚϼ3w ýºôãÙŸ¯¢êìéàY¥-n¹Nd'\d(Í$½AëËj”éìñ ì„—õ­×ŸŒN'¡””T.Ó-ét7ë¢sÆÅñÆ6ZY™%ظ¹qs ^Þáé¡-‘³3Ȧ1nMn¶œäØ•©ó¦h›CZºBc*Ó|dw{ˆG{c†)nèÝR&éÂIíø™UË7pFó¥½—%–žAôr£ìJ8'öoç?ß}ɶKÚµó¨ñ[½^W9ÖD²qÁ¹¶©2÷‘díG÷¢£ªO!•ìüè9 #ö¹—8²‡më¾âÛÝ©¸thS-O” ‚ üOÐûâ„·‹‚RP3¢(³ À²êrÁƒp›¾'§Û?5Ê-&`o¾‡äu‹H=ñ3¹—Ïb0Ö%Ëœ_ÄÕS¦èâ¤íšÏ¥oŸãšÖ‡–Ž÷ïøî“¿ìˆcž­<÷ˆA#?ìæÒ€Ö­i6×$H^žHAØõ»”T»Š%|SSS+sŒ˜››@TTTµ%~+r•TüW’$t:ƒöíÛcggGII fff¤¦¦õÏQ"7›ÈÇ›ûPu†v}ïÍÞÒ€£Ó(*(BCÆ}ø ¼ÿükýKQ"7²îÌt^ë2”6odF†þ­]‘¡†Q%zÚô$ùè2rk}˜–qó>›ƒŠÁÄ–¦M°1‘PsðÙ²C ³~9»¦|Äð¾o±qËPÎe»Ð)È+5à/â’bDZ¿ŠÐɯ4þc6{œ V׊­bÖ²%¬”ë9ç‰3ô¦Uç…ü<ŒdÙ¯¦–÷MÔrØýÃ&æôy˜aï¯gE¿S\kÚ“!]›PrâC6g¨àT‡bÊ )4hÐ(GÞšMî¿·’ZˆÚÞ™ñï¯Â墂OP'%LL1‘µˆÂB$Gú<ýS‹þÅÆj¥Ö¥Ý Þ¹•tôìfäøÉu[2TÍ&ü\"ôð¦©VÀ/gcQèPõd¦¤Q¦¹ãóØRVúÆcÙ®mÌL13­ýAL½~¼kûøìÛ3 ZÀ˜—ŸbCÈGÞOæˆq¸Žþ˜m~’læM;wË*¦²í«Ì œFÇV³­ûi’­ÛÒ­äá«U§Ë#^!$eþîhyG8[FºiZgÜìT²÷½‡d— q¡ad3‰¶íÝѽ\¥]54ó ^ÛÌø8vÞ8’Çáo×qÞ¨!E>€>]µöûbâ\KĘçi?a)ÛÛDbîM«ÆUß’4®×VÿZ÷£PÐÊ‹±³Çã4m0}†’¬¸Ð¡ocd%“ã!1(j£Û®“õçŠË“ðúê1„Ÿâlý½PÂén3:mÖ!çIÈ.3k\üºÓÏ«sëc(F£0¿©}'‚ñÇH—šÒqhšÊÕ°æ«73÷–41^ådfõÚiÆF4 Œ#…=§“)Ô9ÑÚß%ëBÞAá/Lj„ÞÑsYIlÝÛ.ÏàdFJðžòô™[ÉJ~˜&£Þ@9ô…ÅÎØöy “ \º¦P>tYBgÙ½iJQFÓ¬=½(N)ŤÙ8÷ꆤÏCßH5:-ûÁ¸öôES—q=» ½ûX¬,²(Ⱦ·çõá/û]Jñåb>I šÍqǪ}y¢˶V¸ÝI’¼<‘üÐ{oôŠ©3çÎCUULMM‘$‰7ß|{{{ CåÂUƒ$š¦¡ª*ƒ^ýõÊ•q*ÊkÉ̉–þþøWùiå×Ë}q§pyë·lŽÈž ïìÒ°N¡ÄóÜÙ|°í<ñµæ«·W]Ó“²Î‡ÞA× 9šq—ä±$LZÐÊß¿–.˜¦¾w%‹f<Ïú„ò¨é¿°hÆK,ßs‘Ò¦]èèJá…],{n&¯þš‰ (ñ«™7ë]6œÌÀ²M/º5/#bËÇ<ùø'œ-åâ ¿·•³)EX5oõå,Xz물zÒ(ùÙÏ-go‚FŒ¡Oó\Ž~·ˆsVS×ÂK޲ú«£$ÚÐqh_¼-rùõƒ×Yu,‰;O|RXûÜ;ìÌ׬û1f€ ’–Åž•kM+Áµëº77½-«@]Ú­¾d×t·9Å‘:gèU¸t6‚|0Fs6¢ø–i(*IÞåígHSœñõ² ò‹çùøx)šÎ£êñUˆ_·”Ÿ’Tô-§³èá–îŸ9o®bx&î­q+8È?¿:Zåœkäù3Ÿ\Âö³y8têC÷*—¬ä•*ýãŽËAEÃu†ˆR0Æ„s¡L­ˆS‡ÏÔüžQea»Ù—.á7 ?î·ÄU‹÷}Ê{»óqówƒ¤“¬s&ÏmH*ïó¤O×EíýÞõsç~ÊöÓ©˜¸ûâ”±•·—…T›Q{ýkÛÆõýçñW¿ç`¼ ­Žcüˆì2޳öõgøû¡|´®ëžéfQBè®Cd6t$¨!‰kV³?Ñ ÿxxÖlfLN ó5ŽmXÍžøR@ãZèö\2¥Óä9<ÿìã kGHøÍĽJÚ~ú)”bÏL™5‹‰=ìHÚµ½—J€B¢‚×±;ÁŠN£g2ë‘áø•†²qó)²5(KØË†-à?œé³g3±‡=É»×ñkT! rõðföÄ7¢ãØÇxò©™ŒébEÂÎ H0Rvi›KÇ¡Ç$f=õ$ÓG´C¾°…M!éw¸7¹'˜s?F?ñÏ>5߬c„¥ÿ^Ãhõ4õh†.=™Ô[“^„³sË)ò›à¡ÇŸföÔAxdãö3Uò¾‚ Â!ɧñ?á;{¾­ÃkôÓX•“øã deßxÃÔ’ÉÞ6—´Lo\Æ®ÆgêëØ”ýÄ•Íß–'YÕ²)¼|]À·´19aIG“°²ŽVƒ›_™[ß%Ï8÷ Óï²ò‘¢WH¹bƒãÈUøÎþ÷Î.ìyžÔÄ~+õIÖö®÷ô1Áåe®‘}¿êSoÖ64›ëަBö/™8ŽtFÖK\ý6‰¼Z’äÕWKONÙ‡¦iØØØA³fÍ8zô(AAADDD°`ÁÂÂÂ(..¦¬¬¬2Hbff†¹¹9;väÿø=zô@QdY&33“víÚ‘‘‘$IõÈ司ûÐ" ÉΗ›Ó¨,™°#Ñäh`Þçïìýf¶¿ýÞOm$G| „Òá÷ìÏlž§ç« ãø$JÅyêw|¯e[ç´pÿEžË1Ë8ñï°{]çó‡­I"90ö‹Ýü³Ó~žºˆ=uȵsȘ˜›¢—Ô;ÁõŸŠ¤§‘™Di‰A$KAáwe3Ï‘Œ¿ìˆ’ ùa×¹úu’œÇº é eeò} ’TÐ4 Y–¹~ý:Ë—/G’$vïÞÍ£>J§NØ¿?çÏŸ§oß¾ÀÍ©4]»våĉ8p 2H¢ª*’$±bÅ 222e¹N+æüÙI¦íxô__°ü›ïX22£'Îå_¯Æ™\ï8"¾µ„{¢³ú3¶g·dÊ£}¸-å…p_é¼&3³¯ž3ß.gÿï$P1üÕƒ$š‘$Aá/ì/›£¤ªë'óÐ5’iü¨i«SÈ=œs_˯fH’IJe˘4iï¾û.S§NeöìÙ¼öÚkhšFDDps›‹/Ò¬Y34MCQ4MÃÄÄ„˜˜–,YR9òDnð²jÆ&=aÁÂÓøèÛ|¤/!ûò)Ö¼±„¥[î4L[„úÐòòñß>¥¨—+ž )?¸¸8 EèTOЛ{ùá‘&5'5^bÙ¤1,‰lh¢ÚêÔü4âãâ ½à|È–iÜÒ”ó?¼Ãú5qu˳#‚ ‚ üWùËO½yмZz’’CbbbeÒÖŽ;²{÷n4M£ÿþ\»v Y–III©¶mEPÄÝݣш©©)yyyŒ1‚ÊòÜÝÝiêáû—žz#‚ ‚ ‚ $1õæw¢( ~~þH’„ªªÈ²ÌÙ³g7neeeDFF²}ûvV¬X¥eùj#D*¦àȲŒ©©)IIIŒ?¾ZD’$üüüQñ½¥ ‚ ‚ ‚ üÑD ¤ù˜6²¨ –èt:BBB dåÊ•tîÜ™¡C‡VnS‘sDÓ4¬­­)..fõêÕôìÙ“ Óé*ƒ$¦¬È/(øýNAAA„jþ+r”ÖVV¸µðí…_ƒÊÊ-,#?=‘¼¼<ŒF‘ÄUAAAþ,D ¤ŒF…ììkdg_û£«"‚ ‚ ‚  V½AAAA¸AJAAAAnAAAA„D DAAAá(AAAA¸AJAAAAnAAAA„ô÷£Vþ­ïG1‚ ‚ ‚ ‚  ’Bú})ç¾J.F]¸Å‚ ‚ ‚ ‚ 4ˆÍÇûRŽ˜z#‚ ‚ ‚ ‚pƒ”‚ ‚ ‚ ‚ Ü %‚ ‚ ‚ ‚ 7ˆ@‰ ‚ ‚ ‚  "P"‚ ‚ ‚ ‚pƒ”‚ ‚ ‚ ‚ Ü %‚ ‚ ‚ ‚ 7èÿè ü•èõ:lmm±¶²B§Ó5¸EQÈ/( //£Q¹5AAAá^ˆ@IYYYâì䄳ƒ=e%DGG‘œœŒªªH’€,ËH’„$Ihš†¦i¨ªZY†$I4kÖ ??\Ýɼ–CfV…Ôa ‚ ‚ ‚ ‚P…”Ô••%®..8Û[¼}š¦!IRåÈEQP”;©xªª$&&’””À¨Ñc‘eÈÁAAAAø’Zèõºò‘$öVoßZùûŠ ‰ÑhÀÜÜœ€€<==±°° ¸¸˜+W®FaayD§Ó¡ªje%xûVF‹ªª”””ˆi8‚ ‚ ‚ ‚ð’ZØÚÚâì`ÛH£Ñˆ§§'sæÌaòäÉ4nܘFUn[ZZJzz:›6mâË/¿$&&¦ÚÔœŠ`ɈQ¸žŸOvöµ?äAAAA('V½©…µ•e%@õ ‰¦i<ýôÓ„„„ðòË/Ó¢E 5j„ªª(Š‚ªª˜™™áîî΋/¾ÈÑ£Gyá…*s—TKÊJ °¶²úÃŽQAAA„r"PR NGttTep£"Àññdz|ùr7n @YYƒ£Ñˆ¢(FŒF#ƒ'''–.]Ê_|q[Ò×èè¨:­¢c>òS"b£¹¸s>íîôr¹9³ÖG}”w{šÔùõVN¸¸ºà`y£P«1,ˆ&6â3F™×¹˜†³êʯMÀû¶c2¡ß‡'‰‰&öÆOLtçOîeã²EŒõ³Dúª÷§ 5ÂÖÅW[Ì꼑 \]œ°¾ÑLúüƒ“ÑÑ\øñšþW¿IÛ©¼1³Ãê,aå7†—?ßÀ¾g¸Ι¬[ò<ÃZZÜß:Ür̵ýû’lèó÷ý\8ð=îãµõ‡ӟ­}]‡Çck8öx4|…²JšÒqèTžxþ¿ö* _|†‡GwÇÓú¯ß¸’•/Cf¿Ä+/O U­o2ûÍaÑ´ŽÜ©ûê|Ʋà¥Q´¼ç&—qjÛ‡¶.·¶¯)®F0í©—X¸à9fMêí_ÿ‚ ƒ 5™O«W"é°øÆÏ¢ó´{q7>ã_Äα>Ÿ·eäFèLêø/yà23ïÀ¦€ó>[i7eü_n*‹ø„QÉÉÉH’„,˨ªÊ+¯¼Â‚ (--åÂ… deeajjЉ‰ ¦¦¦•?z½rrrˆŒŒ¤¤¤„¹sçòæ›o¢ªjeÀ$99ù>ÕÔ@nR,11—É(Ò긞¶óÖòÛ‘ƒü0Û€šÏÕK1ÄĦ’_×bîyà8¦»ÈTkz…†!7‰˜˜.%ä Z7£ýàÙükÍRj~‚þ$›||à7Žì—þ¦uÜH׌é_àÈáÌï\~kÒŠÒ¹ClR.†~nu´1ƒVr6†[ÿâ1•Ïü'O i³’JÌÅ+ä›»ÓyÔ<>Y÷o&ºý~·¦ß³MLÛ=Á¢ œýa%Ç‹ì¾þ§ÜÖ×~þ–_Šºðì‚a8ÝKDUr¤Ëä mi bÏzV~»‚õÁ'ÉtèÁÔG†âÙ¨ö"þ¼$¬[u£“i$?ý ±·^¨õ¤æ\"ôôerk¼—ב…/=vÃÛ¾ú‰3÷ÎCý(=»õÿÙË‹@&LêÁmñAAÊiñdo™JÌ÷Sˆùa&ñ¿þ@‘ÅxÜ^Š£C]®8LØg§¦uÜçuŠ"W““VÐðzÿ üÕ;ˆŠÑ$Š¢È[o½…ªªdffÒ¹sg\]]™?>^^^ÄÄÄPTT„¹¹9>>>$%%±téR.]ºDll,žžž¼úê«ìß¿Ÿß~û­2ør_¨il~y<›ïµœ¢¼7îÀý¨Q˜Ð®wgŽ,åz©*é[1ö§1:—>¼úí§ÌôïÅóóú°}ñÄšAuc ý”i£?ý}v¦kI¯ B^M¥z×á5ê!‚l!wß댷‘$«vÌ[±šç;õaƘ–lùò¿Gzãß­M$;?þ^Ňyyk÷éªjRp„u[?ëq¦øìdYLÃz“äԚ͊8½z Ç“o”‘‘Nòլ採‹ïAâÏÿu£^zS´ü,ÒóJïùzÓ²"9ôÛþ"!¡Q[R²ó¥G·¶xùøÑÜZ#²Ú_­ñïÒý…MŸ¼Lpu› îsºà~ŒWD2tAA¸V‚!ëÅY7Þ'ÓÎRpù,ÊëhÒgy[~ÅxßwšCÁéO(“üu¿ÔþŸúÆ6ÈÿoÛbÝÙ¶^ÛUäøÛßþ†……’$QRRBii) ¼ð Œ=šùóçóú믳`ÁÆŒüyóˆEÓ4 ‘$ SSSÞxãʲ+òžÜ³[§Þèüy1ø±Q»xmähÞ\€3çOstû2žï錌žŽ‹v°þ tèhõüVB?€é­Soj-çóŒxõ;v;Áo?b渗ÙÍ…õѼ¦ž¦ó£w×lކd×ú!º‚’ñŸ|¾‡UƱÿ`ºÜ˜×aæ1ˆ?ý‰¡çˆ ?ÉŸ—ðÂ@wnÀ°n3‰·VsôÜyÎßÍOKæÒÏÍpžº‚ÈØ‹œùxÀm$ì'KdìEÎ/‚)`;a9‘± _±9_îå|t$g­ç½q¾x^ÌB ?{”àåóèáTqÐzšô™ËÒû ?Ë©ƒ›øbá0ZÞø&Zn2ƒ5¢‰>õ!¼È÷{OrþìQv}ÿC›ë‘l'ðuÈô3̆ñÙ¹Ÿyº¥dg}Ⱥ=Ç8!’ˆÐl^6Ÿ!ÍM@çÁv°¨ƒäÆÌX}†ï&Ûcz‡)µµ[Å”¯ˆofÒ÷‰ÏÙqâ,çOíeÝ?&âw—é#r“ô0?Á‘Ë·>ÀHØÚÛ"e…ß8ñZA«ÞZÀ«¯½Éw'òÐ0eÈ’³ÄĆóý¼±,\¹›ÐsÇÙûÓg¼<Ü“Ê/òe{Ÿµ{Žs><”#Û¿áIm°®ãeuë4•º¯¾Iž_¶•£¡Gؾl.#ç|Odìv-lwÇ·¹ÉH`Cþ¡íÌѨÖç>yŒño­åЙ0Ží\ÿçö¦‰êÚ/ïÕÍ>ø£ƒfò¯u»øâ!'¤Zú.HX·Ækwrâ\(Ö¾ÁCÏ}Cdl4_ŒÂ¢Îõ¯m?2ñá¿p8ô‘玲kõ?x4й†¾.a$r[0±R+&O  î“«“d²dö°b IDATŠ•õ-ÈŠ/q`ýz_12͇<Ï+ü«œ{=þ“3g@Ó÷H KŒ}t/.z•ùóf2¼Sã›çOïD›!Syü¹—Y´è%ž˜Ô—–67ï!­1yö³Ì_´˜—æÎdd ÛÍé/² -{OdÖs yeñ+<÷Ädz·´¾15Qƒÿ@¦<ù" /fþ³³Ôs$\ú<Å3Ý0m9Š—^LS'z>þ*ÓªäÌÒy2ü…ŒòªýƒŽÎk4/UL½ÑµbüËOзuW&?÷*¯ýí5æÏÁ`?Û»L™T1dwî"Ê-ïú&4kÉ—(»ñ+-/ž¸, š5w@$‹ætý(sç/fÑ+/ñÔ´A´ªë·e‚ ‚ð¿Âx¬3'‘ZŪâãEÎ#Và7÷8í^܇ï„ç°µ3-ŸFóÈNÜÜͱ°“v“Æ dç1¸MÙJëùgi¿ð(­~GWËò²¤f8Ϩ˜zs ¹1Ö=>Æç™#´[p ÿÇ–âêéú§L§ð?(±éjKÓ'›¢aÈ)«}ƒ*dYFÓ4ZµjÅ Aƒ*ƒ&’$affV9-GÓ´Êé6z½¾rÛŠŸŠß©ªJïÞ½éܹóý ”ÔD×”©¼ÍËk\Í×áÜj ó>Z@k•ÄÿÇ—‡²PQHÙó o¯ª9ªXc9H z{%ÿ7«'îr6YfÝYø™wÈ;rK‘=é¦çHrý¾ ,Œ8Ï%do¼›è]FðáŸ2wX¬²Îqü\Vm‡3ï‹U¼?Ä ›Oaé÷ï1£gSJ£Npêªþ#ŸçË• éZ¯|z=Î3­ ‰K*¤Q“N<ôÁF‚—NÀ5ï*×$GüÎãŸÏw£`Õí¾_þ<ÃÜó ýåWNd»2à©ÿãÇ¥I•+P²Æ[O¦ñõ®ixöœÉoŽÅ¥$”•ÿ‰‹FÀxž5o|ÎL §Qïðåâqt²¿Æ™ƒ8•fŽÿ §øøý‡p#›C_,aG¢j!_¿Åw' o FÕ¥Ý*˜ÍgéS¾”¥dPjÕŒÀÉoñþ#^5ĉ%zôÄõÔ¢n;µ 1'CÉQe\F/a÷¯«øäÝ<5uí¤vü¼‘à°Ì*#.L|æf´,àJ²BãCxrÉw¼ÖË 0Áÿ™¯XñÚxüÕvýr˜$ë®<òïYþ˜÷= ™»ëñZtaáŠ/xvf¹é¨­Ÿà_ÏÞåa\Â&¨Í „?ͭ;Ä;£ÉŠË@ïȘ—ñõ³mïK¤>$³ ^Z²˜ñM±”jï»:¯Gùjõ[L tƒ”8r›Œãí¹=딨m?²ë8>\¾ˆ vdžÜÍÎãéØNäo_Ä”&95öuåòINf@“=ðmàó²šÉÙ$mÆ?Ã㓆ңƒMlM‘(#çêR¯×í{Ù)ˆIõÀîê6ýð=›çÓbèC ö2Ìñ6Q>eDüº–ï×ìä’E&æ>#˜>Ê›Òð]¬ÿþ6IűÏÃLîæ„Œ„u‡QLìjIüžu¬\±Ž)öô?_3œ»1~\;æÇ+Ù’‡ÛÀñôn.‘ñÛ×,ßw•²¸`–|ð‘÷8õæöƒv&h?Y{W°lÙJv'ZÓyô@üjH´¤å^âä‘Ã9IÆ­ÍjnµI ùùU*©_Ö66Șá3x ý]3øí畬Xó+±¦ŒÖ¡ÎASAAøß ¡¤_ Lö¤‘do\&,ÃÙæ,éÛgqé?ï‘£ Å}êëØ4J$cõ0®&S¸á?oC‘ýqó66†$­D̯q­¬M‡LÆì®ï¹2&íÞÁ£‹#ùûç»j.i©Íqý6uOÂø»ùŸ”XÚàöds4—^¡$®~äe¹¼™ú÷便%ƒI’X²d %%%Õ–û­Häª(Jµ•mTUå£>B’$ fffôë× N‰\ïBä§S0z"£G,"øšŠlßNž×Â÷r(¶ü¡âzÔ~‚Co&Q—rdtž“˜3º ÒõC¼=~4FdÎÏ)ȵ\,®=»csò—ê9jZÍË%O°ÄÚR‡ÏÔgî*‘ø]&ŒšÉã3Æ2ùýãÊñÌDZêt´}h=í cËBÆO{’'¦Ìäß¡%Ðlc»Ôï‘T¹ô3‡ŽeÜȹ¬IVtçÿ=™¡ãÆ1æo{(Ðt8úxã¨sdÈã“ñÔe³mñ žYü*ÏN–ïãÁiÀf´½yî%’Xóø`†Mǰ§V“¤HXvÀOMäØŽ0ÒT@IáĶƒÄäK8[æqxÇ6>y~Í}–'þHŒ"aæåƒ‡\@ìo{ÏÑ€bâo#$áÖa]Ú­J›_ÛÁü!Ã7~Ó?‹Ä(™áІ;§‚²&¨—gŸãö°¤FÞžwyüµ8›‹y‹®Œ˜ö/¿·”ï·$ä×ÿcºÿ-‘«˜oyxØ&ÉÜ ‰¨º¦Œ~¨6æ½xìѶ4*>Âû3žäåÅ/1cÖçœW¬ |j6=ï!ajÍÇ+á<ò)¦{™Pzv)ÓFLdìð™|s·1Q:¼Ûøaª¦›wKÀJB. 埆3qâHF-ÞM–fŠïäIþΑÉÌŠÔ O1¤{Oæl–|×¾kN×Gf`¥’¾}!#GNaü°©,=W¿@4Rí׈ί3¬eÔĽ,ÿð^yz:O¿·–ÿìHD²/®¹¯+—‰‰SÐy´ÆÏªOËj&'×}Íš_ÃHÓ5#`èf?÷2óŸ™ÎЀ¦Ô-E‰Œ[@W§fÛ¾pÓR‰?½ƒ]ÇÓÑÛÙ YùÓ¥Lø¯Áœ¸t•ô«QÚ±Ÿ¨R ìͬiÔcèv~9KJz* ç÷²=$“¦Úã*KX;Ø£ËKàBìU23’ˆØ·‰ ÛN“¡‚l뀭–E܅ˤf¤“¶“v™×°æ¨™¬Ð`F¥‘““Jäñódèm°1¯ÿ¹ô&è)£¬¬êÕSFYèMô Y`ï`FáÕ‹Ä$¦“™r‘Ã[×±ùXÒïIAþZ´²,ЙJHÍÂÑ9”ÔmŸ‘›EqÊA2wü“\“a8´´¾ÃÖ%yÄ=kÈO»DIê!²/„ƒ¥+ú»¾ÅK˜Ø»!å"÷òyJ2Ïsp!ñ;~¢øO8'ý¿>G‰u'kš=펦AÒ§W(Œjx6  ~´p/ÁÏFFÒ÷áý‹¼_uvÞø¸ê©K[ÜAÍǫǯCÌ$…ó»wWpMÁ‘<Õ¶} ¥ÉØÙÛ"k \¿-FÙé`‚ËOé»¶òÖÆØûàë,ÛÀú7„VÂê¯_ è»Ü½ïúz“×Î šÃÁÍûÉRÒËlßÁ »Ô}§u¸FÔÃ!Ëψ–SùbïDr¯œçÄÑ#ìß²™_ 5OÕ È»® Év8ØË×À<Æ<Î$áÌAͰkê…Çîtþ.ºoXs*÷îÛKV¸ºZr=9¹üÞ@)q×èZtÁEJ#"åfIË cûz@vgˆ½GY,ê^­P¤ÒkXJ*ñ¡$vÄc󼈿|…„+—ˆ‰M$×$%,s*ƒŸž‡Üe®Äs)æWóUxà]KHOϽy{0œE31bЉiµqn˜š€R¢€–Kô麎šÆ·xââHˆ‹!æJ%÷v‚ ‚ð_G2µBGJèš´ÀÄ´ÍŸ=G󪯑TЬìn]–Açzx–^SpqñÀÌÞ ®HekkÙ«Bñ…ÿPØn>Oõ$?þ$ G¸~9Œ²û=ªõ>ø¯”Xw²¦Ù\àF$¢a™w+vvvèõzòóó+—þ­-HRñwƒÁ@^^NNNhš†½½}µòMC­¬bí õê_Ž„ÞD,ªo¾Æh¸û‡bË.ôò=Ï®3¥õ®ŠE›öxë@Í»Llª‚Ce­ª×WddIÇA(·Î}oíövÔîxÕòöP’Ù¹dª-í£q¦´²­j™µÞLðŸó^ôçúÑ|¶üÞOkÏ?-¦k½æníVõ×j•×ݽ™´ëEÀ•#üß2ôJ–´9•žMáêáµü•DDH!¿òóá\‚×>N‹–¾xV>üjÕÛFUËG=­üÿÕkGXþQ0 U›WÍãBŽ îukƒ[Õ|¼åý]Bè(•¿W w ÷i”•ÐÐcr§»®ªÝ< Ú>ƒ‚ò;G×µ²"Š+£–¾{Î@›i7¶«rš•zWºökDÉü…#bØ%¼…Þž-ðè8ŒîƒË8¿ñ{~­ËèJ¹òÞYošrî·Å×É7˜aeU¾ª’%V–õ:*¹çæËx7¼|ZâááE‰ý˜¶× CäzA„$t.þ˜ªñ”äÑœKÑòÖ÷õ?)¼Óg©Iõ›÷¡ÙŒ±)=@Nô)ò#v“•XŒwPí{Ö2V÷Õ~,[öÅÚ£3v}§Ó¤ÿQ’\HNÞŸkXÉ_vêu€ þß¶Å&èΉY­:Ù”I$Hú2±ÁA’ª*#F£;;;ÌÍÍ‘$©Ö#¯±°°ÀÑѱ20RQÞŸ…t÷y2w¡Qp)–d£„iÀ ú:Ë€%F¤Å]f5êÔ‹ÑG8UÏA>:§<;o²Jö=„r!â ŠdBàÈa¸éô¸I€ (q\,ÎåRL:ŠdJ@¿îØJ€ÎƒÇÖ„~þo÷0ÅhT 37÷òå&%kZ·õ¸·\ÍJ6oÚ̦-!d9xããÝÓ²zNS€ò‡½¶Â\Ëfÿ7Ÿ²a_éMý«M•©²òú¨V‡vkÐW±:ZõîJvÈ1²ïôŒ¤±ï6‹//äÅÓheQQ7ûzb'ƒšAvåƒÿa#ñmH6tÝ7Jnd8qI‰ÉS‘ÌudÛÆ¦M›Ù¼/ ó–Þøx˜£>ˆ1÷Fâbâ0jzZ@s=`Ú’áÃÛÞ%ò¬’‘–‰&;âìtëmW¤óH†7Ó2΃FÑÃJBI‰ i?óÎÜ)ôëÒg¾Šª³§S€g•¶¸¥¯ËN¸:ÉPšIzNCÞ|5ÊtöøvÂë¶D2:„RRR9µCÒénÖE猋ãm´²2K°qsãæ ¼†=ÃÓC["ggMcÜšÜl9ɱ+SçM#Ð6‡´t…ÆU¦ùÈ4îö öÆ SÜл¥LÒ…“Úñ3«–oàŒæK{/K,=ƒèäFÙ•pNìßξû’m1–´kçQcÕëu•cM$œ0Uæ¾3¦”*ѬEóÊ8’•NÅ$']C“]hÛþiD‡f÷æÕ|½êùÍ;àçø'¨¿ ‚ üYè}q B‹ÛEA)¨Q”Y`Y5ºÅ ܦ/ÁÉéöOœr‹ Ø›ï!yÝ"ROüLî峌uÉPgEÇqõ”)ºø#i»æséÛ縦õÅ¡¥ãý;¾ûä/;¢Ä˜gE+Ï=bÐÈ»^ù7ëŽÖ4›ë$/O¤ Êߢb ßÔÔÔÊ#æææUm‰ßŠ\%ÿ•$ N‡Á` }ûöØÙÙQRR‚™™©©©@ýs”ÈÍ&òñæ>T‡¡]ßÇ{³·4àè4Š ŠÐqþ¯ÄÿÿÚ_ÿR”Ȭ;3׺ åƒÍ™‘a‡kWd¨aT‰ž6½I>ºŒÜZŸee\Æ¼Ïæ b0±¥©GlL$ÔÜ#|¶ì(Ĭ_ή)1¼ï[lÜ2”sÙ.t òÁJM#øËŸ¸¤‘Ö¯"tòkÿ˜Í'ˆÕµ¢GG+¤˜µl +åzÎyâ ½iÕy!?#YvÇ«©å½Eµvÿ°‰9}fØûëYÑïךödH×&”œøÍ*8Õ¡˜²B 4 ä‘·f“ûï-¤¤¢¶wfüû«p¹¨àÔ G $SL$@-¢°PÉ‘>O¿ÆÔ¢±±Z©ui7¨wn%=»9þFr ç¾”ãß͉a¯Ò½Ç+l9<ƒ˜¸ Œ6îøz:bªfqà› D*ÐøÆ²ÿ3¬ÝÑŸèüÆ´ñwE.gÕG).†Õ?F1ò¹n,Zó!ÉØ¦—§LÔ—óÙý_ï PIÞþ#ûŸìÀРWøÏ¶$šzÑ®™·ÏAª F6“hÛÞÝÑËUÚFC3âµMÁŒSðhç#yþvçRäè—uQkß-&þǵDŒyžö–²½M)æÞ´j\õmEãzmõ¯u? ­¼;{”q×$ŽFg!5éÊоMÉÜL)Fpð§WoWTõÑÙ VhaYÀ•¬ ¦®t舲“cñy`ëM7=×Î^»=•VD~F“vAøÄ#]jJÇ¡=h*CVÚï>* êd$½'bЕާ5Âo`oÜ2CÙ›`MÁªE7zºK(ûÂI/5£I'ìJ³ÈÌIJA„ÿQR#ôŽ~˜Ë Hzdë6Øvy'»0R‚÷”§?ÈÜJVòÃ4õÊ¡Ÿ(,vƶÏk8˜làÒ5…òÏ·:ËÆèM3Pв0š`íéEqJ)&ÍÆÑ¸W7$}úFz¨qÀjØƵ§/šºŒëÙeèÝÇbe‘EAö½=¯?Ù%Å—‹Iø$4h6Ç«öå‰f,ÛZávc$IòòDòCï½Ñ+¦Îœ;wUU155E’$Þ|óMìíí1 •KW ’hš†ªª lllxýõ×+WÆ©(¯!$3'Zúûã_å§•_,ô¥™Âå­ß²9"ôºNÈÑŒ»$­ aêЂVþþøµtÁ¤0…ð½+Y4ãyÖ'”ï@Mÿ…E3^bùž‹”6íBŸ@W /ìbÙs3yõ×òT”øÕÌ›õ.Nf`٦ݚ—±åcž|üΖ€rq‹ßÛÊÙ”"¬š·Àúò , ½uV^=i„|Èìç–³7Á‚N#ÆÐ§y.G¿[ÄŒ9«ˆ©ká%GYýÕQ mè8´/Þ¹üúÁë¬:–D‰'>)¬}îvækHÖý3ÀIËbÏÊ5„¦•àÚuÝ››Þ–‘ .íV_²kºÛœâÈ]2ô/­fÎÔù|JB©-^mÛãëd$áØ&–Ì΋?W ²8õÕ»üçª#­<ÍÈ8»>ö_^(ʈ\ö4Oÿ;˜hü2v~Ƴ¬{k³> £†‰ ÷LÍØÎ+¾Îº“IhÍüpMûûòÔ]ûJYØnö¥Kø èû-±Ñâ}ŸòÞî|ÜüÝ é$ëßœÉs’Êûíé—uQ{ß5D}ÅܹŸ²ýt*&î¾8elåíe!ÕøÖ^ÿÚö£q}ÿßyüÕï9oB«ã?"»Œã¬}ýþ~(­†¾nÝs Ý,JÝuˆÌ†Žæ4$q`Íjö'šá?`Ϛ͌Éà t¾Æ± «Ù_ h\ ÝÁžK¦tš<‡çŸ}œaã ¿™¸WI;ÂO?…Rì9àÿÙ»ïð(ªõãß™ÝôÞ)!¡B轄z‘.R¤)bEÅkA½¿kï]¥Y@‘Þ{—Þ!!@ ½÷MÛììüþHˆA{ßÏóøH²›3gΜyçœ÷ðÀ„ ÜêNì†Ål>_ä¾úg6F;Ó|ÀCLÛ—à¢Cü¶ì é:˜£7³xù)é˨‰¹?Ôƒ¸?³.<°¿k›.ÚÓlÐx™ü[;½~1Û¢-˜ÏoaÙÎdK¦ßbó·ÃpÛù &ÿF¦<Ô7Ä–^Ÿà«þvMïÌÿfÞ|~[JÁ©VkÚÖqÆš|Š]'SÐ0ÒdÚJ~™È©îcÄ·—®2šÆ@ð“KXö„‘YCóy¸Ÿ‘ß±ýÍPÌ+§íó[¯²BнÇià öÜ6N£Í«o[°ªBŠ'ƒ¾ÞÈûÍ·òTïÙtµ|9·…Šƒ-zAá '©¾«(FìíŠ ‹ï’ÏB!DÅ\Ÿð"åÃè¿]Î=;¢ä²Ü#9ÄÏŽE1€Ï _$Ì»%A’Ët]GUUrrr˜9s&Š¢°qãFÆGóæÍÙºu+'Nœ K—.ÀSiÚ´iÃþýûÙ¶m[YÄjµ¢( ßÿ=)))¨ªZ©sîvŠmcÆ}ð53¿ýŽOŸ΀ûçƒWàC»Öî.·Òƒ÷:¥æÞüúfÍý‚WF`ÈÃoðæ˜Z¨ù'X·%öSŽ4"~ɪôÚ<0®3Iy!n)Cá<ÔÅÈÑ93ÙúI¬ßëAÝB¡I„Bñ?êžÍQR^Îl ö*UÆU'iaY»2oiù—ƒŠ¢0cÆ † Æo¼ÁÈ‘#™8q"Ó§OG×uN:ü±ŠMDDþþþ躎¦i躎 ‘‘‘|úé§e#OÔ›^RàîaMYÊ‹;òü´Qt÷>4’~á ?¼ö)Ÿ-¿Úo!*¢“—r‘¨(‰9w×’¦ío1ñe/LìÃÐWÞçAK1Ç—ñîŸ0?êÚuÕ³·óÑ+_ßÑZö››DTTÅ)ù·é†ÔHÛofþت×Nþj9ÏŒaùôô­ickn£¢ Ùto²UªÔ¶åÄü×YôCÔM/I+„B!þ7ÝóSon·:µk‘ILLLYÒÖfÍš±qãFt]§k×®ddd ª* Wüíå H@@‹[[[²³³éׯ{÷î-+/ €jõîé©7B!„B!Ä$Soþ!𦂢(X­VTU娱c <³ÙÌéÓ§Yµjßÿ=NNNe#D.OÁQU[[[bcc2dÈAEQAÓä™§B!„Bq§I ¤¹&¶öÎeÁƒÁÀÞ½{iÕªsçÎ¥eË–ôîÝ»ìo.çÑu X¸p!:t`Û¶m †² €­½3¹&Ó?¿sB!„B!„¸ÂEŽ’Û);;›ÔŒLúÄêU+PMÓ0 $''3qâD¾úê+š6mJQQɲF—%ÅÅÅ<÷ÜsDFF²oß> d”‰¦ieA’þ‘œžIvvöÙA!„B!„B”‘%•àì섟¯/>ά^µàŠ$¬—“·eË﹬ü{ËIR3M$§¤`2åÝöýB!„B!þ[ݪ%2¢¤J‚)X­VúõйÐDDÄâããÑuƒÁ€ªªX,–²Õq.ÿß`0 ëzY€¤FÔ¯ß[{g’Ó3IMK“ ‰B!„Bq—@I%™Lyrô Ý IDAT’“›‹‹³3ÕkS½fðM•••g&79†ììl,Iâ*„B!„BÜ-$Pr,ôô ÒÓ3îtU„B!„BqȪ7B!„B!„¥$P"„B!„BQJ%B!„B!„¥$P"„B!„BQJ%B!„B!„¥$P"„B!„BQJ%B!„B!„¥Œ·¢ú! nE1B!„B!„7%ä[RÎ- ”D„Ÿ¹Å!„B!„BÜ×n^·¤™z#„B!„BQJ%B!„B!„¥$P"„B!„BQJ%B!„B!„¥$P"„B!„BQJ%B!„B!„¥$P"„B!„BQÊx§+p/1 ¸¹¹áâìŒÁ`¸ér4M#×d";;‹E»…5B!„B!Äß!’JrvvÂÇÛU/F+ÎÀ”c¢¸Øè¥ïPP£Ñ€ÑhƒÁ`@UU@tttÝ €ªqwvÅÕÅ…Ô´4L¦¼;´WB!„B!„(O%•àì섟¯/º%‹ÂÎÎ.4nJPP]\\\°Z­äädGTÔ2331™r)**DÓ4EÁ`0`kk‹½½¶fb0Úãçë ¤H°D!„B!„¸ H ¤F£ootKù¦l¼¼¼ùâ‹ohܸéïÓuÈÌLÇÁÁ‰èè(bb¢ÉÈÈ ¸ØŒªªØÙÙãä䈗—/ƒÊ¿ÿýÑÑѸ¸*øx{SXX(Óp„B!„Bˆ;L%pssCÕ‹)6 i®®®øúVaëÖÍlß¾…K—.ÄSOM㡇F¢ë:µjÕ¡fÍZøúúâèèè˜L&.]ŠB×a̘q Ft]Ç\”‡­½=nnn¤§gÜéÝB!„B!þ§I ¤.ÎÎèÖlt½$‰ªªDG_bΜ™4iÒ”Þ½ûRµj5¬V ]×yðÁ±X­VN:ÎÑ£‡ÈÎÎÜÝݨ¨ :œË9Mtk.Î(B!„B!î4 ”TÀ`0`1›Q”’ÀFqq1µjÕâ§Ÿ–PPP@vvŽŽN¨ªJaaÇ¡S§0†««vvv¥AÈÈHæÌ™‰®ë”ÆHPÍbÆèp3«èØúÆ6æ>èα÷úñàw1XoåÎW´õF#y©E8,8NÑ?´M‡û¾ààg½aë „>º‚Å77ì)$+%›" 4y~5¿<HÔ×ÃðÙnÕ„¦¿lû•û¿D­:†[^£uÞoLÎŽâ;]£›dᙿñDf¸OÜ¢^æ<™û>¤;y¶õS¬.¸5Åþ·ºßÛt~›=ßÃùÐ[ô»„ò¤u=·ë˜ÞU Ôü<ÃÛ¡”ýNG׊ÉKáÌžl;•ÆíúXª½y|¤›>^ÊÙ¿4¯;'[ô‚ÌÖŠÞ{3<ÚgJÏ\þ¶Õu fS:±áؾã(I…·b;7V'ÏЉŸY[þÑk-!„¸YJÕç; ;µôº†µ(‰Â赤îœMVz~%KRQíÝQ´l´âJ|)+øŽý ×39(‡ÎK ª2ð_–a¹Ù¹$PR V«EQÐuƒÁ@zz:o¿ý:—.]¤°°€&Mšñꫯ°wïÖ®]¦iØÚÚ–®|SRF^ž‰ªU«b4±Z­W”ï1Рßê§L¹mÕ•¡¸öã£m羚ç©SYo¾ƒ•âï²æ>’H=‘Ü¿²¿'èùÉ\ˆŒÄ16‹âÿÒ}¼ÛYcw²hÃYJâ ª­­»6ð,³Øšp‚D6õðT ¾aë팞™N³æ—½$YÕ¿ ZtèËØê.ü¸`' ÷Ò€%•ˆýÇÈÍ““Bˆ«Ð/’¾üeÒ³¬€ ·†¸µšLÀè~xŒôŒÊ>üðº ÷óC8 ¶ÛÌ!ÿôB´dÓß®þ$’¤( ‹…-Z1qâdªW¯Ž‹‹+………ØÛ;ðþûŸâï@DÄiRRRÈË3¡ëàîîŽÉdbÉ’EX,ÅeÓnîY†Útl[ÈÞ—åÉŠ·Jþ6Þ¼íN×â¶²ú‚|q§«ñ?M/Ê")1‘?,%ŸlÀê jÖò@IH»‰'ð÷]Ë##1‘ÄÒ/®ÄøhÎ_Êaä¤to~‚fÝ[û^œÀ±m %ÿ¾Ç/+„BÜz!Åig(H+ ˆ$ÃtáÚèTíÜ‹ìåënÃ(LL‡?§$Lr3³&îÿS·¶îT{ÄŸ¸obÉ=œ}Ã9HR­Z5ïgÿþ}ìß¿ºvíFnn.&Œ¦^½ú4iÒ”€€š¸»{`µZÉÏÏ'""œÂ²Ñ)7Ζ€>ÏðÚýi` nû\ÖXÿ|edÀ/t"ÓžF—†Õp²¤sáÀ:¾ûäKVEæ—^ÚS«ï“¼0¥?mk»£¥Eqhí·|ôõz.äë`_‹~O¿ÀÃ}šRÇωâÔóX=›¿ÚÀÅÒ¡ÉjÕPBöóÁí¡ùÛþñëóÔ¤Úì}z³.¸Ñê¡çynt7U1’sé(æÆg¿.yZ®zÒjÜ LÕ…†Õ]QóS8w`ß¼û%cKÆ©8ã¥W'Ò³I,çÖ3k—ýÇÃm(³÷¾K˜-@¾<¾„îÅïeÍÈ 7_ç¹u±O?ÃÆYoñö/gÈ»¼íëÕ­‚mß²¶V\h0ì9þõP½±+L"|ÏR¾þà[v&^ý´¥zµâ¡MeTׯT³5f'?ö ¦¡ŠS0ƒ¦>Ëľ­¨íiÄw’í¿~Í's÷‘¢8‰Eë_ Iú:f®ð`øø6¸Ärè×÷ùÏ2W~÷Yú×s$çܾýÏXx"p8ƒýwÇxvC}N¸f jç)¼ôôý„ûá¬ç’±—%Ÿ½Ë콩%uqkÆø×^bt—`4ŒÙUÞøÓÔ—†÷óÜ´ñôj€sA‘¿/çëæ°=¾dˆ˜}­><ýâ¶­…«9…ð=K™ññ·ìˆ·*ž­â…g‡Ó!ØOq'¶óÓç³ðPƵ¹•8¦×ï6„½·‡Ù÷;rtþWĆ>BÿZÒÏnfÖ¿¿à\çWy}|ü´dŽ­øˆéïo"^ƒÊ7î€b3EVGËåóŽÏatoWŸ>Îè¹ DØÂÖCñ%Å™Z¡½kQ?[´ü4¢oeýösäè%ûéÙ =CC¨ámOQr8¿ŸV®~/ïД‘Ï"ÈLz™€M3XXzïïP£Ãû¶§¶»J^R8;W¯åDjIVhݽ ÍjWÅÃÖLÚ¥ãìÞ¼“³™76"Æšqœƒg»pH]\$GÇíèÑ£5õª¸ ¤}bwDPR´‚S`{z„5¥VwTS<á{7²åhfÀ®J3º·§~uwì,9$DìaÓæc$_sÄ£UÚÜσëáN)—N°cãn.št ÁCx¶w¿~µžhkɶ][eJ£H¾¿LÛÆ<ðlGRæÍb{òŸŠU]©Ý±'×ÂÏY#ýÜŽ˜®MQkЪ{7Z×­Š‹±ˆÌØ“ìܰˆ œšóàS­‰ýî[v§–ælóëÂÃã«ðûg‹9Yª[=:õìHÃ@_œõlbNî`ãÖ3”<¬´£jËžtmDuO[ R"9¸i#ûcó+u,+<Ö5hÛ³ÍëTÅMÉæÒѽ$©åvNu¥N‡tlT_Wù)ç9º}3û.æ–œ#n°­„âžf9CÚÑøôè³Ý:²ŠÇø„=‰gÍØÚæQ³œä­³ÈήŠïØ•T­f„€õ4x™3KV¢û ¤j×I¸ùbTó0'n!uóû¤'çâÏèå¸E”L½¹‚Z—vÏS¥I;ì XÒ÷“±ã]R.&ßu*ÔŠßòßÁµÕñM§8óææg躎 QQQŒ5ŒÙ³¿æäÉ£ÄÄDc±XpttdìØ Ô®]‡;·óé§0}úó¼úê‹|ðÁÛ¬_¿šââbJûÜxWðêõ?|:‘.Ad\Hľó<Ó׳܅§‚kètÌ™Æà^äžÞÏáxêv›È‡?|Έ* àÕûM|ú0Ýk+\<°ŸóÖZtŸü Þ艧bCó§¿á“‡Ã¨m‰dÛºíDXjÑ}ò§|û|J·ãÚ¿ƒ» /w=j žÄGoŽ$´¦ l™2‹ï§!ÄzŠ kvëÒ†±oÏcæø Œ(x÷o^Ls Žn߯Á$BzLæ£wFP]Õÿ>ÿáMl€!ééÞ}xõ±ŽØ^>ù‡˜ûÖ¯DXË ~xí+¶¥^¾-R ó.¯v±#=ÅŒ“K†ýç} 1@…u«xÛ·¦­Á%ìe¾}ëAÚW5qlózv]²¡Á}S™1c2ÁW»· aÊì9LÚϬü~, ×C™þÝL&ÁP“Q_/äý aÔ1Äqxÿò|[qÿ ß²à¥68—»î3øõaʈj¤^H¢Ø%€ÐIŸ³zÙëtwN#>׿Æ÷ñò»ip€€!p õ}Ø‘xpÛŽgáÑô>žùâUú¸)`SŸGçÌååAÍð+ŽãR^M†OG³²HI>ûÖm'Íj ¨sG €êMÛöu1Xsصn/vô‘²£á܇ÿûh8UrÈÐ=©Õá!Þý÷ üÔJ´™ZƒŸÏãíÑ-±Úš-‘¨ïç•ï¿ç™æ€m^˜Ç¬§{ÑÐÃDTŒ•Æ?ϵ*wúü{íìDÛ¿cæÔ~4tHâÈïgÈ÷kϘ·æòɈêœÀUwú¼ò!O÷iˆŸzCý ¼Šû=8·{y3Ÿ¦O@.‡Ö¬cºÝ&ÂÂ7n#ëNXÀ© a­JÎ6Cií¬b9»‘ þz«Öx€Ïæ½É˜Õ( ßÏÁx;Bî{šoæ>OP¼{óö‚Ox¸³I»×°þD!µûMeæÂ榠ú æ½™/2´…;©6²~_2®­îç•Ùò@õk£JÓ ûÅe6´xè1ÚëÑDçñiØŸW~^ÜIu)ŒOÃâH踷y¹¯J¥Îÿ<ƒ;5CÛ¤Eqül6:àP·£úQtr‹æÍgéîD¼:fx;oTÀ±A††º¿m1ß;‡_¶ÅáÖv ë”|Àm{0rpS죷óëüY{Ɔ6Ýšàrµ¾WpœEþFDq:{¿{—yû2ÑÅLX˜++¿gÖw+WзgS\TÚ=0’önqìY¶€y?­å”Ö€Ácúäp•m\W1)‰©àå‹· Šgk†Ž £JÚï,?—E›ÏaÓl(#»b¨Þm6"÷øÝ,?eûr©Ù{=ëØ¡‡õ£¶i?+ÌaÁŠ£X‚ûÑ¿Ï5|¨þèœÅž_çñãê#äTíÄðamñú[÷é*~`x;/R÷-eáÂå.lH·V¾×¸ð³£nÏèê—ÂÎ%sùþ‡uœ³mÁÀ>M¯~ÌþÌèOØÈûijsž­‹çñêãXC3¼su (¸6ÄÈîÕÈ:´’æ-fg¢Gô§±3ËŠ^WÜi9ôAºÖ0qlõ,X²›´€„\ÞSü»Žâþ¦FÎmû•ó±õ¼=-GŒ"Ìßæ&ÚJ!îu:ZòÌj-ìÝ  á;t>®ÇH^5ó¿¼I¦Ö›€‘¯âjCÊÂ>ÄÇ·µ'—¬DSCðø\‹#ö§aDþ8 sgªõŽÝu¿3Tl¿N`k/r·>ι“”XßÏâj÷Oí{åýOŒ(qiåJõGj [!ö³KFÝ|†DMÓðõõeÖ¬¹øúúa4–4aNN6V«†§§'½zõá‰'¦bgg‡ÅbÁjÕqrrâüùHÞ}÷ 4MãfÆÈy¤U &ö¾9ŒGF£×ɬåÿGg×Ò7¨U0eµŒEœø|,c¿§ÀàCÿO–óq¿<:¶9KÞKeЄ¾ø©&v¼þ.IF÷Ä×ëÞ¡k÷Atrdz…?ò9öˇ¼¹à4™ÞÝyrJW¼³qS¡ÀêBÛŽu8ºò8fàò5©êibË3ƒ˜µ/Žl­=oŒk„}Án^3™_Su µañši´š<‘‹^#Å)›]kWrî×·˜¹7Cý§XºìI‚ëÔ%Ð`ÄgÔ$:¹CÊš2m )¶!<¾p1Ï4-½£,Žá÷µGHzu8õõö¯ÜN¤Ù@“ÒúXO}ÉðñßqA äáŸÖðb‹š4jàŠr±ã¯[·“]ѶoE[»nåbËæx©VÒ÷Ìçƒ×—sÎÈ çÇÑÆ©w'…ÒG³eìÛal#¬Qß1yÈ)°¥És¿ñÓ#õØ?„y{†ðh;7ôäULüëÓ¬84žÊO‹£áˆÉô›}%¥eéæ#|8l,ß]r ×Ç[ør +;^aÀ“+H¯ò?l~…Öõ¨m§ó ó¿éÓý=”âl’4°õ±!~Ë.™Çë ORäОÿ¬ûŽÑ~µ©[]ÅÁoã›8b½øƒ½9.´}e1óÇÕ.ÛŸ‚ëØ–6”B:ÓÑï{.åµ&´©-zöÖíÉÇgàõú$––£Ë“FðÁÑ|ì[OgÍÂqø7mA°á7²+h³ï·ôåáP7¬'?bâCßrQSð6‹ÍïtfÜ£½™÷šÊÃ#ê`c>ÅW£ÆòÅé"|ú|À²ÏàW‰Ïí µóŸþVñèÁøáµ0ã£Qc˜eÁ¹Ë›¬žq?­õ¤úoûKû£ ¶‘0æ¡•œMËÖÓ+쿤þ9Xk¤IEý^ñ¢×¤áÔ2¤³ü¥1¼°%ìšóâÊy¸ÛcŒi0€Ÿ×gZ‹´ïÒ Û­¨Ú_ƒ…𠹨ý9:o Ñˆ tp‡”¥Ï3䥭d«LX¸‚šõcPëOH­7‰¾~péû§ýÞQŠp¡ûûë™1d( ûŽßϵ¤©‹ŠõÒff¾÷![b,4õ4PP< ÿ×1%Šwï ©±Éƒ×ís[SúN¤ß¦rßôíä՞’ÕÏÒH½Ä÷ã†óñ …o¬ç»}¨S¯ªj_ñyã÷=Ñ™!h Ó^xÅïtK*‡ÏãXVéH·¶ °ZÈšƒñ% ±““Xåèϣ͛àw`9Ù‘ìX™È±³©%õM?ÊùÐ&Tq± µjŠÓÅMü°ùDÉi,q%k=üÕôFjšÃ©Í9¯ü~4–Vm\qT!¿F+ZùF³í«mœÎH"y•Ÿ'‡ÑÏ»¢(X­Vðññ¥¨¨MÓʶðÁï`kkƒ££îî899¢ëPXXHZZ*NNÎ t]çFgß46‚ù+VÆ”$P]Íò}/Ñ©Wéa4Ó¸ŠåkW-­¥²iå^L}âר!¾¶q46¢XΰsOÉi+x¼õŠÒ­ØÒdo$-ÒáÅߨût ÷²{Ç&.ß^rÑèЂNÂÙõÚ•§â#¿0kãYRt0Ô­O°«ŠbìÌ;{#x§ü݃¨ë;½Ç7©CÜÿ-æ>D½àšx@WTTÕ—&ͪ—Œ,X¾©dª@ÁYV¬:É“M[U¢µ¬$ÚÇ%3@"—âŠÐ[Øb40øWP·*U1W´í[ÒÖ .û~'nB-û½Íš^/æ{ví`ÝÏ+8óçb ZH0ô»9Y`æÄ'hôIÉ뿊ÁJή•lM+9ãœYÅúˆÉ4jBãzF–Ä•”¦gE¯…dd˜Ðq&þÔ2¬`ÍL'£d<2jiLOÏO#.¦Üñ>4—w û0lÀh>]DPp]=TÐTÅ@ífMpW5b6/g¶äphÙ.Ž~Œ²PIÁ!ÖnIaØÈ&tõdIZ(­t²6­cožFÞõúH¹–ÑóNqàTÉHQôEâ4¨a°Á¨TÔf Þ#Ÿ¥ªŒMžgcÄóW´¸TÚ!Î4vP°_Ëòð’>Ÿºe9Û2îc¤GÉû܆Îdïû]KG^XIùy"ݾ»¹v¾âˆ×n@}{ë…ßÙ]rûlÚña _+}CHiESÙøýŒµ”ôƒF +è¤LÛÎìûÝJC¶Elxv0*ê÷†Ú4¬k‡¢:2dæ!†\QÛêÔ r$qÓzŽ=ß’–;ÓÈ.žæík¢ZÂY¿á ”(®‡TÇ qtç>²u@‹fî¨fÌÀŽ^CêbT Ôš´ˆS“Êÿ±NzµQVîå÷´!ô«=’¯7ßOÖ¥ìß³›­Ë—±ædq٨楧Iíì †¿ïUÁ1Up¯_ÿºý"Ðp9Pb%úÌYL:èYédZA×Îq2¢0™‘ ø”|OT漡.·ÐÕV©©$-ŽÍ3ç²/ã¯_4W&sÕÖšízѹ7ÎÍ\C”Å/#^x±ý ¥('E'1îgüêаmÞžžxU  –—B €ê·‘´Ñå’[ˆ»GñJ´TËͳX´²›T{/OœmkÓÿÙWé_¾†ŠN‚³# …7pC«`kg æ\бÁÛ×s| eÑ1ÅÅ’al€‡ Î~NäÄÅ•ôWŠˆÚ¾ˆ(ò9r"Ÿ¡ƒŸàÑæˆŠ¾ÄÅs‘\Lλf}¬é1Ä–ËÞlI¸D\q+¼½là&”+NÞø8æ})ýégÖT¢cLtð¾ÊèYœ=I›þòXõ‹D]Œ&:*’ÈKiTrRñ¨â‹1ý8ñe—:¹gÖ³ø `Ó€*Þfâ·§üQ-ž}K~À©Åõ¥ƒÍõ_7Z}ñ0Dzµ\&^='šè4`@qõÂÃÖ™*#^,{RZúygll+ÑVVòL&L¦;8=N!n!ÅÖùhf0T­‰m;j‹Ÿ !gÏ÷|9s>ï$5áµ__¢ €b‡½]É¥?J:…•¿øµZÿxçA©Šê–eCçJlûï·µNîî·Üo#={w#¬k:4ëʈ&Ý>¶¯~˜Ÿb¯ ¯ª†ÒU”4íªíP~ÉÏòÛÑK_U¯ˆ.üu˜õ.Ú¿ÄâïÆR=a3ßÌø‚YÇ‹èþÙ÷<T²-;û’1tWäã),àÊðZ!‡×n!ùQ´ ëH»„6¸“ÉŠuûÈÃæú}¤ü®\n÷’®x­¢6Ó­%Ëw]À‹Â¯XNZÏ"ÁvtÉ0Âòåê–—[­h­ôo­hÖòïýí¬”æt°j×Oš¬_ðG™•êºÍ¢•¾WCÓm+ñ™³bÕ-ŽõŸÎ(7Õ­¤Œ”£Eh‰›Y{äyZ·îH—¶Ñ4 1b9½žÑWËa(ë“×úŒ”¬ fáì’wùþà•n-î,æÔ¦õ‹dYï^t ëB—ÐfôÓ’^ަã3øWxùc«ìí+<¦õ‹x+¸÷>Ý IDAT_þùÏQïëDÁ+>o\±‡œ_ý­»fq×aÅrG:MæšH‚Ƀz“[PÛW%*Á‚EÓˆZû9?½ÚHŸ6£æJÂÉ“œ êøiÒû÷tÿô«ô{½Ø‚v—ºnÁrt#šÅ‚5û?}½Ø¿ýʈoH ݪàÄU&Çê:: Š¢¢¨ _sµº<έÅW‡kQ·N-Û0 SO²_ÄÛc®÷øëÆÐuýŠï°òTU­8p¦ëèW9ÏXН5"B'ëľ¹X:ukX‡ÐûÃèž´…ÞOÊU+b( ð*Š Ö«m‘Ò~­£_£É*:–öM®ÿºMƒ«mÕB±¥ô÷ k"Ûç|Çž´«,šìÒªm¥“oÊÆ”÷¯!-„·‚Á7[ëE ³,è>EèÙ?5û}ò®v®Vª^ù³CgüÇ|„kÑ62Ï$÷ÔFÒb j[ñ–õ”DÍÚŠSí.¸¶Ä½Ë(ªvÝCÜÏ“™}w +¹g§_º´p%dN#\Ûº]õuçæ®%Ab¿‰ùÛA l¥EQ®øÀ`0——Ç·ßÎ ""œzõ‚éÛ·?cÆŒcÔ¨‡0`0 4DU•²kè ”D§i(6­pŸ?FÀàÓûÚ9ýqÁd‰äT¸ÝØ€>ýëb úÐc`\”3á¤Gqö‚†Â:•Ì¿U¼òÕ¾ãœ<ð÷ù4bØóO16ÌŽýŸÿ‹qý:ÑvÀG,‡z-häf¤~§6¤ïýôëÜëi Df[Q ¤þ¾’¥K—±lK,µƒ¨è€VXNÝëã §³õÛ/X¼åÉÕB¨}9Oƒ–Ì¥˜|tÕ•N»â­6ôíÛ›klS­do®°n¹IoûV´µ›mÆ>Ç#Z¿é}¦>Ø›¶¡c™aAuiJË`#ñªVêÕ¼q2hÄG^ÀdUði×™&¶4yv9ÇOeåÔ`’OŸ!MSqí8€0Ï’žáÒŸ>ÁtóYN»ùe?OªU¯F5Œ îF€•‹«¿æ›¥;9™@ÿ²HìÅX,ºJ`þ´rQBúõ¤ÞŸrqYÏæD+ŽíÇñTX5”Œí¬û= Õ¯ßG*¥¢6 !÷lñ£]'W-céÒe¬‹€€  j»XÉŽ¹D¬Æ}é_ÏPpmÓ.UþèpÙ˧IHê‡4 ~H#:ÿgß-Y6[‹Žä‚YG­ÙN5KzŸs—×Ùzâ8Gçáê)84*ì…l9”²:7gꚘŠû½v‘ðÈ"tÅ kì–-]ÆÒå{Ió ¢nPlÍf°&³yÝŠ µé3u­ì,œ^¿‰˜«u==‹ó‘ÉhŠ--ÂÚ㦆@Æÿpˆ“'¶ñŸP•sáç°è Ž…çY¿tK—®âh^U‚êÖÁM5S5ì¦MLݤ%¼þø„µãÉ%ñX 4oQ %z.6¾¼Ÿ h4ðKÎDWtLu²*覛ù.¯ÌyãOåZ-EÝÌÅÜȧ]Ï3‘}I°ÌšAR²F•À@þHå«R¥ÝÆö ÂNõ¥aódìú™ÅëvrèD“ P.wk©i¼ÊåÃ1àS£·j ²99‰L§x•û8Ö§÷CÃhåsc_®ª{Z×·%><’ÝLzj6vÕj”|J9ù×ÀÓ’Fjfi©…¸V¯^nßl¨Óg ö®{0º5Ã#ë<Çönbåϳ˜³1ߦ ©zï(Õ«þå«ÖÄß&äÔ’³ˆb0b(·-o?Ï %z~©ùnzüñ^Å ÿnW¿ðS}iÔµ!ŽIœ=²‹Ë2{Ánrk4%¸,YŠãÁÞ××’H.Y©iX½«Sµ\îg§ÆCy|BgªZÓIË´£ju¯ry•ªÓe“ jèPᱬèuKZ 6þV-„s¬NÒ¨ç$“\àE@€K¹¶ð Ùàñôoä•j+Ü‹‡8|–ÎBˆ[ÍX¯mÑ£6`*kJ8f§8y–»ÈvìAõQŸâíý× oµæP<6÷ó‹$î_BÖ…c[®u‡Vž#ŽÍžÁ¯–J~Ä$mxŽósž"Cï‚gm¯[··È=;¢Ä’] š^’{¤X'÷HNÙk.Í\ð<ˆ›ƒ©Ük·CÉÓD«UãðáC:t ô)¨‚ÑXÒ¹, MÓ DUÕÒ©776€sͺXFO¬I§ÿÆšÁQh©ãQîa”5‘•³~ã¡VÒlêBV¶?LœK#Ú5ô†¬ÝÌZp˜bMgùü-Œÿ°7a¯ÿ¯}NSP³­=mHøe)»3 Ñn4“šܹ»ÎdáX§=Ml¡àèï6Ы…}¯Å]ÿ"¼àwþÎ}OµãÅæÓbon­zÒ±–Jø7“øÒœMBbÖ&> yg¾uÛ6ÇKÅÆ¥€}«·’Úo0~>beð8âì‚hàteÛ›óÈ+ÖÁ¾cÿo"Y- ÂXEu³\ѶoE[çäT½'&RÜ¿3ö^ ß=„NA¬9Øs‚â9”O6½N¨z”÷ûŒbή…üٛǃ'2{YĺѬc}гlÕY ¢0{ÿ}¼:OVÔf_x>­ZSÓ¶˜‹ f±:Ù 7ÔíÊ8ö|‹e«Þ|IjBf=€ºã?cn½‹85nGÃÒ@„-¤o[Íï¦ö„Õ~ˆo×´âtª;! «þ5Ðe>ÊºÍ Œ߀ƮVR—l` TÔG*Wï‚ ÚÌÇüÃùwûÇønQ]vDiÜ£+Áޱ,zbù6°æÌBš4aêÏ«éa¢J£`|T¸Ýkcëi™·| F6gÚKh$ªmÚão—Ŧe›H´z^õïÌ*Ñþ¢Ÿ9=“ó—òXçÑôyg߇$£Zzµ©Jáþ÷XVz—Ÿ²y_nO§& Ћ²~Sì5ÎŽ-ZÀ¡áÓi;ä#–î眡>¡ÍœQ"bù‘BbÎÍgÃÄO¸oÔç,®º…EuëÕ¯ô¼ôC&¹õë0hâ¼ìI—퇈Ó|iÚ¥ ª–ʾ½‘WÝ®V‰cªúåºý⦞+Wæ¼q3åÞ V+Vl°·7…œ?tœ.£z38CaÏÙ4”ªmèÝ¥©+WS¤1åYq¬KõðÓ䨸P·m𹫤;9c£¤páÈ òGugp×b¶ŸNÇP½5=š»¢]}lB)[œ\°K1UØÖ”ãŠiC÷Aý(Øv„Ø|g‚ÃúÒÔæó¯ÅW ŽxøùQhT[œ}ëвS(þ»ùñXÉÒÀ‰Çߪ úd³ùH<Å èÒ­6ù'~âB‘†vä0éã;3 KÛϤ£VmK÷¦¶Äý–@±%ÿV= ±×Øt8Ž<ƒ7 B|ÑÒÎu­jÙÖ!l` ·‡“mHÛ^­p¼¸ž©:ºM.yhÙŸŒˆ<\êv¡G#'”Äk”u™ñ#©4ë0„Þù›9–hÅ»I7ÚúZÑ®ò~]ùf;:(h[N’\dGÕæuq/J#5W‡b&³!­±#šb¯tï„ ç(^~„lß¶ô:ˆ°:ë¾àÉ©ó¸äJ{׃ì>_ÑS3§g<Ê£¯æ,ÁôÔƒ`Ë1~þ¿ Løüùz&ëÞ}•¿ÇRè^‹ºž üôÔë¬ÏÕQ\ÂØÍ…Ü­ïðØ¿°õd6 ¨nÚÎû³ö\y]¸‡…³öçJ³Þ]rªL›VP7tr*Üö-hkÝÌáO'óô77ÒyІVÅtlï>:å~´ Pt‚/'=ÊG+“ãÝ’.­|È>°ˆÿ÷$ó£4Ð.òÃãxyþN.ªµiß± îéGXþádƾ»¯\¾€¿ËJìâ7øÏoGIÒ|¨WÇ‘Ó_?ÍGûŠÐ Õé7 jòr¦?ö‹wGéT‡ï$V|´cÉTYÌñu›ˆÓk:Û×(9¿VØG\+—·¡Â6‹æ§§æ_Æ ¾Í°\ÁŒãõí™èÚæMÊg+p!ߓຎœ[øK¢þáz»ÞšÈ“ßl"Â\¶ã”°“ïÿ5žW$_;NsSý rýÞ´÷=&>5“ÍÑŽ4ï7Î5²ØóÝ‹Œyl‘¥oÔÓ¶²ö@!::Å'Ö³ñ:s#´‹ ybÂ,>‚SÃŽ´«aæÔòxdÒç+=uÓǿȂ=ix‡`@;/6|Í“£ÿÅòxœ­o1éåyl¿hCýîƒÒ¯î)ûøéÕ)¼µã74•9¦õ‹ë¹k¨Ìyã±d’‘­ؤî ˜£7³xù)é˨‰¹?Ôƒ¸?³.<ôlŽ®_ÃY»6Œxôq& Å;v-K÷$ãÕi,½ë0_ÚÌâ§Ðê÷eô¤ñ j¦s`Å®£°$rþ¼…¡O2¼¹[%¦–dqdÙÏìHñ!tèx&éKpña~[rm87¢ÿÃòÈäGyxÒCÜß­>†óëùá§$\î¿éXºhiU:3|â#ŒéSíÄR~Þ| 3 %íæ×_QP«L˜Àý¡îÄnXÌæó…`:ÉúåÉ­Ñ“eâÈÔÉ?Ào«Ž–Ëir¥¢³ÛÙ™@÷Q;°%Îq[X´¢äýÖø=¬Þ{Ç1<6õIÆv¶çØžÈJ¤.±’¼ç~;˜K@×™0q8¡Î§Y¹åâÕƒ–z:‡V­â”VŸ>caò„atôKeç/ëˆ(,çÙ¾j?Yþ½÷ÔT¦Œl…yÿ¾?FŠ™/²åçå„+ è=z jMÄr–ìŠÇ‚Næ¡¥,Þ™†oû¡Œ›ø ]ý3ØùËNæêË _ÏäȲÅìLö¢ý° L|°Õbײ!¼°\[,fÉ7Ì¥…+þ [!}M*^÷ù âçÄ’½7ëo—_§v-Ìy (ŠBaa!µjÕæ»ïâííCqq1Š¢”N»1ѯ_L¦\ †’Q$—s˜\V\\Œ··7³fÍeêÔljÁÎÎ]×±uªÆ…¨‹»¾B!„øïc°sÀh) èNÏþ0Øã`0Sp7.Q „âžë^¤|ý·Ë¹gG”\–{$‡øÙ±(ðä‹b€„¹q·$Hrcô¿ä¹úˆ]¿œÛDo !„¢bZÑ]$Ð %H"„â¿Þ=(È9MÒüxt]'iaY»2ï@-”JæQP½,¯‰B!„B!î÷l2×?ËÜ™IæÎÛ ¹œ|õ²Ë‰X/ÿîò¿E-Y¶O¹^ÐD-Y6±Üëje—kB!„B!Äm%wèÐ4 ƒÑöŠ ˆÕjE×uTUÅ`0”:²²2ÉÉɦ  ‹ÅR–£DQþžX,Å ºŒ¶hÚÝ0žV!„B!„øßö_3¢ävÉ5™pwvBQŠÊnnnFrssK''gfÍšËöí[8xp?©©©äå呟Ÿ¦i¨jÉhwww EùcT‰¢:‘kªpQ[!„B!„BÜf(©@vv6®..mP‹ )..fÑ¢Ÿ8>’ÄÄÌf3666xzzÑ A#ºuëÉ”)O‘—g">>ެ¬,Ìf3F£W6lDvv6………¨ªŠ­Vņììä;½«B!„B!Äÿ¼{~yà‚³³~¾¾èÅYXŠ ÈÏϧ¸¸[[›rSj4Š‹Í¸¹¹ãããKݺõ¨];OOOlllÑ4 999DG_âô铤¤$ccëˆbãNrJ &SÞÞM!„B!„âžu«––%•PÄHÁÇÛÕ7[;t«†¦ieÓq d9`‹ÅBbb<11ÑlÚ´]·r9%‰ª*ØÚØaïè„­½Vņ ’!„B!„w ”T’É”Gaa!nnn¸8»a°5\µñ €]eišF–ÉDvv2‹$qB!„B!î(¹‹Fzzééwº*B!„B!„¸ dy`!„B!„BˆR(B!„B!„(%!„B!„BˆR(B!„B!„(%!„B!„BˆR(B!„B!„(%!„B!„BˆRÆ[QHý·¢!„B!„Bˆ›’@ò-)ç–JŽ>p+ŠB!„B!„¸)¾ÝoI92õF!„B!„¢”J„B!„B!JI D!„B!„¢”J„B!„B!JI D!„B!„¢”J„B!„B!JI D!„B!„¢”J„B!„B!JI D!„B!„¢”J„B!„B!JI D!„B!„¢”J„B!„B!JI D!„B!þŸ½» ¯âÚ8þŸ#q' ‚C ¸»[ðRZ¨PJi¹u£úÞêíí­·Ô¡-- ¥8”âÜ% qww;çÌû!Oˆ¡ë÷<| 9³÷Ú2ódÖÙ³G!Ì$Q"„B!„Ba&‰!„B!„B3I”!„B!„B˜I¢D!„B!„ÂLw³¨Š,ZÚ`ÑÄ­‡%Z'k-ŠT˜ŠŒ³ SJ(M(¡4²Õp³£B!„B!ÄÍv[%JtžØtµÇ²ƒJ%-St µ×¢µ×‚·%Ö=Ë“'%ÁùžÌÃ\zcƒB!„B!Ä-ã¶H”htØpÂÊ×¶VÇ+:°ò³ÃÊÏŽâ  öecÌ–%&B!„B!Ä?MƒO”Xw¶Çn„K¥+HjÊÊ×˶¶äoϤèt^Ý*„B!„Bˆ¡Aoæj?Ìû1u—$9OÑýì‡9×® ¾ŽL .¡ª1l¡z§ü•@\B4ëk‰öZ±Õà³Õ¡ëú »bˆ‹çK‹ë,íæ¸Þ>©ë>5£8õáÑÅ[8z.ЍÈ#¼3Hâ:‹_®“ë'ʼnÿúïðÿ}¸J=5¦Z¡TÐŽJâ»î¹Y_åVSC½¾4Ô¸/%×5!„BˆÚk°‰‡±°îéP¯uX÷tÀal£z­Cˆ6-mg¿Åóã:âa§¥¬°2µªQli;ânfΚÅÝ#Û`]U\—úŠïVo·B!„· ùèý0g¬üìnH]V~v¨%&òvfUÿ Ã!>½ç.~=ÿžÍ ž[ô8=õPvðSæ~r€2T â¢1â[í¢Õü]¼Ï]|§1‘„±mâ֣Że3t ˜’cn¿—Ø[ ŠëÕŸ¼]æþíÒ!„B!nW nE‰ugûz_IrU=°îl_ýLé„ Àüï@(™¦ó¿ fÿùŸìãDL>—}®iD¯‡?cÝ¡`BCN°ó÷™ÝÃåÂ@)vCyá×,[ñïLöº°œZëÚ‹ûßYÊ_‡ƒ‹Ž&ôìA6ýô³{»U{ɵƱ;s>]Ïþà0ÎØÀ’÷æ3Èëb.Mã3Ÿ5Ñ Ä%Dñó̦´Ÿñ:ÍO÷¸£M‡óø§°ýX0áÑÑ„eÛïŸðذ&2r—•qoG†>³ˆMGÏuŽ#[¾çù‘M.ÏÞ)øN…o7ìçTX¡'ØñÇ'ÌÜ}…¸vÿUÝ U_vBíǤÆ}„%ÞÃãƒeÛ9ADD0G¶¯à£'FÐܪm®vW¯žjǯëμ/¾ä±~Öæ0òø_òX?*z2¦²¹_eüþ|~˜·ú•·F?à]ŽFýÍ“í´µ'Åy:߇Å—ËÞw7‡£> $6!¸è?˜íU>kt~/°=&¸ø~žå†æÊvTßÅŽ­áÜ®Ër-¼úø'ü¾ëÁ‘aœ:¸…¥ïÌ¡¯gõsíU]_ έ÷?âº(„BñÓ V”htØp¹)uÛp¡4¶¨žß†£¡éÌ…,ñn†ÀÖýïá­_¼(9›e ¦Š³îÁsË–ó¸¯ *ª 8{ã7ò: HËû'òÆÞ\®ýDƒ_þžñ.Nå<;tcä½]2°O~mé—­à0ô –ŒKS]{P‡óÖï?0«¹þâM®Þ‹vfðbïn8MË;G‹/)CKûG¿gq3o¬ÌxvË“ßxPä?…/C €-=,çç'»`w¡PwÚôŸÁ+½ûÑþ_“xvSê%íªeÿÕàøj·³NƤ:}dAÛ9?°âÍ!¸jÏGd…gûÌx±?£ÿ‡™÷}K`qeuT¯Mµª§Šø£¼è>~<=-Í·iAÿ&n}ªªšÄ¿%…“[wѪÿ`:¸h0e±çà~"óÕZ“šs€€SeŒêgA“®ÝðÔ'^Óš®~våóBÛ.- ©§Ni® gÙ»/ãê17]#¾ j1·ëª\m3îüj ïõ@§¨Ê Ø4íȰÞfà°ž<3ã ÖÆWunU}}©ósëÅ}Ñíz]B!„øçiP_(Ùpªó[«KÑ•×_¿´4ò(æï×îc’ÿ]¼²2œR4ö?Ø¥ÂoÙ,ûß˽í­PŒÉ¬{j ||è8ða~‹0 X´âî‡Æà\Õæ•ŠGû<þ~û>Æ ŸÀ£_$Ó¤ ÷™Á¿çw»â[JÝü‡£9±Ž¥ß|ÃÆàb\Æ>ÀÔfz0D°lþpztìHŸ‰ÿ% WEÑ·dÌXß+²rZÜÒY¾`&ÇMå‰ïN’¯‚bÝ ÿ1-ÐÚÖðú¿:c‡¸u/3­7º{ˆ%Å ófò‹sñÓ]^fmú¯úÇ+4ªf;ëdLªÑGùò\µPxn &÷§W¿ <³ô,ùhpî÷oÝçSéʈêöqíê©"þÒü«e ü30Æ,fjóÌù#§ŠR ãç(ßþë–…”?äb<÷3Ï?ò&Lµ'S2ûö†bt¾Ýñ³Å©3]|Ì= ±Ç¯kKtèèе#z ì«è¦ÔPy|—öeçv”«à8öE^ãÖËš'Ó±ekºŒƒ*úæ“xí…º¸¾Ôõ¹u£â¾Ôíz]B!„øçi0+JtžXùÚÞÔ¬|m)<–‹!¹´žj0‘²ò ^Z²›bàÔ»?à?ù¿ ÐkpquFC:}÷§µ¶ÁB:Œº“É9[Ù}àoþ{ÿdþpÓ£ÄSX姉ôµ¯óü·;ÈUáì{OãÒmo°¡ùø‰tùßqŽ_ø¬Jöß/0iÞJRL ö9ßðøÜ_¡$Žã»CÈÔ9ÐÜÞëòWz`k{åãB¾7—aNF.bü¬/g£ÁÅÍ…H¼G¥£…e§ùé½_9c6óá¿¥ÉÜÎXÁÕ^áâ]uÕýwíý ª:>ƒ’cÕkgÝŒIU}×èIô±UÀÁÏ/¼Êòc%@ +_[@‹>ëy²Ý&Ž¡é÷ßsÕäÑÒ¬Z}¬¥q ꉫvüÕ^6R‰êƯ@N%%ÔzœŒDì#á¹NøØv¡{{Ûí»â«7‘vüù{àÓÅ]]üœÑ`$aß^Bk½ ízçvmË-b€ÿp\4`8ý+Ÿ­‰¤Ð…§—ðÙÊ9 ~¤9n£&Ð׿/þ*¸v=×¾¾œ ¤NÏ-†ß¸ÿ ×E!„Bˆž“(±éZƒ=Bê‘MW{r7gÔSéF’cãͽ‚© ŸóÍ­¢Tþ½_Ñþ•¬ÍÌæ6´™ð4ïMxµ4“ˆcìØ¸ŒŸ–%Qé“MѦ¬ ‚ŒÊÊÝõ>sw],I¹°Ð§výwQUÇW¿u3&Uõ‘–æ­ÊWq¨ùÇ9pýî– IDAT¦äâ¡eÁ:š…©Úæ­ñÑRA¢¤º}¬g@ 깘(©*þëUý9RÙÚ¹ë'ÃÙ=Ș‡{SºvmL ;?œ”v®ø‚V=hÞ±JéÒZ¦Lì9EÔòüëÛµ,WÛ˜V-¬Q}×—ÙûòÕEX7ÇÇC ‘׺ݮêúGëòÜÒ¶¹Aqÿ®‹B!„ÿ< "Q¢èÀ²ÃyËMU,;Ø¡lË@­·­JjþnT5s+/ÁƉ“7z#øáiãBë~“hÝoÓ‡.ÀÎrªzÿÊ?šM¦ÊP)).¾$RÇaÿaõ’{ñѽ{%ßþp˜ÓAe ÿäKf·¨Ý^Z­ù1ÕTáJšÊb»>×:¾úí¬«1©’yÈTÕtEä*%Å¥¨€¢ÑTúŒ]µûø:ë©/µ›#]×8•cïá|îž`oþô¶iƒÎʉ#) 60µG'º2ÐÑJA-<ÄÞ#U§Æªˆö:¯M¹:tæ{cÊIvœH¾ºŸ $ªŽíÚ×—:>·:uƒâ¾Ôí|]B!„øgi‰‹–67mo’+)ºòxJB ov(fZš´ÄÓNCÒÞ%üû·OxÅÊßþc™õìKÜÛÍ—Á䲂eé×¾!òíݻ߶’ q§wŸècJ‘¹*Tú²!;ÏœFs½‚áÜ·ÌŸý!ÀΟ;i©Ýé&b0Ò‹/¾5ì‹1 öŸâ½ü°0ñó ³§¥×NuÛYWcR#1‘±ñDoßÞ¾ì8i~,L׎ý<Ðe±QÄUxGUÝ>þ”ˆëª§¾TŽìΫèøë§|î9N‰ÿPlºßË + ÔÌSœŒL øLÆ>í{žZ•Ò{8˜×oVMÉÄ'–¡úê0EüÁ«ó~$éüj5¶Ö: åW5ðU]_lëöÜrÚrƒâ–ë¢B!Äí¨AlæjÑIJê]‡IÇúÒƶvKÄS3:z>·Š­;v°í¯/™ÛÕ }I*!Gö_xõ°Z”MvqU”kpü&ÿ{p íZubô3ŸòÜ`;Õ@ôÆõœºÖ E‹•Uy&KãÑ•þÝqr÷eâ«Ï0Ú¾¶K»DmßND™Š¢ïÆ#oÏ£_3\ZŽâù?Á„qcÞR%­àÞ|V»u5&U1‘¸eÇŠTеaöûoqG—Ƹzù1ùõ™Û^j g7n&ªÂ§ ªÛÇÆë¬§¾ÔdŽ˜ßŽàà„£®œT2öí%кfÝèꮡäÌq BNž¥küºu@བྷ>’QqYWÇW®³\5‡½¤@]¯xÖ¿%¶лàù•Ç <Ì©5OСÊwWq}1Öñ¹U”}câ–ë¢B!ÄméY§qmZúKLøwŇßÀ`2”—zÓ㩹öÿ¼”À‰Oáç<”ÿÛx‚W&T¨…œùñ{våW]’bÑœIo¯`Ò…Ÿ¨”FüÊ_§”kdÕÔ\íßÖ|¥j·³îƤ*¦˜_xí½Ñ,m.ïãÓM÷]ú[²~Ä+KÂ+ݬ±º}¬Ö ž™}­þÉ$>!Îè;=džƒøðŽ»YzãdŠ`_¤ít€ðc§ÈU³§7Œ§‹0Dsí 3MÇ·8í:;èºË5‘¼ò>™ÚWû·áîoö0½¸“…Sî1¾xñkÎVã<¼æõEUêøÜ2Qt#âF®‹B!„·£±¢DëT?ùœ±í‡óñä·0šŒÌ]ñ §oj<µU|âCfM{†/×$,9RŒÅÙÄŸÙÎ’—ïâÞSTU!j »¾Ä÷;Αš_L^Âv/û÷ßù»²ªúvÒDìÒÇ™÷þzNÇçŸÃÉ-ßòäÄ;ùìt* 6Ãç0«e•_ß^SoÝÉŒ—¾gÛ™rKJÉOäÔŽ¥¼v×t^ß•}ƒŸ¼¯~;ëdLª¥„àų™øÀ{üBJ^ e¥y¤†îgåûs™tï—œ½VEÕîã묧¾T;þbv}ò ¿Œ!»DE«(-«ƒsÇÂÞ})åIS&§OFcŒ1§9“U¾„ʶŸ€*ï\+ŽïúÕA¹¥Á,~` /ÜÀ‰˜lÊ4&rã‚ØóË›Ì{Í«ú<¬òúRçÖ ‰ûZþ)×E!„BˆÛbïìq]S¹/hNê1uO…Üži^ç{”Œh3ˆ¯îx“ÉÈ#+°'ò@µU öIý¶Y!„B!„ÕWWù‰±¢¤>’$_N{UUkœ$©x„B!„Bqkh‰’šÝv(¡/`‚ï¨ ?²Í`¾ºã}4ŠÂ«_®q’D!„B!„·¯‘(Qk°1]jA:“'½Å˜+Þb3¼õ ¾¼ã=àÉ5¯²5tw½Ç#„B!„Bˆ†£A$JLEÕçèÉ„³Ìûý9LªÊgSÞah«þ nÙ/§½{!I²ùÜŽB!„B!Ž‘(1f×l ǾèÃ<µæU4ŠÂ7Ó?àɱèÎÑkõ¼¸ñíëJ’Ô&!„B!„B4 #Q’RRãcþÙÉ3k_C«hyrÐ<´Š–—7þ‡Õg6Ý”x„B!„Bqëk‰’Ò„Ú%&6oåÿ6ÿUUyíï÷øãôú›B!„B!nm âE·¥‘…¨†Ú½–wÅÉ5¬8¹¦ÎbQ åñ!„B!„âöÓ V”¨( οÙaåqÈ[o„B!„BˆÛSƒH”žÌ»Ù!·NB!„B!„¨{ &QbH.¥8¨à¦ÆPT€!¹ô¦Æ „B!„BˆúÓ`%û²oÚc/ª¡¼þêÒxŒà±ÿ¼Ï[ÏOÀ[[Áï½FóÄ;ïóÖ3ciRO£ Øôä¾7Ÿcdã5ÌÓù2ý߯2±eyKQ°j1Š_x‹ÿ{°/ÊÍŽ§Š=ü󨟋€¢ÃÊ΋›6õôÖvXë˨ËsAÛf/¾v7íu€EWf½ù"c›ßêóR!„BQ] êÚ˜m {æM©;{&ÆìšfiTpò¥c“+o¢4¸wôŵ®Â«¸ö²d‚ö%&¿~ë—ÒÓºÿ EýÉWËŽ‘÷Oíz}'¦-xŒ¡õ•¬ŠâHû^â¾¾Î(ȹ „B!„¨¾•((:GÑÑÜ[çÑ\ŠN×boS*q Ö´÷mÂe©;:8‘›„±V)èô:ª\¬Pϱ-» ˽òæPA£¹•–:ÜjñÔ†yLz…‚ôd²‹Êjœ SôúË_E¥ÑÐ໦†¦ê¹]S•ž B!„Bq¹ñzà+åíÌB±Ô`ågWïuŸÉ'ogV-.!òl½zuÂkk,ñ欈Ƶ#œ¢8³Ï Ï.?­ØúÐoÜhº·n‚‹e éÇØù×v‚3  óãîÿLÂ;°>‘î%[øø×“”ÙµbÈdz¶vCŸʾݩ´ŸìÁÁÿ.å´Ò{_Fò·Ÿ°-Ɇžs^¤cØrbÛMcHK[L©DXÇêá¨zܺO`â?š8”‘t| g­ÇÑ+k _nMÀteó+÷ögtŸv4uµ¤()˜›Ös ¦°ðèΨñÃèäãŠRBvÂYÖ¯çhb ªbWx®¦qòeì<zz[Sœǹ€ l9žLùÎ1z\ýF1fP'šyØCN<ÁûÿâïC±]Už×!1¿y;J;0 V¦l’ÂŽ°m㢠T@Á²qOFîO[oWlŒYÄœÞÅß[NRªV0&{Ùc=‰ñ­´Ðî9^o³–Oï#ס-C&Œ¥gOlÕ|RB±uãNÂsM 8Ð{îÚü–SM&1ªm2k†ÒýÅl¤éð4µ2Œ¿þ܇¦ßŒéÖ«’TÎm[Áê#É´N´2ž¡]Zâ餣 )„£[7‘‹ Pl|èç?–žmšà¤dyd7I×J“jìi5h"#{·ÅËÑcA QÇ6³nÛ9rM óÉK ùõõDú=ÌÓ]‚øbiþ/Ï xô|6}Èâ½™X7ȸqhߨMQQÇ·²iûY2  õ™ÄSÓ-9|‘þÃÚ`g* %ðoVmËÅoêdz7³Ã˜NÀêåÄ_{~%Û3pþsŒñÖB‹y½Årþ·¦Ÿ?M w§óhú6ÇÕ¶ŒŒ°ÃlÙ°° ÅÙwã‡w§…‡=:C.É!ûÙ¼nÑ…•'Z,|ïæ¹i k?XFPIùÏôm¦ñô=ÎìøèŽýc— !„BѰ4¸%çånΨ÷•%EGsÉÝœq%¨”Fœ!ÂÚ_¯ókJ44êà‹sôY‹.ù¨Æƒ÷=È@Çö¬XÄ¢ÖpÒØ™;œB;ó÷ëŠ3ÝÇõC9¶œïÖR¦mÌÙÐKw† K¾eÙ®,Úû£i¥Û%hñ>ž&¡¿óõðÓö4<‡Ï`˜P°í49›‘¾÷W¾ÿaÁö#ÛŶ’o÷ºÝÅì±Þdüƒ%ßüÄŽwFÜ]ìÐ4aÐÌé´/=̪EŸòÕâ/iÏøI}pÑT'ž hìèê? »ÀÕü¸h)ÛÃõtž6‡ñí¬QP°i?…Ùw´§øÄ:–~ý ËwÆã:â!îè^éD׷·0¶üü ?þy˜<ïÑÜ{W_\PœzpçgîgÍ_ñÃûÉm1…ïêŽãùN¹lLŽràû·YRBâ–xsÑ>²µMzÿlúÙG±méW,þe+q.ƒ™uß0¯7޳?ïê1A¹<‘ kч^®qìül'2ËëHúÝ–¦Oô§g³]lˆ.o—Mö Öï ,ßÓD¨¥„m_Í‘è"T292šŽÍ²iW©&H;p’¤^p´S€öôëeÙ߿`OHùÚšääåèš¾ÌØž-ØUÚœÞ- 8üýïD—±$®°¢ñ3“°®dž(Ùlÿ#ãA)”¤&dhÛ[ ”ÿ¤4xöèG³œ­9@¢ˆOà}cžß—6[#9`Š!`ín³TH?H`ZoºGnbëÙD ÀÁ£Ñ æ„ÙJõæW…m³ó£_…S¿¬dX)GÊÆ;ãb™j §6­ òH™& %ƒ‘£hë`*œª$œ p… [aL©¾%~í,ˆØÌ5¢!„B!n1 :Qå{–”Æa;À +_Ûë.¯8¨€‚}ٵظµj ‘áØŽì„çÖx’œ}éàÃÑÐBT¿óR°vuÅβ S_y—©—®(*ñö6å«:Ôb’“2ÍÀ(8zyaJâ…çTL¤Ç'P¬ÚT 9I‰oÚTƒù?{¨$Hâ|ËÕââÓL'J´žx¹•¿5ùbJÃKÀ¯KÍÿI#丟ö}ìéŠK#¼[µBW²¿zñT¨”ø¨„ ñ¡æ‘Ц§;ÎÚ,Ü\ô¸¶xŒ×_zŒ‚Rœ†½®~vLQÄ\²o…!>œØÒ¾xzXäÖ]³ñ<ýŸñ—£‰½½ò¸bL®¤ààá‰Uv±Ùë0eF›7 [”hs?$&]ñ¸Q1¹¹¥nÊ ¦œ,²ÏWd(»ÐïG7YÚãuÿ[t»¬zSˆ=Vž4*aküŇšITš ß ãV)ˆ9ÉÏvø ôíQ#\·¤•«BL…Ÿ¯Šîž.”ÄF‘ra²¨ÄF‘¡ë‚»³Æœ(É#çÂã) 9YÙÚi0àüú&cuæWÅ4îñP9wñUߦ´C¬úÉüŸâpN{ӶǺ¹5ÂÅÝ›­lQÎTUr1áh'øÒ\LLËδՆ°!¤°ž·mB!„BÔ¥Ÿ(ò·áänL§ðX.6]í±ì`W£&ªJ‚ó)<™‡!¹´êjD¥8ü SFãë¹â–¾¸Å%´@½d¿Z~#œÀ’×SÑb ]cPK)½ž‚¢Ñ\ýõ¶ª^ã¦LÅh¨dûXECyqêeŸ¯´,EƒFQQ+Πضgâ#÷С(ˆ“‘D?ÃÁÈ2¾,‰qx*‰Ÿ+â3©*˜TLª2ƒ‘ð5ÿeé‘‚ë¸15¡ª (å7æ%§–ó¿T˜63¯ü(­Æ”Q¯øŸ (ŠÂù6•U«Š[¥ ”™ØöÅìN½z@ô~¾¨WŽ¥ZFY¥¹@-îýç2w”# 'OHøñS¤O»·â¤Ùù£4•=˜RÉÖ¬ªŠŠ‚R‹[«7¿*¡Ñ ¨je݉E³ÑÌÓmø1ÎDDq&ø0!y³™X7—„%RçO‡æ¶hüÚ£„®"¼¸êã„B!„·Ž»GIE É¥änÎ ýórÖ¦Qt4—Ò¸ŒyFTóM¡jcž‘Ò¸ŠŽæ’³6ôÏcÈÝœQI³âp‚"ìèЩ=¾=‰M.f÷{|ZºcHN$ÓNb²¯–-°ºP‰¯³™;¾–•”¨iäC3û‹Qé·ÆÛ2“Ô´R“Ñx·¤é%OÓX´ÃsFЬZ‰8•ÜÔJœšÓÌñbg¼í IKɯ“•jN"É…®øøØ_ì_Å…3þÅÔ®Ž˜Ò’È°hN‹ÆƒVl›ÓÜ­’±ÕxÒ¹ws2vüÀÏk·qðøY" QôWŒžVwÉÛœô¸y6ªä‚RBZJ6–Þ>¸_8@Á¦™®ÆTR³*ɶ]ƒþ:æ—)-™tÅ ï&Vã:€ûŸŸCŸF:¼»÷Æ-z=?ü¶žÝOp.*…M5Þ2¨%¡EZÒ¶Ûpº¶S 9FI['„B!„¸™n‹%WR PZHIháÍŬ˜ðÀ&ùO¢¿e;C®¾A6%ãPÔÆÜ9•Â-‡ˆ-p Ã¨ÉtÓä» S…_Ê—†íçpÖÃŒ˜2˜‚¡5êÊÈ^0©Yåß–×$+aJçÄþsô›4™±)ë9–¢ÇgÐZë Âõ¦DŽŒ¢Ïè;Ÿ½‘£ \{L¢¯K2£Š0ºæRhéC›Ö$Æ—áØ¼'ÃG¶F«+ÄÎJ‹R«¡QhÔg:“2Ör Ö€[籌iDZïC(¡”ÐG)ž3‰éÃ5ì LEi2€ #›’²2JS`ºV ¿s4E[N“iÕ‚þþýpˆÝÌñ$#¹Ùû:“)wä°y(Ù–­2yNç–l Zg!òG3ç3lÆ8 7Ÿ UÓ˜c‡á™²—u.ªcG¥ñð虌1låTB®=&0¦])[·åbÌ:Α¨AŒ>œ D9ÑaÄ(ZhMTø>'µ€¼|Î-}ñ>{н;í§‡³†t{{ôJ†¼òmºÑ»ws2óqh7’q]íQΗ(–Ø9Øc¥Ï#éøAâúŽbÚÄlþ:KY£ÎŒÓ–ücßZ‹¦¼êÌ/+{Gl-s(¸´y9§84Œi“§‘¶~/Q…ŽøŽN³Ü]lÊ2¡ËËGÓ¦ í¼Â /´¡±ßÆv²Få€N¹¬¬«û®˜°À&ß9ß¼Ã,,ŸyŠS{ôô"ãän‚ÓkžB!„BÜ8·e¢äÖ£–/É·ð£]ÜBò*Èb¨™]±ÿÏ|;5ŸÔˆC,ÿu'IF*)C;~üuʦΉ)ù0›¶ŸÆm‚ž²/UPÉ;µ‚Ÿô“˜8òzXåºcûgá[ZÑæ*™‡~ãÝFžÅõ;¿l‰¨<ñr%C;úuÂÆ>8[5ä½üºq'ÉFj–̪”‘äÝKùM™ÈèÑÐׯ@nâ9vý¼‘£™*É‘?a9qƒf=ÊXc«Ùwý+*NÍæØÚÕxLÍ}O¢,+– =«ù=w*3†?Œâ;¬ÝÅš­®LöOO´@É;Ç–]Á is>¤8BB ŒŸ¹§M±dË—j?n³-=päñßXº­¼/«ñTËe QU̯Åû‰ Žað¨y<㼂V^Ú¾|Wÿ€åØñô»ãÆX–q€åî#ÝdB XÉ_®S9oã‹Óˆ>¹ƒ?ÿ(àŽé™3"‘¯"¯™JqØY"Ë|ñ Š]3üÚ[“x2„t€‚]ï¹<Û/†EŸo%¹F_\ëpmׯEAœ‰5'´-ðvö¿ÃòÓ·Û\‡<ƣ펳pñ>²e·ÍZRÐZZ£3RRG d:ű/³ŸLÊ’ø«®V !„B!ªTWù‰Ûj’“íFßÍ„þͱ·ÐcíÑ•Ñ}È ¢‚==«* ]“¾L¾c4\­Ñ[:ÑrÈ(:[„QO{·ˆÛ€Š±D’$å4hõ¶øôïGóœÓœŠ—NB!„¢!’Go0µ0¿:ã?~OŽ´G[œAô©•¬ØPÉëj¯ÅDòîßXe5™‘¿Â ky‰çØûÛzÎ^¹óìmAÅX”CVN1r;+ê„®=S_™Mm:Ç–ï/dN!„BÑàÈ£7BQ'4X:6ÂÖEfA¥ï^B!„BÔ“ºÊOÈŠ!„¨&JrÒäuÀB!„B4p²G‰B!„B!„™$J„B!„B!Ì$Q"„B!„Ba&‰!„B!„B3I”!„B!„B˜I¢D!„B!„ÂL%B!„B!„f’(B!„B!„0“D‰B!„B!„™$J„B!„B!Ì$Q"„B!„Ba&‰!„B!„B3I”!„B!„B˜I¢D!„B!„ÂL%B!„B!„f’(B!„B!„0“D‰B!„B!„™$J„B!„B!Ì$Q"„B!„Ba&‰!„B!„B3]]ÒµGïº(F!„B!„¢VI©“rê$Qr.8¨.ŠB!„B!„¨‡áê¤yôF!„B!„ÂL%B!„B!„f’(B!„B!„0“D‰B!„B!„™$J„B!„B!Ì$Q"„B!„Ba&‰!„B!„B3I”!„B!„B˜I¢D!„B!„ÂL%B!„B!„f’(B!„B!„0“D‰B!„B!„™$J„B!„B!Ì$Q"„B!„Ba&‰!„B!„B3I”!„B!„B˜I¢D!„B!„ÂLw³¨Œec+»9aãc‹Îî– Sˆ[’±ÄHqr1ù!ùœÊÅd2Ýì„B!„¢A¸å2Š¢à<°Nýœ),+"ljTw´+IDAT‡1ßx³Ãâw;WRóÓovפQ4è=t85qÆ®“™[Ó)I.¾Ùa !„B!Ä-ï–{ôÆy`#ìú8U”CaiF“$I„¨)“j¢ÄPJNq.¦F*n3<±ô´ºÙa !„B!Ä-ï–J”X6¶Â©Ÿ3y%ù’ ¢Ž•S¦)Ãe”+Í-uÊ !„B!Ä-ç–ºkrìæDa™¬"¢®•£s×cÛÅáf‡"„B!„·´[*QbãcK‰¡ôf‡!Äm©ØPŒ];»›†B!„BÜÒn©D‰ÎN'«I„¨'eFV²O‰B!„B\Ó-•(BÔ“jBk©½Ùa!„B!Ä-M%B!„B!„f’(B!„B!„0»Í%4mu?ïÍZÆþg÷ôüVöÍûŠ ¢™îfÇv5­ëƒ¬[°”Ç\oaÑ·x‰ >`²åÍŽD!„B!„¸1n;òz¡àÚî~›>‡®E;ùtã^ý_>9›@ËžïñÇ”‰4UnvŒBüÃh;ñܦ=¼5@³#i 4Xô\J§)c¸êò¥içܽx·¶MG¼ÚASŸ:îgÇûiýì§85ˆáÓc?níw¸º¯„B!„¸†[p]EQ¼˜Ø{N1ŸpךU$©æŸGìâïT•MÓbNÓ¿x;ÎpSüá ZÕD]¿[H£Ñ‚Ɉ©ŽËE±ÂZ[LÑ?l˜n[¦D¶õ –‘òv«zeJ"gÿgh2븟‹‘¶#’âë*VÝÈÕx>KÄþPÔª¨>‡»iyo2¿LN™‘’ OI)K©Û:„B!Ämï6N”8ãf£¡41ìËþJVÉ‹]ÃGò0•_PcAóv± Ï0z»Ú““~Ší'÷cÓo>º­“x%Òž»î^Ãã™O3lËqÊïÙ5´èûë}˜¶äBUÐÚvcöÐyÜÝÚo+…‚Ü0öÿ’ÿ:A&Ö´ïü/õD'g(ŒãxÐw¼µgñ—d´¶½xrسÜÛÜ ]Q${|Ìë‡O“]qCqðšÌ³ƒg0º‰7.ºRÓŽ±jÏÇ|‘‚·n ÙÞ5WÏxóøàá´Ô“–~”å;Þ㋨ôòä†Ö‹áž`~ûî´·7³…áךçË å­Ö<3°nä³’77­ÄÔõU^ïÞ/%“³Á_ñÒ֭ĘÛhå2‚'‡ÏaJófØ–%q&ì>Üõ''‹TÀ‚qS·ð|Î <›=šWûö%jË4^ 7àî3›—g »3ù)óùáî›Ø‘e_?Íï…* £qËûyqðd»9bÈ cÏÉżè0)r§TO,,t”––Uïãj&'7¬®ß®›Õ»»V@Ôº˜` (j5ë­J&…Ak+ø¹®'YBÎÉë.WÑÛ¡ÕUô& m)jm1Š+kó ¥1k(­q!×ÙGB!„¢Á»}%¦XN%åòP‡gù,Û–Egör"» |%EY+v™?¨àÐò–LöÇö#ÿ=†ÉÝŸ'ǼD3m+«]¡+“Ç}À÷|±õEŽäkñnuÏ}›gRïàßQ%Xû<ηã†sè žLÃÚk / y“wrf2çD²9œ¦Ü3á1öþœùE´èò¯{”Ä»øo|Ë*,ûñò/0,óW>X{€xÕžÝæóø¤gˆüæeÖ•Lër'¯÷:Á›eo~#F YÀc“žàÜ7¯³¥Ä†ÞC?勞Ö8ô%ÏÇ—àãûïŽlŠ5‡®Ùjû]¼`\Å{+c7–ÿ7›/æN$1êÞ]ù=ŠÏ<þ;èEžŠÞdz!…(¶#xwÖ›ôËþ“ÏÖ}AŠUgîô?ºZ1ã×_5•‰}ËÇy»è+¶¿ÎÁ„2tn÷ñå÷c²ˆïǾÙLLöÉãÆÑÞçI~¼c.îhÑÒ¾ûƒŒQÿ⥕Ÿ²,ì ;Î,â‰5ËHöº‡|,Îw&Nö),Yó1¿†#¢È’þ½îÂ7ã'žÚ¸ŒÍ{ùcçK¼VŒö’qœ2`2.‘3oór6GîgÃ×ùWÀ9šv¿—ÑÖ·æ. ÷.fáÞÅ×þý O’€ÝÀùæÕ.D|ý(FNæéߢüÉ'ÌimžÆ=8ðwg0ù‹Icà&6%tcÌÐFåsVãÉ(ÿnD­YCà¥T1æí¯y¼ñÞ½o#ï|“ÝÿbÑÿ&ãžw€Ý§=èÛ§)Z´´êÝ ‹]útÁûž}i¿‡=ÑW,=дÅmê{8–,#f‰?a7¢tÿ˜&\ÀÎï;Á"î#"¿OØæh{†·Ÿ§ù`-VmºSºe"g>›EjÑh¼ï{ Ëà§9÷Å4SÛãÑoÄ…sBÓd$ÖÑÏüÉ0"ÏèitÇR<µ?ùõ0Âfb?x6öZÀb(^§Ãé§ùr8!+ÃÔá <[Z^¬·Û,t'çôÉP"Žäâ8r>zP<¢Å´)pöß„}7ƒ¸`uõ«Åžî8÷êBޚќY8ƒ¤Œ.x öGGy>G`8¶€°o§}(Ç _àÙ¸»8ë†âÖ>‚øïúqö»WÉwœ‡W×(Jc\F¿‰}öB"àÜÊ•Ðå?x¶ÒQ¸g&1”yàM;Ê!º>¸u,"uÙ8âBªXâ8fÓf¡ ~ƒ°EÓˆ>š‹ã„whd¹‘˜¥ŸSX¶›øof“š~éÜÐc3`!ÍÚä’¾nç¾{””Üþxßñ8¶çóN5n‹UGA!„B4 ·q¢L…ÇùfÕLú-¼›{Ö~βØ<¼ZßË›wþÆŽû¥¿:_zyÁ¡3›‰»ðí ˆs; ©ÉêkSK×.à¡Yè,ÝhéÙÑÝ'3ÀVAQÀDJZ$yvcyÕS|Zã®Ë&àÐ'|}qÏ5ƒÑoôjâ@lä¢.ŒQû#Ï\ì'‹ÎôõR8u’b ;sÙ6dÅ!RۖήU§|n–…ßU˜ ¹YI°¦ßÔ±(ë?àÃMÁ$¥Ærä—·ùæd[&o]>FŠñ›³:0ƒâ+Ïc(›6ÅÒ}ÌP\Ðx¿S «×E^¶7Žâ:’»‡%ðË ˆJ#-*€ÅïþJRÿ vÊ$`w­ú÷ÆYëFîölÿy#EÝûÐNgA—¾ÉÚ»›+ò$ŠçD\œ’²c…¹”&¬ aÃGäæêеš„}Ár÷í¦8/…’ÈïH<š€]Ç¡èͧ—1l ©q)˜ŠÃÈŠBû”ÐhŒ%1äFƒ•Ӆ䜚µÔSJ3( ;BYñnÒ ´$‡¢°}ëœÐêÃQ’E܉3”`*NÃPj…Æò’•!1KH ÃPšMQÐvŠ4.hõ:¬;LÄ"ö+â $'Ž‚Sï’š[‹1U):þ I阊£È>w“µ3:E‡ß4t!“x–Ò‚$ ß#9 §¾U'dÔx²öüH~n>¦œýdG§¡³q4åO0éÐé ’~!úëñ$D–TXŒ¢ä“wìW òŠªxòHƒeû©Ø¦-!áøQJ R( ü˜Ø-)¹V´?œ|ÝÉÝû.™‰ ”åœ!kÇçäXÇ©‰¾NÛ"„B!¾Û÷Ñ›K”Es(8šCÁ+øH±£mǧY8î^Þ±‡pÖŸ_xÙè¦ÂtÒk´¬ZwÛGx}È$ú7²¦(/ˆÔdÊ.ù=/ì#Ü”ÍS=ïä?w?‚¥)›s«ødÛvä˜Sj™E5ÈÐ(®ôï÷/÷@;+éÙÑ„d©^»©4—œJŠÕXØb§fZpéT²sÓ(ÆîšÕ«&ãUê&CÅ›Å*N¸Ùhqjö;^ùK±Vöæ[CaÆÅ½eG\¬!«0ç’1R),Ì¢Pu-oƒ•3.KzYÍñ1W”G˜å­\¸w1¨*Ošwáÿ7'I(ö¸¹Zt:îâþj61Ñ94rwCC ¨e$'¦U²“ƒ‘È¿þ"r®æðØq´9²‚'M—¥f5^Mñ²ìÈîgþ¥‡žÃÎ’öýhz¹åÓ«ÕY¶-Ø‹vÆïÓ¡í¥g­Š)ľêbÕTJó/¶U5ËÇX'cÓKhûÏ¢é}/¡Wã)[EjÀ2 +*'™Ò¼Ê¯{ŠùhÐ;¸cÊŠÅpábIaù!IÇJ и¢·É 4û’ÊKc)É·ÇÚÖÒê°-B!„¢Á»m%ZÏùl¼$;½›÷.¹Ró =û5?uÿÝZáPVH!Ö¸ÚZ£PváF\c킳©– `guñq­Ë >š4 íÉ·™úK!Ee éÈ‹óºãwá˜<OÊç?ÃʶÝZ ãþðé„&ü¶‚„ó!V;A£àÚéE¾àÍÖ¿ç37(˜TƒŠÆùV<4þò^£LSI.yJ[Ül4\¼‹T°¶vÀ².75T‹)(3}ðaÆî<{õM.åߨ—îi©’_ Ž6($_ø¤••#矨QËŠ(RsYõ‡?/„×|ûÆ[Á€ï@Q@Uo^’@Í#=£ ÏfMГ@ €âHSo²Îfšg„ŠÉTù¤2Ælfcè<ÆŽè븦ì]´Œ+>®fg’]|EcáÏ,ó/­=h×Ò’¤h#FÍ^ÒïbȬBü¢Žð~ú ô-ðŸ2 G»ƒ|y¢‚q.LÇhÓ½Ê×`Ñj.»É(ÈGo,(V´èš ǨÖßò:íÿ·wïÑQÖwÇ?Ï\’I˜  "àr(ÁåÅÖõrÖ²h¹tk"˜B„Ö/‡n·°¶kUôìdk¡´Uê¢h¥ˆ@a¹‡p‘K€ á’û$™û³d¸”;d #¾_ÿ%gžß|Ÿg’93Ÿç÷ûþ:MWFO¿Šÿ„*«}’ÑFÉ£²ÿ>‚¼ä¥ *PS.[r¦¬Úþ±Ëž˜Áê¼ Ô»åÛ6E{?ß.Ã"kÒ]²ûÜx_Y£•bN©bÅ÷uÂg‘5ñnµþ+µxP{–o¹ÄæEï{†qÞ+Ò¬õÙ0+஥½K6)<ã­…œ}¾«˜’ߨürÁE¨\ú–Ši/•Ö4üÎÞV±ÍÜ Ô]åýâŠç²unCÑ}›½B•…Úïo£¡ÿÐSÞ5⺨GK‹NWUµo¯òO[tO·ÔöìÌm«2;Ò]g¯NCCÊf§ìgi«þ鮳KE¬É]ÔŲ[K6¬nI$±éjfÐXÝ?ì]-ù RdÊS{Pëw.ÐìmûekÕA7ôJX••ÖI޲¿j~Án ßbu$e(í:šNhG ‹éÚñÜù©•†vîyÞÏ`–(ÿx¥\YÙêtÞJKâHýrÜÛšÒî2Ï:¤mÇ=ÊÌü–2ΞW‚îíÐíl}¦g¶—;ÔïŽ^jvö@CIòôþ˜ið5´[ˆM:“ä,Ö¸B–G¦+7çN¥$µQ¯'_ÐÄ>ôá'{¯mkéP±–ò•zYO´Z©%«¹ø!ÇVêÃ=4é•§Ô¿}K%¦vÓ³ÞÕÿL¾[CRpŸþ¶.¨ž~@õ›·¨4X©Íª÷è'•±i6_¢;¯Yò±*Ý•6x„✉²¥þ“Ú䌕ÃV#áGªI%×½ÙŠo©˜öcÕ¶oºÜ»>—ïf~Û5¬2dÊ”E†=UÍz>«V.»,ö¸«TýžOäk?QíúôUŒ3UqwMWZ—¤çSí®åR·<µéÒEvG’b;üPYOý\IÍqQŒvJzhžÚgTl||Æ>VËy3v Ybâ/s°©@]b²r#KB?¥ xX1†$åÝ»Lõiß“«W/ÙãZÊÑùYµø-Y}gf²Æ\ð†Ú¡Š=ej> OIi­esvQ‹!SÔÜûU_eáÏÅ¢”Þ#ôXÎ]çú^àkï¶QbzÖèµ[µhèýѹD‹÷íV±'¨XgG ê=JØ7êåMÛå7¥6­ÓØ‘“5ïá8½±ë€”2BSúwPHgÖ ×ê`Y™â{ŒW^×*½W«ž='k’ËÖ0e[R°ü€ö›côXÿ¡ÚSpDÖ}õÏžÖ@»EÅIYJ¶oÑÁòjeäLÒ¿UZXt\¡æ}õÝ>Tsd±vßÐv˜!=yPÞ^Ã4¶û6ý®Ô¯ÔviÒ½¨¥¥VÉ©rž>~õkU¿ZïäÕo³çh®ñ_Z\ìQzç1š˜æÑtC¸<Ÿ6n^¨m]'kÞÚ¾YGŒzdà -ÒèR¿ÎÌ(ù{n­Þøž Gׯ‡{ôÚžcJhÿ=Ó. Ÿj¸*ÔŸ6¬Ó¨/êíÀ-*<$Oâýš8èÛJØý#m¡Àu0U³æçš0çyÍ̯å®UnÒG¹S5_P×ÐáWRH¥ýX;ò^’káµÑs©‡ÑâiSå|!W³þ«T[¹¾Zõ;MþñR I’_kÖ«þ©ÁÚºi¿‚ ©xã&ttÑáÕÿ'÷¥ž6X Ò?¿(cØ3Êü×—eõRͶé:¶ó„d~¤cn)× Ÿ¨cÿ©vŸj6MUɎ㺙o…Áýo¨8k–\ã¿Pº÷jvÌUéÆJòßJ+¥‹#¤sÌ¿Ñáeñj›=[;,þ£J¾X£ôôÈÕ*ú¥¯Ì•+ûMu‘ PåU¬˜¢Ò’FÌÌ íЩOßQìWÔ©_ ÉS¬ºý¯éȺ|™2ä=²Qzp¾ºÆMÓ®UPÝæÙ*K©¬IdµVʽ~™ÜmZK’ÌòE*ZÚL®û¡NC’dVmQÅÇ3uº,(ÙvÈ}úµ°XÖwÇœ·Ó•Ouk§ê¨e†Z?ºTíbÝò¦cï¿®Z¿tÅDøŠçbU‡‡ó4«ïŸ´óó=ªºÑmUŒ„¤ÔFÝKm×^ÕsË"RLÇuÒ}:"c5p(óÎQšØ7G÷¥µSrŒ¡ºÚ£ÚU´R ¿ü½–—ùíT·ÞÏê…þCÔ½¹]Õe´hÍvutœÊ—ŒÔOúeÄõÔ¸s5¾CGµŽ±É_µZ¯îŠUnÇ=±àí3cÔ±[®^¹oˆº;ƒ:~b£–|1O;2¦7û§kë§Oê;möKRœ:u› ÷ä¨_R¼¼îƒZ_0_sÖ¯Ó±~iíLŽðßé­ÓÚ™¬³÷6uÀµ1²Æ„ô~=—ÓàÖjþÃV:ùEç6JÁž£¹ÏMWU8(9Ǫø8§LO•êYœ~‹XÔ.s„²­ùúßÂ#áðÄ¢¬{æiY-ú—ys•ÁV*WCPÑ'RAÉm󣊾 ª®žäV³¦ŒÐOGæi\Ûd9,±Jiû¸žïs§Žì]¥Ý·0$ÜÞnÛ%‘à«-Ò±ëÙª7IHE[¦çfhƨ4ÝnÈôŸÔ–ÿ®)_îÖUZ1pÍJ.Çÿ™¦½µ"’›ã¢1‚ÇôéçÏêÓU1jß[%2,\¨çÌ]M]¾Aòѵ©KÀM@PrY&!I42}ª®§±#./®‹%a%a%a%À7„Ű(è 6uÕ¢*( ¸²Z¬M]p[²[mò”zšº ˆjQ”Ô®U¬-¦©ËnK›Cî½î¦.¢ZT%UÛ*ocV aqv‡'ýªÍ¯nêR ªEUPâ-ñ¨r}…b„%@„ÄÙ²‡ì*_qZ¡P¨©Ë€¨fkê.T±¶L’”to’êüõò| †h@ \‹a‘Ýj“ÃÖ0“äÔŠRyéOWuA‰iš*ÿâ´j ÝJìÝB‰™ ²9£®L|õv&7u Wôå)õ¨ro…jó«™I×(jo‰G'KJ›º ð U=JšA @A @A @A @A @A @A @A @A @A @Xヒ)Ó4#P Àõ3MS E&›htP¬ È´†"Q Àu3­!««ÑA‰ï°GÖ,[$j¸nÖ,›|‡=«ÑAI}[Í$*d‹Lrp­B¶€š HT};"ã5:( œò«nkµâ‡–€['d (~x¢ê¶V+pÊ‘1#Ò̵~k|Eõj>:YƆB– ^@Ä™¦©%(ãCÍG'ËWT¯ú­5kæj$$¥F¨-¬![Š]qÝŠÉtÈšh“,FD†$…L«òö¨¾ÀÝ0“$B!‰É àk®ñKon%a%a%a%a%a%a%aÿÛø§©%ÅH IEND®B`‚rocm-docs-core-1.21.1/docs/demo/000077500000000000000000000000001502657046300162745ustar00rootroot00000000000000rocm-docs-core-1.21.1/docs/demo/doxygen/000077500000000000000000000000001502657046300177515ustar00rootroot00000000000000rocm-docs-core-1.21.1/docs/demo/doxygen/.gitignore000066400000000000000000000000131502657046300217330ustar00rootroot00000000000000/html /xml rocm-docs-core-1.21.1/docs/demo/doxygen/Doxyfile000066400000000000000000003316671502657046300214770ustar00rootroot00000000000000# Doxyfile 1.9.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). # # Note: # # Use doxygen to compare the used configuration file with the template # configuration file: # doxygen -x [configFile] # Use doxygen to compare the used configuration file with the template # configuration file without replacing the environment variables or CMake type # replacement variables: # doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = "ROCm Docs Core Demo Doxygen Docs" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = . # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format # and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to # control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, # Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English # (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, # Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with # English messages), Korean, Korean-en (Korean with English messages), Latvian, # Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, # Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, # Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by doxygen. # The default value is: NO. JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". Note that you cannot put \n's in the value part of an alias # to insert newlines (in the resulting output). You can put ^^ in the value part # of an alias to insert a newline as if a physical newline was in the original # file. When you need a literal { or } or , in the value part of an alias you # have to escape them by means of a backslash (\), this can lead to conflicts # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) ALIASES = "rst=\verbatim embed:rst:leading-asterisk" \ "endrst=\endverbatim" # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # will also hide undocumented C++ concepts if enabled. This option has no effect # if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that # are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # Possible values are: SYSTEM, NO and YES. # The default value is: SYSTEM. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. See also section "Changing the # layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in # a documented function twice, or documenting parameters that don't exist or # using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong parameter # documentation, but not about the absence of documentation. If EXTRACT_ALL is # set to YES then this flag will automatically be disabled. See also # WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. # Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). In case the file specified cannot be opened for writing the # warning and error messages are written to standard error. When as file - is # specified the warning and error messages are written to standard output # (stdout). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = ../sources # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. # See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, # *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C # comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.idl \ *.ddl \ *.odl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.l \ *.cs \ *.d \ *.php \ *.php4 \ *.php5 \ *.phtml \ *.inc \ *.m \ *.markdown \ *.md \ *.mm \ *.dox \ *.py \ *.pyw \ *.f90 \ *.f95 \ *.f03 \ *.f08 \ *.f18 \ *.f \ *.for \ *.vhd \ *.vhdl \ *.ucf \ *.qsf \ *.ice # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that doxygen will use the data processed and written to standard output # for further processing, therefore nothing else, like debug statements or used # commands (so in case of a Windows batch file always use @echo OFF), should be # written to standard output. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) # that should be ignored while generating the index headers. The IGNORE_PREFIX # tag works for classes, function and member names. The entity will be placed in # the alphabetical list under the first letter of the entity name that remains # after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = ../../_doxygen/header.html # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = ../../_doxygen/footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = ../../_doxygen/stylesheet.css # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). # Note: Since the styling of scrollbars can currently not be overruled in # Webkit/Chromium, the styling will be left out of the default doxygen.css if # one or more extra stylesheets have been specified. So if scrollbar # customization is desired it has to be added explicitly. For an example see the # documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = ../../_doxygen/extra_stylesheet.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To # create a documentation set, doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # on Windows. In the beginning of 2021 Microsoft took the original page, with # a.o. the download links, offline the HTML help workshop was already many years # in maintenance mode). You can download the HTML help workshop from the web # archives at Installation executable (see: # http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo # ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine tune the look of the index (see "Fine-tuning the output"). As an # example, the default style sheet generated by doxygen has an example that # shows how to put an image at the root of the tree instead of the PROJECT_NAME. # Since the tree basically has the same information as the tab index, you could # consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax # version 2 (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 # (see: # http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported # for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. The default value is: # - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html # #tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): # MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /